Compare commits

...

335 commits
v1.3 ... master

Author SHA1 Message Date
Li
c40c965d7e Fix 2player for real 2025-01-06 15:43:36 +13:00
Li
de6a626f10 fix build yml 2025-01-06 15:15:45 +13:00
Li
76eb2d8391 Fix 2player 2025-01-06 15:13:18 +13:00
Li
535408981a Fix 2Player? 2025-01-06 15:11:24 +13:00
random()
2f7d32a13b
Update README.md 2024-05-28 23:56:35 -06:00
random()
18012c0948
cleanup the github actions a bit 2024-05-28 21:42:28 -06:00
Li
154f5e0149 Remove Windows ARM version 2023-11-25 13:18:36 +13:00
Li
08ead748bb Update to .NET 8.0 2023-11-25 13:10:25 +13:00
Li
78bef4b271 Fix not being able to turn off noclip 2023-04-05 17:37:45 +12:00
Li
7d82f83f64 Update SQLConnector to latest version, idk maybe will fix not being able to connect for some reason. 2023-04-05 16:45:07 +12:00
Li
b7f864963e
.net 7.0 is in visual studio stable now 2023-02-02 01:16:21 -08:00
Li
239f12cdc1 Fix datetime format in HISPd 2022-11-27 11:29:04 +13:00
Li
245f2d3e48 Fix Server shutdown 2022-11-27 11:19:41 +13:00
Li
7ed10a6bca update horseisledata 2022-11-26 22:58:41 +13:00
Li
9e69492e46 Improve command system, add HELP command, 2022-11-26 22:57:46 +13:00
Li
a2782fd35e Fix MACOS MPN00BS Copy 2022-11-24 14:17:22 +13:00
Li
3ffd813109 Fix crashing 2022-11-20 15:55:20 +13:00
Li
d630abb66a Some improvements .. 2022-11-20 15:33:36 +13:00
Li
1909950409 Fix build 2022-11-20 15:06:37 +13:00
Li
574596b4e0 Cleanup substrings, fix more of em 2022-11-20 15:03:15 +13:00
Li
a9a5ef65b0 Fix packetStr.SubString lengths; to make up for the fact received packets no longer terminate in \0 2022-11-20 14:01:54 +13:00
Li
b665061308 Dont process XML policy request as a hi1 packet. 2022-11-20 12:49:07 +13:00
Li
f716fedec5 Fix connecting on XMLSocket- 2022-11-20 12:47:18 +13:00
Li
44ada661d7 Patch out allow-from-domain cross origin stuff 2022-11-19 03:08:47 +13:00
Li
baf7d56f47 Patch to allow for connecting to offical servers with MPN00BS 2022-11-18 23:22:43 +13:00
Li
66dddad437 Add copy/paste 2022-11-18 22:51:52 +13:00
Li
be228de5ea Update MPN00BS 2022-11-18 20:09:43 +13:00
Li
7fcaf412df Fix build 2022-11-18 19:51:25 +13:00
Li
458748e6b0 Improve WebSocket performance 2022-11-18 19:45:17 +13:00
Li
eefc2b926d Remove \0 from packet unless XmlSocket 2022-11-18 18:21:03 +13:00
Li
3ed0120b9b blah 2022-11-17 14:59:46 +13:00
Li
29e5ab8093 Update HISP 2022-11-17 13:32:47 +13:00
Li
d73cd92c52 Fully implement websocket transport 2022-11-17 11:56:22 +13:00
Li
9c6c719c1a oop dont forget to remove this 2022-11-17 02:56:25 +13:00
Li
b9e3949b14 Improve websocket code. 2022-11-17 02:52:30 +13:00
Li
e74f66a439 Add Multiple transports system, begin work on WebSockets 2022-11-16 01:59:32 +13:00
Li
e869a23463 Delete pubxml.user 2022-11-15 04:29:05 +13:00
Li
645dd3ecf4 Revert tile debug 2022-11-15 04:28:36 +13:00
Li
2b6db887ed Fix tile id thingy again 2022-11-15 04:15:13 +13:00
Li
6613b0cb87 Fix tile debug feature 2022-11-15 04:11:06 +13:00
Li
ed12e9ad12 fix tile debug feature 2022-11-15 04:10:32 +13:00
Li
393dc147da Add silly tile debug feature 2022-11-15 04:07:40 +13:00
Li
7f635d5fdd a 2022-11-15 00:54:26 +13:00
Li
eaf1db1ee1 Begin work on Unit Tests 2022-11-14 23:09:22 +13:00
Li
cf7605c6c9 HISP 2022-11-12 12:11:46 +13:00
Li
be3a9fbd02 Re-add trimming stuff 2022-11-11 20:16:55 +13:00
Li
f15b37fd08 Fix socket thingy 2022-11-11 19:49:26 +13:00
Li
37cba8c859 fix linux PlatformNotSupported_AcceptSocket 2022-11-11 19:31:18 +13:00
Li
8c22cd1c8a f 2022-11-11 19:20:31 +13:00
Li
266407c3c4 Fix resources 2022-11-11 19:12:16 +13:00
Li
e9fdf1ff6f Try fix crash handler 2022-11-11 19:07:07 +13:00
Li
a7c5048f14 Fix trim / publish 2022-11-11 05:04:53 +13:00
Li
9e62fc8415 try nativeaot again 2022-11-11 04:19:01 +13:00
Li
bd2ba81b01 use 7.0 release 2022-11-11 02:36:58 +13:00
Li
13154729e2 Merge branch 'master' of https://github.com/islehorse/HISP 2022-11-11 02:33:53 +13:00
Li
6e2f8e7483 Build with .NET 7.0 release 2022-11-11 02:33:44 +13:00
Li
4c13134c8f
Update README.md 2022-11-03 23:55:41 +13:00
Li
73498c6a59
Update README.md 2022-11-03 23:48:24 +13:00
Li
221953b90f
Update README.md 2022-11-03 23:48:01 +13:00
Li
b3f0b37bf4
Update README.md 2022-11-03 23:45:31 +13:00
Li
0d32212095
Add more info to readme. 2022-11-03 23:44:47 +13:00
Li
c0bde9f864 Change to errorprint 2022-10-26 22:47:26 +13:00
Li
4c09390ac8 CONTINUE, NOT RETURN!!! 2022-10-26 22:45:22 +13:00
Li
3e3d840ce6 Fix Quotation Marks 2022-10-04 16:03:25 +13:00
Li
663106ca34 add macos MPNoobs build task 2022-10-04 15:59:42 +13:00
Li
a50d052c2a Revert "update build.yml"
This reverts commit 78e08c2e63.
2022-10-04 15:51:00 +13:00
Li
284cbf7e55 macos port but it actually works? 2022-10-04 15:40:09 +13:00
Li
78e08c2e63 update build.yml 2022-10-04 15:38:01 +13:00
Li
44f1d1bd79 MacOS port 2022-10-04 15:34:09 +13:00
Li
d5e7c97633 Update ServerStarter.cs 2022-10-04 15:14:45 +13:00
Li
f38f6320f4 Add macos flashplayer . 2022-10-04 15:08:59 +13:00
Li
99c9221f4b Continue, NOT RETURN! - fix the issue where no one can join at all: 2022-09-05 16:36:28 +12:00
Li
4b48db6b2a Fix crash when player leaves 2022-09-05 15:13:14 +12:00
Li
ed721b362e Move to v1.8 2022-09-05 15:05:21 +12:00
Li
825d3b4740 Change Util.cs to Helper.cs, and move ThreadSafeList to HISP.Util namespace. 2022-09-05 14:56:28 +12:00
Li
c36eda289a Remove all MemoryStreams from PacketBuilder, use Byte[] and List<Byte> only. 2022-09-05 14:55:16 +12:00
Li
3bea266b3e apparently dotnet script is borked on github actions, yay microsoft 2022-09-01 17:31:16 +12:00
Li
647a6f21af Add quotes 2022-09-01 17:22:49 +12:00
Li
fea71443b1 use dotnet (space) script 2022-09-01 17:05:54 +12:00
Li
892a8de202 Force older .NET version 2022-09-01 17:01:36 +12:00
Li
61dfd8db9a use dnscript 2022-09-01 16:44:11 +12:00
Li
0f0e092461 use dotnet-script 2022-09-01 16:40:45 +12:00
Li
c253722964 Add back HISPd AssemblyInfo.cs 2022-09-01 16:20:11 +12:00
Li
a003f5b98d Move to csx 2022-09-01 16:15:17 +12:00
Li
27c79a28a3 Super verbose 2022-09-01 08:59:23 +12:00
Li
05bafee922 Merge branch 'master' of https://github.com/islehorse/HISP 2022-09-01 08:50:50 +12:00
Li
e5bfea34f2 Update hisp 2022-09-01 08:50:42 +12:00
Li
c40ddce684
Update README.md 2022-08-31 23:01:44 +12:00
Li
248344f800 Make RandomId Thread Safe 2022-08-31 20:38:08 +12:00
Li
f739c99c87 Merge branch 'master' of https://github.com/islehorse/HISP 2022-08-31 20:31:18 +12:00
Li
40c34ac030 Add Thread-Safe Lists, and make all list access thread-safe 2022-08-31 20:31:07 +12:00
Li
c4ddc75da8
Update README.md 2022-07-29 13:42:21 +12:00
Li
65dec46a29
Update README.md 2022-07-29 13:41:38 +12:00
Li
900fe0d48a Fix CHMOD 2022-07-25 21:50:13 +12:00
Li
9294ec11a7 Update MPN00BS 2022-07-25 21:45:21 +12:00
Li
f12e930538 Update HISP 2022-07-25 21:13:10 +12:00
Li
9ddcd37d41 Add chmod to running flash 2022-07-25 21:09:38 +12:00
Li
dd423a4734 Update linux 2022-07-25 21:03:03 +12:00
Li
8efb10f3b5 Update gitignore 2022-07-25 20:16:19 +12:00
Li
d61de09704 Merge branch 'master' of https://github.com/islehorse/HISP 2022-07-25 20:15:48 +12:00
Li
c18acdba51 Make flashplayer 777 2022-07-25 19:52:05 +12:00
Li
a6a04f2cc4 Update gitignore 2022-07-25 19:27:54 +12:00
Li
dec54112fd Set permissions 2022-07-25 19:17:30 +12:00
Li
8297c56f21 Port N00BS to linux 2022-07-25 19:16:21 +12:00
Li
64fed1c6c4 Update thingy 2022-07-25 14:36:13 +12:00
Li
dd7efc17e5 update n00bs 2022-07-25 14:29:23 +12:00
Li
9d50f23067 Update N00BS 2022-07-25 14:17:26 +12:00
Li
e0aff19845 Nevermind 2022-07-22 19:37:48 +12:00
Li
ea96f347fa nevermind guess the exe doesnt customize right on linux 2022-07-22 19:36:50 +12:00
Li
2c062f4b67 Remove n00bs originnal from sln 2022-07-22 19:20:18 +12:00
Li
4c6288245a Build windows version on linux 2022-07-22 19:18:04 +12:00
Li
d0d95963af Remove server.properties lol 2022-07-22 18:58:21 +12:00
Li
b83960d872 Finish MPN00Bs 2022-07-22 18:57:53 +12:00
Li
b439ad1511 Update MPN00BS 2022-07-22 01:51:31 +12:00
Li
c32d1740e3 Add registration form to MPN00BS 2022-07-20 18:48:05 +12:00
Li
cdc136dcd4 Add Multiplatform HISP-NOOBS 2022-07-19 16:40:51 +12:00
Li
b3df338715 Fix N00BS 2022-07-19 12:33:44 +12:00
Li
0c299729dd remove shutdown call 2022-07-18 00:50:23 +12:00
Li
cc3cec4c8a Fix windows ARM 64 2022-07-18 00:40:37 +12:00
Li
0b8bed32cf fix linux 2022-07-18 00:29:16 +12:00
Li
3e70ac1c6a Fix linux build 2022-07-18 00:16:50 +12:00
Li
5e42d80109 remove installer project 2022-07-18 00:11:46 +12:00
Li
118182777d Fix N00BS 2022-07-18 00:10:57 +12:00
Li
39acd7f7eb Revert NativeAOT becuase MS broke it 2022-07-18 00:09:57 +12:00
Li
41a6038527 change sqllite libary 2022-07-17 23:45:12 +12:00
Li
6627ca5dc4 Update dependancies 2022-07-17 23:01:47 +12:00
Li
6a34745a5f add some debug print 2022-07-17 22:34:26 +12:00
Li
81589ed20a aaa 2022-07-17 22:01:00 +12:00
Li
ec7275a290 remove extra optiomization 2022-07-17 21:59:14 +12:00
Li
693acfdbe6 arm 2022-07-17 21:31:47 +12:00
Li
813e826716 please fuckin work 2022-07-17 21:24:28 +12:00
Li
d1617fe4f9 fix cross compile 2022-07-17 21:14:16 +12:00
Li
e3fa54f9e6 update 2022-07-17 21:05:33 +12:00
Li
6f3883fa37 update buildyml 2022-07-17 21:02:23 +12:00
Li
59270700ef update 2022-07-17 20:32:40 +12:00
Li
22f5c91599 Fix arm cross compile 2022-07-17 20:31:22 +12:00
Li
7f3c7ba845 add aarch64 linker 2022-07-17 20:17:09 +12:00
Li
e6a7d379b9 l 2022-07-17 19:59:04 +12:00
Li
5de29987af Linux arm64 2022-07-17 19:40:17 +12:00
Li
132ab34097 Fix MACOS 2022-07-17 19:14:13 +12:00
Li
69f1a98ff5 Lets change it up a litle 2022-07-17 19:12:09 +12:00
Li
3657da97f5 uod bui 2022-07-17 18:52:10 +12:00
Li
b961b50308 Remove debug info 2022-07-17 18:33:13 +12:00
Li
ca25d54589 come on! 2022-07-17 17:45:38 +12:00
Li
ab769afaf1 Fix copy? 2022-07-17 17:39:28 +12:00
Li
62905cce9a native ARM64 linux: 2022-07-17 17:32:32 +12:00
Li
7fe1d79158 . 2022-07-17 17:19:48 +12:00
Li
fb5693e986 update build.yml again 2022-07-17 17:18:45 +12:00
Li
b30f195080 Working dirs are ass 2022-07-17 17:12:35 +12:00
Li
114ba568b7 No i mean x64 2022-07-17 17:08:50 +12:00
Li
35dd2fc132 Need root >_< 2022-07-17 17:05:17 +12:00
Li
906cc5a0f0 Trees 2022-07-17 16:56:40 +12:00
Li
f32abd1b58 add some trees 2022-07-17 16:52:53 +12:00
Li
e66d1f9298 update build.yml 2022-07-17 16:49:00 +12:00
Li
88d2945065 Need root >_< 2022-07-17 16:44:55 +12:00
Li
f294a83368 Update build.yml 2022-07-17 16:43:30 +12:00
Li
0394d5fb9f Update build.yml 2022-07-17 16:39:07 +12:00
Li
1e90588664 Update build 2022-07-17 16:23:46 +12:00
Li
1bfb69e568 Update line endingsin prebuild 2022-07-17 16:19:17 +12:00
Li
c51103cda8 Update thingy 2022-07-17 16:16:30 +12:00
Li
7fb2673de0 Update build script 2022-07-17 16:05:49 +12:00
Li
03035cd5fb Fix compile on linux 2022-07-17 16:02:23 +12:00
Li
162dcba4a0 Update line endingsin prebuild 2022-07-17 15:58:30 +12:00
Li
d94595d4f0 Update line endings 2022-07-17 15:57:34 +12:00
Li
42ce640d3b update actions for ll test 2022-07-17 15:51:38 +12:00
Li
b05753f14b Update permissions 2022-07-17 15:47:59 +12:00
Li
5aa3e1228e Upd 2022-07-17 15:45:01 +12:00
Li
f2d36bd73a update prebuild again 2022-07-17 15:43:13 +12:00
Li
e554d41c94 Update prebuild script 2022-07-17 15:39:25 +12:00
Li
e0fe30cca7 Update Build.yml 2022-07-17 15:31:52 +12:00
Li
46b9805712 Update Build.yml 2022-07-17 15:27:37 +12:00
Li
c9d2e84b8a Update Actions 2022-07-17 15:21:25 +12:00
Li
c703d5b7f7 Test 2022-07-17 15:10:39 +12:00
Li
a501f5886c
Update build.yml 2022-06-23 01:22:53 +12:00
Li
afbd41a681 actually upload arm64 2022-06-22 23:00:44 +12:00
Li
0270b1e035 fix upload 2022-06-22 22:29:29 +12:00
Li
092e1a58bb actually upload arm64 2022-06-22 22:27:04 +12:00
Li
a375c7d871 Merge branch 'master' of https://github.com/islehorse/HISP 2022-06-22 22:24:08 +12:00
Li
020d642bc5 upd 2022-06-22 22:23:42 +12:00
Li
6826565cfd
Native build arm64 2022-06-22 22:11:25 +12:00
Li
b5d65a583b this is dumb 2022-06-21 17:48:06 +12:00
Li
64443e9cf0 Add hisp n00bs build 2022-06-21 17:36:56 +12:00
Li
c325d29062 update build process 2022-06-21 16:21:11 +12:00
Li
0330193545
Try 2022-06-21 15:45:42 +12:00
Li
3bbbf25537
change platformtarget 2022-06-21 15:34:54 +12:00
Li
f9ef53339d
native build x86 2022-06-21 15:17:50 +12:00
Li
2de85889d3
test 2022-06-19 23:04:50 +12:00
Li
3a3da520c5 Update prebuild script 2022-06-18 10:32:23 +12:00
Li
287325dd55 i hate yml 2022-06-18 03:07:47 +12:00
Li
59a592aeb5 Ugh 2022-06-18 03:06:48 +12:00
Li
f54ac90f3d Try native build again 2022-06-18 03:04:52 +12:00
Li
65e7e9b3a5 Test native compilation 2022-06-18 01:35:58 +12:00
Li
1afe643047 Fix warnings 2022-06-18 01:15:15 +12:00
Li
2df39d75fd
Update build.yml 2022-06-18 00:58:45 +12:00
Li
ca39f783b9 add graceful exit on SIGKILL/SIGTERM 2022-06-18 00:52:51 +12:00
Li
e42b0bf782 Add DataFixerUpper 2022-06-18 00:35:52 +12:00
Li
3105689753 Merge branch 'master' of https://github.com/islehorse/HISP 2022-06-17 23:11:34 +12:00
Li
53b03ff430 Update prebuild.py 2022-06-17 23:09:26 +12:00
Li
9b5acd57a2
Update README.md 2022-06-14 23:18:06 +12:00
Li
32a0747230 Update horseisleweb 2022-06-14 22:54:58 +12:00
Li
79616a2595 Add email validation 2022-06-14 19:53:29 +12:00
Li
6a3343adeb Update horseisleweb 2022-06-14 16:02:32 +12:00
Li
95f83cd547 Add new migrate script 2022-05-21 13:16:02 +12:00
Li
219c9fa95a Add system.threading 2022-05-08 17:42:07 +12:00
Li
dd99e49ef7 Fix %MESSAGE 2022-05-08 17:36:15 +12:00
Li
f8d8e8f28d Fix %CALL HORSE% 2022-05-08 17:22:58 +12:00
Li
479b539b44 Fix %CALL HORSE 2022-05-08 17:17:00 +12:00
Li
4fd4fcb652 Increment horseisledata to latest 2022-05-08 17:05:32 +12:00
Li
158429d306 Remove goto 2022-05-08 17:02:48 +12:00
Li
02d32f46a8 add help text" 2022-05-08 16:55:40 +12:00
Li
f14355bae8 Add %% command." 2022-05-08 16:25:53 +12:00
Li
9c97cdccb4 Fix postrm 2022-05-08 15:27:35 +12:00
Li
80a64635a3 Update python build script!! 2022-05-08 14:37:47 +12:00
Li
a8aaddb18b fix debian 2022-05-08 14:36:36 +12:00
Li
f9e1a7b755 Update python build script!! 2022-05-08 13:44:46 +12:00
Li
35c51946e4 Update to v1.7 2022-05-08 13:37:13 +12:00
Li
8dd4cdb6d0 Update made automatically due to pressing build 2022-05-08 13:16:32 +12:00
Li
5d9648429a Update made automatically due to pressing build 2022-05-08 13:14:24 +12:00
Li
89fcf97724 Update made automatically due to pressing build 2022-05-08 13:13:57 +12:00
Li
76da976e68 Update made automatically due to pressing build 2022-05-08 13:13:14 +12:00
Li
aed289e5d5 Update made automatically due to pressing build 2022-05-08 13:10:16 +12:00
Li
7efb878f63 Update made automatically due to pressing build 2022-05-08 13:09:56 +12:00
Li
5d787e169b Update made automatically due to pressing build 2022-05-08 12:54:49 +12:00
Li
58f081df7a Update made automatically due to pressing build 2022-05-08 12:54:18 +12:00
Li
ed55fa5f84 Update made automatically due to pressing build 2022-05-08 12:53:14 +12:00
Li
efeb3de36e Update made automatically due to pressing build 2022-05-08 12:52:23 +12:00
Li
05c67eefbd Update made automatically due to pressing build 2022-05-08 12:51:39 +12:00
Li
3567ad604f Update made automatically due to pressing build 2022-05-08 12:36:36 +12:00
Li
d179e4db01 Update made automatically due to pressing build 2022-05-08 12:34:14 +12:00
Li
5b599d7845 Update made automatically due to pressing build 2022-05-08 12:33:55 +12:00
Li
f611776023 Update made automatically due to pressing build 2022-05-08 12:32:09 +12:00
Li
0e84faa0c1 Update made automatically due to pressing build 2022-05-08 12:31:45 +12:00
Li
dd0f43bf87 Update made automatically due to pressing build 2022-05-08 12:31:02 +12:00
Li
f261ea3b88 Update made automatically due to pressing build 2022-05-08 12:30:40 +12:00
Li
bf4d5f5005 add build script 2022-05-08 12:21:33 +12:00
Li
063c267755 increment version in deb package 2022-05-07 13:33:36 +12:00
Li
412430ec76 Move mod loading to server entry point 2022-05-07 13:30:51 +12:00
Li
518018e54e Update HorseIsleData to latest. 2022-05-07 13:27:00 +12:00
Li
3c2b14ecec Improve code for handling user pronouns,. (remove copy paste hell) 2022-05-07 13:24:09 +12:00
Li
55c0f29914 Make commands more accurate 2022-05-07 12:58:22 +12:00
Li
997be8573d Merge branch 'master' of https://github.com/islehorse/HISP 2022-04-19 12:44:13 +12:00
Li
572b0e1b78 Update 2022-04-19 12:43:56 +12:00
Li
78482e93d5
Update README.md 2022-04-19 10:29:10 +12:00
Li
2dbfd4dd03
Update README.md 2022-04-19 10:20:22 +12:00
Li
1a8693dce8
Update README.md 2022-04-19 10:19:07 +12:00
Li
4b627671d6
Update README.md 2022-04-19 10:18:19 +12:00
Li
8a390fe84d
Update README.md 2022-04-19 10:17:27 +12:00
Li
898ebbdc8c
Update README.md 2022-04-19 10:13:43 +12:00
Li
13b82bd14b Update HISP 2022-04-19 00:25:19 +12:00
SilicaAndPina
8e49090088 Update submodules 2022-04-18 20:47:51 +12:00
SilicaAndPina
8ca46e313c Merge branch 'master' of https://github.com/islehorse/HISP 2022-04-18 20:47:05 +12:00
SilicaAndPina
8bc3636370 Change mailmap 2022-04-18 20:46:44 +12:00
Bluzume
4896a7d27b
Update LICENSE 2022-04-18 20:31:22 +12:00
SilicaAndPina
98f64711e9 Improved some stuff 2022-04-18 19:40:04 +12:00
SilicaAndPina
f3a3566e8f Fix permissons 2022-04-18 18:18:18 +12:00
SilicaAndPina
c27e50f6af Actually include the service in the debian file (FAIL) 2022-04-18 16:15:21 +12:00
SilicaAndPina
4a07e70dd7 Change email 2022-04-18 16:02:20 +12:00
SilicaAndPina
90fc6e74f1 Correct path 2022-04-18 15:09:53 +12:00
SilicaAndPina
96c87b0d15 CAN THE WORKFLOW JUST WORK 2022-04-18 13:54:37 +12:00
SilicaAndPina
7772019915 CAN THE WORKFLOW JUST WORK 2022-04-18 13:09:38 +12:00
SilicaAndPina
8b3dafbbad CAN THE WORKFLOW JUST WORK 2022-04-18 12:59:57 +12:00
SilicaAndPina
00302f3d77 CAN THE WORKFLOW JUST WORK 2022-04-18 12:53:14 +12:00
SilicaAndPina
70452d9ee5 CAN THE WORKFLOW JUST WORK 2022-04-18 12:41:32 +12:00
SilicaAndPina
b77d45e255 CAN THE WORKFLOW JUST WORK 2022-04-18 12:30:32 +12:00
SilicaAndPina
1a92f9fca7 CAN THE WORKFLOW JUST WORK 2022-04-18 12:15:10 +12:00
SilicaAndPina
7ced1d2f16 CAN THE WORKFLOW JUST WORK 2022-04-18 12:05:26 +12:00
SilicaAndPina
e575f196db fix workflows? 2022-04-18 11:54:58 +12:00
SilicaAndPina
9b5fed4e9d Update submodules 2022-04-18 11:15:26 +12:00
SilicaAndPina
0332b12660 Fix permissions 2022-04-18 10:28:20 +12:00
SilicaAndPina
c87d919984 Fix the build probably 2022-04-18 10:18:44 +12:00
SilicaAndPina
ea5629aeb0 Update workflow 2022-04-18 10:12:25 +12:00
SilicaAndPina
ea544dcbe1 Fix npc chat? ??? 2022-04-18 10:08:44 +12:00
SilicaAndPina
dbbf913719 update all 2022-04-17 21:20:08 +12:00
SilicaAndPina
e1e01f2f18 update all 2022-04-17 21:19:16 +12:00
SilicaAndPina
885d3a3c57 update all 2022-04-17 20:07:56 +12:00
SilicaAndPina
2e4806ae6f Update workflows ... 2022-04-17 19:23:18 +12:00
SilicaAndPina
8fab52d202 Update workflow >_> 2022-04-17 18:42:54 +12:00
SilicaAndPina
5e75827f84 Update workflow >_> 2022-04-17 18:41:20 +12:00
SilicaAndPina
d0ee86e08d Update workflow >_> 2022-04-17 18:37:43 +12:00
SilicaAndPina
710ac206c4 revert workflwo 2022-04-17 18:35:14 +12:00
SilicaAndPina
9aca074096 klkljkiniu 2022-04-17 18:33:58 +12:00
SilicaAndPina
15e107bb9f test2 2022-04-17 18:32:06 +12:00
SilicaAndPina
43d698bc6c try multiline 2022-04-17 18:30:46 +12:00
SilicaAndPina
6655b631bb aaa 2022-04-17 18:28:51 +12:00
SilicaAndPina
84b712c32f add debian package build 2022-04-17 18:26:59 +12:00
SilicaAndPina
cff8c68eef Disable android because its broken in .net 7.0 2022-04-17 09:35:42 +12:00
SilicaAndPina
e984bc3d6f Experimental iOS port 2022-04-17 09:28:46 +12:00
SilicaAndPina
5203912757 Add mailmap 2022-04-16 11:34:14 +12:00
SilicaAndPina
3de7fa46dd Fix tags??? 2022-04-15 23:56:41 +12:00
SilicaAndPina
11b99d83a7 add two dashes 2022-04-15 23:52:38 +12:00
SilicaAndPina
9a38f60956 fix hisp-noobs buildin 2022-04-15 23:51:35 +12:00
SilicaAndPina
b79534031f make it pull tags info 2022-04-15 23:50:39 +12:00
SilicaAndPina
e0a025a5c6 fix hisp-noobs buildin 2022-04-15 23:46:34 +12:00
SilicaAndPina
59392db9bb Fix building on linux 2022-04-15 23:39:54 +12:00
SilicaAndPina
70359f967a Update HISP Noobs 2022-04-15 23:36:30 +12:00
SilicaAndPina
2f7481519f Make N00BS Respect IP set in server.properties 2022-04-15 23:12:17 +12:00
SilicaAndPina
6ba1fd181f Update HISP Noobs 2022-04-15 22:45:48 +12:00
SilicaAndPina
181e77af4d Update HISP Noobs 2022-04-15 22:43:36 +12:00
SilicaAndPina
c96bcd01fd fix namespace 2022-04-15 00:34:38 +12:00
SilicaAndPina
a6971306a4 Fix resources 2022-04-15 00:32:55 +12:00
SilicaAndPina
22ebec5a57 Rename HISPCli to HISPd 2022-04-15 00:27:12 +12:00
SilicaAndPina
03b55d148a back to windows then i guess 2022-04-15 00:07:43 +12:00
SilicaAndPina
55cdf049e8 Build on ubuntu? 2022-04-15 00:07:42 +12:00
SilicaAndPina
80b0e88e1e Massively improve CPU Usage. 2022-04-15 00:07:41 +12:00
SilicaAndPina
298c2aca4a fix2? 2022-04-15 00:07:41 +12:00
SilicaAndPina
84d9ea7f2a Fix android 2022-04-15 00:07:40 +12:00
SilicaAndPina
b67453780d Ok can it like actually work now 2022-04-15 00:07:39 +12:00
SilicaAndPina
a1698b0ee5 Enable PublishSingleFile again ... 2022-04-15 00:07:39 +12:00
SilicaAndPina
73a06e4493 OK DOES NET 7 WORK YET 2022-04-15 00:07:38 +12:00
SilicaAndPina
eada9eb5a5 Update to NET 7.0 (for reals this time) 2022-04-15 00:07:37 +12:00
SilicaAndPina
f2d529899c update to NET 7.0 2022-04-15 00:07:37 +12:00
SilicaAndPina
5ff1374693 update to NET 7.0 2022-04-15 00:07:36 +12:00
SilicaAndPina
7b1cfa42da update to NET 7.0 2022-04-15 00:07:35 +12:00
SilicaAndPina
6ff3735eb4 Merge branch 'master' of https://github.com/islehorse/HISP 2022-04-15 00:07:35 +12:00
SilicaAndPina
88b3c0dc40 Update submodules 2022-04-15 00:07:34 +12:00
SilicaAndPina
b9019df646 Update LICENSE 2022-04-15 00:07:33 +12:00
SilicaAndPina
5b31cb7a0f Update LICENSE 2022-04-15 00:07:33 +12:00
SilicaAndPina
fc64ae29f8 l 2022-04-15 00:07:32 +12:00
SilicaAndPina
368224fa1c clarify license a bit 2022-04-15 00:07:32 +12:00
SilicaAndPina
9ce523ecf9 Update LICENSE 2022-04-15 00:07:31 +12:00
SilicaAndPina
660abf2838 Clarify licnese a bit 2022-04-15 00:07:31 +12:00
SilicaAndPina
0481b96f2c Update HISP.service 2022-04-15 00:07:30 +12:00
SilicaAndPina
95749fa194 .. 2022-04-15 00:07:30 +12:00
SilicaAndPina
db92718ffa ... 2022-04-15 00:07:29 +12:00
SilicaAndPina
640c6d2c49 Add ability to use hisp as a linux service 2022-04-15 00:07:28 +12:00
SilicaAndPina
1735c35a7c Add ability to run as a linux service 2022-04-15 00:07:28 +12:00
SilicaAndPina
fb8eab0f8e Ragequit 2022-03-19 19:03:44 +13:00
SilicaAndPina
1740427e19 Fix workflows 2022-03-19 17:28:42 +13:00
SilicaAndPina
515cff6fb9 Remove useless import 2022-03-19 16:29:19 +13:00
Bluzume
71c8c8258b
Delete setup.exe 2022-03-19 16:06:19 +13:00
SilicaAndPina
994dc382c8 Allow HISP Noobs to run even w a web server already running 2022-03-19 15:46:44 +13:00
SilicaAndPina
62e1a7a122 Fix msi project 2022-03-19 02:24:26 +13:00
SilicaAndPina
f0264d49b6 Fix msi project 2022-03-19 02:23:34 +13:00
SilicaAndPina
6003990a93 Update Version 2022-03-19 02:16:29 +13:00
SilicaAndPina
56e4047cbc Update Version 2022-03-19 02:16:08 +13:00
357 changed files with 37253 additions and 171831 deletions

