Compare commits

..

No commits in common. "master" and "v1.6.2" have entirely different histories.

363 changed files with 162322 additions and 26999 deletions

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

@ -8,126 +8,10 @@ defaults:
working-directory: ./HorseIsleServer working-directory: ./HorseIsleServer
jobs: jobs:
build-linux: build:
runs-on: ubuntu-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: |
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 runs-on: windows-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
@ -139,153 +23,201 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v1 uses: actions/setup-dotnet@v1
with: with:
dotnet-version: 8.0.x dotnet-version: 7.0.x
include-prerelease: false include-prerelease: true
- name: Install utils
run: dotnet tool install -g dotnet-script
- name: Setup WSL
uses: Vampire/setup-wsl@v1.2.0
- name: Restore dependencies - name: Restore dependencies
run: dotnet restore run: dotnet restore
# x64 build
- name: Build win-x64 - name: Build win-x64
continue-on-error: false continue-on-error: false
run: | run: |
cd HISPd
dotnet publish -p:PublishProfile=Win64.pubxml dotnet publish -p:PublishProfile=Win64.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Win64.pubxml
cd ..
- name: Build win-x86 - name: Build win-x86
continue-on-error: false continue-on-error: false
run: | run: |
cd HISPd
dotnet publish -p:PublishProfile=Win32.pubxml dotnet publish -p:PublishProfile=Win32.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Win32.pubxml
cd ..
# arm64 build - name: Build win-arm
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=WinARM.pubxml
- name: Build win-arm64 - name: Build win-arm64
continue-on-error: false continue-on-error: false
run: | run: |
cd HISPd
dotnet publish -p:PublishProfile=WinARM64.pubxml dotnet publish -p:PublishProfile=WinARM64.pubxml
cd ..
# 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: Upload win-x86 - name: Build linux-x64
uses: actions/upload-artifact@v4 continue-on-error: false
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: 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: | run: |
dotnet restore LibHISP dotnet publish -p:PublishProfile=Linux64.pubxml
dotnet restore HISPd
- name: Build linux-arm
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=LinuxARM.pubxml
- name: Build linux-arm64
continue-on-error: false
run: |
dotnet publish -p:PublishProfile=LinuxARM64.pubxml
- name: Build mac-x64 - name: Build mac-x64
continue-on-error: false continue-on-error: false
run: | run: |
cd HISPd
dotnet publish -p:PublishProfile=Osx64.pubxml dotnet publish -p:PublishProfile=Osx64.pubxml
cd ..
cd MPN00BS
dotnet publish -p:PublishProfile=Osx64.pubxml
cd ..
- name: Build mac-arm64 - name: Build mac-arm64
continue-on-error: false continue-on-error: false
run: | run: |
cd HISPd
dotnet publish -p:PublishProfile=OsxARM64.pubxml dotnet publish -p:PublishProfile=OsxARM64.pubxml
cd ..
- name: Build deb package
continue-on-error: false
shell: wsl-bash -u root {0}
run: |
apt update
apt install -y dos2unix
mkdir /mnt/fucking-windows
mount -t tmpfs -o size=800M tmpfs /mnt/fucking-windows
mkdir /mnt/fucking-windows/Debian64
mkdir /mnt/fucking-windows/Debian64/etc
mkdir /mnt/fucking-windows/Debian64/usr
mkdir /mnt/fucking-windows/Debian64/etc/hisp
mkdir /mnt/fucking-windows/Debian64/etc/hisp/gamedata
mkdir /mnt/fucking-windows/Debian64/etc/systemd
mkdir /mnt/fucking-windows/Debian64/etc/systemd/system
mkdir /mnt/fucking-windows/Debian64/usr/bin
mkdir /mnt/fucking-windows/Debian64/usr/lib
mkdir /mnt/fucking-windows/Debian64/DEBIAN
cp LibHISP/Resources/server.properties /mnt/fucking-windows/Debian64/etc/hisp/server.properties
cp LibHISP/Resources/default_cross_domain.xml /mnt/fucking-windows/Debian64/etc/hisp/CrossDomainPolicy.xml
cp -r HISPd/Resources/DEBIAN/* /mnt/fucking-windows/Debian64/DEBIAN
cp -r HISPd/bin/x64/Linux/net7.0/linux-x64/publish/gamedata/* /mnt/fucking-windows/Debian64/etc/hisp/gamedata
cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/libe_sqlite3.so /mnt/fucking-windows/Debian64/usr/lib/libe_sqlite3.so
cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/HI1.MAP /mnt/fucking-windows/Debian64/etc/hisp/HI1.MAP
cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/HISPd /mnt/fucking-windows/Debian64/usr/bin/HISPd
cp HISPd/Resources/HISP.service /mnt/fucking-windows/Debian64/etc/systemd/system/HISP.service
dos2unix /mnt/fucking-windows/Debian64/DEBIAN/conffiles
dos2unix /mnt/fucking-windows/Debian64/DEBIAN/control
dos2unix /mnt/fucking-windows/Debian64/DEBIAN/postinst
dos2unix /mnt/fucking-windows/Debian64/DEBIAN/postrm
dos2unix /mnt/fucking-windows/Debian64/DEBIAN/prerm
dos2unix /mnt/fucking-windows/Debian64/etc/systemd/system/HISP.service
chmod 755 -R /mnt/fucking-windows/Debian64
chmod +x /mnt/fucking-windows/Debian64/usr/bin/HISPd
mkdir debpackage
dpkg-deb --build /mnt/fucking-windows/Debian64
mv /mnt/fucking-windows/Debian64.deb debpackage/HISP-Debian-AMD64.deb
# - 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.pubxm
- name: Upload win-x64
uses: actions/upload-artifact@v2
with:
name: HISP-Win64
path: HorseIsleServer\HISPd\bin\x64\Windows\net7.0\win-x64\publish\
- name: Upload win-x86
uses: actions/upload-artifact@v2
with:
name: HISP-Win32
path: HorseIsleServer\HISPd\bin\x86\Windows\net7.0\win-x86\publish\
- name: Upload win-arm
uses: actions/upload-artifact@v2
with:
name: HISP-WinARM
path: HorseIsleServer\HISPd\bin\arm\Windows\net7.0\windows-arm\publish\
- name: Upload win-arm64
uses: actions/upload-artifact@v2
with:
name: HISP-WinARM64
path: HorseIsleServer\HISPd\bin\arm64\Windows\net7.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\net7.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\net7.0\win-x64\publish\
- name: Upload linux-x64
uses: actions/upload-artifact@v2
with:
name: HISP-Linux64
path: HorseIsleServer/HISPd/bin/x64/Linux/net7.0/linux-x64/publish/
- name: Upload linux-arm
uses: actions/upload-artifact@v2
with:
name: HISP-LinuxARM
path: HorseIsleServer/HISPd/bin/ARM/Linux/net7.0/linux-arm/publish/
- name: Upload linux-arm64
uses: actions/upload-artifact@v2
with:
name: HISP-LinuxARM64
path: HorseIsleServer/HISPd/bin/ARM64/Linux/net7.0/linux-arm64/publish/
- name: Upload mac-x64 - name: Upload mac-x64
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v2
with: with:
name: HISP-Mac64 name: HISP-Mac64
path: HorseIsleServer/HISPd/bin/x64/MacOS/net8.0/osx-x64/publish/ path: HorseIsleServer/HISPd/bin/x64/MacOS/net7.0/osx-x64/publish/
- name: Upload mac-arm64 - name: Upload mac-arm64
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v2
with: with:
name: HISP-MacARM64 name: HISP-MacARM64
path: HorseIsleServer/HISPd/bin/arm64/MacOS/net8.0/osx-arm64/publish/ path: HorseIsleServer/HISPd/bin/arm64/MacOS/net7.0/osx-arm64/publish/
- name: Upload mac-x64-noobs
uses: actions/upload-artifact@v4
with:
name: HISP-Mac-Noobs
path: HorseIsleServer/MPN00BS/bin/x64/MacOS/net8.0/osx-x64/publish/
build-web: - name: Upload deb package
runs-on: ubuntu-latest uses: actions/upload-artifact@v2
steps:
- uses: actions/checkout@v2
with: with:
fetch-depth: 0 name: HISP-DebianPackage
path: HorseIsleServer/debpackage
- name: Git Submodule update
run: git submodule update --init --recursive
# - name: Upload android-arm
# uses: actions/upload-artifact@v2
# with:
# name: HISP-AndroidARM
# path: HorseIsleServer/HISPd/bin/arm/Android/net7.0/android-arm/publish/
# - name: Upload android-arm64
# uses: actions/upload-artifact@v2
# with:
# name: HISP-AndroidARM64
# path: HorseIsleServer/HISPd/bin/arm64/Android/net7.0/android-arm64/publish/
# UPLOAD WEB
- name: Upload Website (master) - name: Upload Website (master)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v2
with: with:
name: HISP-Web-Master name: HISP-Web-Master
path: HorseIsleWeb/master-site path: HorseIsleWeb/master-site
- name: Upload Website (game) - name: Upload Website (game)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v2
with: with:
name: HISP-Web-Game name: HISP-Web-Game
path: HorseIsleWeb/game-site path: HorseIsleWeb/game-site

19
.gitignore vendored
View file

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

0
.gitmodules vendored Executable file → Normal file
View file

0
.mailmap Executable file → Normal file
View file

@ -1 +1 @@
Subproject commit e9c09c77cd0dd99eb12e16b679478fb0e3742b55 Subproject commit 330ad13400e4abd52bef118ab10097b3d13bccb3

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

@ -7,9 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibHISP", "LibHISP\LibHISP.
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPN00BS", "MPN00BS\MPN00BS.csproj", "{72EF95FC-03DB-4E61-A696-E0095DD42A4E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "N00BS", "N00BS\N00BS.csproj", "{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPtests", "HISPtests\HISPtests.csproj", "{689FB972-1612-440E-817D-BE290F655AA8}" Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Installer", "Installer\Installer.vdproj", "{D330A197-67D4-42B0-8906-54264AF95EC1}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -50,8 +50,8 @@ Global
Windows|x86 = Windows|x86 Windows|x86 = Windows|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Android|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Android|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM.ActiveCfg = Android|ARM {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|ARM.Build.0 = Android|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM64.ActiveCfg = Android|ARM64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM64.ActiveCfg = Android|ARM64
@ -77,7 +77,6 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM64.ActiveCfg = iOS|ARM64 {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|ARM64.Build.0 = iOS|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x64.ActiveCfg = iOS|x64 {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}.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.ActiveCfg = Linux|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.Build.0 = Linux|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.Build.0 = Linux|Any CPU
@ -107,10 +106,10 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.Build.0 = 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.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.Build.0 = 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.ActiveCfg = Debug|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.Build.0 = Windows|x86 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.Build.0 = Debug|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM.ActiveCfg = Windows|ARM {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|ARM.Build.0 = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM64.ActiveCfg = Windows|ARM64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM64.ActiveCfg = Windows|ARM64
@ -119,8 +118,8 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x64.Build.0 = Windows|x64 {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.ActiveCfg = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.Build.0 = Windows|x86 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.Build.0 = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.ActiveCfg = Android|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.Build.0 = Android|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM.ActiveCfg = Android|ARM {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|ARM.Build.0 = Android|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM64.ActiveCfg = Android|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM64.ActiveCfg = Android|ARM64
@ -146,10 +145,9 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM64.ActiveCfg = iOS|ARM64 {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|ARM64.Build.0 = iOS|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x64.ActiveCfg = iOS|x64 {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}.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.ActiveCfg = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Linux|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Debug|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM.ActiveCfg = Linux|ARM {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|ARM.Build.0 = Linux|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM64.ActiveCfg = Linux|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM64.ActiveCfg = Linux|ARM64
@ -168,166 +166,116 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x64.Build.0 = MacOS|x64 {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.ActiveCfg = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.Build.0 = MacOS|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.Build.0 = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.ActiveCfg = Windows|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.ActiveCfg = Linux|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.Build.0 = Windows|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.Build.0 = Linux|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.ActiveCfg = Windows|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.ActiveCfg = Debug|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.Build.0 = Windows|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.Build.0 = Debug|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.ActiveCfg = Windows|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.ActiveCfg = Debug|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.Build.0 = Windows|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.Build.0 = Debug|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.ActiveCfg = Windows|x64 {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|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.ActiveCfg = Windows|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.ActiveCfg = Debug|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.Build.0 = Windows|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.Build.0 = Debug|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Windows|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Windows|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Debug|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM64.ActiveCfg = Windows|ARM64 {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|ARM64.Build.0 = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.ActiveCfg = Windows|x64 {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|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.ActiveCfg = Windows|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.ActiveCfg = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.Build.0 = Windows|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.Build.0 = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.ActiveCfg = Android|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.Build.0 = Android|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.ActiveCfg = Android|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.Build.0 = Android|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.ActiveCfg = Android|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x64.ActiveCfg = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.Build.0 = Android|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.ActiveCfg = Android|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.Build.0 = Android|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.ActiveCfg = Android|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.Build.0 = Android|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.ActiveCfg = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.Build.0 = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.ActiveCfg = Debug|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.ActiveCfg = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.Build.0 = Debug|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.Build.0 = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|Any CPU.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.Build.0 = Debug|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|ARM.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.ActiveCfg = Debug|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|ARM64.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.Build.0 = Debug|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|x64.ActiveCfg = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.ActiveCfg = Debug|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|x86.ActiveCfg = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.Build.0 = Debug|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.ActiveCfg = iOS|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.Build.0 = iOS|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.ActiveCfg = iOS|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.Build.0 = iOS|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.ActiveCfg = iOS|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.Build.0 = iOS|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.ActiveCfg = iOS|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.Build.0 = iOS|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.ActiveCfg = iOS|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.Build.0 = iOS|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.ActiveCfg = Linux|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.Build.0 = Linux|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|Any CPU.Build.0 = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.ActiveCfg = Linux|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|ARM.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.Build.0 = Linux|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|ARM.Build.0 = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.ActiveCfg = Linux|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|ARM64.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.Build.0 = Linux|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|ARM64.Build.0 = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.ActiveCfg = Linux|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|x64.ActiveCfg = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.Build.0 = Linux|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|x64.Build.0 = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.ActiveCfg = Linux|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|x86.ActiveCfg = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.Build.0 = Linux|x86 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Release|x86.Build.0 = Debug|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.ActiveCfg = MacOS|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.ActiveCfg = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.Build.0 = MacOS|Any CPU {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.Build.0 = Debug|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.ActiveCfg = MacOS|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.Build.0 = MacOS|ARM {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM64.ActiveCfg = Windows|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.ActiveCfg = MacOS|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.ActiveCfg = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.Build.0 = MacOS|ARM64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.Build.0 = Windows|x64
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.ActiveCfg = MacOS|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.ActiveCfg = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.Build.0 = MacOS|x64 {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.Build.0 = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.ActiveCfg = MacOS|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|Any CPU.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.Build.0 = MacOS|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.ActiveCfg = Windows|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.Build.0 = Windows|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.ActiveCfg = Windows|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x86.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.Build.0 = Windows|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|Any CPU.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.ActiveCfg = Windows|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.Build.0 = Windows|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.ActiveCfg = Windows|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.Build.0 = Windows|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x86.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.ActiveCfg = Windows|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.iOS|Any CPU.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.Build.0 = Windows|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.iOS|ARM.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.ActiveCfg = Windows|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.iOS|ARM64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.Build.0 = Windows|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.iOS|x64.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.ActiveCfg = Windows|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.iOS|x86.ActiveCfg = Windows
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.Build.0 = Windows|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|Any CPU.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.ActiveCfg = Windows|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.Build.0 = Windows|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM64.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.ActiveCfg = Windows|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x64.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.Build.0 = Windows|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x86.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.ActiveCfg = Windows|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|Any CPU.ActiveCfg = Debug
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.Build.0 = Windows|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM.ActiveCfg = Debug
{689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM64.ActiveCfg = Debug
{689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x64.ActiveCfg = Debug
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x86.ActiveCfg = Debug
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|Any CPU.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|Any CPU.Build.0 = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|ARM.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|ARM.Build.0 = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|ARM64.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|ARM64.Build.0 = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|x64.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|x64.Build.0 = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|x86.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.ActiveCfg = Debug|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.Release|x86.Build.0 = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.Build.0 = Debug|ARM {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|Any CPU.ActiveCfg = Debug
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.ActiveCfg = Debug|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM.ActiveCfg = Windows
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.Build.0 = Debug|ARM64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM64.ActiveCfg = Release
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.ActiveCfg = Debug|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.ActiveCfg = Windows
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.Build.0 = Debug|x64 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.Build.0 = Windows
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.ActiveCfg = Debug|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.ActiveCfg = Windows
{689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.Build.0 = Debug|x86 {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.Build.0 = Windows
{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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

136
HorseIsleServer/HISPd/HISPd.csproj Executable file → Normal file
View file

@ -27,7 +27,7 @@
<GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType> <GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net7.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo> <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<NoWin32Manifest>true</NoWin32Manifest> <NoWin32Manifest>true</NoWin32Manifest>
<ApplicationIcon>icon.ico</ApplicationIcon> <ApplicationIcon>icon.ico</ApplicationIcon>
@ -41,45 +41,39 @@
<PackageProjectUrl>https://islehorse.com</PackageProjectUrl> <PackageProjectUrl>https://islehorse.com</PackageProjectUrl>
<RepositoryUrl>https://github.com/islehorse/HISP</RepositoryUrl> <RepositoryUrl>https://github.com/islehorse/HISP</RepositoryUrl>
<RepositoryType>git</RepositoryType> <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>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x86'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x86'">
<RuntimeIdentifier>win-x86</RuntimeIdentifier> <RuntimeIdentifier>win-x86</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<Platforms>x86</Platforms>
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants> <DefineConstants>OS_WINDOWS;ARCH_X86</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|x64'">
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants> <DefineConstants>OS_WINDOWS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM'">
<RuntimeIdentifier>win-arm</RuntimeIdentifier> <RuntimeIdentifier>win-arm</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget> <PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants> <DefineConstants>OS_WINDOWS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Windows|ARM64'">
<RuntimeIdentifier>win-arm64</RuntimeIdentifier> <RuntimeIdentifier>win-arm64</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants> <DefineConstants>OS_WINDOWS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
@ -89,15 +83,15 @@
<PlatformTarget>ARM</PlatformTarget> <PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants> <DefineConstants>OS_ANDROID;ARCH_ARM</DefineConstants>
<WarningLevel>3</WarningLevel> <WarningLevel>3</WarningLevel>
<NoWarn></NoWarn> <NoWarn>1701;1702;2026</NoWarn>
<DebugType>none</DebugType>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Android|ARM64'">
<RuntimeIdentifier>android-arm64</RuntimeIdentifier> <RuntimeIdentifier>android-arm64</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants> <DefineConstants>OS_ANDROID;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|x64'">
@ -105,21 +99,24 @@
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants> <DefineConstants>OS_LINUX;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM'">
<RuntimeIdentifier>linux-arm</RuntimeIdentifier> <RuntimeIdentifier>linux-arm</RuntimeIdentifier>
<PlatformTarget>ARM</PlatformTarget> <PlatformTarget>ARM</PlatformTarget>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants> <DefineConstants>OS_LINUX;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Linux|ARM64'">
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier> <RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants> <DefineConstants>OS_LINUX;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|x64'">
@ -127,13 +124,15 @@
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants> <DefineConstants>OS_MACOS;ARCH_X86_64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MacOS|ARM64'">
<RuntimeIdentifier>osx-arm64</RuntimeIdentifier> <RuntimeIdentifier>osx-arm64</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants> <DefineConstants>OS_MACOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM'">
@ -141,14 +140,12 @@
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>ARM</PlatformTarget> <PlatformTarget>ARM</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM</DefineConstants> <DefineConstants>OS_IOS;ARCH_ARM</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='iOS|ARM64'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier> <RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants> <DefineConstants>OS_IOS;ARCH_ARM64</DefineConstants>
<DebugType>none</DebugType>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='All|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='All|AnyCPU'">
@ -158,12 +155,93 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<Optimize>False</Optimize> <Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE;OS_DEBUG</DefineConstants> <DefineConstants>DEBUG;TRACE;OS_DEBUG;ARCH_ARM</DefineConstants>
<DebugType>full</DebugType> <WarningLevel>3</WarningLevel>
<NoWarn>1701;1702;2026</NoWarn>
</PropertyGroup> </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>

115
HorseIsleServer/HISPd/Program.cs Executable file → Normal file
View file

@ -3,6 +3,7 @@ using HISP.Server;
using System; using System;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
namespace HISP.Cli namespace HISP.Cli
{ {
@ -11,7 +12,7 @@ namespace HISP.Cli
private static StreamWriter sw = null; private static StreamWriter sw = null;
private static FileStream fs = null; private static FileStream fs = null;
private static string logFile; private static string logFile;
private static EventWaitHandle shutdownHandle = null; private static EventWaitHandle shutdownHandle;
public static bool ShuttingDown = false; public static bool ShuttingDown = false;
public static string BaseDir; public static string BaseDir;
@ -44,95 +45,41 @@ namespace HISP.Cli
public static void OnShutdown() public static void OnShutdown()
{ {
try shutdownHandle.Set();
{
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) public static void LogToFile(bool error, string type,string text)
{ {
sw.WriteLine(formatMessage(type, text, false)); sw.WriteLineAsync(text + sw.NewLine);
if (error)
sw.Flush();
} }
public static void LogStdout(bool error, string type, string text) public static void LogStdout(bool error, string type, string text)
{ {
if (type == "CRASH") if (error)
LogToFile(error, type, text); Console.Error.WriteAsync("[" + type + "] " + text + Console.Error.NewLine);
try else
{ Console.Out.WriteAsync("[" + type + "] " + text + Console.Out.NewLine);
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) public static void Main(string[] args)
{ {
AppDomain.CurrentDomain.ProcessExit += ProcessQuitHandler; string BaseDir = Directory.GetCurrentDirectory();
string baseDir = Directory.GetCurrentDirectory();
Logger.SetCallback(LogStdout); Logger.SetCallback(LogStdout);
Entry.SetShutdownCallback(OnShutdown);
string hispConfVar = Environment.GetEnvironmentVariable("HISP_CONF_FILE"); string HispConfVar = Environment.GetEnvironmentVariable("HISP_CONF_FILE");
string hispLogVar = Environment.GetEnvironmentVariable("HISP_LOG_FILE"); string HispLogVar = Environment.GetEnvironmentVariable("HISP_LOG_FILE");
string hispBaseDir = Environment.GetEnvironmentVariable("HISP_BASE_DIR"); string HispBaseDir = Environment.GetEnvironmentVariable("HISP_BASE_DIR");
foreach (string arg in args) foreach (string arg in args)
{ {
switch (arg) switch (arg)
{ {
case "--install-service": case "--install-service":
#if OS_LINUX #if OS_LINUX
File.WriteAllBytes("/etc/systemd/system/HISP.service", Resources.HISPService); File.WriteAllBytes("/etc/systemd/system/HISP.service", Resources.HISPService);
LogStdout(false, "INFO", "Crreated Service! enable it with \"sudo systemctl enable HISP\""); LogStdout(false, "INFO", "Crreated Service! enable it with \"sudo systemctl enable HISP\"");
#else #else
LogStdout(true, "ERROR", "Installing as a service unsupported on this platform"); LogStdout(true, "ERROR", "Installing as a service unsupported on this platform");
#endif #endif
break; break;
default: default:
if (arg.Contains("=")) if (arg.Contains("="))
@ -150,8 +97,8 @@ namespace HISP.Cli
Logger.SetCallback(LogToFile); Logger.SetCallback(LogToFile);
break; break;
case "--base-directory": case "--base-directory":
baseDir = argu[1]; BaseDir = argu[1];
Directory.SetCurrentDirectory(baseDir); Directory.SetCurrentDirectory(BaseDir);
break; break;
default: default:
continue; continue;
@ -162,36 +109,28 @@ namespace HISP.Cli
} }
} }
if (hispConfVar != null) if (HispConfVar != null)
{ {
ConfigReader.ConfigurationFileName = hispConfVar; ConfigReader.ConfigurationFileName = HispConfVar;
} }
if (hispLogVar != null) if (HispLogVar != null)
{ {
LogFile = hispLogVar; LogFile = HispLogVar;
Logger.SetCallback(LogToFile); Logger.SetCallback(LogToFile);
} }
else
if (HispBaseDir != null)
{ {
LogFile = Path.Combine(baseDir, "crash.log"); BaseDir = HispBaseDir;
} Directory.SetCurrentDirectory(BaseDir);
if (hispBaseDir != null)
{
baseDir = hispBaseDir;
Directory.SetCurrentDirectory(baseDir);
} }
Entry.SetShutdownCallback(OnShutdown);
Entry.Start(); Entry.Start();
shutdownHandle = new EventWaitHandle(false, EventResetMode.ManualReset); shutdownHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
shutdownHandle.WaitOne(); shutdownHandle.WaitOne();
} }
private static void ProcessQuitHandler(object sender, EventArgs e)
{
GameServer.ShutdownServer("HISPd process quitting.");
}
} }
} }

70
HorseIsleServer/HISPd/Properties/AssemblyInfo.cs Executable file → Normal file
View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

0
HorseIsleServer/HISPd/Properties/Resources.Designer.cs generated Executable file → Normal file
View file

0
HorseIsleServer/HISPd/Properties/Resources.resx Executable file → Normal file
View file

0
HorseIsleServer/HISPd/Properties/launchSettings.json Executable file → Normal file
View file

0
HorseIsleServer/HISPd/Resources/DEBIAN/conffiles Executable file → Normal file
View file

14
HorseIsleServer/HISPd/Resources/DEBIAN/control Executable file → Normal file
View file

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

0
HorseIsleServer/HISPd/Resources/DEBIAN/copyright Executable file → Normal file
View file

3
HorseIsleServer/HISPd/Resources/DEBIAN/postinst Executable file → Normal file
View file

@ -1,10 +1,7 @@
#!/bin/sh #!/bin/sh
useradd -r horseisle useradd -r horseisle
mkdir -p /etc/hisp
mkdir -p /var/log/hisp
chown -R horseisle:horseisle /etc/hisp chown -R horseisle:horseisle /etc/hisp
chown -R horseisle:horseisle /var/log/hisp
systemctl enable HISP.service systemctl enable HISP.service
systemctl start HISP systemctl start HISP

1
HorseIsleServer/HISPd/Resources/DEBIAN/postrm Executable file → Normal file
View file

@ -1 +1,2 @@
#!/bin/sh #!/bin/sh
userdel horseisle

0
HorseIsleServer/HISPd/Resources/DEBIAN/prerm Executable file → Normal file
View file

6
HorseIsleServer/HISPd/Resources/HISP.service Executable file → Normal file
View file

@ -16,8 +16,8 @@ Type=simple
ProtectSystem=full ProtectSystem=full
PrivateDevices=true PrivateDevices=true
StandardError=journal+console StandardError=syslog+console
StandardOutput=journal+console StandardOutput=syslog+console
User=horseisle User=horseisle
Group=horseisle Group=horseisle
@ -25,7 +25,7 @@ Group=horseisle
WorkingDirectory=/etc/hisp WorkingDirectory=/etc/hisp
ExecStart=/usr/bin/HISPd 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 Environment=USER=horseisle HOME=/etc/hisp HISP_BASE_DIR=/etc/hisp HISP_CONF_FILE=/etc/hisp/server.properties
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

0
HorseIsleServer/HISPd/icon.ico Executable file → Normal file
View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -1,169 +0,0 @@
<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

@ -1,20 +0,0 @@
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

@ -1,35 +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 <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

@ -1,20 +0,0 @@
<?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

@ -1,20 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,19 +0,0 @@
<?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

@ -1,74 +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.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);
}
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,51 +0,0 @@
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

@ -1,59 +0,0 @@
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

@ -1,416 +0,0 @@
//#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

@ -1,40 +0,0 @@
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

@ -1,248 +0,0 @@
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

@ -0,0 +1,748 @@
"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:_7686E608D62344A3B6FD5C91755693AA"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C3608492E4D74B8683DE9CB3B3DE5D8A"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
}
"Configurations"
{
"Windows"
{
"DisplayName" = "8:Windows"
"IsDebugOnly" = "11:FALSE"
"IsReleaseOnly" = "11:TRUE"
"OutputFilename" = "8:Windows\\HISP-N00BS.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
"Compression" = "3:3"
"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}:_C3608492E4D74B8683DE9CB3B3DE5D8A"
{
"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:"
}
}
"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:{99C89A9F-08DD-46A7-93D3-A1097FF01E9D}"
"PackageCode" = "8:{150AB74C-78D9-4115-8BD0-ADE380F0C993}"
"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.2"
"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:_C3608492E4D74B8683DE9CB3B3DE5D8A"
"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}:_2D6B5B28608E4FE5BD5E9AE8F9799C42"
{
"Name" = "8:HISP-N00BS"
"Arguments" = "8:"
"Description" = "8:"
"ShowCmd" = "3:1"
"IconIndex" = "3:0"
"Transitive" = "11:FALSE"
"Target" = "8:_7686E608D62344A3B6FD5C91755693AA"
"Folder" = "8:_3B89F894B58B4F149DD0DBE5EC931BA2"
"WorkingFolder" = "8:_E3419B32123541589220537FB1154298"
"Icon" = "8:_C3608492E4D74B8683DE9CB3B3DE5D8A"
"Feature" = "8:"
}
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_E1442F9672E44E8ABE7FF8CE91B674A0"
{
"Name" = "8:HISP-N00BS"
"Arguments" = "8:"
"Description" = "8:"
"ShowCmd" = "3:1"
"IconIndex" = "3:0"
"Transitive" = "11:FALSE"
"Target" = "8:_7686E608D62344A3B6FD5C91755693AA"
"Folder" = "8:_2BED5EC5191147F4815904695DFB5319"
"WorkingFolder" = "8:_E3419B32123541589220537FB1154298"
"Icon" = "8:_C3608492E4D74B8683DE9CB3B3DE5D8A"
"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}:_7686E608D62344A3B6FD5C91755693AA"
{
"SourcePath" = "8:..\\N00BS\\obj\\x86\\Windows\\net7.0-windows\\win-x86\\apphost.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\\Win32.pubxml"
"ExcludeFilters"
{
}
}
}
}
}

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

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

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

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

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

View file

@ -1,94 +1,94 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using HISP.Player; using HISP.Player;
using HISP.Server; using HISP.Server;
namespace HISP.Game.Chat namespace HISP.Game.Chat
{ {
public class ChatMsg public class Chat
{ {
public struct Correction public struct Correction
{ {
public string FilteredWord; public string FilteredWord;
public string ReplacedWord; public string ReplacedWord;
} }
public struct Reason public struct Reason
{ {
public string Name; public string Name;
public string Message; public string Message;
} }
public struct Filter public struct Filter
{ {
public string FilteredWord; public string FilteredWord;
public Reason Reason; public Reason Reason;
public bool MatchAll; public bool MatchAll;
} }
public enum ChatChannel public enum ChatChannel
{ {
All = 0x14, All = 0x14,
Ads = 0x1D, Ads = 0x1D,
Near = 0x15, Near = 0x15,
Buddies = 0x17, Buddies = 0x17,
Here = 0x18, Here = 0x18,
Isle = 0x1A, Isle = 0x1A,
Dm = 0x16, Dm = 0x16,
Mod = 0x1c, Mod = 0x1c,
Admin = 0x1b Admin = 0x1b
} }
public static string PrivateMessageSound; public static string PrivateMessageSound;
private static List<Filter> filteredWords = new List<Filter>(); private static List<Filter> filteredWords = new List<Filter>();
private static List<Correction> correctedWords = new List<Correction>(); private static List<Correction> correctedWords = new List<Correction>();
private static List<Reason> reasons = new List<Reason>(); private static List<Reason> reasons = new List<Reason>();
public static void AddFilter(Filter filter) public static void AddFilter(Filter filter)
{ {
filteredWords.Add(filter); filteredWords.Add(filter);
} }
public static void AddCorrection(Correction correction) public static void AddCorrection(Correction correction)
{ {
correctedWords.Add(correction); correctedWords.Add(correction);
} }
public static void AddReason(Reason reason) public static void AddReason(Reason reason)
{ {
reasons.Add(reason); reasons.Add(reason);
} }
public static Filter[] FilteredWords public static Filter[] FilteredWords
{ {
get get
{ {
return filteredWords.ToArray(); return filteredWords.ToArray();
} }
} }
public static Correction[] CorrectedWords public static Correction[] CorrectedWords
{ {
get get
{ {
return correctedWords.ToArray(); return correctedWords.ToArray();
} }
} }
public static Reason[] Reasons public static Reason[] Reasons
{ {
get get
{ {
return reasons.ToArray(); return reasons.ToArray();
} }
} }
public static bool ProcessCommand(User user, string message) public static bool ProcessCommand(User user, string message)
{ {
if (message.Length < 1) if (message.Length < 1)
return false; return false;
string parsedMessage = message; string parsedMessage = message;
parsedMessage = parsedMessage.Trim(); parsedMessage = parsedMessage.Trim();
char cLetter = parsedMessage[0]; char cLetter = parsedMessage[0];
parsedMessage = parsedMessage.Substring(1).Trim(); parsedMessage = parsedMessage.Substring(1).Trim();
@ -102,408 +102,408 @@ namespace HISP.Game.Chat
if (parsedMessage.ToUpper(CultureInfo.InvariantCulture).StartsWith(cmd.CmdName)) if (parsedMessage.ToUpper(CultureInfo.InvariantCulture).StartsWith(cmd.CmdName))
{ {
string[] args = parsedMessage.Substring(cmd.CmdName.Length).Trim().Split(' '); string[] args = parsedMessage.Substring(cmd.CmdName.Length).Trim().Split(' ');
return cmd.Execute(messageToGive, args, user); return cmd.CmdCallback(messageToGive, args, user);
} }
} }
} }
return false; return false;
} }
public static Object FilterMessage(string message) // Handles chat filtering and violation stuffs public static Object FilterMessage(string message) // Handles chat filtering and violation stuffs
{ {
if (!ConfigReader.EnableSwearFilter) // Freedom of Speech Mode if (!ConfigReader.BadWords) // Freedom of Speech Mode
return null; return null;
string[] wordsSaid; string[] wordsSaid;
if (message.Contains(' ')) if (message.Contains(' '))
wordsSaid = message.Split(' '); wordsSaid = message.Split(' ');
else else
wordsSaid = new string[] { message }; wordsSaid = new string[] { message };
foreach(Filter filter in FilteredWords) foreach(Filter filter in FilteredWords)
{ {
if (!filter.MatchAll) if (!filter.MatchAll)
{ {
foreach (string word in wordsSaid) foreach (string word in wordsSaid)
{ {
if (word.ToLower() == filter.FilteredWord.ToLower()) if (word.ToLower() == filter.FilteredWord.ToLower())
return filter.Reason; return filter.Reason;
} }
} }
else else
{ {
if (message.ToLower().Contains(filter.FilteredWord)) if (message.ToLower().Contains(filter.FilteredWord))
return filter.Reason; return filter.Reason;
} }
} }
return null; return null;
} }
public static byte GetSide(ChatChannel channel) public static byte GetSide(ChatChannel channel)
{ {
switch (channel) switch (channel)
{ {
case ChatChannel.All: case ChatChannel.All:
case ChatChannel.Ads: case ChatChannel.Ads:
case ChatChannel.Isle: case ChatChannel.Isle:
return PacketBuilder.CHAT_BOTTOM_LEFT; return PacketBuilder.CHAT_BOTTOM_LEFT;
case ChatChannel.Buddies: case ChatChannel.Buddies:
case ChatChannel.Here: case ChatChannel.Here:
case ChatChannel.Admin: case ChatChannel.Admin:
case ChatChannel.Mod: case ChatChannel.Mod:
return PacketBuilder.CHAT_BOTTOM_RIGHT; return PacketBuilder.CHAT_BOTTOM_RIGHT;
case ChatChannel.Dm: case ChatChannel.Dm:
return PacketBuilder.CHAT_DM_RIGHT; return PacketBuilder.CHAT_DM_RIGHT;
default: default:
Logger.ErrorPrint("unknown channel: " + (byte)channel); Logger.ErrorPrint("unknown channel: " + (byte)channel);
return PacketBuilder.CHAT_BOTTOM_LEFT; return PacketBuilder.CHAT_BOTTOM_LEFT;
} }
} }
public static string GetDmRecipiant(string message) public static string GetDmRecipiant(string message)
{ {
if(message.Contains('|')) if(message.Contains('|'))
{ {
string recipiantName = message.Split('|')[0]; string recipiantName = message.Split('|')[0];
return recipiantName; return recipiantName;
} }
else else
{ {
return null; return null;
} }
} }
public static string GetDmMessage(string message) public static string GetDmMessage(string message)
{ {
if (message.Contains('|')) if (message.Contains('|'))
{ {
string messageStr = message.Split('|')[1]; string messageStr = message.Split('|')[1];
return messageStr; return messageStr;
} }
else else
{ {
return message; return message;
} }
} }
public static GameClient[] GetRecipiants(User user, ChatChannel channel, string to=null) public static GameClient[] GetRecipiants(User user, ChatChannel channel, string to=null)
{ {
if (channel == ChatChannel.All) if (channel == ChatChannel.All)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (!client.User.MuteGlobal && !client.User.MuteAll) if (!client.LoggedinUser.MuteGlobal && !client.LoggedinUser.MuteAll)
if (client.User.Id != user.Id) if (client.LoggedinUser.Id != user.Id)
if(!client.User.MutePlayer.IsUserMuted(user)) if(!client.LoggedinUser.MutePlayer.IsUserMuted(user))
recipiants.Add(client); recipiants.Add(client);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if(channel == ChatChannel.Ads) if(channel == ChatChannel.Ads)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (!client.User.MuteAds && !client.User.MuteAll) if (!client.LoggedinUser.MuteAds && !client.LoggedinUser.MuteAll)
if (client.User.Id != user.Id) if (client.LoggedinUser.Id != user.Id)
if (!client.User.MutePlayer.IsUserMuted(user)) if (!client.LoggedinUser.MutePlayer.IsUserMuted(user))
recipiants.Add(client); recipiants.Add(client);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if(channel == ChatChannel.Buddies) if(channel == ChatChannel.Buddies)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (!client.User.MuteBuddy && !client.User.MuteAll) if (!client.LoggedinUser.MuteBuddy && !client.LoggedinUser.MuteAll)
if (client.User.Id != user.Id) if (client.LoggedinUser.Id != user.Id)
if (client.User.Friends.List.Contains(user.Id)) if (client.LoggedinUser.Friends.List.Contains(user.Id))
if (!client.User.MutePlayer.IsUserMuted(user)) if (!client.LoggedinUser.MutePlayer.IsUserMuted(user))
recipiants.Add(client); recipiants.Add(client);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if (channel == ChatChannel.Isle) if (channel == ChatChannel.Isle)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
if(World.InIsle(user.X,user.Y)) if(World.InIsle(user.X,user.Y))
{ {
User[] usersInSile = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), true, false); User[] usersInSile = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), true, false);
foreach (User userInIsle in usersInSile) foreach (User userInIsle in usersInSile)
{ {
if (user.Id != userInIsle.Id) if (user.Id != userInIsle.Id)
if(!userInIsle.MuteAll && !userInIsle.MuteIsland) if(!userInIsle.MuteAll && !userInIsle.MuteIsland)
if(!userInIsle.MutePlayer.IsUserMuted(user)) if(!userInIsle.MutePlayer.IsUserMuted(user))
recipiants.Add(userInIsle.Client); recipiants.Add(userInIsle.LoggedinClient);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
else else
{ {
return new GameClient[0]; return new GameClient[0];
} }
} }
if (channel == ChatChannel.Here) if (channel == ChatChannel.Here)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
User[] usersHere = GameServer.GetUsersAt(user.X, user.Y, true, false); User[] usersHere = GameServer.GetUsersAt(user.X, user.Y, true, false);
foreach (User userHere in usersHere) foreach (User userHere in usersHere)
{ {
if (user.Id != userHere.Id) if (user.Id != userHere.Id)
if (!userHere.MuteAll && !userHere.MuteHere) if (!userHere.MuteAll && !userHere.MuteHere)
if (!userHere.MutePlayer.IsUserMuted(user)) if (!userHere.MutePlayer.IsUserMuted(user))
recipiants.Add(userHere.Client); recipiants.Add(userHere.LoggedinClient);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if (channel == ChatChannel.Near) if (channel == ChatChannel.Near)
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, true, false); User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, true, false);
foreach (User nearbyUser in nearbyUsers) foreach (User nearbyUser in nearbyUsers)
{ {
if (user.Id != nearbyUser.Id) if (user.Id != nearbyUser.Id)
if (!nearbyUser.MuteAll && !nearbyUser.MuteNear) if (!nearbyUser.MuteAll && !nearbyUser.MuteNear)
if (!nearbyUser.MutePlayer.IsUserMuted(user)) if (!nearbyUser.MutePlayer.IsUserMuted(user))
recipiants.Add(nearbyUser.Client); recipiants.Add(nearbyUser.LoggedinClient);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if (channel == ChatChannel.Mod) if (channel == ChatChannel.Mod)
{ {
if (!user.Moderator && !user.Administrator) // No mod chat for non-mods! if (!user.Moderator && !user.Administrator) // No mod chat for non-mods!
{ {
Logger.WarnPrint(user.Username + " attempted to send in MOD chat, without being a MOD."); Logger.WarnPrint(user.Username + " attempted to send in MOD chat, without being a MOD.");
return new GameClient[0]; return new GameClient[0];
} }
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (client.User.Moderator) if (client.LoggedinUser.Moderator)
if (client.User.Id != user.Id) if (client.LoggedinUser.Id != user.Id)
recipiants.Add(client); recipiants.Add(client);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if(channel == ChatChannel.Admin) if(channel == ChatChannel.Admin)
{ {
if (!user.Administrator) // No admin chat for non-admins! if (!user.Administrator) // No admin chat for non-admins!
{ {
Logger.WarnPrint(user.Username + " attempted to send in ADMIN chat, without being an ADMIN."); Logger.WarnPrint(user.Username + " attempted to send in ADMIN chat, without being an ADMIN.");
return new GameClient[0]; return new GameClient[0];
} }
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (client.User.Administrator) if (client.LoggedinUser.Administrator)
if (client.User.Id != user.Id) if (client.LoggedinUser.Id != user.Id)
recipiants.Add(client); recipiants.Add(client);
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
if(channel == ChatChannel.Dm) if(channel == ChatChannel.Dm)
{ {
if (to != null && to != "") if (to != null && to != "")
{ {
List<GameClient> recipiants = new List<GameClient>(); List<GameClient> recipiants = new List<GameClient>();
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
{ {
if (!client.User.MutePrivateMessage && !client.User.MuteAll) if (!client.LoggedinUser.MutePrivateMessage && !client.LoggedinUser.MuteAll)
{ {
if (client.User.Username.ToLower().StartsWith(to.ToLower())) if (client.LoggedinUser.Username.ToLower().StartsWith(to.ToLower()))
{ {
recipiants.Add(client); recipiants.Add(client);
break; break;
} }
} }
} }
} }
return recipiants.ToArray(); return recipiants.ToArray();
} }
else else
{ {
Logger.ErrorPrint("Channel is " + channel + " (DM) BUT no 'to' Paramater was specfied"); Logger.ErrorPrint("Channel is " + channel + " (DM) BUT no 'to' Paramater was specfied");
return new GameClient[0]; return new GameClient[0];
} }
} }
Logger.ErrorPrint(user.Username + " Sent message in unknown channel: " + (byte)channel); Logger.ErrorPrint(user.Username + " Sent message in unknown channel: " + (byte)channel);
return new GameClient[0]; // No recipiants return new GameClient[0]; // No recipiants
} }
public static string DoCorrections(string message) public static string DoCorrections(string message)
{ {
if (!ConfigReader.EnableCorrections) if (!ConfigReader.DoCorrections)
return message; return message;
foreach(Correction correct in CorrectedWords) foreach(Correction correct in CorrectedWords)
message = message.Replace(correct.FilteredWord, correct.ReplacedWord); message = message.Replace(correct.FilteredWord, correct.ReplacedWord);
return message.Trim(); return message.Trim();
} }
public static string EscapeMessage(string message) public static string EscapeMessage(string message)
{ {
return message.Replace("<", "&lt;"); return message.Replace("<", "&lt;");
} }
public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply=false) public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply=false)
{ {
switch (channel) switch (channel)
{ {
case ChatChannel.All: case ChatChannel.All:
if (user.Moderator || user.Administrator) if (user.Moderator || user.Administrator)
return Messages.FormatGlobalChatMessageForMod(user.Username, message); return Messages.FormatGlobalChatMessageForMod(user.Username, message);
else else
return Messages.FormatGlobalChatMessage(user.Username, message); return Messages.FormatGlobalChatMessage(user.Username, message);
case ChatChannel.Ads: case ChatChannel.Ads:
return Messages.FormatAdsChatMessage(user.Username, message); return Messages.FormatAdsChatMessage(user.Username, message);
case ChatChannel.Buddies: case ChatChannel.Buddies:
return Messages.FormatBuddyChatMessage(user.Username, message); return Messages.FormatBuddyChatMessage(user.Username, message);
case ChatChannel.Dm: case ChatChannel.Dm:
string badge = ""; string badge = "";
if (user.Moderator || user.Administrator) if (user.Moderator || user.Administrator)
badge += Messages.DmModBadge; badge += Messages.DmModBadge;
if (autoReply) if (autoReply)
badge += Messages.DmAutoResponse; badge += Messages.DmAutoResponse;
return Messages.FormatDirectMessage(user.Username, message, badge); return Messages.FormatDirectMessage(user.Username, message, badge);
case ChatChannel.Near: case ChatChannel.Near:
return Messages.FormatNearbyChatMessage(user.Username, message); return Messages.FormatNearbyChatMessage(user.Username, message);
case ChatChannel.Isle: case ChatChannel.Isle:
return Messages.FormatIsleChatMessage(user.Username, message); return Messages.FormatIsleChatMessage(user.Username, message);
case ChatChannel.Here: case ChatChannel.Here:
return Messages.FormatHereChatMessage(user.Username, message); return Messages.FormatHereChatMessage(user.Username, message);
case ChatChannel.Mod: case ChatChannel.Mod:
if (user.Moderator || user.Administrator) if (user.Moderator || user.Administrator)
return Messages.FormatModChatMessage(user.Username, message); return Messages.FormatModChatMessage(user.Username, message);
else else
{ {
Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
return ""; return "";
} }
case ChatChannel.Admin: case ChatChannel.Admin:
if (user.Administrator) if (user.Administrator)
return Messages.FormatAdminChatMessage(user.Username, message); return Messages.FormatAdminChatMessage(user.Username, message);
else else
{ {
Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)");
return ""; return "";
} }
default: default:
Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X"));
return "not implemented yet :("; return "not implemented yet :(";
} }
} }
public static string FormatChatForSender(User user, ChatChannel channel, string message, string dmRecipiant=null, bool autoReply=false) public static string FormatChatForSender(User user, ChatChannel channel, string message, string dmRecipiant=null, bool autoReply=false)
{ {
switch (channel) switch (channel)
{ {
case ChatChannel.All: case ChatChannel.All:
if (user.Moderator || user.Administrator) if (user.Moderator || user.Administrator)
return Messages.FormatGlobalChatMessageForMod(user.Username, message); return Messages.FormatGlobalChatMessageForMod(user.Username, message);
else else
return Messages.FormatGlobalChatMessage(user.Username, message); return Messages.FormatGlobalChatMessage(user.Username, message);
case ChatChannel.Ads: case ChatChannel.Ads:
int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat(); // vry specific function ik int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat(); // vry specific function ik
return Messages.FormatAdsChatForSender(numbListening-1, user.Username, message); return Messages.FormatAdsChatForSender(numbListening-1, user.Username, message);
case ChatChannel.Buddies: case ChatChannel.Buddies:
return Messages.FormatBuddyChatMessageForSender(GameServer.GetNumberOfBuddiesOnline(user), user.Username, message); return Messages.FormatBuddyChatMessageForSender(GameServer.GetNumberOfBuddiesOnline(user), user.Username, message);
case ChatChannel.Isle: case ChatChannel.Isle:
int inIsle = 0; int inIsle = 0;
if (World.InIsle(user.X, user.Y)) if (World.InIsle(user.X, user.Y))
inIsle = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), false, false).Length -1; inIsle = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), false, false).Length -1;
return Messages.FormatIsleChatMessageForSender(inIsle, user.Username, message); return Messages.FormatIsleChatMessageForSender(inIsle, user.Username, message);
case ChatChannel.Here: case ChatChannel.Here:
int usersHere = GameServer.GetUsersAt(user.X, user.Y, false, false).Length -1; int usersHere = GameServer.GetUsersAt(user.X, user.Y, false, false).Length -1;
return Messages.FormatHereChatMessageForSender(usersHere, user.Username, message); return Messages.FormatHereChatMessageForSender(usersHere, user.Username, message);
case ChatChannel.Near: case ChatChannel.Near:
int nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, false).Length -1; int nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, false).Length -1;
return Messages.FormatNearChatMessageForSender(nearbyUsers, user.Username, message); return Messages.FormatNearChatMessageForSender(nearbyUsers, user.Username, message);
case ChatChannel.Mod: case ChatChannel.Mod:
int modsOnline = GameServer.GetNumberOfModsOnline() - 1; int modsOnline = GameServer.GetNumberOfModsOnline() - 1;
return Messages.FormatModChatForSender(modsOnline, user.Username, message); return Messages.FormatModChatForSender(modsOnline, user.Username, message);
case ChatChannel.Admin: case ChatChannel.Admin:
int adminsOnline = GameServer.GetNumberOfAdminsOnline() - 1; int adminsOnline = GameServer.GetNumberOfAdminsOnline() - 1;
return Messages.FormatAdminChatForSender(adminsOnline, user.Username, message); return Messages.FormatAdminChatForSender(adminsOnline, user.Username, message);
case ChatChannel.Dm: case ChatChannel.Dm:
string badge = ""; string badge = "";
if (user.Moderator || user.Administrator) if (user.Moderator || user.Administrator)
badge += Messages.DmModBadge; badge += Messages.DmModBadge;
if (autoReply) if (autoReply)
badge += Messages.DmAutoResponse; badge += Messages.DmAutoResponse;
return Messages.FormatDirectChatMessageForSender(user.Username, dmRecipiant, message, badge); return Messages.FormatDirectChatMessageForSender(user.Username, dmRecipiant, message, badge);
default: default:
Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X"));
return "not implemented yet :("; return "not implemented yet :(";
} }
} }
public static string NonViolationChecks(User user, string message) public static string NonViolationChecks(User user, string message)
{ {
if(!ConfigReader.EnableNonViolations) if(!ConfigReader.DoNonViolations)
return null; return null;
// Check if contains password. // Check if contains password.
if (message.ToLower().Contains(user.Password.ToLower())) if (message.ToLower().Contains(user.Password.ToLower()))
return Messages.PasswordNotice; return Messages.PasswordNotice;
// Check if ALL CAPS // Check if ALL CAPS
string[] wordsSaid; string[] wordsSaid;
if (message.Contains(' ')) if (message.Contains(' '))
wordsSaid = message.Split(' '); wordsSaid = message.Split(' ');
else else
wordsSaid = new string[] { message }; wordsSaid = new string[] { message };
foreach (string word in wordsSaid) foreach (string word in wordsSaid)
{ {
string lettersOnly = ""; string lettersOnly = "";
foreach(char c in word) foreach(char c in word)
{ {
if((byte)c >= (byte)'A' && (byte)c <= (byte)'z') // is letter if((byte)c >= (byte)'A' && (byte)c <= (byte)'z') // is letter
{ {
lettersOnly += c; lettersOnly += c;
} }
} }
if (lettersOnly.ToUpper() == lettersOnly && lettersOnly.Length >= 5) if (lettersOnly.ToUpper() == lettersOnly && lettersOnly.Length >= 5)
return Messages.CapsNotice; return Messages.CapsNotice;
} }
return null; return null;
} }
public static Reason GetReason(string name) public static Reason GetReason(string name)
{ {
foreach (Reason reason in Reasons) foreach (Reason reason in Reasons)
if (reason.Name == name) if (reason.Name == name)
return reason; return reason;
throw new KeyNotFoundException("Reason " + name + " not found."); throw new KeyNotFoundException("Reason " + name + " not found.");
} }
} }
} }

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

File diff suppressed because it is too large Load diff

36
HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs Executable file → Normal file
View file

@ -15,43 +15,17 @@ namespace HISP.Game.Chat
return registeredComamnds.ToArray(); return registeredComamnds.ToArray();
} }
} }
private Func<string, string[], User, bool> commandCallback;
public bool CmdRequiresAdmin;
public bool CmdRequiresMod;
public char CmdLetter; public char CmdLetter;
public string CmdName; public string CmdName;
public string CmdUsage; public Func<string,string[],User, bool> CmdCallback;
public CommandRegister(char cmdLetter, string cmdName, string cmdUsage, Func<string, string[], User, bool> cmdCallback, bool cmdRequiresAdmin, bool cmdRequiresMod) public CommandRegister(char cmdLetter, string cmdName, Func<string, string[], User, bool> cmdCallback)
{ {
this.CmdLetter = cmdLetter; CmdLetter = cmdLetter;
this.CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture).Trim(); CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture);
this.CmdUsage = cmdUsage; CmdCallback = cmdCallback;
this.CmdRequiresMod = cmdRequiresMod;
this.CmdRequiresAdmin = cmdRequiresAdmin;
this.commandCallback = cmdCallback;
registeredComamnds.Add(this); 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 Executable file → Normal file
View file

View file

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

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

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

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

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

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

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

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

@ -59,7 +59,7 @@ namespace HISP.Game.Events
if (Database.HasPlayerCompletedRealTimeRiddle(RiddleId, winner.Id)) if (Database.HasPlayerCompletedRealTimeRiddle(RiddleId, winner.Id))
{ {
byte[] alreadyWonRiddleMessage = PacketBuilder.CreateChat(Messages.EventAlreadySovledRealTimeRiddle, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] alreadyWonRiddleMessage = PacketBuilder.CreateChat(Messages.EventAlreadySovledRealTimeRiddle, PacketBuilder.CHAT_BOTTOM_RIGHT);
winner.Client.SendPacket(alreadyWonRiddleMessage); winner.LoggedinClient.SendPacket(alreadyWonRiddleMessage);
return; return;
} }
@ -81,7 +81,7 @@ namespace HISP.Game.Events
foreach (GameClient client in GameClient.ConnectedClients) foreach (GameClient client in GameClient.ConnectedClients)
{ {
if (client.LoggedIn) if (client.LoggedIn)
if (client.User.Id != winner.Id) if (client.LoggedinUser.Id != winner.Id)
client.SendPacket(riddleWonMessage); client.SendPacket(riddleWonMessage);
else else
client.SendPacket(riddleYouWonMessage); 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); byte[] youWinMsg = PacketBuilder.CreateChat(Messages.EventWonWaterBallonGame, PacketBuilder.CHAT_BOTTOM_RIGHT);
winner.UserHit.AddMoney(20000); winner.UserHit.AddMoney(20000);
winner.UserHit.Client.SendPacket(youWinMsg); winner.UserHit.LoggedinClient.SendPacket(youWinMsg);
winner.UserHit.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WaterbaloonGameWin).Count++; winner.UserHit.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WaterbaloonGameWin).Count++;
} }

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

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

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

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

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

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

View file

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

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

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

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

View file

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

View file

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

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

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

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

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

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

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

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

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

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

File diff suppressed because it is too large Load diff

23
HorseIsleServer/LibHISP/Game/Meta.cs Executable file → Normal file
View file

@ -11,7 +11,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Drawing; using System.Drawing;
using HISP.Util;
namespace HISP.Game namespace HISP.Game
{ {
@ -1154,9 +1153,9 @@ namespace HISP.Game
{ {
if (client.LoggedIn) if (client.LoggedIn)
{ {
if (client.User.Stealth) if (client.LoggedinUser.Stealth)
continue; continue;
onlineUsers.Add(client.User); onlineUsers.Add(client.LoggedinUser);
} }
} }
@ -1189,17 +1188,17 @@ namespace HISP.Game
{ {
if (client.LoggedIn) if (client.LoggedIn)
{ {
if (client.User.Stealth) if (client.LoggedinUser.Stealth)
continue; continue;
bool isYou = (client.User.Id == currentUser.Id); bool isYou = (client.LoggedinUser.Id == currentUser.Id);
int icon = client.User.GetPlayerListIcon(); int icon = client.LoggedinUser.GetPlayerListIcon();
string iconFormat = ""; string iconFormat = "";
if (icon != -1) if (icon != -1)
iconFormat = Messages.FormatIconFormat(icon); iconFormat = Messages.FormatIconFormat(icon);
message += Messages.FormatPlayerEntry(iconFormat, client.User.Username, client.User.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - client.User.LoginTime).TotalMinutes)), client.User.X, client.User.Y, client.User.Idle, currentUser.MutePlayer.IsUserMuted(client.User), isYou); message += Messages.FormatPlayerEntry(iconFormat, client.LoggedinUser.Username, client.LoggedinUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - client.LoggedinUser.LoginTime).TotalMinutes)), client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Idle, currentUser.MutePlayer.IsUserMuted(client.LoggedinUser), isYou);
} }
} }
@ -1241,7 +1240,7 @@ namespace HISP.Game
continue; continue;
string username = Database.GetUsername(id); string username = Database.GetUsername(id);
int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Helper.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes)); int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Util.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes));
message += Messages.FormatOfflineBuddyEntry(username, id, minutes); message += Messages.FormatOfflineBuddyEntry(username, id, minutes);
} }
@ -1734,8 +1733,8 @@ namespace HISP.Game
bool mine = (ranch.OwnerId == user.Id); bool mine = (ranch.OwnerId == user.Id);
string swfModule = ranch.GetSwf(mine); string swfModule = ranch.GetSwf(mine);
byte[] moduleSwf = PacketBuilder.CreateSwfModule(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE); byte[] moduleSwf = PacketBuilder.CreateSwfModulePacket(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE);
user.Client.SendPacket(moduleSwf); user.LoggedinClient.SendPacket(moduleSwf);
if (mine) // This is My DS. if (mine) // This is My DS.
{ {
@ -2105,7 +2104,7 @@ namespace HISP.Game
} }
public static string BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId) public static string BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId)
{ {
DateTime time = Helper.UnixTimeStampToDateTime(mailMessage.Timestamp); DateTime time = Util.UnixTimeStampToDateTime(mailMessage.Timestamp);
string amOrPm = "am"; string amOrPm = "am";
string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
string minutes = time.Minute.ToString(); string minutes = time.Minute.ToString();
@ -2581,7 +2580,7 @@ namespace HISP.Game
{ {
string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name); string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name);
foreach (string gender in breed.GenderTypes()) foreach (string gender in breed.GenderTypes())
message += Messages.FormatPawneerOrderGenderEntry(Helper.CapitalizeFirstLetter(gender), gender); message += Messages.FormatPawneerOrderGenderEntry(Util.CapitalizeFirstLetter(gender), gender);
message += Messages.BackToMap; message += Messages.BackToMap;
message += Messages.MetaTerminator; message += Messages.MetaTerminator;
return message; return message;

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

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

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

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

@ -238,7 +238,7 @@ namespace HISP.Game
if (quest.SuccessMessage != null) if (quest.SuccessMessage != null)
{ {
byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(ChatPacket); user.LoggedinClient.SendPacket(ChatPacket);
} }
if (quest.SuccessNpcChat != null) if (quest.SuccessNpcChat != null)
@ -246,7 +246,7 @@ namespace HISP.Game
if (!npcActivation) if (!npcActivation)
{ {
byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(ChatPacket); user.LoggedinClient.SendPacket(ChatPacket);
} }
} }
@ -264,8 +264,8 @@ namespace HISP.Game
// Is cloud isles quest? // Is cloud isles quest?
if (quest.Id == CloudIslesQuest) if (quest.Id == CloudIslesQuest)
{ {
byte[] swfLoadPacket = PacketBuilder.CreateSwfModule("ballooncutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); byte[] swfLoadPacket = PacketBuilder.CreateSwfModulePacket("ballooncutscene", PacketBuilder.PACKET_SWF_CUTSCENE);
user.Client.SendPacket(swfLoadPacket); user.LoggedinClient.SendPacket(swfLoadPacket);
} }
return res; return res;
@ -290,7 +290,7 @@ namespace HISP.Game
if (!npcActivation) if (!npcActivation)
{ {
byte[] ChatPacket = PacketBuilder.CreateChat(quest.FailNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] ChatPacket = PacketBuilder.CreateChat(quest.FailNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(ChatPacket); user.LoggedinClient.SendPacket(ChatPacket);
} }
else else
{ {
@ -371,7 +371,7 @@ namespace HISP.Game
if(result.NpcChat != null) if(result.NpcChat != null)
{ {
byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(ChatPacket); user.LoggedinClient.SendPacket(ChatPacket);
} }
return true; return true;
} }
@ -383,7 +383,7 @@ namespace HISP.Game
if (result.NpcChat != null) if (result.NpcChat != null)
{ {
byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.Client.SendPacket(ChatPacket); user.LoggedinClient.SendPacket(ChatPacket);
} }
return true; return true;
} }

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

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

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

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

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

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

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

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

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

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

2
HorseIsleServer/LibHISP/Game/Services/Shop.cs Executable file → Normal file
View file

@ -24,7 +24,7 @@ namespace HISP.Game.Services
if (Item.ItemIdExist(stock)) if (Item.ItemIdExist(stock))
this.Inventory.AddInfinity(Item.GetItemById(stock)); this.Inventory.AddInfinity(Item.GetItemById(stock));
else else
Logger.WarnPrint("Item ID: " + stock + " doesn't exist, but shop " + id + " stocks it"); Logger.WarnPrint("Item ID: " + stock + " Does not exist.");
} }
ItemInstance[] instances = Database.GetShopInventory(this.Id); ItemInstance[] instances = Database.GetShopInventory(this.Id);

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

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

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