329
.github/workflows/build.yml vendored Normal file → Executable file
View file

@ -8,12 +8,12 @@ defaults:
working-directory: ./HorseIsleServer
jobs:
build:
runs-on: windows-latest
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Git Submodule update
run: git submodule update --init --recursive
@ -21,156 +21,271 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 6.0.x
include-prerelease: true
dotnet-version: 8.0.x
include-prerelease: false
- name: Install utils
run: |
sudo apt update
sudo apt install -y clang zlib1g-dev dos2unix
dotnet tool install -g dotnet-script
- name: Restore dependencies
run: |
dotnet restore LibHISP
dotnet restore HISPd
# linux x64
- name: Build linux-x64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=Linux64.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Linux64.pubxml
cd ..
# linux arm
- name: Build linux-arm
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=LinuxARM.pubxml
cd ..
# linux arm64
- name: Build linux-arm64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=LinuxARM64.pubxml
cd ..
- name: Build deb package
continue-on-error: false
run: |
mkdir /tmp/debpkg
mkdir /tmp/debpkg/Debian64
mkdir /tmp/debpkg/Debian64/etc
mkdir /tmp/debpkg/Debian64/usr
mkdir /tmp/debpkg/Debian64/etc/hisp
mkdir /tmp/debpkg/Debian64/etc/hisp/gamedata
mkdir /tmp/debpkg/Debian64/etc/systemd
mkdir /tmp/debpkg/Debian64/etc/systemd/system
mkdir /tmp/debpkg/Debian64/usr/bin
mkdir /tmp/debpkg/Debian64/usr/lib
mkdir /tmp/debpkg/Debian64/DEBIAN
cp LibHISP/Resources/server.properties /tmp/debpkg/Debian64/etc/hisp/server.properties
cp LibHISP/Resources/default_cross_domain.xml /tmp/debpkg/Debian64/etc/hisp/CrossDomainPolicy.xml
cp -r HISPd/Resources/DEBIAN/* /tmp/debpkg/Debian64/DEBIAN
cp -r HISPd/bin/x64/Linux/net8.0/linux-x64/publish/gamedata/* /tmp/debpkg/Debian64/etc/hisp/gamedata
cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/libe_sqlite3.so /tmp/debpkg/Debian64/usr/lib/libe_sqlite3.so
cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/HI1.MAP /tmp/debpkg/Debian64/etc/hisp/HI1.MAP
cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/HISPd /tmp/debpkg/Debian64/usr/bin/HISPd
cp HISPd/Resources/HISP.service /tmp/debpkg/Debian64/etc/systemd/system/HISP.service
cat /tmp/debpkg/Debian64/DEBIAN/control
dos2unix /tmp/debpkg/Debian64/DEBIAN/conffiles
dos2unix /tmp/debpkg/Debian64/DEBIAN/control
dos2unix /tmp/debpkg/Debian64/DEBIAN/postinst
dos2unix /tmp/debpkg/Debian64/DEBIAN/postrm
dos2unix /tmp/debpkg/Debian64/DEBIAN/prerm
dos2unix /tmp/debpkg/Debian64/etc/systemd/system/HISP.service
chmod 755 -R /tmp/debpkg/Debian64
chmod +x /tmp/debpkg/Debian64/usr/bin/HISPd
mkdir debpackage
dpkg-deb --build /tmp/debpkg/Debian64
mv /tmp/debpkg/Debian64.deb debpackage/HISP-Debian-AMD64.deb
# Upload LINUX
- name: Upload linux-x64
uses: actions/upload-artifact@v4
with:
name: HISP-Linux64
path: HorseIsleServer/HISPd/bin/x64/Linux/net8.0/linux-x64/publish/
- name: Upload linux-x64-noobs
uses: actions/upload-artifact@v4
with:
name: HISP-Linux64-Noobs
path: HorseIsleServer/MPN00BS/bin/x64/Linux/net8.0/linux-x64/publish/
- name: Upload linux-arm
uses: actions/upload-artifact@v4
with:
name: HISP-LinuxARM
path: HorseIsleServer/HISPd/bin/ARM/Linux/net8.0/linux-arm/publish/
- name: Upload linux-arm64
uses: actions/upload-artifact@v4
with:
name: HISP-LinuxARM64
path: HorseIsleServer/HISPd/bin/ARM64/Linux/net8.0/linux-arm64/publish/
- name: Upload deb package
uses: actions/upload-artifact@v4
with:
name: HISP-DebianPackage
path: HorseIsleServer/debpackage
build-win:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Git Submodule update
run: git submodule update --init --recursive
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 8.0.x
include-prerelease: false
- name: Install utils
run: dotnet tool install -g dotnet-script
- name: Restore dependencies
run: dotnet restore
# x64 build
- name: Build win-x64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=Win64.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Win64.pubxml
cd ..
- name: Build win-x86
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=Win32.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Win32.pubxml
cd ..
- name: Build win-arm
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=WinARM.pubxml
# arm64 build
- name: Build win-arm64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=WinARM64.pubxml
cd ..
- name: Build linux-x64
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=Linux64.pubxml
# Upload WINDOWS
- name: Upload win-x64
uses: actions/upload-artifact@v4
with:
name: HISP-Win64
path: HorseIsleServer/HISPd/bin/x64/Windows/net8.0/win-x64/publish/
- name: Build linux-arm
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=LinuxARM.pubxml
- name: Upload win-x86
uses: actions/upload-artifact@v4
with:
name: HISP-Win32
path: HorseIsleServer/HISPd/bin/x86/Windows/net8.0/win-x86/publish/
- name: Upload win-arm64
uses: actions/upload-artifact@v4
with:
name: HISP-WinARM64
path: HorseIsleServer/HISPd/bin/arm64/Windows/net8.0/win-arm64/publish/
- name: Upload win-x86-noobs
uses: actions/upload-artifact@v4
with:
name: HISP-Win32-Noobs
path: HorseIsleServer/MPN00BS/bin/x86/Windows/net8.0/win-x86/publish/
- name: Upload win-x64-noobs
uses: actions/upload-artifact@v4
with:
name: HISP-Win64-Noobs
path: HorseIsleServer/MPN00BS/bin/x64/Windows/net8.0/win-x64/publish/
build-mac:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Build linux-arm64
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=LinuxARM64.pubxml
- name: Git Submodule update
run: git submodule update --init --recursive
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 8.0.x
include-prerelease: false
- name: Install utils
run: dotnet tool install -g dotnet-script
- name: Restore dependencies
run: |
dotnet restore LibHISP
dotnet restore HISPd
- name: Build mac-x64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=Osx64.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Osx64.pubxml
cd ..
- name: Build mac-arm64
continue-on-error: false
run: |
cd HISPd
dotnet publish -p:PublishProfile=OsxARM64.pubxml
- name: Build android-arm
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=AndroidARM.pubxml
- name: Build android-arm64
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=AndroidARM64.pubxml
- name: Upload win-x64
uses: actions/upload-artifact@v2
with:
name: HISP-Win64
path: HorseIsleServer\HISP\bin\x64\Windows\net6.0\win-x64\publish\
- name: Upload win-x86
uses: actions/upload-artifact@v2
with:
name: HISP-Win32
path: HorseIsleServer\HISP\bin\x86\Windows\net6.0\win-x86\publish\
- name: Upload win-arm
uses: actions/upload-artifact@v2
with:
name: HISP-WinARM
path: HorseIsleServer\HISP\bin\arm\Windows\net6.0\windows-arm\publish\
- name: Upload win-arm64
uses: actions/upload-artifact@v2
with:
name: HISP-WinARM64
path: HorseIsleServer\HISP\bin\arm64\Windows\net6.0\windows-arm64\publish\
- name: Upload win-x86-noobs
uses: actions/upload-artifact@v2
with:
name: HISP-Win32-Noobs
path: HorseIsleServer\N00BS\bin\x86\Windows\net6.0\win-x86\publish\
- name: Upload win-x64-noobs
uses: actions/upload-artifact@v2
with:
name: HISP-Win64-Noobs
path: HorseIsleServer\N00BS\bin\x64\Windows\net6.0\win-x64\publish\
- name: Upload linux-x64
uses: actions/upload-artifact@v2
with:
name: HISP-Linux64
path: HorseIsleServer/HISPCli/bin/x64/Linux/net6.0/linux-x64/publish/
- name: Upload linux-arm
uses: actions/upload-artifact@v2
with:
name: HISP-LinuxARM
path: HorseIsleServer/HISPCli/bin/ARM/Linux/net6.0/linux-arm/publish/
- name: Upload linux-arm64
uses: actions/upload-artifact@v2
with:
name: HISP-LinuxARM64
path: HorseIsleServer/HISPCli/bin/ARM64/Linux/net6.0/linux-arm64/publish/
cd ..
- name: Upload mac-x64
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: HISP-Mac64
path: HorseIsleServer/HISPCli/bin/x64/MacOS/net6.0/osx-x64/publish/
path: HorseIsleServer/HISPd/bin/x64/MacOS/net8.0/osx-x64/publish/
- name: Upload mac-arm64
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: HISP-MacARM64
path: HorseIsleServer/HISPCli/bin/arm64/MacOS/net6.0/osx-arm64/publish/
- name: Upload android-arm
uses: actions/upload-artifact@v2
path: HorseIsleServer/HISPd/bin/arm64/MacOS/net8.0/osx-arm64/publish/
- name: Upload mac-x64-noobs
uses: actions/upload-artifact@v4
with:
name: HISP-AndroidARM
path: HorseIsleServer/HISPCli/bin/arm/Android/net6.0/android-arm/publish/
name: HISP-Mac-Noobs
path: HorseIsleServer/MPN00BS/bin/x64/MacOS/net8.0/osx-x64/publish/
- name: Upload android-arm64
uses: actions/upload-artifact@v2
build-web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
name: HISP-AndroidARM64
path: HorseIsleServer/HISPCli/bin/arm64/Android/net6.0/android-arm64/publish/
fetch-depth: 0
- name: Git Submodule update
run: git submodule update --init --recursive
# UPLOAD WEB
- name: Upload Website (master)
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: HISP-Web-Master
path: HorseIsleWeb/master-site
- name: Upload Website (game)
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: HISP-Web-Game
path: HorseIsleWeb/game-site

23
.gitignore vendored
View file

@ -3,19 +3,32 @@
*/.vs/*
*.log
*.suo
*.csproj.user
*.pubxml.user
*.user
*.idb
*Thumbs.db
*.DS_Store
HorseIsleServer/N00BS/obj/*
HorseIsleServer/N00BS/bin/*
HorseIsleServer/HISPCli/obj/*
HorseIsleServer/HISPCli/bin/*
HorseIsleServer/MPN00BS/obj/*
HorseIsleServer/MPN00BS/bin/*
HorseIsleServer/HISPd/obj/*
HorseIsleServer/HISPd/bin/*
HorseIsleServer/HISPtests/obj/*
HorseIsleServer/HISPtests/bin/*
HorseIsleServer/Installer/obj/*
HorseIsleServer/Installer/bin/*
HorseIsleServer/LibHISP/obj/*
HorseIsleServer/LibHISP/bin/*
HorseIsleServer/LibHISP/Resources/Versioning/*
HorseIsleServer/.vs/*
HorseIsleServer/Installer/Windows/*
HorseIsleServer/.vs/*

2
.gitmodules vendored Normal file → Executable file
View file

@ -1,6 +1,8 @@
[submodule "HorseIsleWeb"]
path = HorseIsleWeb
url = https://github.com/islehorse/HorseIsleWeb.git
branch = master
[submodule "HorseIsleData"]
path = HorseIsleData
url = https://github.com/islehorse/HorseIsleData.git
branch = master

7
.mailmap Executable file
View file

@ -0,0 +1,7 @@
Li <li@silica.codes> SilicaAndPina <earsyum@gmail.com>
Li <li@silica.codes> Bluzume <39113159+KuromeSan@users.noreply.github.com>
Li <li@silica.codes> SilicaPi <silica@silica.com>
Li <li@silica.codes> SilicaPi <silica@raspberrypi.com>
Li <li@silica.codes> Silica <Silica@Silica.com>
Li <li@silica.codes> AtelierWindows <SilicaAndPina@AtelierWindows.com>
Li <li@silica.codes> KuromeSan <psp1080p@gmail.com>

@ -1 +1 @@
Subproject commit 35bf0e04a686990d7237326c048fd18b3a081aa5
Subproject commit e9c09c77cd0dd99eb12e16b679478fb0e3742b55

300
HorseIsleServer/HISP.sln Normal file → Executable file
View file

@ -5,11 +5,11 @@ VisualStudioVersion = 17.2.32210.308
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibHISP", "LibHISP\LibHISP.csproj", "{C48CBD82-AB30-494A-8FFA-4DE7069B5827}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPCli", "HISPCli\HISPCli.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "N00BS", "N00BS\N00BS.csproj", "{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPN00BS", "MPN00BS\MPN00BS.csproj", "{72EF95FC-03DB-4E61-A696-E0095DD42A4E}"
EndProject
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Installer", "Installer\Installer.vdproj", "{D330A197-67D4-42B0-8906-54264AF95EC1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPtests", "HISPtests\HISPtests.csproj", "{689FB972-1612-440E-817D-BE290F655AA8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -23,6 +23,11 @@ Global
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
iOS|Any CPU = iOS|Any CPU
iOS|ARM = iOS|ARM
iOS|ARM64 = iOS|ARM64
iOS|x64 = iOS|x64
iOS|x86 = iOS|x86
Linux|Any CPU = Linux|Any CPU
Linux|ARM = Linux|ARM
Linux|ARM64 = Linux|ARM64
@ -33,6 +38,11 @@ Global
MacOS|ARM64 = MacOS|ARM64
MacOS|x64 = MacOS|x64
MacOS|x86 = MacOS|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
Windows|Any CPU = Windows|Any CPU
Windows|ARM = Windows|ARM
Windows|ARM64 = Windows|ARM64
@ -40,8 +50,8 @@ Global
Windows|x86 = Windows|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Android|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Android|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM.ActiveCfg = Android|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM.Build.0 = Android|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM64.ActiveCfg = Android|ARM64
@ -58,8 +68,17 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|ARM64.Build.0 = Debug|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x64.ActiveCfg = Debug|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x64.Build.0 = Debug|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.ActiveCfg = Debug|AnyCPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.Build.0 = Debug|AnyCPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.ActiveCfg = Debug|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.Build.0 = Debug|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|Any CPU.ActiveCfg = iOS|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|Any CPU.Build.0 = iOS|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM.ActiveCfg = iOS|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM.Build.0 = iOS|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM64.ActiveCfg = iOS|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM64.Build.0 = iOS|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x64.ActiveCfg = iOS|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x64.Build.0 = iOS|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x86.ActiveCfg = iOS|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.ActiveCfg = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.Build.0 = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|ARM.ActiveCfg = Linux|ARM
@ -80,8 +99,18 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x64.Build.0 = MacOS|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.ActiveCfg = MacOS|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.Build.0 = MacOS|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.Build.0 = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.ActiveCfg = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.Build.0 = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.ActiveCfg = Windows|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.Build.0 = Windows|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.ActiveCfg = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.Build.0 = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM.ActiveCfg = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM.Build.0 = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM64.ActiveCfg = Windows|ARM64
@ -90,8 +119,8 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x64.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.ActiveCfg = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.Build.0 = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.ActiveCfg = Android|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.Build.0 = Android|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM.ActiveCfg = Android|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM.Build.0 = Android|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM64.ActiveCfg = Android|ARM64
@ -102,16 +131,25 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|x86.Build.0 = Android|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.ActiveCfg = Debug|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.Build.0 = Debug|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.ActiveCfg = Debug|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.Build.0 = Debug|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.ActiveCfg = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.Build.0 = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.ActiveCfg = Debug|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.Build.0 = Debug|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|Any CPU.ActiveCfg = iOS|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|Any CPU.Build.0 = iOS|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM.ActiveCfg = iOS|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM.Build.0 = iOS|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM64.ActiveCfg = iOS|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM64.Build.0 = iOS|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x64.ActiveCfg = iOS|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x64.Build.0 = iOS|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x86.ActiveCfg = iOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.ActiveCfg = Linux|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Linux|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM.ActiveCfg = Linux|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM.Build.0 = Linux|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM64.ActiveCfg = Linux|ARM64
@ -130,78 +168,166 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x64.Build.0 = MacOS|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.ActiveCfg = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.Build.0 = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.Build.0 = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.ActiveCfg = Windows|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.Build.0 = Windows|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.ActiveCfg = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.Build.0 = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.ActiveCfg = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.ActiveCfg = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.Build.0 = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM64.ActiveCfg = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM64.Build.0 = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.ActiveCfg = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.ActiveCfg = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.Build.0 = Windows|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x64.ActiveCfg = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.ActiveCfg = Debug|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.Build.0 = Debug|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM64.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.ActiveCfg = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.Build.0 = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.ActiveCfg = Windows|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.Build.0 = Windows|x86
{D330A197-67D4-42B0-8906-54264AF95EC1}.Android|Any CPU.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM64.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x64.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x86.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|Any CPU.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x86.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|Any CPU.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x86.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|Any CPU.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x64.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x86.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|Any CPU.ActiveCfg = Debug
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM64.ActiveCfg = Release
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.Build.0 = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.ActiveCfg = Windows
{D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.Build.0 = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.ActiveCfg = Android|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.Build.0 = Android|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.ActiveCfg = Android|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.Build.0 = Android|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.ActiveCfg = Android|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.Build.0 = Android|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.ActiveCfg = Android|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.Build.0 = Android|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.ActiveCfg = Android|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.Build.0 = Android|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.ActiveCfg = Debug|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.Build.0 = Debug|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.Build.0 = Debug|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.ActiveCfg = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.Build.0 = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.ActiveCfg = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.Build.0 = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.ActiveCfg = iOS|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.Build.0 = iOS|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.ActiveCfg = iOS|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.Build.0 = iOS|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.ActiveCfg = iOS|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.Build.0 = iOS|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.ActiveCfg = iOS|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.Build.0 = iOS|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.ActiveCfg = iOS|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.Build.0 = iOS|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.ActiveCfg = Linux|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.Build.0 = Linux|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.ActiveCfg = Linux|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.Build.0 = Linux|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.ActiveCfg = Linux|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.Build.0 = Linux|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.ActiveCfg = Linux|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.Build.0 = Linux|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.ActiveCfg = Linux|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.Build.0 = Linux|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.ActiveCfg = MacOS|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.Build.0 = MacOS|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.ActiveCfg = MacOS|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.Build.0 = MacOS|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.ActiveCfg = MacOS|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.Build.0 = MacOS|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.ActiveCfg = MacOS|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.Build.0 = MacOS|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.ActiveCfg = MacOS|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.Build.0 = MacOS|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.Build.0 = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.ActiveCfg = Windows|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.Build.0 = Windows|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.ActiveCfg = Windows|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.Build.0 = Windows|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.ActiveCfg = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.Build.0 = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.ActiveCfg = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.Build.0 = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.Build.0 = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.ActiveCfg = Windows|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.Build.0 = Windows|ARM
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.ActiveCfg = Windows|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.Build.0 = Windows|ARM64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.ActiveCfg = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.Build.0 = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.ActiveCfg = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.Build.0 = Windows|x86
{689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.ActiveCfg = Debug|ARM
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.Build.0 = Debug|ARM
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.ActiveCfg = Debug|ARM64
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.Build.0 = Debug|ARM64
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.ActiveCfg = Debug|x64
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.Build.0 = Debug|x64
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.ActiveCfg = Debug|x86
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.Build.0 = Debug|x86
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.Build.0 = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.ActiveCfg = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.Build.0 = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.ActiveCfg = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.Build.0 = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.ActiveCfg = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.Build.0 = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.ActiveCfg = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.Build.0 = Release|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.Build.0 = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.ActiveCfg = Debug|Any CPU
{689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -1,43 +0,0 @@
using HISP.Server;
using System;
using System.IO;
namespace HISP
{
public static class Program
{
public static bool ShuttingDown = false;
public static string LogFile;
public static string BaseDir;
public static void OnShutdown()
{
ShuttingDown = true;
}
public static void LogToFile(string text)
{
File.AppendAllTextAsync(text, LogFile);
}
public static void LogStdout(string text)
{
Console.Out.WriteAsync(text + Console.Out.NewLine);
}
public static void Main(string[] args)
{
string BaseDir = Directory.GetCurrentDirectory();
#if DEB_PACKAGE
ConfigReader.ConfigurationFileName = "/etc/hisp.conf"
LogFile = "/var/log/hisp.log"
Logger.SetCallback(LogToFile);
#else
Logger.SetCallback(LogStdout);
#endif
Entry.SetShutdownCallback(OnShutdown);
Entry.Start();
while (!ShuttingDown) { /* Allow asyncronous operations to happen. */ };
}
}
}

View file

@ -1,118 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace HISP.Properties {
using System;
/// <summary>
/// A strongly-typed resource public class, for looking up localized strings, etc.
/// </summary>
// This public class was auto-generated by the StronglyTypedResourceBuilder
// public class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this public class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource public class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to &lt;cross-domain-policy&gt;
/// &lt;allow-access-from domain=&quot;*&quot; to-ports=&quot;12321&quot; secure=&quot;false&quot;/&gt;
///&lt;/cross-domain-policy&gt;.
/// </summary>
internal static string DefaultCrossDomain {
get {
return ResourceManager.GetString("DefaultCrossDomain", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to # HorseIsleServer Default Configuration File
///
///# Ip address the server will bind to (default: 0.0.0.0 ALL INTERFACES)
///ip=0.0.0.0
///# Port the server will bind to (default: 12321)
///port=12321
///
///# MariaDB Database
///db_ip=127.0.0.1
///db_name=beta
///db_username=root
///db_password=test123
///db_port=3306
///
///# Map Data
///map=HI1.MAP
///
///# JSON Format Data
///
///gamedata=gamedata.json
///
///# Cross-Domain Policy File
///crossdomain=CrossDomainPolicy.xml
///
///# Red Text Stating &quot;Todays Note:&quot;
///motd=April 11, 2020. New breed, C [rest of string was truncated]&quot;;.
/// </summary>
internal static string DefaultServerProperties {
get {
return ResourceManager.GetString("DefaultServerProperties", resourceCulture);
}
}
/// <summary>
/// UNKNOWN COMMIT HASH
/// </summary>
internal static string GitCommit {
get {
return ResourceManager.GetString("GitCommit", resourceCulture);
}
}
}
}

View file

@ -1,230 +1,169 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>HISP</RootNamespace>
<LangVersion>10.0</LangVersion>
<Platforms>x64;x86;ARM;ARM64;AnyCPU</Platforms>
<Configurations>Debug;Windows;Linux;MacOS;Android</Configurations>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibHISP\LibHISP.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<NoWin32Manifest>true</NoWin32Manifest>
<ApplicationIcon>icon.ico</ApplicationIcon>
<StartupObject>HISP.Program</StartupObject>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<DebugType>embedded</DebugType>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AnalysisLevel>none</AnalysisLevel>
<EnableNETAnalyzers>False</EnableNETAnalyzers>
<Copyright>Public Domain, 2022</Copyright>
<PackageProjectUrl>https://islehorse.com</PackageProjectUrl>
<RepositoryUrl>https://github.com/islehorse/HISP</RepositoryUrl>
<RepositoryType>git</RepositoryType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x86'">
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x86</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x64'">
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM'">
<RuntimeIdentifier>win-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM64'">
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM'">
<RuntimeIdentifier>android-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM64'">
<RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x64'">
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM'">
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<PlatformTarget>ARM</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM64'">
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<PlatformTarget>ARM64</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x64'">
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM64'">
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='All|AnyCPU'">
<TargetFramework>net6.0</TargetFramework>
<RuntimeIdentifiers>win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<Optimize>True</Optimize>
<DefineConstants>OS_ALL;ARCH_ANYCPU</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<PlatformTarget>ARM64</PlatformTarget>
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG;ARCH_ARM64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG;ARCH_X86_64</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG;ARCH_X86</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x86'">
<Optimize>True</Optimize>
<DefineConstants>OS_MACOS;ARCH_X86</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x86'">
<Optimize>True</Optimize>
<DefineConstants>OS_LINUX;ARCH_X86</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|AnyCPU'">
<Optimize>False</Optimize>
<DefineConstants>OS_LINUX;ARCH_ANYCPU</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|AnyCPU'">
<Optimize>False</Optimize>
<DefineConstants>OS_WINDOWS;ARCH_ANYCPU</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|AnyCPU'">
<Optimize>False</Optimize>
<DefineConstants>OS_MACOS;ARCH_ANYCPU</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM'">
<Optimize>True</Optimize>
<DefineConstants>OS_MACOS;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
<Optimize>False</Optimize>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>HISP.Cli</RootNamespace>
<LangVersion>10.0</LangVersion>
<Platforms>x64;x86;ARM;ARM64;AnyCPU</Platforms>
<Configurations>Debug;Windows;Linux;MacOS;Android;iOS</Configurations>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibHISP\LibHISP.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<NoWin32Manifest>true</NoWin32Manifest>
<ApplicationIcon>icon.ico</ApplicationIcon>
<StartupObject>HISP.Cli.Program</StartupObject>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<DebugType>embedded</DebugType>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AnalysisLevel>none</AnalysisLevel>
<EnableNETAnalyzers>False</EnableNETAnalyzers>
<Copyright>Public Domain, 2022</Copyright>
<PackageProjectUrl>https://islehorse.com</PackageProjectUrl>
<RepositoryUrl>https://github.com/islehorse/HISP</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026;IL2026</NoWarn>
</PropertyGroup>
<PropertyGroup>
<TrimMode>partial</TrimMode>
<EnableTrimAnalyzer>false</EnableTrimAnalyzer>
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x86'">
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<Optimize>true</Optimize>
<Platforms>x86</Platforms>
<PlatformTarget>x86</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x64'">
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM'">
<RuntimeIdentifier>win-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM64'">
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM'">
<RuntimeIdentifier>android-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn></NoWarn>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM64'">
<RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x64'">
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM'">
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<PlatformTarget>ARM</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM64'">
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<PlatformTarget>ARM64</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x64'">
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM64'">
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM'">
<RuntimeIdentifier>ios-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM64'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='All|AnyCPU'">
<RuntimeIdentifiers>win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<Optimize>True</Optimize>
<DefineConstants>OS_ALL;ARCH_ANYCPU</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG</DefineConstants>
<DebugType>full</DebugType>
</PropertyGroup>
</Project>

197
HorseIsleServer/HISPd/Program.cs Executable file
View file

@ -0,0 +1,197 @@
using HISP.Cli.Properties;
using HISP.Server;
using System;
using System.IO;
using System.Threading;
namespace HISP.Cli
{
public static class Program
{
private static StreamWriter sw = null;
private static FileStream fs = null;
private static string logFile;
private static EventWaitHandle shutdownHandle = null;
public static bool ShuttingDown = false;
public static string BaseDir;
public static string LogFile
{
get
{
return logFile;
}
set
{
logFile = value;
if(sw != null)
{
sw.Flush();
sw.Dispose();
sw = null;
}
if(fs != null)
{
fs.Flush();
fs.Dispose();
fs = null;
}
fs = File.OpenWrite(logFile);
sw = new StreamWriter(fs);
}
}
public static void OnShutdown()
{
try
{
if (sw != null)
{
sw.Flush();
sw.Close();
sw.Dispose();
sw = null;
}
}
catch (Exception) { };
try
{
if (fs != null)
{
fs.Flush();
fs.Close();
fs.Dispose();
fs = null;
}
}
catch (Exception) { };
if(shutdownHandle != null)
shutdownHandle.Set();
}
private static string formatMessage(string type, string text, bool console)
{
#if OS_WINDOWS
string newline = "\r\n";
#else
string newline = "\n";
#endif
string msg = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + ": [" + type + "] ";
if (console && text.Length > (Console.WindowWidth - msg.Length) - newline.Length)
text = text.Substring(0, (Console.WindowWidth - msg.Length) - newline.Length);
return msg + text + newline;
}
public static void LogToFile(bool error, string type,string text)
{
sw.WriteLine(formatMessage(type, text, false));
if (error)
sw.Flush();
}
public static void LogStdout(bool error, string type, string text)
{
if (type == "CRASH")
LogToFile(error, type, text);
try
{
if (error)
Console.Error.WriteAsync(formatMessage(type, text, true));
else
Console.Out.WriteAsync(formatMessage(type, text, true));
}
catch (Exception) { };
}
public static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += ProcessQuitHandler;
string baseDir = Directory.GetCurrentDirectory();
Logger.SetCallback(LogStdout);
Entry.SetShutdownCallback(OnShutdown);
string hispConfVar = Environment.GetEnvironmentVariable("HISP_CONF_FILE");
string hispLogVar = Environment.GetEnvironmentVariable("HISP_LOG_FILE");
string hispBaseDir = Environment.GetEnvironmentVariable("HISP_BASE_DIR");
foreach (string arg in args)
{
switch (arg)
{
case "--install-service":
#if OS_LINUX
File.WriteAllBytes("/etc/systemd/system/HISP.service", Resources.HISPService);
LogStdout(false, "INFO", "Crreated Service! enable it with \"sudo systemctl enable HISP\"");
#else
LogStdout(true, "ERROR", "Installing as a service unsupported on this platform");
#endif
break;
default:
if (arg.Contains("="))
{
string[] argu = arg.Split("=");
if (argu.Length >= 2)
{
switch (argu[0])
{
case "--config-file":
ConfigReader.ConfigurationFileName = argu[1];
break;
case "--log-to-file":
LogFile = argu[1];
Logger.SetCallback(LogToFile);
break;
case "--base-directory":
baseDir = argu[1];
Directory.SetCurrentDirectory(baseDir);
break;
default:
continue;
}
}
}
break;
}
}
if (hispConfVar != null)
{
ConfigReader.ConfigurationFileName = hispConfVar;
}
if (hispLogVar != null)
{
LogFile = hispLogVar;
Logger.SetCallback(LogToFile);
}
else
{
LogFile = Path.Combine(baseDir, "crash.log");
}
if (hispBaseDir != null)
{
baseDir = hispBaseDir;
Directory.SetCurrentDirectory(baseDir);
}
Entry.Start();
shutdownHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
shutdownHandle.WaitOne();
}
private static void ProcessQuitHandler(object sender, EventArgs e)
{
GameServer.ShutdownServer("HISPd process quitting.");
}
}
}

View file

@ -1,35 +1,35 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HISP Noobs")]
[assembly: AssemblyDescription("Noob-Friendly One-Click Run HISP.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SilicaAndPina")]
[assembly: AssemblyProduct("HISP")]
[assembly: AssemblyCopyright("Public Domain © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("72adebe4-f5d5-41e1-90d1-3ee7706a8fe3")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.3.0.0")]
[assembly: AssemblyFileVersion("1.3.0.0")]
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HISPd")]
[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Li")]
[assembly: AssemblyProduct("HISP")]
[assembly: AssemblyCopyright("Public Domain <EFBFBD> 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("57264c6b-1461-41d6-9304-3890cf6c8390")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.8.73.0")]
[assembly: AssemblyFileVersion("1.8.73.0")]

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Android</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\Android\net6.0\android-arm\publish\</PublishDir>
<PublishDir>bin\arm\Android\net8.0\android-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>android-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<UseAppHost>True</UseAppHost>
@ -17,4 +17,4 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>
</Project>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Android</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\Android\net6.0\android-arm64\publish\</PublishDir>
<PublishDir>bin\arm64\Android\net8.0\android-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<UseAppHost>True</UseAppHost>
@ -17,4 +17,4 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>
</Project>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\Linux\net6.0\linux-x64\publish\</PublishDir>
<PublishDir>bin\x64\Linux\net8.0\linux-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\ARM\Linux\net6.0\linux-arm\publish\</PublishDir>
<PublishDir>bin\ARM\Linux\net8.0\linux-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\ARM64\Linux\net6.0\linux-arm64\publish\</PublishDir>
<PublishDir>bin\ARM64\Linux\net8.0\linux-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>MacOS</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\MacOS\net6.0\osx-x64\publish\</PublishDir>
<PublishDir>bin\x64\MacOS\net8.0\osx-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>MacOS</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\MacOS\net6.0\osx-arm64\publish\</PublishDir>
<PublishDir>bin\arm64\MacOS\net8.0\osx-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>x86</Platform>
<PublishDir>bin\x86\Windows\net6.0\win-x86\publish\</PublishDir>
<PublishDir>bin\x86\Windows\net8.0\win-x86\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\Windows\net6.0\win-x64\publish\</PublishDir>
<PublishDir>bin\x64\Windows\net8.0\win-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishTrimmed>True</PublishTrimmed>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\Windows\net6.0\windows-arm\publish\</PublishDir>
<PublishDir>bin\arm\Windows\net8.0\win-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\Windows\net6.0\windows-arm64\publish\</PublishDir>
<PublishDir>bin\arm64\Windows\net8.0\win-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>iOS</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\iOS\net8.0\ios-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>ios-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_IOS;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>iOS</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\iOS\net8.0\ios-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace HISP.Cli.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Cli.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Byte[].
/// </summary>
public static byte[] HISPService {
get {
object obj = ResourceManager.GetObject("HISPService", resourceCulture);
return ((byte[])(obj));
}
}
}
}

View file

@ -1,120 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="HISPService" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\HISP.service;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View file

@ -0,0 +1,2 @@
/etc/hisp/server.properties
/etc/hisp/CrossDomainPolicy.xml

View file

@ -0,0 +1,7 @@
Package: hisp
Version: 1.8.73
Depends: coreutils,systemd,mariadb-server,libsqlite3-dev,zlib1g-dev,libicu-dev,libkrb5-dev
Maintainer: Li
Homepage: https://islehorse.com
Architecture: amd64
Description: Open Source Implementation of the server for flash game "Horse Isle".

View file

@ -0,0 +1,4 @@
== Silica's Public Domain License ==
All source code and binaries, for the HISP Software are entered into the Public Domain.
However the software is provided "AS-IS" without any warrenty and i shall take no liability for anything that may happen by using this software.

View file

@ -0,0 +1,11 @@
#!/bin/sh
useradd -r horseisle
mkdir -p /etc/hisp
mkdir -p /var/log/hisp
chown -R horseisle:horseisle /etc/hisp
chown -R horseisle:horseisle /var/log/hisp
systemctl enable HISP.service
systemctl start HISP
echo "Make sure to edit /etc/hisp/server.properties!"

View file

@ -0,0 +1 @@
#!/bin/sh

View file

@ -0,0 +1,4 @@
#!/bin/sh
systemctl stop HISP
systemctl disable HISP
userdel horseisle

View file

@ -0,0 +1,32 @@
[Unit]
Description=HISP (Horse Isle Server Program)
After=syslog.target
After=network.target
Wants=mariadb.service
After=mariadb.service
[Service]
Type=simple
# Disable access to features HISP doesnt need
# (For security ...)
ProtectSystem=full
PrivateDevices=true
StandardError=journal+console
StandardOutput=journal+console
User=horseisle
Group=horseisle
WorkingDirectory=/etc/hisp
ExecStart=/usr/bin/HISPd
Environment=USER=horseisle HOME=/etc/hisp HISP_BASE_DIR=/etc/hisp HISP_CONF_FILE=/etc/hisp/server.properties HISP_LOG_FILE=/var/log/hisp/hisp.log
[Install]
WantedBy=multi-user.target
Alias=hisp.service

View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,169 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>HISP.Tests</RootNamespace>
<LangVersion>10.0</LangVersion>
<Platforms>x64;x86;ARM;ARM64;AnyCPU</Platforms>
<Configurations>Debug;Windows;Linux;MacOS;Android;iOS</Configurations>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibHISP\LibHISP.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource>
</ItemGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<NoWin32Manifest>true</NoWin32Manifest>
<ApplicationIcon>icon.ico</ApplicationIcon>
<StartupObject>HISP.Tests.Program</StartupObject>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<DebugType>embedded</DebugType>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AnalysisLevel>none</AnalysisLevel>
<EnableNETAnalyzers>False</EnableNETAnalyzers>
<Copyright>Public Domain, 2022</Copyright>
<PackageProjectUrl>https://islehorse.com</PackageProjectUrl>
<RepositoryUrl>https://github.com/islehorse/HISP</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026;IL2026</NoWarn>
</PropertyGroup>
<PropertyGroup>
<TrimMode>partial</TrimMode>
<EnableTrimAnalyzer>false</EnableTrimAnalyzer>
<TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x86'">
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<Optimize>true</Optimize>
<Platforms>x86</Platforms>
<PlatformTarget>x86</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x64'">
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM'">
<RuntimeIdentifier>win-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM64'">
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM'">
<RuntimeIdentifier>android-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel>
<NoWarn></NoWarn>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM64'">
<RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x64'">
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM'">
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<PlatformTarget>ARM</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM64'">
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<PlatformTarget>ARM64</PlatformTarget>
<Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x64'">
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM64'">
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM'">
<RuntimeIdentifier>ios-arm</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM64'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='All|AnyCPU'">
<RuntimeIdentifiers>win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<Optimize>True</Optimize>
<DefineConstants>OS_ALL;ARCH_ANYCPU</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG</DefineConstants>
<DebugType>full</DebugType>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,20 @@
using HISP.Server;
using HISP.Tests.UnitTests;
using System;
using System.Threading.Tasks;
namespace HISP.Tests
{
public static class Program
{
public static async Task Main(string[] args)
{
ServerStartTest.RunServerStartTest();
AuthenticationTest.RunAuthenticationTest();
await UserTest.RunUserTest();
PacketTest.RunPacketTest();
}
}
}

View file

@ -0,0 +1,35 @@
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HISPd")]
[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Li")]
[assembly: AssemblyProduct("HISP")]
[assembly: AssemblyCopyright("Public Domain <20> 2022")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("57264c6b-1461-41d6-9304-3890cf6c8390")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.8.30.0")]
[assembly: AssemblyFileVersion("1.8.30.0")]

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>Android</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\Android\net8.0\android-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>android-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<UseAppHost>True</UseAppHost>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>Android</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\Android\net8.0\android-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<UseAppHost>True</UseAppHost>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\Linux\net8.0\linux-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\ARM\Linux\net8.0\linux-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>Linux</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\ARM64\Linux\net8.0\linux-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>MacOS</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\MacOS\net8.0\osx-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>osx-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>MacOS</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\MacOS\net8.0\osx-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -2,18 +2,18 @@
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>x86</Platform>
<PublishDir>bin\x86\Windows\net6.0\win-x86\publish\</PublishDir>
<PublishDir>bin\x86\Windows\net8.0\win-x86\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0-windows</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<!-- <PublishTrimmed>True</PublishTrimmed> -->
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>x64</Platform>
<PublishDir>bin\x64\Windows\net6.0\win-x64\publish\</PublishDir>
<PublishDir>bin\x64\Windows\net8.0\win-x64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net6.0-windows</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishTrimmed>True</PublishTrimmed>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<!-- <PublishTrimmed>True</PublishTrimmed> -->
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\Windows\net8.0\win-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Windows</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\Windows\net8.0\win-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<PublishReadyToRun>True</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>iOS</Configuration>
<Platform>ARM</Platform>
<PublishDir>bin\arm\iOS\net8.0\ios-arm\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>ios-arm</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_IOS;ARCH_ARM</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0">
<PropertyGroup>
<Configuration>iOS</Configuration>
<Platform>ARM64</Platform>
<PublishDir>bin\arm64\iOS\net8.0\ios-arm64\publish\</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<SelfContained>True</SelfContained>
<PublishSingleFile>False</PublishSingleFile>
<PublishReadyToRun>False</PublishReadyToRun>
<PublishTrimmed>True</PublishTrimmed>
<DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,74 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace HISP.Tests.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Tests.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to {
/// &quot;2PlayerClose&quot;: &quot;UFgA&quot;,
/// &quot;BirdMap_OutsideMapTop&quot;: &quot;dgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ [rest of string was truncated]&quot;;.
/// </summary>
public static string PacketTestDataSet {
get {
return ResourceManager.GetString("PacketTestDataSet", resourceCulture);
}
}
}
}

View file

@ -1,120 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="PacketTestDataSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\PacketTestDataSet.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
</root>

View file

@ -1,6 +1,6 @@
{
"profiles": {
"N00BS": {
"HISPtests": {
"commandName": "Project"
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HISP.Tests
{
public class ResultLogger
{
public static void LogTestStatus(bool successful, string testname, string message)
{
if (successful)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Out.Write("[ " + testname + " ] ");
Console.ForegroundColor = ConsoleColor.Green;
Console.Out.WriteLine("* " + message + " *");
}
else
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Error.Write("[ " + testname + " ] ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine("* " + message + " *");
}
}
public static void LogTestResult(bool successful, string testname, string message, string expected)
{
if (successful)
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Out.Write("[ " + testname + " ] ");
Console.ForegroundColor = ConsoleColor.Green;
Console.Out.WriteLine("* " + message + " == " + expected + " *");
}
else
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Error.Write("[ " + testname + " ] ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine("* " + message + " != " + expected + " *");
}
}
}
}

View file

@ -0,0 +1,59 @@
using HISP.Security;
using HISP.Util;
using System.Collections.Generic;
namespace HISP.Tests.UnitTests
{
public class AuthenticationTest
{
private const string ALLOWED_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
public static bool Test(string testName, object value, object valueComp)
{
bool result = value.Equals(valueComp);
if (result)
ResultLogger.LogTestStatus(true, "AUTH_TEST " + testName, "Success.");
else
ResultLogger.LogTestResult(false, "AUTH_TEST " + testName, value.ToString(), valueComp.ToString());
return result;
}
public static bool RunAuthenticationTest()
{
List<bool> results = new List<bool>();
// Test Login Encrypt/Decrypt
for(int i = 0; i <= 100; i++)
{
string rngStr = Helper.RandomString(ALLOWED_CHARS);
string cipherText = Authentication.EncryptLogin(rngStr);
string plainText = Authentication.DecryptLogin(cipherText);
results.Add(Test("LoginEncryptDecrypt" + i.ToString(), plainText, rngStr));
}
string username = Helper.RandomString(ALLOWED_CHARS);
string password = Helper.RandomString(ALLOWED_CHARS);
string wrongPassword = Helper.RandomString(ALLOWED_CHARS);
string wrongUsername = Helper.RandomString(ALLOWED_CHARS);
Authentication.CreateAccount(username, password, "DEMIGIRL", true, true);
// Test Login function
results.Add(Test("CorrectUsernameAndPassword", Authentication.CheckPassword(username, password), true));
results.Add(Test("CorrectUsernameWrongPassword", Authentication.CheckPassword(username, wrongPassword), false));
results.Add(Test("WrongPasswordAndUsername", Authentication.CheckPassword(wrongUsername, wrongPassword), false));
results.Add(Test("WrongUsernameCorrectPassword", Authentication.CheckPassword(wrongUsername, password), false));
foreach (bool result in results)
if (!result)
return false;
return true;
}
}
}

View file

@ -0,0 +1,416 @@
//#define GENERATE
using HISP.Tests.Properties;
using HISP.Game.SwfModules;
using HISP.Game;
using HISP.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace HISP.Tests.UnitTests
{
public class PacketTest
{
private static Dictionary<string, string> knownGoodPackets = new Dictionary<string, string>();
public static bool Test(string name, byte[] packet)
{
#if GENERATE
knownGoodPackets.Add(name, Convert.ToBase64String(packet));
return true;
#else
string goodPacketStr = null;
knownGoodPackets.TryGetValue(name, out goodPacketStr);
byte[] goodPacket = Convert.FromBase64String(goodPacketStr);
if(!goodPacket.SequenceEqual(packet))
{
ResultLogger.LogTestResult(false, "PACKET_TEST "+name, BitConverter.ToString(packet).Replace("-", ""), goodPacket.ToString().Replace("-", ""));
return false;
}
else
{
ResultLogger.LogTestStatus(true, "PACKET_TEST " + name, "Success.");
return true;
}
#endif
}
public static bool RunPacketTest()
{
#if !GENERATE
JObject jobj = JsonConvert.DeserializeObject(Resources.PacketTestDataSet) as JObject;
knownGoodPackets = jobj.ToObject<Dictionary<string, string>>();
#endif
List<bool> results = new List<bool>();
results.Add(Test("2PlayerClose", PacketBuilder.Create2PlayerClose()));
// Test Map
results.Add(Test("BirdMap_OutsideMapTop", PacketBuilder.CreateBirdMap(-100, -800)));
results.Add(Test("BirdMap_OutsideMapBottom", PacketBuilder.CreateBirdMap(Map.Height+100, Map.Width+600)));
results.Add(Test("BirdMap_InsideMap", PacketBuilder.CreateBirdMap(100, 200)));
// Test Brickpoet
results.Add(Test("BrickPoetList", PacketBuilder.CreateBrickPoetList(Brickpoet.GetPoetryRoom(1))));
results.Add(Test("BrickPoetMove", PacketBuilder.CreateBrickPoetMove(Brickpoet.GetPoetryPeice(Brickpoet.GetPoetryRoom(1), 30))));
// Test Chat
results.Add(Test("ChatBottomLeft", PacketBuilder.CreateChat("Trans Rights", PacketBuilder.CHAT_BOTTOM_LEFT)));
results.Add(Test("ChatBottomRight", PacketBuilder.CreateChat("Are Human", PacketBuilder.CHAT_BOTTOM_RIGHT)));
results.Add(Test("ChatDmRight", PacketBuilder.CreateChat("Rights", PacketBuilder.CHAT_DM_RIGHT)));
results.Add(Test("ChatMotd", PacketBuilder.CreateMotd("Enbies are valid!")));
// Test Drawing Room
results.Add(Test("DrawingRoomUpdate", PacketBuilder.CreateDrawingUpdate("C959|64^67|66^73|68^79|69^87")));
// Test Dressup Room
results.Add(Test("DressupRoomPeiceLoad", PacketBuilder.CreateDressupRoomPeiceLoad(Dressup.GetDressupRoom(2).DressupPeices)));
results.Add(Test("DressupRoomPeiceMove", PacketBuilder.CreateDressupRoomPeiceMove(11, 14.4, 2.4, true)));
// Test SwfModule Forwarding
results.Add(Test("ForwardedSwfModule_516152", PacketBuilder.CreateForwardedSwfModule(new byte[] { 0x51, 0x61, 0x52 })));
results.Add(Test("ForwardedSwfModule_AF8D91C8", PacketBuilder.CreateForwardedSwfModule(new byte[] { 0xAF, 0x8D, 0x91, 0xC8 })));
// Test KeepAlive
results.Add(Test("KeepAlive", PacketBuilder.CreateKeepAlive()));
// Test KickMessage
results.Add(Test("KickMessage", PacketBuilder.CreateKickMessage("Transphobia")));
// Test Login
results.Add(Test("LoginSuccess", PacketBuilder.CreateLogin(true)));
results.Add(Test("LoginFail", PacketBuilder.CreateLogin(false)));
results.Add(Test("LoginFail_ReasonBanned", PacketBuilder.CreateLogin(false, "You are banned.")));
// Test Meta
results.Add(Test("CreateMeta", PacketBuilder.CreateMeta("^R1Trans Rights^X^Z")));
// Test Money, PlayerCount, Mail
results.Add(Test("MoneyPlayerCountAndMail", PacketBuilder.CreateMoneyPlayerCountAndMail(100, 1, 40)));
// Test Movement
results.Add(Test("Movement_DirectionUpMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionUpMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionUpMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionUpMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionUpMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionUpMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionDownMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionDownMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionDownMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionDownMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionDownMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionDownMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionLeftMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionLeftMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionLeftMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionLeftMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionLeftMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionLeftMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionRightMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionRightMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionRightMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionRightMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionRightMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionRightMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionTeleportMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionTeleportMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionTeleportMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionNoneMoveUpInsideMapWalk", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionNoneMoveDownInsideMapWalk", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionNoneMoveLeftInsideMapWalk", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionNoneMoveRightInsideMapWalk", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionNoneMoveUpdateInsideMapWalk", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionNoneMoveEscapeInsideMapWalk", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, true)));
// walk = false
results.Add(Test("Movement_DirectionUpMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionUpMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionUpMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionUpMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionUpMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionUpMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionDownMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionDownMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionDownMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionDownMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionDownMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionDownMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionLeftMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionLeftMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionLeftMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionLeftMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionLeftMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionLeftMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionRightMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionRightMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionRightMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionRightMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionRightMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionRightMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionTeleportMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionTeleportMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionTeleportMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionNoneMoveUpInsideMap", PacketBuilder.CreateMovement(100, 131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionNoneMoveDownInsideMap", PacketBuilder.CreateMovement(123, 170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionNoneMoveLeftInsideMap", PacketBuilder.CreateMovement(210, 156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionNoneMoveRightInsideMap", PacketBuilder.CreateMovement(51, 53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionNoneMoveUpdateInsideMap", PacketBuilder.CreateMovement(90, 150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionNoneMoveEscapeInsideMap", PacketBuilder.CreateMovement(87, 43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, false)));
/*
* Test Outside Map (From Top)
*/
results.Add(Test("Movement_DirectionUpMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionUpMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionUpMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionUpMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionUpMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionUpMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionDownMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionDownMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionDownMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionDownMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionDownMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionDownMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionLeftMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionLeftMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionLeftMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionLeftMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionLeftMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionLeftMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionRightMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionRightMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionRightMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionRightMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionRightMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionRightMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionTeleportMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionTeleportMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionTeleportMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionNoneMoveUpOutsideMapTopWalk", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionNoneMoveDownOutsideMapTopWalk", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionNoneMoveLeftOutsideMapTopWalk", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionNoneMoveRightOutsideMapTopWalk", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionNoneMoveUpdateOutsideMapTopWalk", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionNoneMoveEscapeOutsideMapTopWalk", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, true)));
// walk = false
results.Add(Test("Movement_DirectionUpMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionUpMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionUpMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionUpMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionUpMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionUpMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionDownMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionDownMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionDownMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionDownMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionDownMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionDownMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionLeftMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionLeftMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionLeftMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionLeftMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionLeftMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionLeftMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionRightMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionRightMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionRightMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionRightMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionRightMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionRightMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionTeleportMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionTeleportMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionTeleportMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionNoneMoveUpOutsideMapTop", PacketBuilder.CreateMovement(-100, -131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionNoneMoveDownOutsideMapTop", PacketBuilder.CreateMovement(-123, -170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionNoneMoveLeftOutsideMapTop", PacketBuilder.CreateMovement(-210, -156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionNoneMoveRightOutsideMapTop", PacketBuilder.CreateMovement(-51, -53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionNoneMoveUpdateOutsideMapTop", PacketBuilder.CreateMovement(-90, -150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionNoneMoveEscapeOutsideMapTop", PacketBuilder.CreateMovement(-87, -43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, false)));
/*
* Test Outside Map (From Bottom)
*/
results.Add(Test("Movement_DirectionUpMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionUpMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionUpMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionUpMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionUpMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionUpMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionDownMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionDownMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionDownMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionDownMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionDownMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionDownMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionLeftMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionLeftMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionLeftMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionLeftMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionLeftMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionLeftMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionRightMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionRightMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionRightMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionRightMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionRightMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionRightMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionTeleportMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionTeleportMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionTeleportMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, true)));
results.Add(Test("Movement_DirectionNoneMoveUpOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, true)));
results.Add(Test("Movement_DirectionNoneMoveDownOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, true)));
results.Add(Test("Movement_DirectionNoneMoveLeftOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, true)));
results.Add(Test("Movement_DirectionNoneMoveRightOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, true)));
results.Add(Test("Movement_DirectionNoneMoveUpdateOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, true)));
results.Add(Test("Movement_DirectionNoneMoveEscapeOutsideMapBottomWalk", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, true)));
// walk = false
results.Add(Test("Movement_DirectionUpMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionUpMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionUpMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionUpMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionUpMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionUpMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_UP, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionDownMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionDownMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionDownMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionDownMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionDownMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionDownMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_DOWN, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionLeftMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionLeftMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionLeftMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionLeftMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionLeftMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionLeftMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_LEFT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionRightMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionRightMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionRightMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionRightMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionRightMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionRightMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_RIGHT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionTeleportMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionTeleportMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionTeleportMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionTeleportMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionTeleportMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_TELEPORT, PacketBuilder.MOVE_ESCAPE, false)));
results.Add(Test("Movement_DirectionNoneMoveUpOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+100, Map.Height+131, 10, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UP, false)));
results.Add(Test("Movement_DirectionNoneMoveDownOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+123, Map.Height+170, 12, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_DOWN, false)));
results.Add(Test("Movement_DirectionNoneMoveLeftOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+210, Map.Height+156, 14, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_LEFT, false)));
results.Add(Test("Movement_DirectionNoneMoveRightOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+51, Map.Height+53, 16, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_RIGHT, false)));
results.Add(Test("Movement_DirectionNoneMoveUpdateOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+90, Map.Height+150, 1, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_UPDATE, false)));
results.Add(Test("Movement_DirectionNoneMoveEscapeOutsideMapBottom", PacketBuilder.CreateMovement(Map.Width+87, Map.Height+43, 7, PacketBuilder.DIRECTION_NONE, PacketBuilder.MOVE_ESCAPE, false)));
// Test Place Data Packet
results.Add(Test("PlaceData", PacketBuilder.CreatePlaceData(World.Isles.ToArray(), World.Towns.ToArray(), World.Areas.ToArray())));
// Test Player Update
results.Add(Test("PlayerInfoUpdateOrCreate", PacketBuilder.CreatePlayerInfoUpdateOrCreate(100, 200, PacketBuilder.DIRECTION_UP, 10, "Li")));
results.Add(Test("PlayerLeave", PacketBuilder.CreatePlayerLeave("Li")));
// Test PlaySound Packet
results.Add(Test("PlaySound", PacketBuilder.CreatePlaySound("PM")));
// Test Profile Page
results.Add(Test("ProfilePage", PacketBuilder.CreateProfilePage("TRANS RIGHTS ARE HUMAN RIGHTS")));
// Test SecCode
results.Add(Test("SecCode_AdminMod", PacketBuilder.CreateSecCode(new byte[] { 0x31, 0x52, 0x22 }, 0x34, true, true)));
results.Add(Test("SecCode_Admin", PacketBuilder.CreateSecCode(new byte[] { 0x54, 0x32, 0x24 }, 0x34, true, false)));
results.Add(Test("SecCode_Mod", PacketBuilder.CreateSecCode(new byte[] { 0x22, 0x12, 0x12 }, 0x34, false, true)));
results.Add(Test("SecCode_User", PacketBuilder.CreateSecCode(new byte[] { 0x12, 0x32, 0x14 }, 0x34, false, false)));
// Test SwfModule
results.Add(Test("SwfModule_Force", PacketBuilder.CreateSwfModule("test.swf", PacketBuilder.PACKET_SWF_MODULE_FORCE)));
results.Add(Test("SwfModule_Gentle", PacketBuilder.CreateSwfModule("test.swf", PacketBuilder.PACKET_SWF_MODULE_GENTLE)));
results.Add(Test("SwfModule_Cutscene", PacketBuilder.CreateSwfModule("test.swf", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE)));
// Test TileClickInfo
results.Add(Test("TileClickInfo", PacketBuilder.CreateTileClickInfo("Trans Rights Are Human Rights")));
// Test TileOverlayFlags
//results.Add(Test("TileOverlayFlags", PacketBuilder.CreateTileOverlayFlags(new int[] { 1, 2, 3, 1, 2, 3, 1, 2, 3 })));
// Test TimeAndWeatherUpdate
results.Add(Test("TimeAndWeatherUpdate", PacketBuilder.CreateTimeAndWeatherUpdate(10, 4, 541, "SUNNY")));
results.Add(Test("WeatherUpdate", PacketBuilder.CreateWeatherUpdate("CLOUD")));
#if GENERATE
string resultsStr = JsonConvert.SerializeObject(knownGoodPackets, Formatting.Indented);
File.WriteAllText("test.json", resultsStr);
#endif
foreach(bool result in results)
{
if (result == false)
return false;
}
return true;
}
}
}

View file

@ -0,0 +1,40 @@
using HISP.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HISP.Tests.UnitTests
{
public class ServerStartTest
{
public static void OnShutdown()
{
ResultLogger.LogTestStatus(false, "START_SERVER", "OnShutdown called");
}
public static void LogStdout(bool error, string type, string text)
{
if (type == "CRASH")
ResultLogger.LogTestStatus(false, "START_SERVER", text);
}
public static bool RunServerStartTest()
{
try
{
Logger.SetCallback(LogStdout);
Entry.SetShutdownCallback(OnShutdown);
Entry.Start();
ResultLogger.LogTestStatus(true, "START_SERVER_TEST", "Success.");
return true;
}
catch (Exception e)
{
ResultLogger.LogTestStatus(false, "START_SERVER_TEST", e.Message);
return false;
}
}
}
}

View file

@ -0,0 +1,248 @@
using HISP.Game;
using HISP.Game.Horse;
using HISP.Game.Items;
using HISP.Player;
using HISP.Security;
using HISP.Server;
using HISP.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace HISP.Tests.UnitTests
{
public class UserTest
{
private const string ALLOWED_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
private static byte[] createLoginPacket(string username, string password)
{
byte[] loginInformation = Encoding.UTF8.GetBytes("91|" + Authentication.EncryptLogin(username) + "|" + Authentication.EncryptLogin(password) + "|");
byte[] loginPacket = new byte[1 * 3 + loginInformation.Length];
loginPacket[0] = PacketBuilder.PACKET_LOGIN;
loginPacket[loginPacket.Length - 2] = PacketBuilder.PACKET_CLIENT_TERMINATOR;
loginPacket[loginPacket.Length - 1] = 0;
Array.ConstrainedCopy(loginInformation, 0, loginPacket, 1, loginInformation.Length);
return loginPacket;
}
private static byte[] createUserInfoPacket()
{
byte[] packet = new byte[] { PacketBuilder.PACKET_LOGIN, PacketBuilder.PACKET_CLIENT_TERMINATOR, 0};
return packet;
}
public static bool Test(string testName, object value, object valueComp)
{
bool result = value.Equals(valueComp);
if (result)
ResultLogger.LogTestStatus(true, "USER_TEST "+testName, "Success.");
else
ResultLogger.LogTestResult(false, "USER_TEST " + testName, value.ToString(), valueComp.ToString());
return result;
}
private static async Task<byte[]> receiveAsync(Socket s)
{
byte[] buffer = new byte[s.Available];
await s.ReceiveAsync(buffer);
return buffer;
}
public static async Task<bool> RunUserTest()
{
List<bool> results = new List<bool>();
string username = Helper.RandomString(ALLOWED_CHARS);
string password = Helper.RandomString(ALLOWED_CHARS);
int userId = Authentication.CreateAccount(username, password, "GENDERFLUID", true, true);
// Connect to running server via TCP;
using (Socket hispServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
// This is already a pretty good unit test; confirming we can actually login to the game,
try
{
await hispServer.ConnectAsync("127.0.0.1", ConfigReader.Port);
// Login to the game;
await hispServer.SendAsync(createLoginPacket(username, password));
await receiveAsync(hispServer);
await hispServer.SendAsync(createUserInfoPacket());
await receiveAsync(hispServer);
ResultLogger.LogTestStatus(true, "GAME_LOGIN_TEST", "Success.");
}
catch (Exception e)
{
ResultLogger.LogTestStatus(false, "GAME_LOGIN_TEST", e.Message);
return false;
}
// While were here; lets do a bunch of tests on HISPs "User" object.
User user = GameServer.GetUserById(userId);
// Test Maximums
user.SetMoney(Int32.MaxValue);
user.AddMoney(1000);
results.Add(Test("MoneyOverflow", user.Money, Int32.MaxValue));
user.Hunger = 8000;
results.Add(Test("HungerMaximumEnforcement", user.Hunger, 1000));
user.Hunger = -8000;
results.Add(Test("HungerMinimumEnforcement", user.Hunger, 0));
user.Thirst = 8000;
results.Add(Test("ThirstMaximumEnforcement", user.Thirst, 1000));
user.Thirst = -8000;
results.Add(Test("ThirstMinimumEnforcement", user.Thirst, 0));
user.Tiredness = 8000;
results.Add(Test("TirednessMaximumEnforcement", user.Tiredness, 1000));
user.Tiredness = -8000;
results.Add(Test("TirednessMinimumEnforcement", user.Tiredness, 0));
user.BankMoney = 9999999999.9999;
user.BankMoney += 1000.0;
results.Add(Test("BankMoneyMaximumEnforcement", user.BankMoney, 9999999999.9999));
user.BankInterest = 9999999999.9999;
user.BankInterest += 1000.0;
results.Add(Test("BankInterestMaximumEnforcement", user.BankInterest, 9999999999.9999));
// Test Gender Setting
user.Gender = "GENDERFLUID";
results.Add(Test("GenderedPronounsTestTheir", user.GetPronouns(true), Messages.PronounNeutralTheir));
results.Add(Test("GenderedPronounsTestThey", user.GetPronouns(false), Messages.PronounNeutralThey));
user.Gender = "MALE";
results.Add(Test("GenderedPronounsTestHis", user.GetPronouns(true), Messages.PronounMaleHis));
results.Add(Test("GenderedPronounsTestHe", user.GetPronouns(false), Messages.PronounMaleHe));
user.Gender = "FEMALE";
results.Add(Test("GenderedPronounsTestHer", user.GetPronouns(true), Messages.PronounFemaleHer));
results.Add(Test("GenderedPronounsTestShe", user.GetPronouns(false), Messages.PronounFemaleShe));
// Test icon
results.Add(Test("IconTestAdmin", user.GetPlayerListIcon(), Messages.AdminIcon));
user.Administrator = false;
results.Add(Test("IconTestModerator", user.GetPlayerListIcon(), Messages.ModeratorIcon));
user.Moderator = false;
results.Add(Test("IconTestNew", user.GetPlayerListIcon(), Messages.NewUserIcon));
user.NewPlayer = false;
results.Add(Test("IconTestNone", user.GetPlayerListIcon(), -1));
user.SubscribedUntil = DateTime.UtcNow.AddMonths(1);
user.Subscribed = true;
results.Add(Test("IconTest1Month", user.GetPlayerListIcon(), Messages.MonthSubscriptionIcon));
user.SubscribedUntil = DateTime.UtcNow.AddMonths(3);
results.Add(Test("IconTest3Month", user.GetPlayerListIcon(), Messages.ThreeMonthSubscripitionIcon));
user.SubscribedUntil = DateTime.UtcNow.AddYears(1).AddMonths(3);
results.Add(Test("IconTest1Year", user.GetPlayerListIcon(), Messages.YearSubscriptionIcon));
// SecCode
user.SecCodeSeeds[0] = 0x34;
user.SecCodeSeeds[1] = 0x39;
user.SecCodeSeeds[2] = 0x2a;
user.SecCodeInc = 0x3e;
byte[] expectedSecCodeResult = { 0x55, 0x3C, 0x4B, 0x58 };
byte[] gotSecCode = user.GenerateSecCode();
results.Add(Test("GenerateSecCode", gotSecCode.SequenceEqual(expectedSecCodeResult), true));
// Check max horses count
user.Subscribed = false;
results.Add(Test("UnsubbedMaxHorses", user.MaxHorses, 7));
user.Subscribed = true;
results.Add(Test("SubbedMaxHorses", user.MaxHorses, 11));
HorseInstance horse = new HorseInstance(HorseInfo.GetBreedById(170));
horse.BasicStats.Thirst = 0;
horse.BasicStats.Hunger = 0;
int horseId = horse.RandomId;
user.HorseInventory.AddHorse(horse);
/*
* Test Ranches
*/
// Give player ranch id 10
Ranch.GetRanchById(37).OwnerId = user.Id;
// Check ranch is now owned by that player, and propagates to user object.
results.Add(Test("GiveRanchTest", user.OwnedRanch.Id, 37));
results.Add(Test("HaveDorothyShoes", user.Inventory.HasItemId(Item.DorothyShoes), true));
// Ranch upgrade test
foreach(Ranch.RanchUpgrade upgrade in Ranch.RanchUpgrade.RanchUpgrades)
{
int id = upgrade.Id;
user.OwnedRanch.UpgradedLevel = id;
}
// Test swf
results.Add(Test("RanchSwfMine", user.OwnedRanch.GetSwf(true), "ranchviewer.swf?H=10&B1=11&B2=&B3=&B4=&B5=&B6=&B7=&B8=&B9=&B10=&B11=&B12=&B13=&B14=&B15=&B16=&MINE=1"));
results.Add(Test("RanchSwf", user.OwnedRanch.GetSwf(false), "ranchviewer.swf?H=10&B1=11&B2=&B3=&B4=&B5=&B6=&B7=&B8=&B9=&B10=&B11=&B12=&B13=&B14=&B15=&B16="));
// Test Ranch Building Functionality
// Test Barn
user.OwnedRanch.SetBuilding(0, Ranch.RanchBuilding.GetRanchBuildingById(1)); // Barn
results.Add(Test("RanchBarnMaxHorses", user.MaxHorses, 11 + 4));
// Test Water Well
user.OwnedRanch.SetBuilding(0, Ranch.RanchBuilding.GetRanchBuildingById(2)); // Water Well
user.Teleport(user.OwnedRanch.X, user.OwnedRanch.Y);
results.Add(Test("RanchWaterWellWatering", user.HorseInventory.GetHorseById(horseId).BasicStats.Thirst, 1000));
// Test Grain Silo
user.OwnedRanch.SetBuilding(0, Ranch.RanchBuilding.GetRanchBuildingById(3)); // Grain Silo
user.Teleport(user.OwnedRanch.X, user.OwnedRanch.Y);
results.Add(Test("RanchGrainSiloFeeding", user.HorseInventory.GetHorseById(horseId).BasicStats.Hunger, 1000));
// Set building id 0 to a big barn
user.OwnedRanch.SetBuilding(0, Ranch.RanchBuilding.GetRanchBuildingById(10)); // Big Barn
results.Add(Test("RanchBigBarnMaxHorses", user.MaxHorses, 11 + 8));
// Set building id 0 to a gold barn
user.OwnedRanch.SetBuilding(0, Ranch.RanchBuilding.GetRanchBuildingById(11)); // Gold Barn
results.Add(Test("RanchGoldBarnMaxHorses", user.MaxHorses, 11 + 12));
foreach (bool result in results)
if (!result)
return false;
return true;
}
}
}
}

View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -1,956 +0,0 @@
"DeployProject"
{
"VSVersion" = "3:800"
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
"IsWebType" = "8:FALSE"
"ProjectName" = "8:Installer"
"LanguageId" = "3:1033"
"CodePage" = "3:1252"
"UILanguageId" = "3:1033"
"SccProjectName" = "8:"
"SccLocalPath" = "8:"
"SccAuxPath" = "8:"
"SccProvider" = "8:"
"Hierarchy"
{
"Entry"
{
"MsmKey" = "8:_0D21C5FF039F49C088EB634A33FC411B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1564B665DC1B4C84B3B06154ED218D5B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1A4693530D8B4CBBB2A5EC31D8340F0F"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_28A4D7E632204CABA7FE740BEFC91DEF"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_5677B9A3E24F4F6C967D0E86BC2E3E74"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_611F30D5162547E3BA321F145FD40AC5"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_98F70300FEAC42DE808CBC3BF0A4EDEE"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_9B65B8D30BEB46508FDC1142245936E3"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_A323663C87734476B43AED93BCEE5E78"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
}
"Configurations"
{
"Windows"
{
"DisplayName" = "8:Windows"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
"OutputFilename" = "8:Windows\\HISP-N00BS-INSTALLER.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:2"
"SignOutput" = "11:FALSE"
"CertificateFile" = "8:"
"PrivateKeyFile" = "8:"
"TimeStampServer" = "8:"
"InstallerBootstrapper" = "3:2"
"BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
{
"Enabled" = "11:TRUE"
"PromptEnabled" = "11:TRUE"
"PrerequisitesLocation" = "2:1"
"Url" = "8:"
"ComponentsUrl" = "8:"
"Items"
{
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2"
{
"Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)"
"ProductCode" = "8:.NETFramework,Version=v4.7.2"
}
}
}
}
}
"Deployable"
{
"CustomAction"
{
}
"DefaultFeature"
{
"Name" = "8:DefaultFeature"
"Title" = "8:"
"Description" = "8:"
}
"ExternalPersistence"
{
"LaunchCondition"
{
"{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_5202EFE80DEE4723BF89431D6D801282"
{
"Name" = "8:.NET Core"
"Message" = "8:[VSDNETCOREMSG]"
"AllowLaterVersions" = "11:FALSE"
"InstallUrl" = "8:https://dotnet.microsoft.com/download/dotnet-core/[NetCoreVerMajorDotMinor]"
"IsNETCore" = "11:TRUE"
"Architecture" = "2:0"
"Runtime" = "2:0"
}
}
}
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D21C5FF039F49C088EB634A33FC411B"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\flash.dll"
"TargetName" = "8:flash.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1564B665DC1B4C84B3B06154ED218D5B"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\HISP-N00BS.exe"
"TargetName" = "8:HISP-N00BS.exe"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A4693530D8B4CBBB2A5EC31D8340F0F"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\PresentationNative_cor3.dll"
"TargetName" = "8:PresentationNative_cor3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28A4D7E632204CABA7FE740BEFC91DEF"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\vcruntime140_cor3.dll"
"TargetName" = "8:vcruntime140_cor3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5677B9A3E24F4F6C967D0E86BC2E3E74"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\PenImc_cor3.dll"
"TargetName" = "8:PenImc_cor3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_611F30D5162547E3BA321F145FD40AC5"
{
"SourcePath" = "8:..\\N00BS\\icon.ico"
"TargetName" = "8:icon.ico"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_98F70300FEAC42DE808CBC3BF0A4EDEE"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\e_sqlite3.dll"
"TargetName" = "8:e_sqlite3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9B65B8D30BEB46508FDC1142245936E3"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\wpfgfx_cor3.dll"
"TargetName" = "8:wpfgfx_cor3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A323663C87734476B43AED93BCEE5E78"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\D3DCompiler_47_cor3.dll"
"TargetName" = "8:D3DCompiler_47_cor3.dll"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:VersionNT64"
"Transitive" = "11:TRUE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
}
"FileType"
{
}
"Folder"
{
"{1525181F-901A-416C-8A58-119130FE478E}:_2BED5EC5191147F4815904695DFB5319"
{
"Name" = "8:#1916"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:DesktopFolder"
"Folders"
{
}
}
"{1525181F-901A-416C-8A58-119130FE478E}:_3B89F894B58B4F149DD0DBE5EC931BA2"
{
"Name" = "8:#1919"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:ProgramMenuFolder"
"Folders"
{
}
}
"{3C67513D-01DD-4637-8A68-80971EB9504F}:_E3419B32123541589220537FB1154298"
{
"DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
"Name" = "8:#1925"
"AlwaysCreate" = "11:FALSE"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Property" = "8:TARGETDIR"
"Folders"
{
}
}
}
"LaunchCondition"
{
}
"Locator"
{
}
"MsiBootstrapper"
{
"LangId" = "3:1033"
"RequiresElevation" = "11:FALSE"
}
"Product"
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:HISP-N00BS"
"ProductCode" = "8:{60BA2AF1-4913-4A37-9280-093E8E7DAADE}"
"PackageCode" = "8:{88A7C3C4-CB07-4D31-ADA6-1FA3B9FFAB19}"
"UpgradeCode" = "8:{FAD2FB5F-7B7C-4293-BF2D-09384146449E}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:FALSE"
"InstallAllUsers" = "11:TRUE"
"ProductVersion" = "8:1.3.0"
"Manufacturer" = "8:IsleHorse"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
"Title" = "8:HISP N00BS INSTALLER"
"Subject" = "8:"
"ARPCONTACT" = "8:SilicaAndPina"
"Keywords" = "8:"
"ARPCOMMENTS" = "8:Horse Isle Server Emulator (N00BS Package)"
"ARPURLINFOABOUT" = "8:islehorse.com"
"ARPPRODUCTICON" = "8:_611F30D5162547E3BA321F145FD40AC5"
"ARPIconIndex" = "3:0"
"SearchPath" = "8:"
"UseSystemSearchPath" = "11:TRUE"
"TargetPlatform" = "3:0"
"PreBuildEvent" = "8:"
"PostBuildEvent" = "8:"
"RunPostBuildEvent" = "3:0"
}
"Registry"
{
"HKLM"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_64C38CA6346B449692BF6B4AA592D702"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AC38AB208C084DF4BA565F75F0BE4432"
{
"Name" = "8:[Manufacturer]"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCU"
{
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A730B92ABA6442DA8A8DE8F8B12B006C"
{
"Name" = "8:Software"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1DE78BC22BE74532BD96E9D0C76B8456"
{
"Name" = "8:[Manufacturer]"
"Condition" = "8:"
"AlwaysCreate" = "11:FALSE"
"DeleteAtUninstall" = "11:FALSE"
"Transitive" = "11:FALSE"
"Keys"
{
}
"Values"
{
}
}
}
"Values"
{
}
}
}
}
"HKCR"
{
"Keys"
{
}
}
"HKU"
{
"Keys"
{
}
}
"HKPU"
{
"Keys"
{
}
}
}
"Sequences"
{
}
"Shortcut"
{
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_0EE8B0868FFB48F9A5AF0E106F29270F"
{
"Name" = "8:HISP-N00BS"
"Arguments" = "8:"
"Description" = "8:"
"ShowCmd" = "3:1"
"IconIndex" = "3:0"
"Transitive" = "11:FALSE"
"Target" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B"
"Folder" = "8:_2BED5EC5191147F4815904695DFB5319"
"WorkingFolder" = "8:_E3419B32123541589220537FB1154298"
"Icon" = "8:_611F30D5162547E3BA321F145FD40AC5"
"Feature" = "8:"
}
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_8C2FF2BBC6C5459CB7C3C3D7563A6B24"
{
"Name" = "8:HISP-N00BS"
"Arguments" = "8:"
"Description" = "8:"
"ShowCmd" = "3:1"
"IconIndex" = "3:0"
"Transitive" = "11:FALSE"
"Target" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B"
"Folder" = "8:_3B89F894B58B4F149DD0DBE5EC931BA2"
"WorkingFolder" = "8:_E3419B32123541589220537FB1154298"
"Icon" = "8:_611F30D5162547E3BA321F145FD40AC5"
"Feature" = "8:"
}
}
"UserInterface"
{
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_07CE736F4DA7413AAEC990B2E3F8E5E6"
{
"Name" = "8:#1900"
"Sequence" = "3:2"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_090F0EE34745459F9686C050B2C11242"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3DAE3EEA3A0D49A2BF44023DFA46DD1F"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7E134743D03E4D2BAB1A4EFBBCFFB85A"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_1005C5ECDBA6463C8F26D022ADF2B15B"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1B5CC2AD42AB4B8A871994A5BDA4AF2E"
{
"Name" = "8:#1901"
"Sequence" = "3:1"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_13902A19FA564BEB9B78FA7710553B5D"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2D7F530E4D9144F7A17E26C070A09A38"
{
"Name" = "8:#1901"
"Sequence" = "3:2"
"Attributes" = "3:2"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_669ADC1422094131A197F6A6C9DBFF21"
{
"Sequence" = "3:100"
"DisplayName" = "8:Progress"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"ShowProgress"
{
"Name" = "8:ShowProgress"
"DisplayName" = "8:#1009"
"Description" = "8:#1109"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_34E02BE2018C46BBBBBFAD4ED87A477C"
{
"UseDynamicProperties" = "11:FALSE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6CBD4A41E51D4CA3B91CA1BDB8AC6624"
{
"Name" = "8:#1902"
"Sequence" = "3:1"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_01032F7BADD4495B95310569E9419B49"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"UpdateText"
{
"Name" = "8:UpdateText"
"DisplayName" = "8:#1058"
"Description" = "8:#1158"
"Type" = "3:15"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1258"
"DefaultValue" = "8:#1258"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A4FECCFE0E0A48748DB3E442DAEC4BDD"
{
"Name" = "8:#1902"
"Sequence" = "3:2"
"Attributes" = "3:3"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4DACC92277D2418AA749B1DED80D4118"
{
"Sequence" = "3:100"
"DisplayName" = "8:Finished"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_EEB71AB6095340A5925C86FF3F54F56B"
{
"Name" = "8:#1900"
"Sequence" = "3:1"
"Attributes" = "3:1"
"Dialogs"
{
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_812C2FA3E5F945D2B42F27AE98132D86"
{
"Sequence" = "3:300"
"DisplayName" = "8:Confirm Installation"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_82627D6985A9465F9963EA555AE205F1"
{
"Sequence" = "3:100"
"DisplayName" = "8:Welcome"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"CopyrightWarning"
{
"Name" = "8:CopyrightWarning"
"DisplayName" = "8:#1002"
"Description" = "8:#1102"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1202"
"DefaultValue" = "8:#1202"
"UsePlugInResources" = "11:TRUE"
}
"Welcome"
{
"Name" = "8:Welcome"
"DisplayName" = "8:#1003"
"Description" = "8:#1103"
"Type" = "3:3"
"ContextData" = "8:"
"Attributes" = "3:0"
"Setting" = "3:1"
"Value" = "8:#1203"
"DefaultValue" = "8:#1203"
"UsePlugInResources" = "11:TRUE"
}
}
}
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FF55283F2CDE4642916803852163C654"
{
"Sequence" = "3:200"
"DisplayName" = "8:Installation Folder"
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:FALSE"
"SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
"Properties"
{
"BannerBitmap"
{
"Name" = "8:BannerBitmap"
"DisplayName" = "8:#1001"
"Description" = "8:#1101"
"Type" = "3:8"
"ContextData" = "8:Bitmap"
"Attributes" = "3:4"
"Setting" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
"InstallAllUsersVisible"
{
"Name" = "8:InstallAllUsersVisible"
"DisplayName" = "8:#1059"
"Description" = "8:#1159"
"Type" = "3:5"
"ContextData" = "8:1;True=1;False=0"
"Attributes" = "3:0"
"Setting" = "3:0"
"Value" = "3:1"
"DefaultValue" = "3:1"
"UsePlugInResources" = "11:TRUE"
}
}
}
}
}
}
"MergeModule"
{
}
"ProjectOutput"
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_DBECA6BD50F344FFAF7D3BC0A6A35A2B"
{
"SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\HISP-N00BS.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_E3419B32123541589220537FB1154298"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
"ProjectOutputGroupRegister" = "3:1"
"OutputConfiguration" = "8:"
"OutputGroupCanonicalName" = "8:PublishItems"
"OutputProjectGuid" = "8:{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}"
"ShowKeyOutput" = "11:TRUE"
"PublishProfilePath" = "8:Properties\\PublishProfiles\\Win64.pubxml"
"ExcludeFilters"
{
}
}
}
}
}

3
HorseIsleServer/LibHISP/Game/AbuseReport.cs Normal file → Executable file
View file

@ -1,4 +1,5 @@
using System.Collections.Generic;
using HISP.Server;
using System.Collections.Generic;
namespace HISP.Game
{
public class AbuseReport

24
HorseIsleServer/LibHISP/Game/Arena.cs Normal file → Executable file
View file

@ -2,7 +2,7 @@
using HISP.Player;
using HISP.Security;
using HISP.Server;
using HISP.Util;
using System;
using System.Collections.Generic;
using System.Linq;
@ -14,7 +14,7 @@ namespace HISP.Game
{
private static List<Arena> arenas = new List<Arena>();
private List<ArenaEntry> entries;
private ThreadSafeList<ArenaEntry> entries;
private Timer arenaTimeout;
public static int[] ExpRewards;
public int Id;
@ -59,7 +59,7 @@ namespace HISP.Game
Slots = slots;
Timeout = timeOut;
arenas.Add(this);
entries = new List<ArenaEntry>();
entries = new ThreadSafeList<ArenaEntry>();
}
public bool HaveAllPlayersCompleted()
@ -201,10 +201,10 @@ namespace HISP.Game
break;
}
byte[] startingUpEventPacket = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT);
byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(swf, PacketBuilder.PACKET_SWF_CUTSCENE);
byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swf, PacketBuilder.PACKET_SWF_MODULE_CUTSCENE);
Logger.DebugPrint(entry.EnteredUser.Username + " Loading swf: " + swf);
entry.EnteredUser.LoggedinClient.SendPacket(swfModulePacket);
entry.EnteredUser.LoggedinClient.SendPacket(startingUpEventPacket);
entry.EnteredUser.Client.SendPacket(swfModulePacket);
entry.EnteredUser.Client.SendPacket(startingUpEventPacket);
}
arenaTimeout = new Timer(new TimerCallback(arenaTimedOut), null, Timeout * 60 * 1000, Timeout * 60 * 1000);
@ -275,7 +275,7 @@ namespace HISP.Game
try
{
byte[] arenaResults = PacketBuilder.CreateChat(chatMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
entry.EnteredUser.LoggedinClient.SendPacket(arenaResults);
entry.EnteredUser.Client.SendPacket(arenaResults);
int expReward = expRewards[place];
@ -289,7 +289,7 @@ namespace HISP.Game
byte[] youWinMessage = PacketBuilder.CreateChat(Messages.FormatArenaYouWinMessage(prize, expReward), PacketBuilder.CHAT_BOTTOM_RIGHT);
entry.EnteredUser.LoggedinClient.SendPacket(youWinMessage);
entry.EnteredUser.Client.SendPacket(youWinMessage);
// Awards:
@ -327,7 +327,7 @@ namespace HISP.Game
entry.EnteredUser.Awards.AddAward(Award.GetAwardById(32)); // Perseverance
byte[] youDONTWinMessage = PacketBuilder.CreateChat(Messages.FormatArenaOnlyWinnerWinsMessage(expReward), PacketBuilder.CHAT_BOTTOM_RIGHT);
entry.EnteredUser.LoggedinClient.SendPacket(youDONTWinMessage);
entry.EnteredUser.Client.SendPacket(youDONTWinMessage);
}
place++;
}
@ -361,8 +361,8 @@ namespace HISP.Game
if (Entries.Length + 1 > Slots)
{
byte[] enterFailed = PacketBuilder.CreateChat(Messages.ArenaFullErrorMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(enterFailed);
GameServer.UpdateArea(user.LoggedinClient);
user.Client.SendPacket(enterFailed);
GameServer.UpdateArea(user.Client);
return;
}
}
@ -378,7 +378,7 @@ namespace HISP.Game
user.TakeMoney(EntryCost);
byte[] enteredIntoCompetition = PacketBuilder.CreateChat(Messages.ArenaEnteredInto, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(enteredIntoCompetition);
user.Client.SendPacket(enteredIntoCompetition);
GameServer.UpdateAreaForAll(user.X, user.Y, true);
return;

0
HorseIsleServer/LibHISP/Game/Book.cs Normal file → Executable file
View file

2092
HorseIsleServer/LibHISP/Game/Chat/Command.cs Normal file → Executable file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,57 @@
using HISP.Player;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace HISP.Game.Chat
{
public class CommandRegister
{
private static List<CommandRegister> registeredComamnds = new List<CommandRegister>();
public static CommandRegister[] RegisteredCommands
{
get
{
return registeredComamnds.ToArray();
}
}
private Func<string, string[], User, bool> commandCallback;
public bool CmdRequiresAdmin;
public bool CmdRequiresMod;
public char CmdLetter;
public string CmdName;
public string CmdUsage;
public CommandRegister(char cmdLetter, string cmdName, string cmdUsage, Func<string, string[], User, bool> cmdCallback, bool cmdRequiresAdmin, bool cmdRequiresMod)
{
this.CmdLetter = cmdLetter;
this.CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture).Trim();
this.CmdUsage = cmdUsage;
this.CmdRequiresMod = cmdRequiresMod;
this.CmdRequiresAdmin = cmdRequiresAdmin;
this.commandCallback = cmdCallback;
registeredComamnds.Add(this);
}
public bool HasPermission(User user)
{
if (CmdRequiresAdmin && !(user.Administrator))
return false;
if (CmdRequiresMod && !(user.Moderator || user.Administrator))
return false;
return true;
}
public bool Execute(string message, string[] args, User user)
{
if(HasPermission(user))
return commandCallback(message, args, user);
return false;
}
}
}

0
HorseIsleServer/LibHISP/Game/Chat/SocialType.cs Normal file → Executable file
View file

View file

@ -54,16 +54,16 @@ namespace HISP.Game.Events
int totalTypes = 0;
foreach (int itemId in Item.TradingCards)
if (client.LoggedinUser.Inventory.HasItemId(itemId))
totalCards += client.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances.Length;
if (client.User.Inventory.HasItemId(itemId))
totalCards += client.User.Inventory.GetItemByItemId(itemId).ItemInstances.Length;
if (client.LoggedinUser.Inventory.HasItemId(Item.ColtTradingCard))
if (client.User.Inventory.HasItemId(Item.ColtTradingCard))
totalTypes++;
if (client.LoggedinUser.Inventory.HasItemId(Item.FillyTradingCard))
if (client.User.Inventory.HasItemId(Item.FillyTradingCard))
totalTypes++;
if (client.LoggedinUser.Inventory.HasItemId(Item.MareTradingCard))
if (client.User.Inventory.HasItemId(Item.MareTradingCard))
totalTypes++;
if (client.LoggedinUser.Inventory.HasItemId(Item.StallionTradingCard))
if (client.User.Inventory.HasItemId(Item.StallionTradingCard))
totalTypes++;
if(totalCards > 4)
@ -93,12 +93,12 @@ namespace HISP.Game.Events
}
else if (totalTypes == 4)
{
client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.IsleCardsGameWin).Count++;
client.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.IsleCardsGameWin).Count++;
byte[] wonIsleCardGame = PacketBuilder.CreateChat(Messages.EventWonIsleTradingGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
client.SendPacket(wonIsleCardGame);
client.LoggedinUser.AddMoney(25000);
client.User.AddMoney(25000);
}

13
HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs Normal file → Executable file
View file

@ -1,6 +1,7 @@
using HISP.Game.Items;
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
using System.Threading;
@ -13,7 +14,7 @@ namespace HISP.Game.Events
public ThrowTracker(User thrower)
{
Thrower = thrower;
thrownAt = new List<User>();
thrownAt = new ThreadSafeList<User>();
}
public void AddThrownAt(User user)
@ -21,7 +22,7 @@ namespace HISP.Game.Events
thrownAt.Add(user);
}
public User Thrower;
private List<User> thrownAt;
private ThreadSafeList<User> thrownAt;
public User[] ThrownAt
{
get
@ -33,7 +34,7 @@ namespace HISP.Game.Events
public bool Active = false;
public const int REVENGE_TIMEOUT = 10;
private List<ThrowTracker> trackedThrows;
private ThreadSafeList<ThrowTracker> trackedThrows;
private Timer revengeTimeout;
public ThrowTracker[] TrackedThrows
{
@ -45,7 +46,7 @@ namespace HISP.Game.Events
public ModsRevenge()
{
trackedThrows = new List<ThrowTracker>();
trackedThrows = new ThreadSafeList<ThrowTracker>();
Active = false;
}
@ -147,8 +148,8 @@ namespace HISP.Game.Events
thrower.AddMoney(50);
throwAt.AddMoney(500);
thrower.LoggedinClient.SendPacket(youEarned);
throwAt.LoggedinClient.SendPacket(otherEarned);
thrower.Client.SendPacket(youEarned);
throwAt.Client.SendPacket(otherEarned);
throwCounter.AddThrownAt(throwAt);
}

2
HorseIsleServer/LibHISP/Game/Events/RandomEvent.cs Normal file → Executable file
View file

@ -59,7 +59,7 @@ namespace HISP.Game.Events
string msg = Messages.FormatRandomEvent(rngEvent.Text, moneyEarned, horseName);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.RandomEventPrefix + msg, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(chatPacket);
user.Client.SendPacket(chatPacket);
return;
}

17
HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs Normal file → Executable file
View file

@ -1,5 +1,6 @@
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
using System.Threading;
@ -46,8 +47,8 @@ namespace HISP.Game.Events
if (this.Quit)
return;
byte[] realTimeQuizQuestion = PacketBuilder.CreateMetaPacket(Meta.BuildRealTimeQuiz(this));
this.UserInstance.LoggedinClient.SendPacket(realTimeQuizQuestion);
byte[] realTimeQuizQuestion = PacketBuilder.CreateMeta(Meta.BuildRealTimeQuiz(this));
this.UserInstance.Client.SendPacket(realTimeQuizQuestion);
}
public void CheckAnswer(string answer)
@ -97,11 +98,11 @@ namespace HISP.Game.Events
return participents.ToArray();
}
}
private List<Participent> participents;
private ThreadSafeList<Participent> participents;
public RealTimeQuiz()
{
participents = new List<Participent>();
participents = new ThreadSafeList<Participent>();
Questions = new QuizQuestion[8];
for(int i = 0; i < 8; i++)
{
@ -159,7 +160,7 @@ namespace HISP.Game.Events
Participent partcipent = getParticipent(user.Id);
partcipent.Quit = true;
user.InRealTimeQuiz = false;
GameServer.UpdateArea(user.LoggedinClient);
GameServer.UpdateArea(user.Client);
}
catch (KeyNotFoundException) { };
}
@ -218,7 +219,7 @@ namespace HISP.Game.Events
participent.UserInstance.InRealTimeQuiz = false;
GameServer.UpdateArea(participent.UserInstance.LoggedinClient);
GameServer.UpdateArea(participent.UserInstance.Client);
int money = 0;
@ -237,12 +238,12 @@ namespace HISP.Game.Events
if (participent.Won)
{
byte[] wonBonusMessage = PacketBuilder.CreateChat(Messages.FormatEventRealTimeQuizWinBonus(money), PacketBuilder.CHAT_BOTTOM_RIGHT);
participent.UserInstance.LoggedinClient.SendPacket(wonBonusMessage);
participent.UserInstance.Client.SendPacket(wonBonusMessage);
}
else
{
byte[] bonusMessage = PacketBuilder.CreateChat(Messages.FormatEventRealTimeQuizBonus(money), PacketBuilder.CHAT_BOTTOM_RIGHT);
participent.UserInstance.LoggedinClient.SendPacket(bonusMessage);
participent.UserInstance.Client.SendPacket(bonusMessage);
}
participent.UserInstance.AddMoney(money);

4
HorseIsleServer/LibHISP/Game/Events/RealTimeRiddle.cs Normal file → Executable file
View file

@ -59,7 +59,7 @@ namespace HISP.Game.Events
if (Database.HasPlayerCompletedRealTimeRiddle(RiddleId, winner.Id))
{
byte[] alreadyWonRiddleMessage = PacketBuilder.CreateChat(Messages.EventAlreadySovledRealTimeRiddle, PacketBuilder.CHAT_BOTTOM_RIGHT);
winner.LoggedinClient.SendPacket(alreadyWonRiddleMessage);
winner.Client.SendPacket(alreadyWonRiddleMessage);
return;
}
@ -81,7 +81,7 @@ namespace HISP.Game.Events
foreach (GameClient client in GameClient.ConnectedClients)
{
if (client.LoggedIn)
if (client.LoggedinUser.Id != winner.Id)
if (client.User.Id != winner.Id)
client.SendPacket(riddleWonMessage);
else
client.SendPacket(riddleYouWonMessage);

View file

View file

@ -80,7 +80,7 @@ namespace HISP.Game.Events
{
byte[] youWinMsg = PacketBuilder.CreateChat(Messages.EventWonWaterBallonGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
winner.UserHit.AddMoney(20000);
winner.UserHit.LoggedinClient.SendPacket(youWinMsg);
winner.UserHit.Client.SendPacket(youWinMsg);
winner.UserHit.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WaterbaloonGameWin).Count++;
}

0
HorseIsleServer/LibHISP/Game/GameExceptions.cs Normal file → Executable file
View file

0
HorseIsleServer/LibHISP/Game/Horse/HorseInfo.cs Normal file → Executable file
View file

0
HorseIsleServer/LibHISP/Game/Horse/HorseInstance.cs Normal file → Executable file
View file

0
HorseIsleServer/LibHISP/Game/Horse/Leaser.cs Normal file → Executable file
View file

3
HorseIsleServer/LibHISP/Game/Horse/WildHorse.cs Normal file → Executable file
View file

@ -1,5 +1,6 @@
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
namespace HISP.Game.Horse
{
@ -181,7 +182,7 @@ namespace HISP.Game.Horse
Despawn(this);
}
private static List<WildHorse> wildHorses = new List<WildHorse>();
private static ThreadSafeList<WildHorse> wildHorses = new ThreadSafeList<WildHorse>();
public static WildHorse[] WildHorses
{
get

View file

@ -1,6 +1,7 @@
using HISP.Game.Horse;
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
namespace HISP.Game.Inventory
@ -8,7 +9,7 @@ namespace HISP.Game.Inventory
public class HorseInventory
{
private User baseUser;
private List<HorseInstance> horsesList = new List<HorseInstance>();
private ThreadSafeList<HorseInstance> horsesList = new ThreadSafeList<HorseInstance>();
public HorseInstance[] HorseList
{
get

0
HorseIsleServer/LibHISP/Game/Inventory/IInventory.cs Normal file → Executable file
View file

11
HorseIsleServer/LibHISP/Game/Inventory/InventoryItem.cs Normal file → Executable file
View file

@ -1,21 +1,20 @@
using System;
using System.Collections.Generic;
using HISP.Game.Items;
using HISP.Game.Items;
using HISP.Util;
namespace HISP.Game.Inventory
{
public class InventoryItem
{
public InventoryItem()
{
itemInstances = new List<ItemInstance>();
itemInstances = new ThreadSafeList<ItemInstance>();
Infinite = false;
ItemId = 0;
}
public int ItemId;
public bool Infinite;
private List<ItemInstance> itemInstances;
private ThreadSafeList<ItemInstance> itemInstances;
public void RemoveItem(ItemInstance itm)
{
itemInstances.Remove(itm);

View file

@ -4,19 +4,20 @@ using System.Linq;
using HISP.Player;
using HISP.Server;
using HISP.Game.Items;
using HISP.Util;
namespace HISP.Game.Inventory
{
{
public class PlayerInventory : IInventory
{
public User BaseUser;
private List<InventoryItem> inventoryItems;
private ThreadSafeList<InventoryItem> inventoryItems;
public PlayerInventory(User forUser)
{
inventoryItems = new List<InventoryItem>();
inventoryItems = new ThreadSafeList<InventoryItem>();
BaseUser = forUser;
ItemInstance[] instances = Database.GetPlayerInventory(BaseUser.Id).ToArray();

View file

@ -4,13 +4,14 @@ using HISP.Game.Items;
using System.Collections.Generic;
using System.Linq;
using HISP.Util;
namespace HISP.Game.Inventory
{
public class ShopInventory : IInventory
{
private Shop baseShop;
private List<InventoryItem> inventoryItems;
private ThreadSafeList<InventoryItem> inventoryItems;
public int Count
{
get
@ -21,7 +22,7 @@ namespace HISP.Game.Inventory
public ShopInventory(Shop shopkeeper)
{
baseShop = shopkeeper;
inventoryItems = new List<InventoryItem>();
inventoryItems = new ThreadSafeList<InventoryItem>();
}
private void addItem(ItemInstance item, bool addToDatabase)

0
HorseIsleServer/LibHISP/Game/Items/DroppedItems.cs Normal file → Executable file
View file

6
HorseIsleServer/LibHISP/Game/Items/Item.cs Normal file → Executable file
View file

@ -150,7 +150,7 @@ namespace HISP.Game.Items
if (isle.Name == "Prison Isle")
{
byte[] dontWorkHere = PacketBuilder.CreateChat(Messages.RanchDorothyShoesPrisonIsleMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(dontWorkHere);
user.Client.SendPacket(dontWorkHere);
return;
}
}
@ -162,14 +162,14 @@ namespace HISP.Game.Items
return;
}
byte[] noPlaceLIke127001 = PacketBuilder.CreateChat(Messages.RanchDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(noPlaceLIke127001);
user.Client.SendPacket(noPlaceLIke127001);
user.Teleport(user.OwnedRanch.X, user.OwnedRanch.Y);
}
else if (itm.ItemId == Item.Telescope)
{
byte[] birdMap = PacketBuilder.CreateBirdMap(user.X, user.Y);
user.LoggedinClient.SendPacket(birdMap);
user.Client.SendPacket(birdMap);
}
else
{

0
HorseIsleServer/LibHISP/Game/Items/ItemInstance.cs Normal file → Executable file
View file

7
HorseIsleServer/LibHISP/Game/Items/Tack.cs Normal file → Executable file
View file

@ -4,7 +4,8 @@ using System.Collections.Generic;
using System.Text;
using HISP.Server;
using HISP.Util;
namespace HISP.Game.Items
{
public class Tack
@ -122,13 +123,13 @@ namespace HISP.Game.Items
try
{
TackSet set = GetSetByName(Util.CapitalizeFirstLetter(itemInfo.EmbedSwf));
TackSet set = GetSetByName(Helper.CapitalizeFirstLetter(itemInfo.EmbedSwf));
set.Add(itemInfo);
}
catch(KeyNotFoundException)
{
TackSet tackSet = new TackSet();
tackSet.SetName = Util.CapitalizeFirstLetter(itemInfo.EmbedSwf);
tackSet.SetName = Helper.CapitalizeFirstLetter(itemInfo.EmbedSwf);
tackSet.Add(itemInfo);
tackSets.Add(tackSet);
}

27
HorseIsleServer/LibHISP/Game/Map.cs Normal file → Executable file
View file

@ -12,7 +12,14 @@ namespace HISP.Game
public string Type;
}
public static int[] OverlayTileDepth;
public struct TileDepth
{
public bool ShowPlayer;
public bool Passable;
}
public static TileDepth[] OverlayTileDepth;
public static TerrainTile[] TerrainTiles;
public static int Width;
public static int Height;
@ -20,8 +27,6 @@ namespace HISP.Game
public static byte[] MapData;
public static byte[] oMapData;
public static TerrainTile[] TerrainTiles;
public static int NewUserStartX;
public static int NewUserStartY;
@ -75,19 +80,9 @@ namespace HISP.Game
if (World.InIsle(x, y))
tileset = World.GetIsle(x, y).Tileset;
otileId = otileId + 64 * tileset;
}
int tileDepth = OverlayTileDepth[otileId];
bool overlayPassable = false;
if (tileDepth == 0)
overlayPassable = false;
if (tileDepth == 1)
overlayPassable = false;
if (tileDepth == 2)
overlayPassable = true;
if (tileDepth == 3)
overlayPassable = true;
}
bool overlayPassable = OverlayTileDepth[otileId].Passable;
if ((!terrainPassable && overlayPassable) && otileId == 0)
return false;

6078
HorseIsleServer/LibHISP/Game/Messages.cs Normal file → Executable file

File diff suppressed because it is too large Load diff

6144
HorseIsleServer/LibHISP/Game/Meta.cs Normal file → Executable file

File diff suppressed because it is too large Load diff

7
HorseIsleServer/LibHISP/Game/Multiroom.cs Normal file → Executable file
View file

@ -1,5 +1,6 @@
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
using System.Linq;
@ -8,7 +9,7 @@ namespace HISP.Game
public class Multiroom
{
private static List<Multiroom> multirooms = new List<Multiroom>();
private List<User> joinedUsers = new List<User>();
private ThreadSafeList<User> joinedUsers = new ThreadSafeList<User>();
public int x;
public int y;
@ -83,7 +84,7 @@ namespace HISP.Game
if (joinedUser.Id != user.Id)
if(!TwoPlayer.IsPlayerInGame(joinedUser))
if(!joinedUser.MajorPriority)
GameServer.UpdateArea(joinedUser.LoggedinClient);
GameServer.UpdateArea(joinedUser.Client);
}
}
@ -100,7 +101,7 @@ namespace HISP.Game
foreach (User joinedUser in JoinedUsers)
if (!TwoPlayer.IsPlayerInGame(joinedUser))
if (!joinedUser.MajorPriority)
GameServer.UpdateArea(joinedUser.LoggedinClient);
GameServer.UpdateArea(joinedUser.Client);
}
}

0
HorseIsleServer/LibHISP/Game/Npc.cs Normal file → Executable file
View file

20
HorseIsleServer/LibHISP/Game/Quest.cs Normal file → Executable file
View file

@ -15,7 +15,7 @@ namespace HISP.Game
public const string Binoculars = "BINOCS";
public const string Rake = "RAKE";
public const string MagnifyingGlass = "MAGNIFY";
public const int CloudIslesQuest = 1373;
public struct QuestItemInfo
{
public int ItemId;
@ -219,7 +219,7 @@ namespace HISP.Game
res.QuestCompleted = true;
if (npcActivation)
{
if (quest.SuccessNpcChat != null && quest.SuccessNpcChat != "")
if (quest.SuccessNpcChat != null && quest.SuccessNpcChat.Trim() != "")
res.NpcChat = quest.SuccessNpcChat;
if(quest.SetNpcChatpoint != -1)
@ -238,7 +238,7 @@ namespace HISP.Game
if (quest.SuccessMessage != null)
{
byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(ChatPacket);
user.Client.SendPacket(ChatPacket);
}
if (quest.SuccessNpcChat != null)
@ -246,7 +246,7 @@ namespace HISP.Game
if (!npcActivation)
{
byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(ChatPacket);
user.Client.SendPacket(ChatPacket);
}
}
@ -262,10 +262,10 @@ namespace HISP.Game
user.Awards.AddAward(Award.GetAwardById(4)); // 100% Quest Completion Award.
// Is cloud isles quest?
if (quest.Id == 1373)
if (quest.Id == CloudIslesQuest)
{
byte[] swfLoadPacket = PacketBuilder.CreateSwfModulePacket("ballooncutscene", PacketBuilder.PACKET_SWF_CUTSCENE);
user.LoggedinClient.SendPacket(swfLoadPacket);
byte[] swfLoadPacket = PacketBuilder.CreateSwfModule("ballooncutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE);
user.Client.SendPacket(swfLoadPacket);
}
return res;
@ -290,7 +290,7 @@ namespace HISP.Game
if (!npcActivation)
{
byte[] ChatPacket = PacketBuilder.CreateChat(quest.FailNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(ChatPacket);
user.Client.SendPacket(ChatPacket);
}
else
{
@ -371,7 +371,7 @@ namespace HISP.Game
if(result.NpcChat != null)
{
byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(ChatPacket);
user.Client.SendPacket(ChatPacket);
}
return true;
}
@ -383,7 +383,7 @@ namespace HISP.Game
if (result.NpcChat != null)
{
byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(ChatPacket);
user.Client.SendPacket(ChatPacket);
}
return true;
}

988
HorseIsleServer/LibHISP/Game/Ranch.cs Normal file → Executable file
View file

@ -1,488 +1,500 @@
using HISP.Game.Inventory;
using HISP.Game.Items;
using HISP.Player;
using HISP.Server;
using System;
using System.Collections.Generic;
namespace HISP.Game
{
public class Ranch
{
public class RanchUpgrade
{
public static List<RanchUpgrade> RanchUpgrades = new List<RanchUpgrade>();
public int Id;
public int Cost;
public string Title;
public string Description;
public int Limit;
public static bool RanchUpgradeExists(int id)
{
foreach (RanchUpgrade rachUpgrade in RanchUpgrades)
{
if (rachUpgrade.Id == id)
return true;
}
return false;
}
public static RanchUpgrade GetRanchUpgradeById(int id)
{
foreach (RanchUpgrade rachUpgrade in RanchUpgrades)
{
if (rachUpgrade.Id == id)
return rachUpgrade;
}
throw new KeyNotFoundException("No ranch found.");
}
}
public class RanchBuilding
{
public static List<RanchBuilding> RanchBuildings = new List<RanchBuilding>();
public int Id;
public int Cost;
public string Title;
public string Description;
public static bool RanchBuildingExists(int id)
{
foreach (RanchBuilding ranchBuilding in RanchBuildings)
{
if (ranchBuilding.Id == id)
return true;
}
return false;
}
public static RanchBuilding GetRanchBuildingById(int id)
{
foreach(RanchBuilding ranchBuilding in RanchBuildings)
{
if (ranchBuilding.Id == id)
return ranchBuilding;
}
throw new KeyNotFoundException("No ranch found.");
}
public int GetTeardownPrice()
{
return Convert.ToInt32(Math.Round((float)this.Cost / (100 / 35.0)));
}
}
public static List<Ranch> Ranches = new List<Ranch>();
public int X;
public int Y;
public int Id;
public int Value;
private int ownerId;
private int upgradedLevel;
private int investedMoney;
private string title;
private string description;
public int GetSellPrice()
{
return Convert.ToInt32(Math.Round((double)this.InvestedMoney / (100 / 75.0)));
}
private void removeDorothyShoes(int Id)
{
if (Id == -1)
return;
if(GameServer.IsUserOnline(Id))
{
User user = GameServer.GetUserById(Id);
user.OwnedRanch = null;
InventoryItem items = user.Inventory.GetItemByItemId(Item.DorothyShoes);
foreach (ItemInstance itm in items.ItemInstances)
{
user.Inventory.Remove(itm);
}
}
else
{
Database.RemoveAllItemTypesFromPlayerInventory(this.Id, Item.DorothyShoes);
}
}
private void deleteRanch()
{
Database.DeleteRanchOwner(this.Id);
removeDorothyShoes(this.ownerId);
resetRanch();
}
private void resetRanch()
{
title = "";
description = "";
investedMoney = 0;
upgradedLevel = 0;
ownerId = -1;
for (int i = 0; i < 16; i++)
buildings[i] = null;
}
public int OwnerId
{
get
{
if(ownerId != -1)
{
if (ConfigReader.AllUsersSubbed || Database.IsUserAdmin(ownerId))
return ownerId;
int subExp = Database.GetUserSubscriptionExpireDate(ownerId);
DateTime expTime = Util.UnixTimeStampToDateTime(subExp);
if ((DateTime.UtcNow.Date - expTime.Date).Days >= 30)
{
int price = GetSellPrice();
try
{
checked
{
Database.SetPlayerMoney(Database.GetPlayerMoney(ownerId) + price, ownerId);
}
}
catch (OverflowException)
{
Database.SetPlayerMoney(2147483647, ownerId);;
}
Database.AddMessageToQueue(ownerId, Messages.FormatRanchForcefullySoldMessage(price));
deleteRanch();
return -1;
}
}
return ownerId;
}
set
{
if (value == -1)
{
deleteRanch();
}
else
{
if(Database.IsRanchOwned(this.Id))
{
Database.SetRanchOwner(this.Id, ownerId);
removeDorothyShoes(ownerId);
}
else
{
resetRanch();
Database.AddRanch(this.Id, value, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
}
ownerId = value;
}
}
public int UpgradedLevel
{
get
{
return upgradedLevel;
}
set
{
upgradedLevel = value;
Database.SetRanchUpgradeLevel(Id, value);
}
}
public int InvestedMoney
{
get
{
return investedMoney;
}
set
{
investedMoney = value;
Database.SetRanchInvestment(Id, value);
}
}
public string Title
{
get
{
return title;
}
set
{
title = value.Trim();
Database.SetRanchTitle(Id, title);
}
}
public string Description
{
get
{
return description;
}
set
{
description = value.Trim();
Database.SetRanchDescription(Id, value);
}
}
private RanchBuilding[] buildings = new RanchBuilding[16];
public int GetBuildingCount(int buildingId)
{
int count = 0;
foreach(RanchBuilding building in buildings)
{
if(building != null)
if (building.Id == buildingId)
count++;
}
return count;
}
private void updateBuildings()
{
if (buildings[0] != null)
Database.SetRanchBuilding1(this.Id, buildings[0].Id);
else
Database.SetRanchBuilding1(this.Id, 0);
if (buildings[1] != null)
Database.SetRanchBuilding2(this.Id, buildings[1].Id);
else
Database.SetRanchBuilding2(this.Id, 0);
if (buildings[2] != null)
Database.SetRanchBuilding3(this.Id, buildings[2].Id);
else
Database.SetRanchBuilding3(this.Id, 0);
if (buildings[3] != null)
Database.SetRanchBuilding4(this.Id, buildings[3].Id);
else
Database.SetRanchBuilding4(this.Id, 0);
if (buildings[4] != null)
Database.SetRanchBuilding5(this.Id, buildings[4].Id);
else
Database.SetRanchBuilding5(this.Id, 0);
if (buildings[5] != null)
Database.SetRanchBuilding6(this.Id, buildings[5].Id);
else
Database.SetRanchBuilding6(this.Id, 0);
if (buildings[6] != null)
Database.SetRanchBuilding7(this.Id, buildings[6].Id);
else
Database.SetRanchBuilding7(this.Id, 0);
if (buildings[7] != null)
Database.SetRanchBuilding8(this.Id, buildings[7].Id);
else
Database.SetRanchBuilding8(this.Id, 0);
if (buildings[8] != null)
Database.SetRanchBuilding9(this.Id, buildings[8].Id);
else
Database.SetRanchBuilding9(this.Id, 0);
if (buildings[9] != null)
Database.SetRanchBuilding10(this.Id, buildings[9].Id);
else
Database.SetRanchBuilding10(this.Id, 0);
if (buildings[10] != null)
Database.SetRanchBuilding11(this.Id, buildings[10].Id);
else
Database.SetRanchBuilding11(this.Id, 0);
if (buildings[11] != null)
Database.SetRanchBuilding12(this.Id, buildings[11].Id);
else
Database.SetRanchBuilding12(this.Id, 0);
if (buildings[12] != null)
Database.SetRanchBuilding13(this.Id, buildings[12].Id);
else
Database.SetRanchBuilding13(this.Id, 0);
if (buildings[13] != null)
Database.SetRanchBuilding14(this.Id, buildings[13].Id);
else
Database.SetRanchBuilding14(this.Id, 0);
if (buildings[14] != null)
Database.SetRanchBuilding15(this.Id, buildings[14].Id);
else
Database.SetRanchBuilding15(this.Id, 0);
if (buildings[15] != null)
Database.SetRanchBuilding16(this.Id, buildings[15].Id);
else
Database.SetRanchBuilding16(this.Id, 0);
}
public RanchBuilding GetBuilding(int buildingId)
{
if (buildingId < 0)
return null;
if (buildingId >= buildings.Length)
return null;
return buildings[buildingId];
}
public void SetBuilding(int buildingId, RanchBuilding value)
{
buildings[buildingId] = value;
updateBuildings();
}
public string GetSwf(bool mine)
{
string swf = "ranchviewer.swf?H=" + (upgradedLevel+1).ToString();
for(int i = 0; i < buildings.Length; i++)
{
swf += "&B" + (i+1).ToString() + "=";
if (buildings[i] != null)
{
swf += buildings[i].Id.ToString();
}
}
if (mine)
swf += "&MINE=1";
return swf;
}
public Ranch(int x, int y, int id, int value)
{
X = x;
Y = y;
Id = id;
Value = value;
title = "";
description = "";
upgradedLevel = 0;
ownerId = -1;
investedMoney = 0;
for (int i = 0; i < 16; i++)
buildings[i] = null;
bool owned = Database.IsRanchOwned(id);
if (owned)
{
upgradedLevel = Database.GetRanchUpgradeLevel(id);
title = Database.GetRanchTitle(id);
description = Database.GetRanchDescription(id);
ownerId = Database.GetRanchOwner(id);
int b1 = Database.GetRanchBuilding1(id);
int b2 = Database.GetRanchBuilding2(id);
int b3 = Database.GetRanchBuilding3(id);
int b4 = Database.GetRanchBuilding4(id);
int b5 = Database.GetRanchBuilding5(id);
int b6 = Database.GetRanchBuilding6(id);
int b7 = Database.GetRanchBuilding7(id);
int b8 = Database.GetRanchBuilding8(id);
int b9 = Database.GetRanchBuilding9(id);
int b10 = Database.GetRanchBuilding10(id);
int b11 = Database.GetRanchBuilding11(id);
int b12 = Database.GetRanchBuilding12(id);
int b13 = Database.GetRanchBuilding13(id);
int b14 = Database.GetRanchBuilding14(id);
int b15 = Database.GetRanchBuilding15(id);
int b16 = Database.GetRanchBuilding16(id);
if (RanchBuilding.RanchBuildingExists(b1))
buildings[0] = RanchBuilding.GetRanchBuildingById(b1);
if (RanchBuilding.RanchBuildingExists(b2))
buildings[1] = RanchBuilding.GetRanchBuildingById(b2);
if (RanchBuilding.RanchBuildingExists(b3))
buildings[2] = RanchBuilding.GetRanchBuildingById(b3);
if (RanchBuilding.RanchBuildingExists(b4))
buildings[3] = RanchBuilding.GetRanchBuildingById(b4);
if (RanchBuilding.RanchBuildingExists(b5))
buildings[4] = RanchBuilding.GetRanchBuildingById(b5);
if (RanchBuilding.RanchBuildingExists(b6))
buildings[5] = RanchBuilding.GetRanchBuildingById(b6);
if (RanchBuilding.RanchBuildingExists(b7))
buildings[6] = RanchBuilding.GetRanchBuildingById(b7);
if (RanchBuilding.RanchBuildingExists(b8))
buildings[7] = RanchBuilding.GetRanchBuildingById(b8);
if (RanchBuilding.RanchBuildingExists(b9))
buildings[8] = RanchBuilding.GetRanchBuildingById(b9);
if (RanchBuilding.RanchBuildingExists(b10))
buildings[9] = RanchBuilding.GetRanchBuildingById(b10);
if (RanchBuilding.RanchBuildingExists(b11))
buildings[10] = RanchBuilding.GetRanchBuildingById(b11);
if (RanchBuilding.RanchBuildingExists(b12))
buildings[11] = RanchBuilding.GetRanchBuildingById(b12);
if (RanchBuilding.RanchBuildingExists(b13))
buildings[12] = RanchBuilding.GetRanchBuildingById(b13);
if (RanchBuilding.RanchBuildingExists(b14))
buildings[13] = RanchBuilding.GetRanchBuildingById(b14);
if (RanchBuilding.RanchBuildingExists(b15))
buildings[14] = RanchBuilding.GetRanchBuildingById(b15);
if (RanchBuilding.RanchBuildingExists(b16))
buildings[15] = RanchBuilding.GetRanchBuildingById(b16);
InvestedMoney = Database.GetRanchInvestment(id);
}
}
public RanchUpgrade GetRanchUpgrade()
{
return RanchUpgrade.GetRanchUpgradeById(this.upgradedLevel + 1);
}
public static bool IsRanchHere(int x, int y)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.X == x && ranch.Y == y)
return true;
}
return false;
}
public static bool RanchExists(int ranchId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.Id == ranchId)
return true;
}
return false;
}
public static Ranch GetRanchById(int ranchId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.Id == ranchId)
return ranch;
}
throw new KeyNotFoundException("No Ranch with id " + ranchId);
}
public static Ranch GetRanchAt(int x, int y)
{
foreach(Ranch ranch in Ranches)
{
if (ranch.X == x && ranch.Y == y)
return ranch;
}
throw new KeyNotFoundException("No Ranch found at x" + x + " y" + y);
}
public static bool IsRanchOwned(int playerId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.OwnerId == playerId)
{
return true;
}
}
return false;
}
public static Ranch GetRanchOwnedBy(int playerId)
{
foreach(Ranch ranch in Ranches)
{
if(ranch.OwnerId == playerId)
{
return ranch;
}
}
throw new KeyNotFoundException("Player " + playerId + " does not own a ranch.");
}
}
}
using HISP.Game.Inventory;
using HISP.Game.Items;
using HISP.Player;
using HISP.Server;
using HISP.Util;
using System;
using System.Collections.Generic;
namespace HISP.Game
{
public class Ranch
{
public class RanchUpgrade
{
public static List<RanchUpgrade> RanchUpgrades = new List<RanchUpgrade>();
public int Id;
public int Cost;
public string Title;
public string Description;
public int Limit;
public static bool RanchUpgradeExists(int id)
{
foreach (RanchUpgrade rachUpgrade in RanchUpgrades)
{
if (rachUpgrade.Id == id)
return true;
}
return false;
}
public static RanchUpgrade GetRanchUpgradeById(int id)
{
foreach (RanchUpgrade ranchUpgrade in RanchUpgrades)
{
if (ranchUpgrade.Id == id)
return ranchUpgrade;
}
throw new KeyNotFoundException("No ranch found.");
}
}
public class RanchBuilding
{
public static List<RanchBuilding> RanchBuildings = new List<RanchBuilding>();
public int Id;
public int Cost;
public string Title;
public string Description;
public static bool RanchBuildingExists(int id)
{
foreach (RanchBuilding ranchBuilding in RanchBuildings)
{
if (ranchBuilding.Id == id)
return true;
}
return false;
}
public static RanchBuilding GetRanchBuildingById(int id)
{
foreach(RanchBuilding ranchBuilding in RanchBuildings)
{
if (ranchBuilding.Id == id)
return ranchBuilding;
}
throw new KeyNotFoundException("No ranch found.");
}
public int GetTeardownPrice()
{
return Convert.ToInt32(Math.Round((float)this.Cost / (100 / 35.0)));
}
}
public static List<Ranch> Ranches = new List<Ranch>();
public int X;
public int Y;
public int Id;
public int Value;
private int ownerId;
private int upgradedLevel;
private int investedMoney;
private string title;
private string description;
public int GetSellPrice()
{
return Convert.ToInt32(Math.Round((double)this.InvestedMoney / (100 / 75.0)));
}
private void removeDorothyShoes(int Id)
{
if (Id == -1)
return;
if(GameServer.IsUserOnline(Id))
{
User user = GameServer.GetUserById(Id);
user.OwnedRanch = null;
InventoryItem items = user.Inventory.GetItemByItemId(Item.DorothyShoes);
foreach (ItemInstance itm in items.ItemInstances)
{
user.Inventory.Remove(itm);
}
}
else
{
Database.RemoveAllItemTypesFromPlayerInventory(this.Id, Item.DorothyShoes);
}
}
private void deleteRanch()
{
Database.DeleteRanchOwner(this.Id);
removeDorothyShoes(this.ownerId);
resetRanch();
}
private void resetRanch()
{
title = "";
description = "";
investedMoney = 0;
upgradedLevel = 0;
ownerId = -1;
for (int i = 0; i < 16; i++)
buildings[i] = null;
}
public int OwnerId
{
get
{
if(ownerId != -1)
{
if (ConfigReader.AllUsersSubbed || Database.GetUserAdmin(ownerId))
return ownerId;
int subExp = Database.GetUserSubscriptionExpireDate(ownerId);
DateTime expTime = Helper.UnixTimeStampToDateTime(subExp);
if ((DateTime.UtcNow.Date - expTime.Date).Days >= 30)
{
int price = GetSellPrice();
try
{
checked
{
Database.SetPlayerMoney(Database.GetPlayerMoney(ownerId) + price, ownerId);
}
}
catch (OverflowException)
{
Database.SetPlayerMoney(2147483647, ownerId);;
}
Database.AddMessageToQueue(ownerId, Messages.FormatRanchForcefullySoldMessage(price));
deleteRanch();
return -1;
}
}
return ownerId;
}
set
{
if (value == -1)
{
deleteRanch();
}
else
{
if (Database.IsRanchOwned(this.Id))
{
Database.SetRanchOwner(this.Id, ownerId);
removeDorothyShoes(ownerId);
}
else
{
resetRanch();
Database.AddRanch(this.Id, value, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
}
if (GameServer.IsUserOnline(value))
{
User user = GameServer.GetUserById(value);
user.OwnedRanch = this;
user.Inventory.AddIgnoringFull(new ItemInstance(Item.DorothyShoes));
}
else
{
Database.AddItemToInventory(value, new ItemInstance(Item.DorothyShoes));
}
ownerId = value;
}
}
public int UpgradedLevel
{
get
{
return upgradedLevel;
}
set
{
upgradedLevel = value;
Database.SetRanchUpgradeLevel(Id, value);
}
}
public int InvestedMoney
{
get
{
return investedMoney;
}
set
{
investedMoney = value;
Database.SetRanchInvestment(Id, value);
}
}
public string Title
{
get
{
return title;
}
set
{
title = value.Trim();
Database.SetRanchTitle(Id, title);
}
}
public string Description
{
get
{
return description;
}
set
{
description = value.Trim();
Database.SetRanchDescription(Id, value);
}
}
private RanchBuilding[] buildings = new RanchBuilding[16];
public int GetBuildingCount(int buildingId)
{
int count = 0;
foreach(RanchBuilding building in buildings)
{
if(building != null)
if (building.Id == buildingId)
count++;
}
return count;
}
private void updateBuildings()
{
if (buildings[0] != null)
Database.SetRanchBuilding1(this.Id, buildings[0].Id);
else
Database.SetRanchBuilding1(this.Id, 0);
if (buildings[1] != null)
Database.SetRanchBuilding2(this.Id, buildings[1].Id);
else
Database.SetRanchBuilding2(this.Id, 0);
if (buildings[2] != null)
Database.SetRanchBuilding3(this.Id, buildings[2].Id);
else
Database.SetRanchBuilding3(this.Id, 0);
if (buildings[3] != null)
Database.SetRanchBuilding4(this.Id, buildings[3].Id);
else
Database.SetRanchBuilding4(this.Id, 0);
if (buildings[4] != null)
Database.SetRanchBuilding5(this.Id, buildings[4].Id);
else
Database.SetRanchBuilding5(this.Id, 0);
if (buildings[5] != null)
Database.SetRanchBuilding6(this.Id, buildings[5].Id);
else
Database.SetRanchBuilding6(this.Id, 0);
if (buildings[6] != null)
Database.SetRanchBuilding7(this.Id, buildings[6].Id);
else
Database.SetRanchBuilding7(this.Id, 0);
if (buildings[7] != null)
Database.SetRanchBuilding8(this.Id, buildings[7].Id);
else
Database.SetRanchBuilding8(this.Id, 0);
if (buildings[8] != null)
Database.SetRanchBuilding9(this.Id, buildings[8].Id);
else
Database.SetRanchBuilding9(this.Id, 0);
if (buildings[9] != null)
Database.SetRanchBuilding10(this.Id, buildings[9].Id);
else
Database.SetRanchBuilding10(this.Id, 0);
if (buildings[10] != null)
Database.SetRanchBuilding11(this.Id, buildings[10].Id);
else
Database.SetRanchBuilding11(this.Id, 0);
if (buildings[11] != null)
Database.SetRanchBuilding12(this.Id, buildings[11].Id);
else
Database.SetRanchBuilding12(this.Id, 0);
if (buildings[12] != null)
Database.SetRanchBuilding13(this.Id, buildings[12].Id);
else
Database.SetRanchBuilding13(this.Id, 0);
if (buildings[13] != null)
Database.SetRanchBuilding14(this.Id, buildings[13].Id);
else
Database.SetRanchBuilding14(this.Id, 0);
if (buildings[14] != null)
Database.SetRanchBuilding15(this.Id, buildings[14].Id);
else
Database.SetRanchBuilding15(this.Id, 0);
if (buildings[15] != null)
Database.SetRanchBuilding16(this.Id, buildings[15].Id);
else
Database.SetRanchBuilding16(this.Id, 0);
}
public RanchBuilding GetBuilding(int buildingId)
{
if (buildingId < 0)
return null;
if (buildingId >= buildings.Length)
return null;
return buildings[buildingId];
}
public void SetBuilding(int buildingId, RanchBuilding value)
{
buildings[buildingId] = value;
updateBuildings();
}
public string GetSwf(bool mine)
{
string swf = "ranchviewer.swf?H=" + (upgradedLevel+1).ToString();
for(int i = 0; i < buildings.Length; i++)
{
swf += "&B" + (i+1).ToString() + "=";
if (buildings[i] != null)
{
swf += buildings[i].Id.ToString();
}
}
if (mine)
swf += "&MINE=1";
return swf;
}
public Ranch(int x, int y, int id, int value)
{
X = x;
Y = y;
Id = id;
Value = value;
title = "";
description = "";
upgradedLevel = 0;
ownerId = -1;
investedMoney = 0;
for (int i = 0; i < 16; i++)
buildings[i] = null;
bool owned = Database.IsRanchOwned(id);
if (owned)
{
upgradedLevel = Database.GetRanchUpgradeLevel(id);
title = Database.GetRanchTitle(id);
description = Database.GetRanchDescription(id);
ownerId = Database.GetRanchOwner(id);
int b1 = Database.GetRanchBuilding1(id);
int b2 = Database.GetRanchBuilding2(id);
int b3 = Database.GetRanchBuilding3(id);
int b4 = Database.GetRanchBuilding4(id);
int b5 = Database.GetRanchBuilding5(id);
int b6 = Database.GetRanchBuilding6(id);
int b7 = Database.GetRanchBuilding7(id);
int b8 = Database.GetRanchBuilding8(id);
int b9 = Database.GetRanchBuilding9(id);
int b10 = Database.GetRanchBuilding10(id);
int b11 = Database.GetRanchBuilding11(id);
int b12 = Database.GetRanchBuilding12(id);
int b13 = Database.GetRanchBuilding13(id);
int b14 = Database.GetRanchBuilding14(id);
int b15 = Database.GetRanchBuilding15(id);
int b16 = Database.GetRanchBuilding16(id);
if (RanchBuilding.RanchBuildingExists(b1))
buildings[0] = RanchBuilding.GetRanchBuildingById(b1);
if (RanchBuilding.RanchBuildingExists(b2))
buildings[1] = RanchBuilding.GetRanchBuildingById(b2);
if (RanchBuilding.RanchBuildingExists(b3))
buildings[2] = RanchBuilding.GetRanchBuildingById(b3);
if (RanchBuilding.RanchBuildingExists(b4))
buildings[3] = RanchBuilding.GetRanchBuildingById(b4);
if (RanchBuilding.RanchBuildingExists(b5))
buildings[4] = RanchBuilding.GetRanchBuildingById(b5);
if (RanchBuilding.RanchBuildingExists(b6))
buildings[5] = RanchBuilding.GetRanchBuildingById(b6);
if (RanchBuilding.RanchBuildingExists(b7))
buildings[6] = RanchBuilding.GetRanchBuildingById(b7);
if (RanchBuilding.RanchBuildingExists(b8))
buildings[7] = RanchBuilding.GetRanchBuildingById(b8);
if (RanchBuilding.RanchBuildingExists(b9))
buildings[8] = RanchBuilding.GetRanchBuildingById(b9);
if (RanchBuilding.RanchBuildingExists(b10))
buildings[9] = RanchBuilding.GetRanchBuildingById(b10);
if (RanchBuilding.RanchBuildingExists(b11))
buildings[10] = RanchBuilding.GetRanchBuildingById(b11);
if (RanchBuilding.RanchBuildingExists(b12))
buildings[11] = RanchBuilding.GetRanchBuildingById(b12);
if (RanchBuilding.RanchBuildingExists(b13))
buildings[12] = RanchBuilding.GetRanchBuildingById(b13);
if (RanchBuilding.RanchBuildingExists(b14))
buildings[13] = RanchBuilding.GetRanchBuildingById(b14);
if (RanchBuilding.RanchBuildingExists(b15))
buildings[14] = RanchBuilding.GetRanchBuildingById(b15);
if (RanchBuilding.RanchBuildingExists(b16))
buildings[15] = RanchBuilding.GetRanchBuildingById(b16);
InvestedMoney = Database.GetRanchInvestment(id);
}
}
public RanchUpgrade GetRanchUpgrade()
{
return RanchUpgrade.GetRanchUpgradeById(this.upgradedLevel + 1);
}
public static bool IsRanchHere(int x, int y)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.X == x && ranch.Y == y)
return true;
}
return false;
}
public static bool RanchExists(int ranchId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.Id == ranchId)
return true;
}
return false;
}
public static Ranch GetRanchById(int ranchId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.Id == ranchId)
return ranch;
}
throw new KeyNotFoundException("No Ranch with id " + ranchId);
}
public static Ranch GetRanchAt(int x, int y)
{
foreach(Ranch ranch in Ranches)
{
if (ranch.X == x && ranch.Y == y)
return ranch;
}
throw new KeyNotFoundException("No Ranch found at x" + x + " y" + y);
}
public static bool GetOwnedRanch(int playerId)
{
foreach (Ranch ranch in Ranches)
{
if (ranch.OwnerId == playerId)
{
return true;
}
}
return false;
}
public static Ranch GetRanchOwnedBy(int playerId)
{
foreach(Ranch ranch in Ranches)
{
if(ranch.OwnerId == playerId)
{
return ranch;
}
}
throw new KeyNotFoundException("Player " + playerId + " does not own a ranch.");
}
}
}

4
HorseIsleServer/LibHISP/Game/Riddler.cs Normal file → Executable file
View file

@ -32,7 +32,7 @@ namespace HISP.Game
Database.CompleteRiddle(this.Id, user.Id);
byte[] riddleAnswerCorrectPacket = PacketBuilder.CreateChat(Messages.FormatRiddlerAnswerCorrect(this.Reason), PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(riddleAnswerCorrectPacket);
user.Client.SendPacket(riddleAnswerCorrectPacket);
user.AddMoney(10000);
if(HasCompletedAllRiddles(user))
@ -42,7 +42,7 @@ namespace HISP.Game
public void AnswerFail(User user)
{
byte[] riddleIncorrect = PacketBuilder.CreateChat(Messages.RiddlerIncorrectAnswer, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(riddleIncorrect);
user.Client.SendPacket(riddleIncorrect);
}
public bool CheckAnswer(User user, string txt)

27
HorseIsleServer/LibHISP/Game/Services/Auction.cs Normal file → Executable file
View file

@ -2,13 +2,14 @@
using HISP.Player;
using HISP.Security;
using HISP.Server;
using HISP.Util;
using System.Collections.Generic;
namespace HISP.Game.Services
{
public class Auction
{
private static List<Auction> auctionRooms = new List<Auction>();
private static ThreadSafeList<Auction> auctionRooms = new ThreadSafeList<Auction>();
public static Auction[] AuctionRooms
{
get
@ -20,7 +21,7 @@ namespace HISP.Game.Services
public Auction(int id)
{
RoomId = id;
auctionEntries = new List<AuctionEntry>();
auctionEntries = new ThreadSafeList<AuctionEntry>();
Database.LoadAuctionRoom(this, RoomId);
}
@ -37,7 +38,7 @@ namespace HISP.Game.Services
if(BidUser.HorseInventory.HorseList.Length >= BidUser.MaxHorses)
{
byte[] tooManyHorses = PacketBuilder.CreateChat(Messages.AuctionYouHaveTooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT);
BidUser.LoggedinClient.SendPacket(tooManyHorses);
BidUser.Client.SendPacket(tooManyHorses);
return;
}
@ -46,7 +47,7 @@ namespace HISP.Game.Services
if(BidAmount >= MAX_BID)
{
byte[] maxBidReached = PacketBuilder.CreateChat(Messages.AuctionBidMax, PacketBuilder.CHAT_BOTTOM_RIGHT);
BidUser.LoggedinClient.SendPacket(maxBidReached);
BidUser.Client.SendPacket(maxBidReached);
return;
}
@ -55,7 +56,7 @@ namespace HISP.Game.Services
{
byte[] cantAffordBid = PacketBuilder.CreateChat(Messages.AuctionCantAffordBid, PacketBuilder.CHAT_BOTTOM_RIGHT);
BidUser.LoggedinClient.SendPacket(cantAffordBid);
BidUser.Client.SendPacket(cantAffordBid);
return;
}
@ -77,7 +78,7 @@ namespace HISP.Game.Services
if(entry.RandomId != AuctionItem.RandomId && entry.HighestBidder == BidUser.Id)
{
byte[] cantWinTooMuch = PacketBuilder.CreateChat(Messages.AuctionOnlyOneWinningBidAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT);
BidUser.LoggedinClient.SendPacket(cantWinTooMuch);
BidUser.Client.SendPacket(cantWinTooMuch);
return;
}
}
@ -91,7 +92,7 @@ namespace HISP.Game.Services
{
User oldBidder = GameServer.GetUserById(AuctionItem.HighestBidder);
byte[] outbidMessage = PacketBuilder.CreateChat(Messages.FormatAuctionYourOutbidBy(BidUser.Username, AuctionItem.HighestBid), PacketBuilder.CHAT_BOTTOM_RIGHT);
oldBidder.LoggedinClient.SendPacket(outbidMessage);
oldBidder.Client.SendPacket(outbidMessage);
}
}
@ -104,7 +105,7 @@ namespace HISP.Game.Services
}
byte[] bidPlacedMsg = PacketBuilder.CreateChat(yourBidRaisedTo, PacketBuilder.CHAT_BOTTOM_RIGHT);
BidUser.LoggedinClient.SendPacket(bidPlacedMsg);
BidUser.Client.SendPacket(bidPlacedMsg);
}
@ -122,7 +123,7 @@ namespace HISP.Game.Services
public HorseInstance Horse;
public int OwnerId;
private List<AuctionBid> bidders = new List<AuctionBid>();
private ThreadSafeList<AuctionBid> bidders = new ThreadSafeList<AuctionBid>();
public AuctionBid[] Bidders
{
get
@ -151,7 +152,7 @@ namespace HISP.Game.Services
User auctionRunner = GameServer.GetUserById(highestBidder);
auctionRunner.HorseInventory.UnHide(Horse.RandomId);
byte[] notSold = PacketBuilder.CreateChat(Messages.AuctionNoHorseBrought, PacketBuilder.CHAT_BOTTOM_RIGHT);
auctionRunner.LoggedinClient.SendPacket(notSold);
auctionRunner.Client.SendPacket(notSold);
}
return;
}
@ -161,7 +162,7 @@ namespace HISP.Game.Services
{
User userWon = GameServer.GetUserById(highestBidder);
byte[] wonAuction = PacketBuilder.CreateChat(Messages.FormatAuctionBroughtHorse(highestBid), PacketBuilder.CHAT_BOTTOM_RIGHT);
userWon.LoggedinClient.SendPacket(wonAuction);
userWon.Client.SendPacket(wonAuction);
userWon.TakeMoney(highestBid);
userWon.HorseInventory.AddHorse(Horse, false);
}
@ -174,7 +175,7 @@ namespace HISP.Game.Services
{
User userSold = GameServer.GetUserById(OwnerId);
byte[] horseSold = PacketBuilder.CreateChat(Messages.FormatAuctionHorseSold(highestBid), PacketBuilder.CHAT_BOTTOM_RIGHT);
userSold.LoggedinClient.SendPacket(horseSold);
userSold.Client.SendPacket(horseSold);
userSold.AddMoney(highestBid);
userSold.HorseInventory.DeleteHorse(Horse, false);
}
@ -297,7 +298,7 @@ namespace HISP.Game.Services
auctionEntries.Add(entry);
}
private List<AuctionEntry> auctionEntries;
private ThreadSafeList<AuctionEntry> auctionEntries;
public int RoomId;
public AuctionEntry[] AuctionEntries

0
HorseIsleServer/LibHISP/Game/Services/Barn.cs Normal file → Executable file
View file

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