diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml old mode 100755 new mode 100644 index 159b35c..f96f8c4 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,130 +8,12 @@ defaults: working-directory: ./HorseIsleServer jobs: - build-linux: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Git Submodule update - run: git submodule update --init --recursive - - - 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 .. + build: - - - name: Build deb package - continue-on-error: false - run: | - mkdir /tmp/debpkg - mkdir /tmp/debpkg/Debian64 - mkdir /tmp/debpkg/Debian64/etc - mkdir /tmp/debpkg/Debian64/usr - mkdir /tmp/debpkg/Debian64/etc/hisp - mkdir /tmp/debpkg/Debian64/etc/hisp/gamedata - mkdir /tmp/debpkg/Debian64/etc/systemd - mkdir /tmp/debpkg/Debian64/etc/systemd/system - mkdir /tmp/debpkg/Debian64/usr/bin - mkdir /tmp/debpkg/Debian64/usr/lib - mkdir /tmp/debpkg/Debian64/DEBIAN - cp LibHISP/Resources/server.properties /tmp/debpkg/Debian64/etc/hisp/server.properties - cp LibHISP/Resources/default_cross_domain.xml /tmp/debpkg/Debian64/etc/hisp/CrossDomainPolicy.xml - cp -r HISPd/Resources/DEBIAN/* /tmp/debpkg/Debian64/DEBIAN - cp -r HISPd/bin/x64/Linux/net8.0/linux-x64/publish/gamedata/* /tmp/debpkg/Debian64/etc/hisp/gamedata - cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/libe_sqlite3.so /tmp/debpkg/Debian64/usr/lib/libe_sqlite3.so - cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/HI1.MAP /tmp/debpkg/Debian64/etc/hisp/HI1.MAP - cp HISPd/bin/x64/Linux/net8.0/linux-x64/publish/HISPd /tmp/debpkg/Debian64/usr/bin/HISPd - cp HISPd/Resources/HISP.service /tmp/debpkg/Debian64/etc/systemd/system/HISP.service - cat /tmp/debpkg/Debian64/DEBIAN/control - dos2unix /tmp/debpkg/Debian64/DEBIAN/conffiles - dos2unix /tmp/debpkg/Debian64/DEBIAN/control - dos2unix /tmp/debpkg/Debian64/DEBIAN/postinst - dos2unix /tmp/debpkg/Debian64/DEBIAN/postrm - dos2unix /tmp/debpkg/Debian64/DEBIAN/prerm - dos2unix /tmp/debpkg/Debian64/etc/systemd/system/HISP.service - chmod 755 -R /tmp/debpkg/Debian64 - chmod +x /tmp/debpkg/Debian64/usr/bin/HISPd - mkdir debpackage - dpkg-deb --build /tmp/debpkg/Debian64 - mv /tmp/debpkg/Debian64.deb debpackage/HISP-Debian-AMD64.deb - -# Upload LINUX - - name: Upload linux-x64 - uses: actions/upload-artifact@v4 - with: - name: HISP-Linux64 - path: HorseIsleServer/HISPd/bin/x64/Linux/net8.0/linux-x64/publish/ - - - name: Upload linux-x64-noobs - uses: actions/upload-artifact@v4 - with: - name: HISP-Linux64-Noobs - path: HorseIsleServer/MPN00BS/bin/x64/Linux/net8.0/linux-x64/publish/ - - - name: Upload linux-arm - uses: actions/upload-artifact@v4 - with: - name: HISP-LinuxARM - path: HorseIsleServer/HISPd/bin/ARM/Linux/net8.0/linux-arm/publish/ - - - name: Upload linux-arm64 - uses: actions/upload-artifact@v4 - with: - name: HISP-LinuxARM64 - path: HorseIsleServer/HISPd/bin/ARM64/Linux/net8.0/linux-arm64/publish/ - - - name: Upload deb package - uses: actions/upload-artifact@v4 - with: - name: HISP-DebianPackage - path: HorseIsleServer/debpackage - - build-win: runs-on: windows-latest + steps: - uses: actions/checkout@v2 - with: - fetch-depth: 0 - name: Git Submodule update run: git submodule update --init --recursive @@ -139,153 +21,156 @@ jobs: - 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 - + dotnet-version: 6.0.x + include-prerelease: true + - name: Restore dependencies run: dotnet restore - -# x64 build + + - name: Build win-x64 continue-on-error: false run: | - cd HISPd dotnet publish -p:PublishProfile=Win64.pubxml - cd .. - cd MPN00BS - dotnet publish -p:PublishProfile=Win64.pubxml - cd .. - name: Build win-x86 continue-on-error: false run: | - cd HISPd dotnet publish -p:PublishProfile=Win32.pubxml - cd .. - cd MPN00BS - dotnet publish -p:PublishProfile=Win32.pubxml - cd .. -# arm64 build + - name: Build win-arm + continue-on-error: false + run: | + dotnet publish -p:PublishProfile=WinARM.pubxml + - name: Build win-arm64 continue-on-error: false run: | - cd HISPd 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 - uses: actions/upload-artifact@v4 - with: - name: HISP-Win32 - path: HorseIsleServer/HISPd/bin/x86/Windows/net8.0/win-x86/publish/ - - - name: Upload win-arm64 - uses: actions/upload-artifact@v4 - with: - name: HISP-WinARM64 - path: HorseIsleServer/HISPd/bin/arm64/Windows/net8.0/win-arm64/publish/ - - - name: Upload win-x86-noobs - uses: actions/upload-artifact@v4 - with: - name: HISP-Win32-Noobs - path: HorseIsleServer/MPN00BS/bin/x86/Windows/net8.0/win-x86/publish/ - - - name: Upload win-x64-noobs - uses: actions/upload-artifact@v4 - with: - name: HISP-Win64-Noobs - path: HorseIsleServer/MPN00BS/bin/x64/Windows/net8.0/win-x64/publish/ - - build-mac: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: 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 + - name: Build linux-x64 + continue-on-error: false run: | - dotnet restore LibHISP - dotnet restore HISPd - + dotnet publish -p:PublishProfile=Linux64.pubxml + + - 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 continue-on-error: false run: | - cd HISPd dotnet publish -p:PublishProfile=Osx64.pubxml - cd .. - cd MPN00BS - dotnet publish -p:PublishProfile=Osx64.pubxml - cd .. + - name: Build mac-arm64 continue-on-error: false run: | - cd HISPd dotnet publish -p:PublishProfile=OsxARM64.pubxml - cd .. + + - name: Build android-arm + continue-on-error: false + run: | + dotnet publish -p:PublishProfile=AndroidARM.pubxml + + - name: Build android-arm64 + continue-on-error: false + run: | + dotnet publish -p:PublishProfile=AndroidARM64.pubxml + + + - name: Upload win-x64 + uses: actions/upload-artifact@v2 + with: + name: HISP-Win64 + path: HorseIsleServer\HISP\bin\x64\Windows\net6.0\win-x64\publish\ + + - name: Upload win-x86 + uses: actions/upload-artifact@v2 + with: + name: HISP-Win32 + path: HorseIsleServer\HISP\bin\x86\Windows\net6.0\win-x86\publish\ + + - name: Upload win-arm + uses: actions/upload-artifact@v2 + with: + name: HISP-WinARM + path: HorseIsleServer\HISP\bin\arm\Windows\net6.0\windows-arm\publish\ + + - name: Upload win-arm64 + uses: actions/upload-artifact@v2 + with: + name: HISP-WinARM64 + path: HorseIsleServer\HISP\bin\arm64\Windows\net6.0\windows-arm64\publish\ + + - name: Upload win-x86-noobs + uses: actions/upload-artifact@v2 + with: + name: HISP-Win32-Noobs + path: HorseIsleServer\N00BS\bin\x86\Windows\net6.0\win-x86\publish\ + + - name: Upload win-x64-noobs + uses: actions/upload-artifact@v2 + with: + name: HISP-Win64-Noobs + path: HorseIsleServer\N00BS\bin\x64\Windows\net6.0\win-x64\publish\ + + - name: Upload linux-x64 + uses: actions/upload-artifact@v2 + with: + name: HISP-Linux64 + path: HorseIsleServer/HISPCli/bin/x64/Linux/net6.0/linux-x64/publish/ + + - name: Upload linux-arm + uses: actions/upload-artifact@v2 + with: + name: HISP-LinuxARM + path: HorseIsleServer/HISPCli/bin/ARM/Linux/net6.0/linux-arm/publish/ + + - name: Upload linux-arm64 + uses: actions/upload-artifact@v2 + with: + name: HISP-LinuxARM64 + path: HorseIsleServer/HISPCli/bin/ARM64/Linux/net6.0/linux-arm64/publish/ + - name: Upload mac-x64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Mac64 - path: HorseIsleServer/HISPd/bin/x64/MacOS/net8.0/osx-x64/publish/ + path: HorseIsleServer/HISPCli/bin/x64/MacOS/net6.0/osx-x64/publish/ - name: Upload mac-arm64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-MacARM64 - path: HorseIsleServer/HISPd/bin/arm64/MacOS/net8.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/ + path: HorseIsleServer/HISPCli/bin/arm64/MacOS/net6.0/osx-arm64/publish/ - build-web: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 + - name: Upload android-arm + uses: actions/upload-artifact@v2 with: - fetch-depth: 0 - - - name: Git Submodule update - run: git submodule update --init --recursive + name: HISP-AndroidARM + path: HorseIsleServer/HISPCli/bin/arm/Android/net6.0/android-arm/publish/ + + - name: Upload android-arm64 + uses: actions/upload-artifact@v2 + with: + name: HISP-AndroidARM64 + path: HorseIsleServer/HISPCli/bin/arm64/Android/net6.0/android-arm64/publish/ - # UPLOAD WEB - name: Upload Website (master) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Web-Master path: HorseIsleWeb/master-site - name: Upload Website (game) - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Web-Game path: HorseIsleWeb/game-site diff --git a/.gitignore b/.gitignore index 61ba3f3..2e7eb53 100755 --- a/.gitignore +++ b/.gitignore @@ -3,32 +3,19 @@ */.vs/* *.log *.suo -*.csproj.user -*.pubxml.user -*.user -*.idb -*Thumbs.db -*.DS_Store HorseIsleServer/N00BS/obj/* HorseIsleServer/N00BS/bin/* -HorseIsleServer/MPN00BS/obj/* -HorseIsleServer/MPN00BS/bin/* - -HorseIsleServer/HISPd/obj/* -HorseIsleServer/HISPd/bin/* - -HorseIsleServer/HISPtests/obj/* -HorseIsleServer/HISPtests/bin/* +HorseIsleServer/HISPCli/obj/* +HorseIsleServer/HISPCli/bin/* +HorseIsleServer/Installer/obj/* +HorseIsleServer/Installer/bin/* HorseIsleServer/LibHISP/obj/* HorseIsleServer/LibHISP/bin/* HorseIsleServer/LibHISP/Resources/Versioning/* -HorseIsleServer/Installer/Windows/* - - -HorseIsleServer/.vs/* +HorseIsleServer/.vs/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules old mode 100755 new mode 100644 index c89ecbb..5cffd84 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,6 @@ [submodule "HorseIsleWeb"] path = HorseIsleWeb url = https://github.com/islehorse/HorseIsleWeb.git - branch = master [submodule "HorseIsleData"] path = HorseIsleData url = https://github.com/islehorse/HorseIsleData.git - branch = master diff --git a/.mailmap b/.mailmap deleted file mode 100755 index 7164d16..0000000 --- a/.mailmap +++ /dev/null @@ -1,7 +0,0 @@ -Li SilicaAndPina -Li Bluzume <39113159+KuromeSan@users.noreply.github.com> -Li SilicaPi -Li SilicaPi -Li Silica -Li AtelierWindows -Li KuromeSan \ No newline at end of file diff --git a/HorseIsleData b/HorseIsleData index e9c09c7..35bf0e0 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit e9c09c77cd0dd99eb12e16b679478fb0e3742b55 +Subproject commit 35bf0e04a686990d7237326c048fd18b3a081aa5 diff --git a/HorseIsleServer/HISP.sln b/HorseIsleServer/HISP.sln old mode 100755 new mode 100644 index 1bda296..a959455 --- a/HorseIsleServer/HISP.sln +++ b/HorseIsleServer/HISP.sln @@ -5,11 +5,11 @@ VisualStudioVersion = 17.2.32210.308 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibHISP", "LibHISP\LibHISP.csproj", "{C48CBD82-AB30-494A-8FFA-4DE7069B5827}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPCli", "HISPCli\HISPCli.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}" 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 -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 Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -23,11 +23,6 @@ Global Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - iOS|Any CPU = iOS|Any CPU - iOS|ARM = iOS|ARM - iOS|ARM64 = iOS|ARM64 - iOS|x64 = iOS|x64 - iOS|x86 = iOS|x86 Linux|Any CPU = Linux|Any CPU Linux|ARM = Linux|ARM Linux|ARM64 = Linux|ARM64 @@ -38,11 +33,6 @@ Global MacOS|ARM64 = MacOS|ARM64 MacOS|x64 = MacOS|x64 MacOS|x86 = MacOS|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 Windows|Any CPU = Windows|Any CPU Windows|ARM = Windows|ARM Windows|ARM64 = Windows|ARM64 @@ -50,8 +40,8 @@ Global Windows|x86 = Windows|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Android|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Android|Any CPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.ActiveCfg = Linux|Any CPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|Any CPU.Build.0 = Linux|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM.ActiveCfg = Android|ARM {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM.Build.0 = Android|ARM {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Android|ARM64.ActiveCfg = Android|ARM64 @@ -68,17 +58,8 @@ Global {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|ARM64.Build.0 = Debug|ARM64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x64.ActiveCfg = Debug|x64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x64.Build.0 = Debug|x64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.ActiveCfg = Debug|x86 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.Build.0 = Debug|x86 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|Any CPU.ActiveCfg = iOS|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|Any CPU.Build.0 = iOS|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM.ActiveCfg = iOS|ARM - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM.Build.0 = iOS|ARM - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM64.ActiveCfg = iOS|ARM64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|ARM64.Build.0 = iOS|ARM64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x64.ActiveCfg = iOS|x64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x64.Build.0 = iOS|x64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.iOS|x86.ActiveCfg = iOS|x86 + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.ActiveCfg = Debug|AnyCPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Debug|x86.Build.0 = Debug|AnyCPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.ActiveCfg = Linux|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|Any CPU.Build.0 = Linux|Any CPU {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Linux|ARM.ActiveCfg = Linux|ARM @@ -99,18 +80,8 @@ Global {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x64.Build.0 = MacOS|x64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.ActiveCfg = MacOS|x86 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.Build.0 = MacOS|x86 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.ActiveCfg = Windows|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.Build.0 = Windows|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.ActiveCfg = Windows|ARM - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.Build.0 = Windows|ARM - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.ActiveCfg = Windows|ARM64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.Build.0 = Windows|ARM64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.ActiveCfg = Windows|x64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.Build.0 = Windows|x64 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.ActiveCfg = Windows|x86 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.Build.0 = Windows|x86 - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|Any CPU - {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|Any CPU + {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|x64 + {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.Build.0 = Windows|ARM {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM64.ActiveCfg = Windows|ARM64 @@ -119,8 +90,8 @@ Global {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x64.Build.0 = Windows|x64 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.ActiveCfg = Windows|x86 {C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|x86.Build.0 = Windows|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.ActiveCfg = Android|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|Any CPU.Build.0 = 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 = Debug|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM.ActiveCfg = Android|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM.Build.0 = Android|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|ARM64.ActiveCfg = Android|ARM64 @@ -131,25 +102,16 @@ Global {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Android|x86.Build.0 = Android|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.ActiveCfg = Debug|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.Build.0 = Debug|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.Build.0 = Debug|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.ActiveCfg = Debug|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.Build.0 = Debug|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.ActiveCfg = Debug|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.Build.0 = Debug|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|Any CPU.ActiveCfg = iOS|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|Any CPU.Build.0 = iOS|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM.ActiveCfg = iOS|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM.Build.0 = iOS|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM64.ActiveCfg = iOS|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|ARM64.Build.0 = iOS|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x64.ActiveCfg = iOS|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x64.Build.0 = iOS|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.iOS|x86.ActiveCfg = iOS|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.ActiveCfg = Linux|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Linux|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM.Build.0 = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|ARM64.Build.0 = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.ActiveCfg = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x64.Build.0 = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.ActiveCfg = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Debug|x86.Build.0 = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.ActiveCfg = Debug|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|Any CPU.Build.0 = Debug|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM.ActiveCfg = Linux|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM.Build.0 = Linux|ARM {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Linux|ARM64.ActiveCfg = Linux|ARM64 @@ -168,166 +130,78 @@ Global {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x64.Build.0 = MacOS|x64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.ActiveCfg = MacOS|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.Build.0 = MacOS|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.ActiveCfg = Windows|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.Build.0 = Windows|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.ActiveCfg = Windows|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.Build.0 = Windows|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.ActiveCfg = Windows|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.Build.0 = Windows|ARM64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.ActiveCfg = Windows|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.Build.0 = Windows|x64 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.ActiveCfg = Windows|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.Build.0 = Windows|x86 - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Windows|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Windows|Any CPU - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|ARM - {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|ARM + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Debug|x64 + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Debug|x64 + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|Any CPU + {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.Build.0 = Windows|Any CPU {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM64.ActiveCfg = Windows|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM64.Build.0 = Windows|ARM64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.ActiveCfg = Windows|x64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.Build.0 = Windows|x64 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.ActiveCfg = Windows|x86 {DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.Build.0 = Windows|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.ActiveCfg = Android|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.Build.0 = Android|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.ActiveCfg = Android|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.Build.0 = Android|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.ActiveCfg = Android|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.Build.0 = Android|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.ActiveCfg = Android|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.Build.0 = Android|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.ActiveCfg = Android|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.Build.0 = Android|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.ActiveCfg = Debug|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.Build.0 = Debug|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.Build.0 = Debug|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.ActiveCfg = Debug|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.Build.0 = Debug|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.ActiveCfg = Debug|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.Build.0 = Debug|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.ActiveCfg = iOS|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.Build.0 = iOS|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.ActiveCfg = iOS|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.Build.0 = iOS|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.ActiveCfg = iOS|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.Build.0 = iOS|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.ActiveCfg = iOS|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.Build.0 = iOS|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.ActiveCfg = iOS|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.Build.0 = iOS|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.ActiveCfg = Linux|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.Build.0 = Linux|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.ActiveCfg = Linux|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.Build.0 = Linux|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.ActiveCfg = Linux|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.Build.0 = Linux|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.ActiveCfg = Linux|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.Build.0 = Linux|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.ActiveCfg = Linux|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.Build.0 = Linux|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.ActiveCfg = MacOS|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.Build.0 = MacOS|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.ActiveCfg = MacOS|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.Build.0 = MacOS|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.ActiveCfg = MacOS|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.Build.0 = MacOS|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.ActiveCfg = MacOS|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.Build.0 = MacOS|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.ActiveCfg = MacOS|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.Build.0 = MacOS|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.ActiveCfg = Windows|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.Build.0 = Windows|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.ActiveCfg = Windows|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.Build.0 = Windows|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.ActiveCfg = Windows|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.Build.0 = Windows|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.ActiveCfg = Windows|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.Build.0 = Windows|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.ActiveCfg = Windows|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.Build.0 = Windows|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.ActiveCfg = Windows|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.Build.0 = Windows|Any CPU - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.ActiveCfg = Windows|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.Build.0 = Windows|ARM - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.ActiveCfg = Windows|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.Build.0 = Windows|ARM64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.ActiveCfg = Windows|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.Build.0 = Windows|x64 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.ActiveCfg = Windows|x86 - {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.Build.0 = Windows|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.ActiveCfg = Debug|ARM - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.Build.0 = Debug|ARM - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.Build.0 = Debug|ARM64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.ActiveCfg = Debug|x64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.Build.0 = Debug|x64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.ActiveCfg = Debug|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.Build.0 = Debug|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x64.ActiveCfg = Windows|x64 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x86.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.Build.0 = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x86.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x64.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x86.ActiveCfg = Debug|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.ActiveCfg = Debug|x64 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.Build.0 = Debug|x64 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM.ActiveCfg = Windows|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM64.ActiveCfg = Windows|Any CPU + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.ActiveCfg = Windows|x64 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.Build.0 = Windows|x64 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.ActiveCfg = Windows|x86 + {6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.Build.0 = Windows|x86 + {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|Any CPU.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|ARM64.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x64.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Android|x86.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|Any CPU.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|ARM64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Debug|x86.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|Any CPU.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|ARM64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Linux|x86.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|Any CPU.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|ARM64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x64.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.MacOS|x86.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|Any CPU.ActiveCfg = Debug + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|ARM64.ActiveCfg = Release + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x64.Build.0 = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.ActiveCfg = Windows + {D330A197-67D4-42B0-8906-54264AF95EC1}.Windows|x86.Build.0 = Windows EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/HorseIsleServer/HISPd/HISPd.csproj b/HorseIsleServer/HISPCli/HISPCli.csproj old mode 100755 new mode 100644 similarity index 57% rename from HorseIsleServer/HISPd/HISPd.csproj rename to HorseIsleServer/HISPCli/HISPCli.csproj index b280073..f564645 --- a/HorseIsleServer/HISPd/HISPd.csproj +++ b/HorseIsleServer/HISPCli/HISPCli.csproj @@ -1,169 +1,230 @@ - - - Exe - HISP.Cli - 10.0 - x64;x86;ARM;ARM64;AnyCPU - Debug;Windows;Linux;MacOS;Android;iOS - - - - - - - True - True - Resources.resx - - - - - PublicResXFileCodeGenerator - Resources.Designer.cs - - - - false - false - - - net8.0 - false - true - icon.ico - HISP.Cli.Program - OnBuildSuccess - embedded - False - none - False - Public Domain, 2022 - https://islehorse.com - https://github.com/islehorse/HISP - git - 3 - 1701;1702;2026;IL2026 - - - - partial - false - true - - - - win-x86 - true - x86 - x86 - OS_WINDOWS;ARCH_X86 - none - - - win-x64 - true - x64 - x64 - OS_WINDOWS;ARCH_X86_64 - none - - - win-arm - true - ARM - OS_WINDOWS;ARCH_ARM - none - - - win-arm64 - true - ARM64 - OS_WINDOWS;ARCH_ARM64 - none - - - - - android-arm - true - ARM - OS_ANDROID;ARCH_ARM - 3 - - none - - - android-arm64 - true - ARM64 - OS_ANDROID;ARCH_ARM64 - none - - - - linux-x64 - true - x64 - OS_LINUX;ARCH_X86_64 - none - - - linux-arm - ARM - true - OS_LINUX;ARCH_ARM - none - - - linux-arm64 - ARM64 - true - OS_LINUX;ARCH_ARM64 - none - - - - osx-x64 - true - x64 - OS_MACOS;ARCH_X86_64 - none - - - osx-arm64 - true - OS_MACOS;ARCH_ARM64 - none - - - - ios-arm - true - ARM - OS_IOS;ARCH_ARM - none - - - ios-arm64 - true - ARM64 - OS_IOS;ARCH_ARM64 - none - - - - win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 - True - OS_ALL;ARCH_ANYCPU - - - - - False - DEBUG;TRACE;OS_DEBUG - full - - - - - + + + Exe + HISP + 10.0 + x64;x86;ARM;ARM64;AnyCPU + Debug;Windows;Linux;MacOS;Android + + + + + + + True + True + Resources.resx + + + + false + false + + + net6.0 + false + true + icon.ico + HISP.Program + OnBuildSuccess + embedded + False + none + False + Public Domain, 2022 + https://islehorse.com + https://github.com/islehorse/HISP + git + + + + win-x86 + true + x86 + OS_WINDOWS;ARCH_X86 + 3 + 1701;1702;2026 + + + win-x64 + true + x64 + OS_WINDOWS;ARCH_X86_64 + 3 + 1701;1702;2026 + + + win-arm + true + ARM + OS_WINDOWS;ARCH_ARM + 3 + 1701;1702;2026 + + + win-arm64 + true + ARM64 + OS_WINDOWS;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + android-arm + true + ARM + OS_ANDROID;ARCH_ARM + 3 + 1701;1702;2026 + + + android-arm64 + true + ARM64 + OS_ANDROID;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + linux-x64 + true + x64 + OS_LINUX;ARCH_X86_64 + 3 + 1701;1702;2026 + + + linux-arm + ARM + true + OS_LINUX;ARCH_ARM + 3 + 1701;1702;2026 + + + linux-arm64 + ARM64 + true + OS_LINUX;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + osx-x64 + true + x64 + OS_MACOS;ARCH_X86_64 + 3 + 1701;1702;2026 + + + osx-arm64 + true + OS_MACOS;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + net6.0 + win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 + True + OS_ALL;ARCH_ANYCPU + + + + + ARM + False + DEBUG;TRACE;OS_DEBUG;ARCH_ARM + 3 + 1701;1702;2026 + + + + + ARM64 + False + DEBUG;TRACE;OS_DEBUG;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86_64 + 3 + 1701;1702;2026 + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86 + 3 + 1701;1702;2026 + + + + + True + OS_MACOS;ARCH_X86 + 3 + 1701;1702;2026 + + + + + True + OS_LINUX;ARCH_X86 + 3 + 1701;1702;2026 + + + + + False + OS_LINUX;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + False + OS_WINDOWS;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + False + OS_MACOS;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + True + OS_MACOS;ARCH_ARM + 3 + 1701;1702;2026 + + + + + 3 + 1701;1702;2026 + False + + + + diff --git a/HorseIsleServer/HISPCli/Program.cs b/HorseIsleServer/HISPCli/Program.cs new file mode 100644 index 0000000..3b2f602 --- /dev/null +++ b/HorseIsleServer/HISPCli/Program.cs @@ -0,0 +1,43 @@ +using HISP.Server; +using System; +using System.IO; + +namespace HISP +{ + public static class Program + { + public static bool ShuttingDown = false; + public static string LogFile; + public static string BaseDir; + + public static void OnShutdown() + { + ShuttingDown = true; + } + public static void LogToFile(string text) + { + File.AppendAllTextAsync(text, LogFile); + } + public static void LogStdout(string text) + { + Console.Out.WriteAsync(text + Console.Out.NewLine); + } + public static void Main(string[] args) + { + string BaseDir = Directory.GetCurrentDirectory(); +#if DEB_PACKAGE + ConfigReader.ConfigurationFileName = "/etc/hisp.conf" + LogFile = "/var/log/hisp.log" + Logger.SetCallback(LogToFile); +#else + Logger.SetCallback(LogStdout); +#endif + + Entry.SetShutdownCallback(OnShutdown); + Entry.Start(); + + while (!ShuttingDown) { /* Allow asyncronous operations to happen. */ }; + + } + } +} diff --git a/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs b/HorseIsleServer/HISPCli/Properties/AssemblyInfo.cs old mode 100755 new mode 100644 similarity index 81% rename from HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs rename to HorseIsleServer/HISPCli/Properties/AssemblyInfo.cs index dc7b03a..e22bdd6 --- a/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs +++ b/HorseIsleServer/HISPCli/Properties/AssemblyInfo.cs @@ -1,43 +1,35 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("HISP")] -[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Li")] -[assembly: AssemblyProduct("HISP")] -[assembly: AssemblyCopyright("Public Domain © 2022")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("31f0bdf5-f6d1-4aeb-8905-80dbc223c836")] - -// 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.8.73.0")] -[assembly: AssemblyFileVersion("1.8.73.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("HISP")] +[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("SilicaAndPina")] +[assembly: AssemblyProduct("HISP")] +[assembly: AssemblyCopyright("Public Domain © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("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.3.0.0")] +[assembly: AssemblyFileVersion("1.3.0.0")] diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM.pubxml old mode 100755 new mode 100644 similarity index 81% rename from HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM.pubxml index 4c08f3e..d6707c6 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Android ARM - bin\arm\Android\net8.0\android-arm\publish\ + bin\arm\Android\net6.0\android-arm\publish\ FileSystem - net8.0 + net6.0 android-arm True True @@ -17,4 +17,4 @@ https://go.microsoft.com/fwlink/?LinkID=208121. True OS_ANDROID;ARCH_ARM - \ No newline at end of file + diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM64.pubxml old mode 100755 new mode 100644 similarity index 81% rename from HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM64.pubxml index e9b3839..9a8e766 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/AndroidARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Android ARM64 - bin\arm64\Android\net8.0\android-arm64\publish\ + bin\arm64\Android\net6.0\android-arm64\publish\ FileSystem - net8.0 + net6.0 android-arm64 True True @@ -17,4 +17,4 @@ https://go.microsoft.com/fwlink/?LinkID=208121. True OS_ANDROID;ARCH_ARM64 - \ No newline at end of file + diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Linux64.pubxml similarity index 82% rename from HorseIsleServer/HISPtests/Properties/PublishProfiles/Linux64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/Linux64.pubxml index acb8a96..e633e09 100644 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Linux64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Linux64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux x64 - bin\x64\Linux\net8.0\linux-x64\publish\ + bin\x64\Linux\net6.0\linux-x64\publish\ FileSystem - net8.0 + net6.0 linux-x64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM.pubxml old mode 100755 new mode 100644 similarity index 82% rename from HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM.pubxml index fdccff1..8257770 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux ARM - bin\ARM\Linux\net8.0\linux-arm\publish\ + bin\ARM\Linux\net6.0\linux-arm\publish\ FileSystem - net8.0 + net6.0 linux-arm True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM64.pubxml old mode 100755 new mode 100644 similarity index 84% rename from HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM64.pubxml index f387011..b9c21d1 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/LinuxARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux ARM64 - bin\ARM64\Linux\net8.0\linux-arm64\publish\ + bin\ARM64\Linux\net6.0\linux-arm64\publish\ FileSystem - net8.0 + net6.0 linux-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Osx64.pubxml old mode 100755 new mode 100644 similarity index 82% rename from HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/Osx64.pubxml index f6e810f..8e6230a --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Osx64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. MacOS x64 - bin\x64\MacOS\net8.0\osx-x64\publish\ + bin\x64\MacOS\net6.0\osx-x64\publish\ FileSystem - net8.0 + net6.0 osx-x64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/OsxARM64.pubxml old mode 100755 new mode 100644 similarity index 82% rename from HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/OsxARM64.pubxml index 6d6a41d..bf66d06 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/OsxARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. MacOS ARM64 - bin\arm64\MacOS\net8.0\osx-arm64\publish\ + bin\arm64\MacOS\net6.0\osx-arm64\publish\ FileSystem - net8.0 + net6.0 osx-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Win32.pubxml old mode 100755 new mode 100644 similarity index 84% rename from HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/Win32.pubxml index 0608a65..627bbac --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Win32.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows x86 - bin\x86\Windows\net8.0\win-x86\publish\ + bin\x86\Windows\net6.0\win-x86\publish\ FileSystem - net8.0 + net6.0 win-x86 True True diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Win64.pubxml similarity index 82% rename from HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/Win64.pubxml index 79a4c04..b7888f5 100644 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/Win64.pubxml @@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows x64 - bin\x64\Windows\net8.0\win-x64\publish\ + bin\x64\Windows\net6.0\win-x64\publish\ FileSystem - net8.0 + net6.0 win-x64 True - True True True + True OS_WINDOWS;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM.pubxml similarity index 83% rename from HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM.pubxml index f6cc04e..202b002 100644 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows ARM - bin\arm\Windows\net8.0\win-arm\publish\ + bin\arm\Windows\net6.0\windows-arm\publish\ FileSystem - net8.0 + net6.0 win-arm True True diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM64.pubxml similarity index 82% rename from HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM64.pubxml rename to HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM64.pubxml index 10dfe10..32dcdcb 100644 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM64.pubxml +++ b/HorseIsleServer/HISPCli/Properties/PublishProfiles/WinARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows ARM64 - bin\arm64\Windows\net8.0\win-arm64\publish\ + bin\arm64\Windows\net6.0\windows-arm64\publish\ FileSystem - net8.0 + net6.0 win-arm64 True True diff --git a/HorseIsleServer/HISPCli/Properties/Resources.Designer.cs b/HorseIsleServer/HISPCli/Properties/Resources.Designer.cs new file mode 100644 index 0000000..aecea91 --- /dev/null +++ b/HorseIsleServer/HISPCli/Properties/Resources.Designer.cs @@ -0,0 +1,118 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace HISP.Properties { + using System; + + + /// + /// A strongly-typed resource public class, for looking up localized strings, etc. + /// + // This public class was auto-generated by the StronglyTypedResourceBuilder + // public class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this public class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource public class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to <cross-domain-policy> + /// <allow-access-from domain="*" to-ports="12321" secure="false"/> + ///</cross-domain-policy>. + /// + internal static string DefaultCrossDomain { + get { + return ResourceManager.GetString("DefaultCrossDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to # HorseIsleServer Default Configuration File + /// + ///# Ip address the server will bind to (default: 0.0.0.0 ALL INTERFACES) + ///ip=0.0.0.0 + ///# Port the server will bind to (default: 12321) + ///port=12321 + /// + ///# MariaDB Database + ///db_ip=127.0.0.1 + ///db_name=beta + ///db_username=root + ///db_password=test123 + ///db_port=3306 + /// + ///# Map Data + ///map=HI1.MAP + /// + ///# JSON Format Data + /// + ///gamedata=gamedata.json + /// + ///# Cross-Domain Policy File + ///crossdomain=CrossDomainPolicy.xml + /// + ///# Red Text Stating "Todays Note:" + ///motd=April 11, 2020. New breed, C [rest of string was truncated]";. + /// + internal static string DefaultServerProperties { + get { + return ResourceManager.GetString("DefaultServerProperties", resourceCulture); + } + } + + /// + /// UNKNOWN COMMIT HASH + /// + internal static string GitCommit { + get { + return ResourceManager.GetString("GitCommit", resourceCulture); + } + } + + } +} diff --git a/HorseIsleServer/HISPd/Properties/Resources.resx b/HorseIsleServer/HISPCli/Properties/Resources.resx old mode 100755 new mode 100644 similarity index 91% rename from HorseIsleServer/HISPd/Properties/Resources.resx rename to HorseIsleServer/HISPCli/Properties/Resources.resx index 852a652..1af7de1 --- a/HorseIsleServer/HISPd/Properties/Resources.resx +++ b/HorseIsleServer/HISPCli/Properties/Resources.resx @@ -1,124 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\HISP.service;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/launchSettings.json b/HorseIsleServer/HISPCli/Properties/launchSettings.json old mode 100755 new mode 100644 similarity index 100% rename from HorseIsleServer/HISPd/Properties/launchSettings.json rename to HorseIsleServer/HISPCli/Properties/launchSettings.json diff --git a/HorseIsleServer/HISPd/icon.ico b/HorseIsleServer/HISPCli/icon.ico old mode 100755 new mode 100644 similarity index 100% rename from HorseIsleServer/HISPd/icon.ico rename to HorseIsleServer/HISPCli/icon.ico diff --git a/HorseIsleServer/HISPd/Program.cs b/HorseIsleServer/HISPd/Program.cs deleted file mode 100755 index 2f5ca20..0000000 --- a/HorseIsleServer/HISPd/Program.cs +++ /dev/null @@ -1,197 +0,0 @@ -using HISP.Cli.Properties; -using HISP.Server; -using System; -using System.IO; -using System.Threading; - -namespace HISP.Cli -{ - public static class Program - { - private static StreamWriter sw = null; - private static FileStream fs = null; - private static string logFile; - private static EventWaitHandle shutdownHandle = null; - - public static bool ShuttingDown = false; - public static string BaseDir; - public static string LogFile - { - get - { - return logFile; - } - set - { - logFile = value; - if(sw != null) - { - sw.Flush(); - sw.Dispose(); - sw = null; - } - if(fs != null) - { - fs.Flush(); - fs.Dispose(); - fs = null; - } - - fs = File.OpenWrite(logFile); - sw = new StreamWriter(fs); - } - } - - public static void OnShutdown() - { - try - { - if (sw != null) - { - sw.Flush(); - sw.Close(); - sw.Dispose(); - sw = null; - } - - } - catch (Exception) { }; - - try - { - if (fs != null) - { - fs.Flush(); - fs.Close(); - fs.Dispose(); - fs = null; - } - } - catch (Exception) { }; - - - if(shutdownHandle != null) - shutdownHandle.Set(); - } - - private static string formatMessage(string type, string text, bool console) - { -#if OS_WINDOWS - string newline = "\r\n"; -#else - string newline = "\n"; -#endif - - string msg = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss") + ": [" + type + "] "; - if (console && text.Length > (Console.WindowWidth - msg.Length) - newline.Length) - text = text.Substring(0, (Console.WindowWidth - msg.Length) - newline.Length); - - return msg + text + newline; - } - - public static void LogToFile(bool error, string type,string text) - { - sw.WriteLine(formatMessage(type, text, false)); - if (error) - sw.Flush(); - } - public static void LogStdout(bool error, string type, string text) - { - if (type == "CRASH") - LogToFile(error, type, text); - try - { - if (error) - Console.Error.WriteAsync(formatMessage(type, text, true)); - else - Console.Out.WriteAsync(formatMessage(type, text, true)); - - } - catch (Exception) { }; - } - - public static void Main(string[] args) - { - AppDomain.CurrentDomain.ProcessExit += ProcessQuitHandler; - - string baseDir = Directory.GetCurrentDirectory(); - Logger.SetCallback(LogStdout); - Entry.SetShutdownCallback(OnShutdown); - - string hispConfVar = Environment.GetEnvironmentVariable("HISP_CONF_FILE"); - string hispLogVar = Environment.GetEnvironmentVariable("HISP_LOG_FILE"); - string hispBaseDir = Environment.GetEnvironmentVariable("HISP_BASE_DIR"); - - foreach (string arg in args) - { - switch (arg) - { - case "--install-service": -#if OS_LINUX - File.WriteAllBytes("/etc/systemd/system/HISP.service", Resources.HISPService); - LogStdout(false, "INFO", "Crreated Service! enable it with \"sudo systemctl enable HISP\""); -#else - LogStdout(true, "ERROR", "Installing as a service unsupported on this platform"); -#endif - break; - default: - if (arg.Contains("=")) - { - string[] argu = arg.Split("="); - if (argu.Length >= 2) - { - switch (argu[0]) - { - case "--config-file": - ConfigReader.ConfigurationFileName = argu[1]; - break; - case "--log-to-file": - LogFile = argu[1]; - Logger.SetCallback(LogToFile); - break; - case "--base-directory": - baseDir = argu[1]; - Directory.SetCurrentDirectory(baseDir); - break; - default: - continue; - } - } - } - break; - } - } - - if (hispConfVar != null) - { - ConfigReader.ConfigurationFileName = hispConfVar; - } - - if (hispLogVar != null) - { - LogFile = hispLogVar; - Logger.SetCallback(LogToFile); - } - else - { - LogFile = Path.Combine(baseDir, "crash.log"); - } - - if (hispBaseDir != null) - { - baseDir = hispBaseDir; - Directory.SetCurrentDirectory(baseDir); - } - - Entry.Start(); - - shutdownHandle = new EventWaitHandle(false, EventResetMode.ManualReset); - shutdownHandle.WaitOne(); - } - - private static void ProcessQuitHandler(object sender, EventArgs e) - { - GameServer.ShutdownServer("HISPd process quitting."); - } - } -} diff --git a/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs b/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs deleted file mode 100755 index a40e782..0000000 --- a/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs +++ /dev/null @@ -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 � 2022")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("57264c6b-1461-41d6-9304-3890cf6c8390")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.8.73.0")] -[assembly: AssemblyFileVersion("1.8.73.0")] diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml deleted file mode 100755 index e9b3839..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Android - ARM64 - bin\arm64\Android\net8.0\android-arm64\publish\ - FileSystem - net8.0 - android-arm64 - True - True - True - True - True - OS_ANDROID;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml deleted file mode 100755 index acb8a96..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - x64 - bin\x64\Linux\net8.0\linux-x64\publish\ - FileSystem - net8.0 - linux-x64 - True - True - True - True - OS_LINUX;ARCH_X86_64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml deleted file mode 100755 index fdccff1..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - ARM - bin\ARM\Linux\net8.0\linux-arm\publish\ - FileSystem - net8.0 - linux-arm - True - True - True - True - OS_LINUX;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml deleted file mode 100755 index 6d6a41d..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - MacOS - ARM64 - bin\arm64\MacOS\net8.0\osx-arm64\publish\ - FileSystem - net8.0 - osx-arm64 - True - True - True - True - OS_MACOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml deleted file mode 100755 index f6cc04e..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - ARM - bin\arm\Windows\net8.0\win-arm\publish\ - FileSystem - net8.0 - win-arm - True - True - True - True - OS_WINDOWS;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml deleted file mode 100755 index 10dfe10..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - ARM64 - bin\arm64\Windows\net8.0\win-arm64\publish\ - FileSystem - net8.0 - win-arm64 - True - True - True - True - OS_WINDOWS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml deleted file mode 100755 index 077cfed..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM - bin\arm\iOS\net8.0\ios-arm\publish\ - FileSystem - net8.0 - ios-arm - True - False - False - True - OS_IOS;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml deleted file mode 100755 index ec7144e..0000000 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ - FileSystem - net8.0 - ios-arm64 - True - False - False - True - OS_IOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/Resources.Designer.cs b/HorseIsleServer/HISPd/Properties/Resources.Designer.cs deleted file mode 100755 index 7f3c72b..0000000 --- a/HorseIsleServer/HISPd/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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. -// -//------------------------------------------------------------------------------ - -namespace HISP.Cli.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // 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() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Cli.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - public static byte[] HISPService { - get { - object obj = ResourceManager.GetObject("HISPService", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/conffiles b/HorseIsleServer/HISPd/Resources/DEBIAN/conffiles deleted file mode 100755 index 5ecd5c1..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/conffiles +++ /dev/null @@ -1,2 +0,0 @@ -/etc/hisp/server.properties -/etc/hisp/CrossDomainPolicy.xml diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/control b/HorseIsleServer/HISPd/Resources/DEBIAN/control deleted file mode 100755 index 1350d9e..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/control +++ /dev/null @@ -1,7 +0,0 @@ -Package: hisp -Version: 1.8.73 -Depends: coreutils,systemd,mariadb-server,libsqlite3-dev,zlib1g-dev,libicu-dev,libkrb5-dev -Maintainer: Li -Homepage: https://islehorse.com -Architecture: amd64 -Description: Open Source Implementation of the server for flash game "Horse Isle". diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/copyright b/HorseIsleServer/HISPd/Resources/DEBIAN/copyright deleted file mode 100755 index 241d8f9..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/copyright +++ /dev/null @@ -1,4 +0,0 @@ -== Silica's Public Domain License == - -All source code and binaries, for the HISP Software are entered into the Public Domain. -However the software is provided "AS-IS" without any warrenty and i shall take no liability for anything that may happen by using this software. \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/postinst b/HorseIsleServer/HISPd/Resources/DEBIAN/postinst deleted file mode 100755 index cb2151d..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/postinst +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -useradd -r horseisle -mkdir -p /etc/hisp -mkdir -p /var/log/hisp -chown -R horseisle:horseisle /etc/hisp -chown -R horseisle:horseisle /var/log/hisp -systemctl enable HISP.service -systemctl start HISP - -echo "Make sure to edit /etc/hisp/server.properties!" diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/postrm b/HorseIsleServer/HISPd/Resources/DEBIAN/postrm deleted file mode 100755 index 1a24852..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/postrm +++ /dev/null @@ -1 +0,0 @@ -#!/bin/sh diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/prerm b/HorseIsleServer/HISPd/Resources/DEBIAN/prerm deleted file mode 100755 index f425856..0000000 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/prerm +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -systemctl stop HISP -systemctl disable HISP -userdel horseisle diff --git a/HorseIsleServer/HISPd/Resources/HISP.service b/HorseIsleServer/HISPd/Resources/HISP.service deleted file mode 100755 index 2292353..0000000 --- a/HorseIsleServer/HISPd/Resources/HISP.service +++ /dev/null @@ -1,32 +0,0 @@ -[Unit] -Description=HISP (Horse Isle Server Program) - -After=syslog.target -After=network.target - -Wants=mariadb.service -After=mariadb.service - - -[Service] -Type=simple - -# Disable access to features HISP doesnt need -# (For security ...) -ProtectSystem=full -PrivateDevices=true - -StandardError=journal+console -StandardOutput=journal+console - -User=horseisle -Group=horseisle - -WorkingDirectory=/etc/hisp -ExecStart=/usr/bin/HISPd - -Environment=USER=horseisle HOME=/etc/hisp HISP_BASE_DIR=/etc/hisp HISP_CONF_FILE=/etc/hisp/server.properties HISP_LOG_FILE=/var/log/hisp/hisp.log - -[Install] -WantedBy=multi-user.target -Alias=hisp.service \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/HISPtests.csproj b/HorseIsleServer/HISPtests/HISPtests.csproj deleted file mode 100644 index 5c326c3..0000000 --- a/HorseIsleServer/HISPtests/HISPtests.csproj +++ /dev/null @@ -1,169 +0,0 @@ - - - Exe - HISP.Tests - 10.0 - x64;x86;ARM;ARM64;AnyCPU - Debug;Windows;Linux;MacOS;Android;iOS - - - - - - - Resources.resx - True - True - - - - - Resources.Designer.cs - PublicResXFileCodeGenerator - - - - false - false - - - net8.0 - false - true - icon.ico - HISP.Tests.Program - OnBuildSuccess - embedded - False - none - False - Public Domain, 2022 - https://islehorse.com - https://github.com/islehorse/HISP - git - 3 - 1701;1702;2026;IL2026 - - - - partial - false - true - - - - win-x86 - true - x86 - x86 - OS_WINDOWS;ARCH_X86 - none - - - win-x64 - true - x64 - x64 - OS_WINDOWS;ARCH_X86_64 - none - - - win-arm - true - ARM - OS_WINDOWS;ARCH_ARM - none - - - win-arm64 - true - ARM64 - OS_WINDOWS;ARCH_ARM64 - none - - - - - android-arm - true - ARM - OS_ANDROID;ARCH_ARM - 3 - - none - - - android-arm64 - true - ARM64 - OS_ANDROID;ARCH_ARM64 - none - - - - linux-x64 - true - x64 - OS_LINUX;ARCH_X86_64 - none - - - linux-arm - ARM - true - OS_LINUX;ARCH_ARM - none - - - linux-arm64 - ARM64 - true - OS_LINUX;ARCH_ARM64 - none - - - - osx-x64 - true - x64 - OS_MACOS;ARCH_X86_64 - none - - - osx-arm64 - true - OS_MACOS;ARCH_ARM64 - none - - - - ios-arm - true - ARM - OS_IOS;ARCH_ARM - none - - - ios-arm64 - true - ARM64 - OS_IOS;ARCH_ARM64 - none - - - - win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 - True - OS_ALL;ARCH_ANYCPU - - - - - False - DEBUG;TRACE;OS_DEBUG - full - - - - - diff --git a/HorseIsleServer/HISPtests/Program.cs b/HorseIsleServer/HISPtests/Program.cs deleted file mode 100644 index 8a11d3d..0000000 --- a/HorseIsleServer/HISPtests/Program.cs +++ /dev/null @@ -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(); - } - } - -} \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM.pubxml deleted file mode 100644 index 4c08f3e..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM.pubxml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Android - ARM - bin\arm\Android\net8.0\android-arm\publish\ - FileSystem - net8.0 - android-arm - True - True - True - True - True - OS_ANDROID;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM64.pubxml deleted file mode 100644 index e9b3839..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/AndroidARM64.pubxml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - Android - ARM64 - bin\arm64\Android\net8.0\android-arm64\publish\ - FileSystem - net8.0 - android-arm64 - True - True - True - True - True - OS_ANDROID;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM.pubxml deleted file mode 100644 index fdccff1..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - ARM - bin\ARM\Linux\net8.0\linux-arm\publish\ - FileSystem - net8.0 - linux-arm - True - True - True - True - OS_LINUX;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM64.pubxml deleted file mode 100644 index f387011..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/LinuxARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Linux - ARM64 - bin\ARM64\Linux\net8.0\linux-arm64\publish\ - FileSystem - net8.0 - linux-arm64 - True - True - True - True - OS_LINUX;ARCH_ARM64 - - diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/Osx64.pubxml deleted file mode 100644 index f6e810f..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Osx64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - MacOS - x64 - bin\x64\MacOS\net8.0\osx-x64\publish\ - FileSystem - net8.0 - osx-x64 - True - True - True - True - OS_MACOS;ARCH_X86_64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/OsxARM64.pubxml deleted file mode 100644 index 6d6a41d..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/OsxARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - MacOS - ARM64 - bin\arm64\MacOS\net8.0\osx-arm64\publish\ - FileSystem - net8.0 - osx-arm64 - True - True - True - True - OS_MACOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM.pubxml deleted file mode 100644 index 077cfed..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM - bin\arm\iOS\net8.0\ios-arm\publish\ - FileSystem - net8.0 - ios-arm - True - False - False - True - OS_IOS;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM64.pubxml deleted file mode 100644 index ec7144e..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/iOSARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ - FileSystem - net8.0 - ios-arm64 - True - False - False - True - OS_IOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/Resources.Designer.cs b/HorseIsleServer/HISPtests/Properties/Resources.Designer.cs deleted file mode 100644 index c28d931..0000000 --- a/HorseIsleServer/HISPtests/Properties/Resources.Designer.cs +++ /dev/null @@ -1,74 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 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. -// -//------------------------------------------------------------------------------ - -namespace HISP.Tests.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // 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() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [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; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to { - /// "2PlayerClose": "UFgA", - /// "BirdMap_OutsideMapTop": "dgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ [rest of string was truncated]";. - /// - public static string PacketTestDataSet { - get { - return ResourceManager.GetString("PacketTestDataSet", resourceCulture); - } - } - } -} diff --git a/HorseIsleServer/HISPtests/Resources/PacketTestDataSet.json b/HorseIsleServer/HISPtests/Resources/PacketTestDataSet.json deleted file mode 100644 index 56aea31..0000000 --- a/HorseIsleServer/HISPtests/Resources/PacketTestDataSet.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "2PlayerClose": "UFg=", - "BirdMap_OutsideMapTop": "dgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "BirdMap_OutsideMapBottom": "dgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEGAQIBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAREBEQEGAQoBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDwERARABBgEKAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQESARoBEAEPAQYBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBASABFgEaAQ4BEAEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBHwEhARMBDgEQAQYBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEqAR8BFgEaAQ8BEQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBASMBIQEhARMBDwEOAQYBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBJgEqASEBFgEaAQ4BEAEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEuASMBIQEhARMBEAEQAQYBCgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAS8BJgEqAR4BFgEaAREBEQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBOgEuASMBHwEgARMBDgEOAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEzAS4BJgEqASABEwEQAQ8BAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBATMBMAExASMBIQETAQ8BEAEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBMwEwLDEBIwEgARMBEAEQAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE2ATorMS4jASABEwEPARABAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAT8UMwEvHCMgHwETAREBEAEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "BirdMap_InsideMap": "dhkBIQEtASIBIgEiASIBIgEiASIBIgEqASABHgEtASIBKSAvATABPQE5ATMBMAEjASEBIAEhAR8BIQEgAR8BHgElATABNQEzAS8BIwEhARcBGwEOAQ8BAwEBAQEBAQEBAQEBHgEtASkBMQEwHDABMQEuAS8BLwExASYBIgEiASkhMQEwAT0BMgE5AUABMwEuASMBIQEhASEBHwEhAR4BHwEfASUBPQE5ATMBLgEjASABEwEOAREBEAEDAQEBAQEBAQEBAQEiASkBMAE9ATIBMgEyATIBMgEyAToBMAEvAS4BLwE9ATIBOQFAAUEBQb5nMwEwASMBIQEfAR8BHwEgASEBHgEtASkBNQE3ATsBLgEjASEBEwEOAREBBwELAQEBAQEBAQEBAQEuATABPQE5AT8BPwE/AUEBPwE/ATYBMgEyATIBMgE5AT8BQAE+AUC+aD8BMwEvASMBHwEfASABHgEfASABIAElAS4BPAE7AS8BJwErAR4BEwEQARABAwEBAQEBAQEBAQEBAQE9ATIBOQFBAa0soiiiLaK+Z6IBqio/AT8BQAE/AT4BQQGtAaIBqr5jPgE/ATMBMAEjASEBIAEhAR8BHwEeAR4BJQEwAT0BOgEuASMBHwEXARsBEAEQAQMBAQEBAQEBAQEBAQEBOQFBAT4BrSypLa4Bsb5friywAaYpogGiKqIBor5for5koimpAa4BpgGqAT8BMwEwASMBHgEhAR8BIQEeASEBLQEpATABPAE7AS4BIwEfARMBEQEOAREBAwEBAQEBAQEBAQEBAQE/Aa0BogGpAbEor75lsQGxvl+uvmCvvmKuAa++X6++cK++ca6+crG+c7C+ZbEBr75mo75hPwEzATABJgEqAR4BHwEgAS0BIgEpATABPQE6ATABJx8rASABEwEOAQ8BBwELAQEBAQEBAQEBAQEBAaK+ZKkBsQGwLq8Brr5nsAGvvnCuvnGxvnOvL64BrjCwLLAqr75tsb5urgGwK6a+YqoBNgE6ATEBJgEiASIBIgEpATEBPQE6ATwBOwEnASsBHwEXARsBDwEQAQMBAQEBAQEBAQEBAQEBAQGxvmGvAa6+Zq8BsSixAbAosCqvKLABrymvAa8BsL5isb5prwGxAbC+YK8qrwGjAUEBNgE6AS4BMQEuATABMQEvATwBOwEwAScBKwEgARcBGwEQARABEAEDAQEBAQEBAQEBAQEBAQEBr75frgGvvnCuvnGwvnGxvnOuLrABsQGuAbG+ZrEBrwGxAbAsr75lri6wAbEBrgGmAaq+Y0ABNgEyATIBOgExATABLwEwATABJyErASEBFwEbAQ8BDwEQAQcBCwEBAQEBAQEBAQEBAQEBAbG+crG+crG+c7G+gbG+Zq6+ZLEor75friiuvnCxvnGwvnGxvnOwvmOxvmCuvn6wvn+xAbEBsQGwKKYBqr5oPwE/ATcBOwEwHTABLwEnASQBKwEhARcBGwEOAREBDgEHAQsBAQEBAQEBAQEBAQEBAQEBAa4BriyvAa4BsAGwAbEBrwGvvnCvvnOxvmawAbEtrgGvvo6xvoauvoewvo6wvnCwvnOvAacBq75kPwE3ATsBLgEnASQBJAErAR4BHgEXARsBEQEOARABBwELAQEBAQEBAQEBAQEBAQEBAQEBAbC+Y7C+YbEBr75+sb5/sL5wrr5xAb50r75zriywvmGuAbG+Y7C+ZbEBrgGwAbG+ba++ZKcBpL5iqwFAATcBOwEvAScBKwEgAR4BHgEXARQBGwEPAQ4BEAEHAQsBAQEBAQEBAQEBAQEBAQEBAQEBAQGoAa6+YK++ja6+hq++h6++jbC+cK6+ca++c7EBsAGvLa6+drG+d7ABryixAbG+a6cBq75rQQFAATcBOwEvAScaKwEhARcBFAEUARsBDgEQAREBEQEHAQsBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAawqqAGuAa8prwGxKq8BsQGxAa8Bsb5krgGvvmSuvmCuKq8BsAGnAau+Zj4BNwE0ATsBMQEnASsBIAEXARsBEQEPAQ8BEAEQAQ4BBwELAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAUEBrAGovmavAa8BrgGvvmaxAbG+ZLC+YK8Br75nsS2vAbABrr5fpwGrvmo+ATcBOwExATEBJwErAR8BFwEbAQ8BEQEOAQ8BEAEHAQQBCwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBATgBPwGsvmGovmevAa8BrymuAbEBr75mrwGvAbABr75qr75ir75gowFAATcBOwExAScBJAErAR4BFwEbAQ8BEQEPAQcBBAEEAQsBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBPAE4AUABrL5jpL5opAGkvmWkvmSoAbG+X66+Ya8rsQGuKq8Bp75fqwE+ATMBLgEnASsBIQEhARcBGwEPAREBEQEHAQsBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBMRo8ATgBQAFBAT4BPgE+AawBpAGkKaQBpAGoAa4ro75jQQE3ATsBLwEjAR4BFwEUARsBDwEQAREBBwELAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBKAExATwBNAE0ATQBNAE4AT4BPwFAAT8BPgGsLaS+ZassQAEzAS4BJxsrAR4BEwEPAQ8BEQERAQcBCwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBLAEoATABMAEvATEBLwE8ATQBNAE0ATQBOAE/AUEBPwFAATMBMAEjASEBFwEbAQ8BEQEPAQcBCwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDQEfASwBJAEkASQBJAEoAS4BMAExGi4BMQE8ATQBOAFBATcBOwExASMBHwETAQ4BEQEPAQcBCwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDQEJARgBIQEgAR4BHgEgASwBJAEkASQBJAEoAS4BLgE8ATgBMwExAScBKwEeARMBDwEQAQcBCwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFAQ8BHAEUARQBFAEUARgBHgEeAR8BHgEgASwBJAEoIS8BPAE7AS8BIwEeARcBGwEPAQ8BAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUBDgEPAQ4BETIRARABHAEUARQBGAEhASABHgEgASwBKAEwATABMAEjKSEBEwEQARABDgEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBQEOAREBEQEPAREBEAEPAQ8BDgEcARQBGAEgASABHgElAS8BLgEwASMBHgETARABEQEHAQsBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDQEJARABBAEEAQQBCAERAQ8BDwEQARABDwEcARgBHwEeASwBKAEvAS4BIwEeARMBDgERAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFAREBDgEBAQEBAQEMAQQBBAEEAQgBDgERARABHAEYAR8BIAElATABLgEjASABEwEOAQ4BAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUBDgERAQEBAQEBAQEBAQEBAQEBBQEPAQ4BEAERARUBHgEeASUBLgEwASMBIAETARABDgEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBBQEQARABAQEBAQEBAQEBAQEBAQEFARABDgEPAQ8BFQEfAR4BJQExAS8BIwEgARMBDwEOAQMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDQEJAQ8BDgEBAQEBAQEBAQEBAQEBAQUBDgEPAQ8BEAEVAR4BIAElAS8BMS4jASEBEwEPAREBAwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFAQ4BDgERAQ==", - "BrickPoetList": "UEF8MXxBfDIwM3wxNTh8XkF8MnxIT1JTRXwyODN8MTU3fF5BfDN8VEhFfDM0N3w3fF5BfDR8TUFORXwxOTV8Nzl8XkF8NXxBTkR8MjE4fDV8XkF8NnxBTnwyODN8MnxeQXw3fFRBSUx8MTczfDYwfF5BfDh8UE9OWXw2MHwxNjZ8XkF8OXxNQVJFfDc0fDV8XkF8MTB8U1RBTExJT058Mjc0fDIzN3xeQXwxMXxHRUxESU5HfDg4fDEyM3xeQXwxMnxHUk9PTXwzMzl8NnxeQXwxM3xTUEVFRFl8MzZ8MTk2fF5BfDE0fEFSRXw1fDEwOHxeQXwxNXxJfDEyOXwyMDN8XkF8MTZ8QU18MjExfDI3NHxeQXwxN3xaSVBQWXwzMjV8MTUxfF5BfDE4fElTTEFORHwxNzR8MjMwfF5BfDE5fFdBVEVSfDEzMnw1MXxeQXwyMHxCUk9XTnwxNzl8MzR8XkF8MjF8QkxBQ0t8MTQ5fDF8XkF8MjJ8RlVaWll8MTl8MTI2fF5BfDIzfEZVTktZfDc1fDN8XkF8MjR8R0FMTE9QfDEyMnwyMjF8XkF8MjV8SlVNUHwyNzd8MjI1fF5BfDI2fFlPVXwyNTh8NTB8XkF8Mjd8V0V8MzI1fDc1fF5BfDI4fEJMQUNLfDczfDY4fF5BfDI5fFJJREV8MTA3fDE2OHxeQXwzMHxQUkVUVFl8MTg3fDEzN3xeQXwzMXxQVVJQTEV8MjI1fDIzN3xeQXwzMnxDVVJMWXw1NHwxOTN8XkF8MzR8V0lMRHwxMjZ8MjU5fF5BfDM1fEJVVHwzNDd8MjM0fF5BfDM2fE9SfDR8MTIzfF5BfDM3fElUfDI1MHwyMTl8XkF8Mzh8VEFNRXwxNjF8Nzd8XkF8Mzl8VEhFWXwxNjR8MTMwfF5BfDQwfEdPfDE3fDEzMXxeQXw0MXxIQVBQWXw2MXwxMDl8XkF8NDJ8QU1BWklOR3wwfDI3OHxeQXw0M3xDSEVTVE5VVHwyMDl8ODh8XkF8NDR8R1JBWXwyMzh8OTR8XkF8NDV8UklERVN8ODB8MTU2fF5BfDQ2fE1ZfDE1MnwxNTF8XkF8NDd8U0FEfDExfDk5fF5BfDQ4fElTfDI0N3w1MHxeQXw0OXxSRUlOfDY4fDE3OHxeQXw1MHxJTkd8MzIwfDMxfF5BfDUxfFN8MTk4fDEwMHxeQXw1MnxTfDE0M3wyNTF8XkF8NTN8TVVTVHwzNTV8Nzh8XkF8NTR8V0lUSE9VVHwyNzd8MjEyfF5BfDU1fEJFTElFVkV8NTZ8MjAwfF5BfDU2fEJFQVVUSUZVTHwxOHwxOTl8XkF8NTd8U1VOU0VUfDJ8ODh8XkF8NTh8QlJFRVpFfDE5MHwyMDZ8XkF8NTl8TUFHTklGSUNFTlR8MjV8MTU0fF5BfDYwfEZBTlRBU1RJQ3w1M3w1OHxeQXw2MXxVTlJJVkFMRUR8MjN8MTc4fF5BfDYyfEFEVkVOVFVSRXwzMzZ8MTU3fF5BfDYzfE1ZfDE3MXw1N3xeQXw2NHxZT1V8NzJ8MTU3fF5BfDY1fE9VUnwyNzB8MjA3fF5BfDY2fElTfDE4OHwyMjh8XkF8Njd8VEhFfDEwNXwxNjJ8XkF8Njh8R1JFQVRFU1R8NXwxOTV8XkF8Njl8TE9WRXwxODR8MTk1fF5BfDcwfFdPTkRFUkZVTHw5NXwxNTl8XkF8NzF8VkVSWXwyMTF8NzF8XkF8NzJ8SVN8MjY3fDE0NHxeQXw3M3xIRXwxNzd8ODN8XkF8NzR8U0hFfDI2NHwxMDl8XkF8NzV8QkVZT05EfDE0NXw1OXxeQXw3NnxBR0FJTlNUfDMxMXw2M3xeQXw3N3xCRXw1NXwyNDZ8XkF8Nzh8SU5UT3wzNDJ8Mjl8XkF8Nzl8QU5EfDMzM3wyMTR8XkF8ODB8QUxTT3wyOTN8MjIyfF5BfDgxfEJFQ0FVU0V8MzIwfDIzNnxeQXw4MnxGT1JFVkVSfDI4NXwxOTF8XkF8ODN8QUxXQVlTfDI3MHwxOTh8XkF8Mjg1fFRPfDQ0fDQwfF5BfDI4NnxCRXwxNzR8MjcyfF5BfDI4N3xJTlRPfDE3fDE4fF5BfDI4OHxUSFJPVUdIfDI4fDIzNnxeQXwyODl8QVJPVU5EfDMyNnw1fF5BfDQ1NXxTSUxWRVJ8MzV8MTkyfF4=", - "BrickPoetMove": "UFV8MzB8MTg3fDEzN3xe", - "ChatBottomLeft": "FBRUcmFucyBSaWdodHM=", - "ChatBottomRight": "FBVBcmUgSHVtYW4=", - "ChatDmRight": "FBZSaWdodHM=", - "ChatMotd": "fkVuYmllcyBhcmUgdmFsaWQh", - "DrawingRoomUpdate": "UEM5NTl8NjReNjd8NjZeNzN8NjheNzl8NjleODc=", - "DressupRoomPeiceLoad": "UA==", - "DressupRoomPeiceMove": "UDExfDE0LjR8Mi40fF4=", - "ForwardedSwfModule_516152": "UFFhUg==", - "ForwardedSwfModule_AF8D91C8": "UK+Nkcg=", - "KeepAlive": "fA==", - "KickMessage": "gFRyYW5zcGhvYmlh", - "LoginSuccess": "fxQ=", - "LoginFail": "fxU=", - "LoginFail_ReasonBanned": "fxZZb3UgYXJlIGJhbm5lZC4=", - "CreateMeta": "Hl5SMVRyYW5zIFJpZ2h0c15YXlo=", - "MoneyPlayerCountAndMail": "ezEwMHwxfDQwfA==", - "Movement_DirectionUpMoveUpInsideMapWalk": "FRU0FhYUFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownInsideMapWalk": "FRVLFj0UFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftInsideMapWalk": "FRciFi8UFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionUpMoveRightInsideMapWalk": "FRRDFEgUFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateInsideMapWalk": "FRUqFikUFBUeFQ==", - "Movement_DirectionUpMoveEscapeInsideMapWalk": "FRUnFD4UFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpInsideMapWalk": "FRU0FhYWFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownInsideMapWalk": "FRVLFj0WFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftInsideMapWalk": "FRciFi8WFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionDownMoveRightInsideMapWalk": "FRRDFEgWFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateInsideMapWalk": "FRUqFikWFBUeFQ==", - "Movement_DirectionDownMoveEscapeInsideMapWalk": "FRUnFD4WFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpInsideMapWalk": "FRU0FhYXFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownInsideMapWalk": "FRVLFj0XFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftInsideMapWalk": "FRciFi8XFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionLeftMoveRightInsideMapWalk": "FRRDFEgXFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateInsideMapWalk": "FRUqFikXFBUeFQ==", - "Movement_DirectionLeftMoveEscapeInsideMapWalk": "FRUnFD4XFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpInsideMapWalk": "FRU0FhYVFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownInsideMapWalk": "FRVLFj0VFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftInsideMapWalk": "FRciFi8VFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionRightMoveRightInsideMapWalk": "FRRDFEgVFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateInsideMapWalk": "FRUqFikVFBUeFQ==", - "Movement_DirectionRightMoveEscapeInsideMapWalk": "FRUnFD4VFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpInsideMapWalk": "FRU0FhYYFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownInsideMapWalk": "FRVLFj0YFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftInsideMapWalk": "FRciFi8YFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionTeleportMoveRightInsideMapWalk": "FRRDFEgYFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateInsideMapWalk": "FRUqFikYFBUeFQ==", - "Movement_DirectionTeleportMoveEscapeInsideMapWalk": "FRUnFD4YFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpInsideMapWalk": "FRU0FhYeFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownInsideMapWalk": "FRVLFj0eFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftInsideMapWalk": "FRciFi8eFCIrFa8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionNoneMoveRightInsideMapWalk": "FRRDFEgeFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateInsideMapWalk": "FRUqFikeFBUeFQ==", - "Movement_DirectionNoneMoveEscapeInsideMapWalk": "FRUnFD4eFBssFQEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionUpMoveUpInsideMap": "FRU0FhYUFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownInsideMap": "FRVLFj0UFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftInsideMap": "FRciFi8UFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionUpMoveRightInsideMap": "FRRDFEgUFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateInsideMap": "FRUqFikUFBUeFA==", - "Movement_DirectionUpMoveEscapeInsideMap": "FRUnFD4UFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpInsideMap": "FRU0FhYWFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownInsideMap": "FRVLFj0WFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftInsideMap": "FRciFi8WFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionDownMoveRightInsideMap": "FRRDFEgWFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateInsideMap": "FRUqFikWFBUeFA==", - "Movement_DirectionDownMoveEscapeInsideMap": "FRUnFD4WFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpInsideMap": "FRU0FhYXFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownInsideMap": "FRVLFj0XFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftInsideMap": "FRciFi8XFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionLeftMoveRightInsideMap": "FRRDFEgXFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateInsideMap": "FRUqFikXFBUeFA==", - "Movement_DirectionLeftMoveEscapeInsideMap": "FRUnFD4XFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpInsideMap": "FRU0FhYVFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownInsideMap": "FRVLFj0VFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftInsideMap": "FRciFi8VFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionRightMoveRightInsideMap": "FRRDFEgVFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateInsideMap": "FRUqFikVFBUeFA==", - "Movement_DirectionRightMoveEscapeInsideMap": "FRUnFD4VFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpInsideMap": "FRU0FhYYFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownInsideMap": "FRVLFj0YFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftInsideMap": "FRciFi8YFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionTeleportMoveRightInsideMap": "FRRDFEgYFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateInsideMap": "FRUqFikYFBUeFA==", - "Movement_DirectionTeleportMoveEscapeInsideMap": "FRUnFD4YFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpInsideMap": "FRU0FhYeFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownInsideMap": "FRVLFj0eFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftInsideMap": "FRciFi8eFCIrFK8tpwGrAUABPgE/AT4BQAE/AUABsb5zr75fpwGjAaMBowGjAaMBowGjAQ==", - "Movement_DirectionNoneMoveRightInsideMap": "FRRDFEgeFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateInsideMap": "FRUqFikeFBUeFA==", - "Movement_DirectionNoneMoveEscapeInsideMap": "FRUnFD4eFBssFAEBAQEBAQEBAQEBAQwBCAEOARABFQEgAR8BAQEBAQEBAQEBAQEBAQEMAQgBDwEVAR4BIQEBAQEBAQEBAQEBAQEBAQEBBQERARwBGAEhAQEBAQEBAQEBAQEBAQEBAQEMAQgBEQEcARgBAQEBAQEBAQEBAQEBAQEBAQEBDAEIARABHAEBAQEBAQEBAQEBAQEBAQEBAQEBAQwBCAERAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEMAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionUpMoveUpOutsideMapTopWalk": "FRPsEhAUFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownOutsideMapTopWalk": "FRPVEukUFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftOutsideMapTopWalk": "FRH+EvcUFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveRightOutsideMapTopWalk": "FRTdFN4UFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateOutsideMapTopWalk": "FRP2Ev0UFBUeFQ==", - "Movement_DirectionUpMoveEscapeOutsideMapTopWalk": "FRP5FOgUFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpOutsideMapTopWalk": "FRPsEhAWFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownOutsideMapTopWalk": "FRPVEukWFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftOutsideMapTopWalk": "FRH+EvcWFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveRightOutsideMapTopWalk": "FRTdFN4WFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateOutsideMapTopWalk": "FRP2Ev0WFBUeFQ==", - "Movement_DirectionDownMoveEscapeOutsideMapTopWalk": "FRP5FOgWFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpOutsideMapTopWalk": "FRPsEhAXFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownOutsideMapTopWalk": "FRPVEukXFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftOutsideMapTopWalk": "FRH+EvcXFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveRightOutsideMapTopWalk": "FRTdFN4XFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateOutsideMapTopWalk": "FRP2Ev0XFBUeFQ==", - "Movement_DirectionLeftMoveEscapeOutsideMapTopWalk": "FRP5FOgXFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpOutsideMapTopWalk": "FRPsEhAVFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownOutsideMapTopWalk": "FRPVEukVFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftOutsideMapTopWalk": "FRH+EvcVFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveRightOutsideMapTopWalk": "FRTdFN4VFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateOutsideMapTopWalk": "FRP2Ev0VFBUeFQ==", - "Movement_DirectionRightMoveEscapeOutsideMapTopWalk": "FRP5FOgVFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpOutsideMapTopWalk": "FRPsEhAYFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownOutsideMapTopWalk": "FRPVEukYFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftOutsideMapTopWalk": "FRH+EvcYFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveRightOutsideMapTopWalk": "FRTdFN4YFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateOutsideMapTopWalk": "FRP2Ev0YFBUeFQ==", - "Movement_DirectionTeleportMoveEscapeOutsideMapTopWalk": "FRP5FOgYFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpOutsideMapTopWalk": "FRPsEhAeFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownOutsideMapTopWalk": "FRPVEukeFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftOutsideMapTopWalk": "FRH+EvceFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveRightOutsideMapTopWalk": "FRTdFN4eFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateOutsideMapTopWalk": "FRP2Ev0eFBUeFQ==", - "Movement_DirectionNoneMoveEscapeOutsideMapTopWalk": "FRP5FOgeFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionUpMoveUpOutsideMapTop": "FRPsEhAUFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownOutsideMapTop": "FRPVEukUFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftOutsideMapTop": "FRH+EvcUFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveRightOutsideMapTop": "FRTdFN4UFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateOutsideMapTop": "FRP2Ev0UFBUeFA==", - "Movement_DirectionUpMoveEscapeOutsideMapTop": "FRP5FOgUFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpOutsideMapTop": "FRPsEhAWFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownOutsideMapTop": "FRPVEukWFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftOutsideMapTop": "FRH+EvcWFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveRightOutsideMapTop": "FRTdFN4WFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateOutsideMapTop": "FRP2Ev0WFBUeFA==", - "Movement_DirectionDownMoveEscapeOutsideMapTop": "FRP5FOgWFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpOutsideMapTop": "FRPsEhAXFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownOutsideMapTop": "FRPVEukXFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftOutsideMapTop": "FRH+EvcXFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveRightOutsideMapTop": "FRTdFN4XFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateOutsideMapTop": "FRP2Ev0XFBUeFA==", - "Movement_DirectionLeftMoveEscapeOutsideMapTop": "FRP5FOgXFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpOutsideMapTop": "FRPsEhAVFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownOutsideMapTop": "FRPVEukVFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftOutsideMapTop": "FRH+EvcVFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveRightOutsideMapTop": "FRTdFN4VFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateOutsideMapTop": "FRP2Ev0VFBUeFA==", - "Movement_DirectionRightMoveEscapeOutsideMapTop": "FRP5FOgVFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpOutsideMapTop": "FRPsEhAYFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownOutsideMapTop": "FRPVEukYFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftOutsideMapTop": "FRH+EvcYFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveRightOutsideMapTop": "FRTdFN4YFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateOutsideMapTop": "FRP2Ev0YFBUeFA==", - "Movement_DirectionTeleportMoveEscapeOutsideMapTop": "FRP5FOgYFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpOutsideMapTop": "FRPsEhAeFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownOutsideMapTop": "FRPVEukeFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftOutsideMapTop": "FRH+EvceFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveRightOutsideMapTop": "FRTdFN4eFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateOutsideMapTop": "FRP2Ev0eFBUeFA==", - "Movement_DirectionNoneMoveEscapeOutsideMapTop": "FRP5FOgeFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionUpMoveUpOutsideMapBottomWalk": "FSUcHUoUFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownOutsideMapBottomWalk": "FSUzHjEUFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftOutsideMapBottomWalk": "FSZKHiMUFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveRightOutsideMapBottomWalk": "FSQrHDwUFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateOutsideMapBottomWalk": "FSRSHh0UFBUeFQ==", - "Movement_DirectionUpMoveEscapeOutsideMapBottomWalk": "FSRPHDIUFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpOutsideMapBottomWalk": "FSUcHUoWFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownOutsideMapBottomWalk": "FSUzHjEWFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftOutsideMapBottomWalk": "FSZKHiMWFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveRightOutsideMapBottomWalk": "FSQrHDwWFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateOutsideMapBottomWalk": "FSRSHh0WFBUeFQ==", - "Movement_DirectionDownMoveEscapeOutsideMapBottomWalk": "FSRPHDIWFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpOutsideMapBottomWalk": "FSUcHUoXFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownOutsideMapBottomWalk": "FSUzHjEXFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftOutsideMapBottomWalk": "FSZKHiMXFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveRightOutsideMapBottomWalk": "FSQrHDwXFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateOutsideMapBottomWalk": "FSRSHh0XFBUeFQ==", - "Movement_DirectionLeftMoveEscapeOutsideMapBottomWalk": "FSRPHDIXFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpOutsideMapBottomWalk": "FSUcHUoVFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownOutsideMapBottomWalk": "FSUzHjEVFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftOutsideMapBottomWalk": "FSZKHiMVFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveRightOutsideMapBottomWalk": "FSQrHDwVFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateOutsideMapBottomWalk": "FSRSHh0VFBUeFQ==", - "Movement_DirectionRightMoveEscapeOutsideMapBottomWalk": "FSRPHDIVFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpOutsideMapBottomWalk": "FSUcHUoYFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownOutsideMapBottomWalk": "FSUzHjEYFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftOutsideMapBottomWalk": "FSZKHiMYFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveRightOutsideMapBottomWalk": "FSQrHDwYFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateOutsideMapBottomWalk": "FSRSHh0YFBUeFQ==", - "Movement_DirectionTeleportMoveEscapeOutsideMapBottomWalk": "FSRPHDIYFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpOutsideMapBottomWalk": "FSUcHUoeFB4oFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownOutsideMapBottomWalk": "FSUzHjEeFCApFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftOutsideMapBottomWalk": "FSZKHiMeFCIrFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveRightOutsideMapBottomWalk": "FSQrHDweFCQqFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateOutsideMapBottomWalk": "FSRSHh0eFBUeFQ==", - "Movement_DirectionNoneMoveEscapeOutsideMapBottomWalk": "FSRPHDIeFBssFQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionUpMoveUpOutsideMapBottom": "FSUcHUoUFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveDownOutsideMapBottom": "FSUzHjEUFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveLeftOutsideMapBottom": "FSZKHiMUFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveRightOutsideMapBottom": "FSQrHDwUFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionUpMoveUpdateOutsideMapBottom": "FSRSHh0UFBUeFA==", - "Movement_DirectionUpMoveEscapeOutsideMapBottom": "FSRPHDIUFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionDownMoveUpOutsideMapBottom": "FSUcHUoWFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveDownOutsideMapBottom": "FSUzHjEWFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveLeftOutsideMapBottom": "FSZKHiMWFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveRightOutsideMapBottom": "FSQrHDwWFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionDownMoveUpdateOutsideMapBottom": "FSRSHh0WFBUeFA==", - "Movement_DirectionDownMoveEscapeOutsideMapBottom": "FSRPHDIWFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionLeftMoveUpOutsideMapBottom": "FSUcHUoXFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveDownOutsideMapBottom": "FSUzHjEXFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveLeftOutsideMapBottom": "FSZKHiMXFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveRightOutsideMapBottom": "FSQrHDwXFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionLeftMoveUpdateOutsideMapBottom": "FSRSHh0XFBUeFA==", - "Movement_DirectionLeftMoveEscapeOutsideMapBottom": "FSRPHDIXFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionRightMoveUpOutsideMapBottom": "FSUcHUoVFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveDownOutsideMapBottom": "FSUzHjEVFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveLeftOutsideMapBottom": "FSZKHiMVFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveRightOutsideMapBottom": "FSQrHDwVFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionRightMoveUpdateOutsideMapBottom": "FSRSHh0VFBUeFA==", - "Movement_DirectionRightMoveEscapeOutsideMapBottom": "FSRPHDIVFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionTeleportMoveUpOutsideMapBottom": "FSUcHUoYFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveDownOutsideMapBottom": "FSUzHjEYFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveLeftOutsideMapBottom": "FSZKHiMYFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveRightOutsideMapBottom": "FSQrHDwYFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionTeleportMoveUpdateOutsideMapBottom": "FSRSHh0YFBUeFA==", - "Movement_DirectionTeleportMoveEscapeOutsideMapBottom": "FSRPHDIYFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "Movement_DirectionNoneMoveUpOutsideMapBottom": "FSUcHUoeFB4oFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveDownOutsideMapBottom": "FSUzHjEeFCApFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveLeftOutsideMapBottom": "FSZKHiMeFCIrFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveRightOutsideMapBottom": "FSQrHDweFCQqFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=", - "Movement_DirectionNoneMoveUpdateOutsideMapBottom": "FSRSHh0eFBUeFA==", - "Movement_DirectionNoneMoveEscapeOutsideMapBottom": "FSRPHDIeFBssFAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB", - "PlaceData": "eV5UFysXLRYbFh1Ucm9waWN0b24gVmlsbGFnZV5UGEMYRhU5FTtSYWlueSBNZWFkb3dzXlQdLR0xFkAWQ0NhbnRsZSBNZWFkb3dzXlQYFhgbGUIZRlRhaWwgRW5kXlQXLxcyFiwWNFRyb3BpY3Rvbl5UGTwZRBZFFkhXaGlza2VydG9uXlQaQhpJGk4aUlNhbmR5IE1lYWRvd3NeVBssGzEZLxk2U3Vuc2hpbmUgTWVhZG93c15UHEYcThczFzhUcmVldG9uXlQhTyIXFSwVMUNyb3NzYm9uZXMgQ2FtcF5UGTkZRRZIFkxXaGlza2VydG9uXlQaRxpQFj4WRFNvYXJpbmcgTWVhZG93c15UGjcaQRYlFitXaW5ndG9uXlQYRBhLFk0XFkNhcnJvdHRvbl5UIDwgRhkiGSlBc2h0b25eVB06HUYUShRQQ3J5c3RhbHRvbl5UHUcdUhYdFiRXaXRoZXJ0b25eVBw2HEMaShpQU2FudG9uXlQaPxpIFhsWJFdpbmd0b25eVCI5IkUZHhklTW9sdGVuIE1lYWRvd3NeVBsYGycUMhQ4Q2hpbGx0b25eVCI9IksUSBRPU2t1bGx0b25eVBk7GUUVKhU0SW5rdG9uXlQXLRc7FjUWPVRyb3BpY3Rvbl5UGUcaFBdGF09GbGlwcGVydG9uXlQcKBw3GT8ZR0hvcnNlc2hvZSBWaWxsYWdlXlQdGB0kGEEYTFNoZWxsdG9uXlQaORpGGRYZJEFwcGxldG9uXlQcPRxNFzkXRVRyZWV0b25eVBsgGy8aMRo+SG90dG9uXlQbUhwnFj0WS0VhcnRvbl5BGygbKxZOFk9QYXN0IEl0cyBQcmltZSBGb3Jlc3ReQRhKGEwWSBZLVmVsdmV0ZWVuIEZvcmVzdF5BGE0YTxZLFk5WZWx2ZXRlZW4gRm9yZXN0XkEbKRstFkwWTlBhc3QgSXRzIFByaW1lIEZvcmVzdF5BGyYbKhZQFlJQYXN0IEl0cyBQcmltZSBGb3Jlc3ReQR43HjsWGxYdTXlzdGljIEZvcmVzdF5BGzEbNBo3GjpUb2FzdHkgRm9yZXN0XkEcThxQF0gXTU11enpsZSBGb3Jlc3ReQRlKGVAXPxdBRmxpcHBlciBGb3Jlc3ReQRsZGx0aOBo7U3dlbHRyeSBGb3Jlc3ReQSI6IjwVFRUcUGF0Y2ggRm9yZXN0XkEZNxk5GDAYN0ZsaXBwZXIgRm9yZXN0XkEZRBlIFzgXPEJsb3dob2xlIEZvcmVzdF5BGDsYPxcxFzVCdW5ueSBIb3AgRm9yZXN0XkEZRBlMF0IXREZsaXBwZXIgRm9yZXN0XkEbFRsZFx8XI1NlYSBvZiBTYW5kXkEdIR0iFzsXTE11enpsZSBGb3Jlc3ReQRlEGU0WRBZGQ2F0bmlwIEZvcmVzdF5BGzEbNxozGjZUb2FzdHkgRm9yZXN0XkEcFBwWGSkZM1RhaWwgRm9yZXN0XkEaFxobFSYVK0Zsb3dlciBGb3Jlc3ReQRkVGRkXTxgUVGh1bXBlciBGb3Jlc3ReQRlAGUUVHRUhU25vd3kgQWNyZXNeQR4eHiMWNxY7TXlzdGljIEZvcmVzdF5BGjMaOhkkGSdNb29uIEZvcmVzdF5BGDwYPxdBF0hCdW5ueSBIb3AgRm9yZXN0XkEZPxlBGCIYLUZsaXBwZXIgRm9yZXN0XkEZORlEFlIXFENhdG5pcCBGb3Jlc3ReQRg/GEsZIBkiRGV3IEZvcmVzdF5BGj8aSxkxGTNNb29uIEZvcmVzdF5BGUoZTxUsFTFQYWludGVkIEJheV5BGTcZPBUjFShTYW5keSBQYWxtc15BHRQdGBhMGFNTaGVsbCBGb3Jlc3ReQRlEGUgXURgYRmxpcHBlciBGb3Jlc3ReQR0nHSsYQxhKU2hlbGwgRm9yZXN0XkEZFBkbGEIYRldpbGRmbG93ZXIgRm9yZXN0XkEZThoUGSkZLkxvc3QgRm9yZXN0XkEdKB0rF0EXS011enpsZSBGb3Jlc3ReQRk1GToWTRZTQ2F0bmlwIEZvcmVzdF5BGCkYLhg/GEVEYWlzeSBGb3Jlc3ReQRxEHEwXRxdLTXV6emxlIEZvcmVzdF5BGEAYRBZEFkxWZWx2ZXRlZW4gRm9yZXN0XkEYPRhBFkoWUlZlbHZldGVlbiBGb3Jlc3ReQRlAGUsWThZRQ2F0bmlwIEZvcmVzdF5BGzcbORkuGT9UYWlsIEZvcmVzdF5BGTMZOBZFFkxDYXRuaXAgRm9yZXN0XkEdJR0sGEoYT1NoZWxsIEZvcmVzdF5BG0cbShgVGCFNYW5lIEZvcmVzdF5BGUEZSxY/FkNDYXRuaXAgRm9yZXN0XkEcLRwyGTYZPkhvb2YgRm9yZXN0XkEcMhxAFzQXN1dlc3QgVHJlZXRvbiBGb3Jlc3ReQRpRGxwaMxo3U3dlbHRyeSBGb3Jlc3ReQRwXHCAWNhY7RWFydGlwIEZvcmVzdF5BGjwaRRgzGDhMaXR0bGUgQXBwbGV0b24gRm9yZXN0XkEaPhpGGC0YM0xpdHRsZSBBcHBsZXRvbiBGb3Jlc3ReQRo5GkEXPBdCUHJpY2tseSBTcGl0XkEaMho2GRgZJE1vb24gRm9yZXN0XkEcORxFFyMXJ1dlc3QgVHJlZXRvbiBGb3Jlc3ReQRlGGU0WRxZOQ2F0bmlwIEZvcmVzdF5BGDoYPxc2F0BCdW5ueSBIb3AgRm9yZXN0XkEZShoUGS8ZNExvc3QgRm9yZXN0XkEiNCI5FFIVHVBhdGNoIEZvcmVzdF5BGTkaFRlAGUJMb3N0IEZvcmVzdF5BHSMdJxc+F0xNdXp6bGUgRm9yZXN0XkEYQhhJFkMWS1ZlbHZldGVlbiBGb3Jlc3ReQR43HkEWHhYkTXlzdGljIEZvcmVzdF5BGj8bFBktGTBNb29uIEZvcmVzdF5BGE8ZHBg7GEBXaWxkZmxvd2VyIEZvcmVzdF5BGzMbORkzGT5UYWlsIEZvcmVzdF5BHiQeLhY0FjtNeXN0aWMgRm9yZXN0XkEaMho8GE8ZFk1vb24gRm9yZXN0XkEaOBpBGDkYQUxpdHRsZSBBcHBsZXRvbiBGb3Jlc3ReQR87H0QUPRRFRnJpZ2lkIE1lYWRvd3NeQRslGzcXORc9TWFuZSBGb3Jlc3ReQRsqGzUYKxgySG9yc2UgSXNsZSBFcXVlc3RyaWFuIFBhcmteQRo1Gj4YQhhLTGl0dGxlIEFwcGxldG9uIEZvcmVzdF5BGzIbORkfGStUYWlsIEZvcmVzdF5BHVIeJxZRFxVNeXN0aWMgRm9yZXN0XkEYOxhDFlMXHlZlbHZldGVlbiBGb3Jlc3ReQRk/GhYZOxk/TG9zdCBGb3Jlc3ReQRw0HEcXLhczV2VzdCBUcmVldG9uIEZvcmVzdF5BHBYcJhcqFzBCaWcgRm9yZXN0XkEZQhoWGTUZOkxvc3QgRm9yZXN0XkEiKyIzFFAVHVBhdGNoIEZvcmVzdF5BGx4bJRdAF09NYW5lIEZvcmVzdF5BHVMeSBY8Fj5NeXN0aWMgRm9yZXN0XkEZNBlAFjsWRENhdG5pcCBGb3Jlc3ReQRtQHBQZHhk6VGFpbCBGb3Jlc3ReQRw0HEsXKBctV2VzdCBUcmVldG9uIEZvcmVzdF5BHRsdIBc3F05NdXp6bGUgRm9yZXN0XkEeNB5FFiUWLE15c3RpYyBGb3Jlc3ReQRwxHDsXOBdEV2VzdCBUcmVldG9uIEZvcmVzdF5BGUYZUhUqFTRUaGUgU2hvcmVzIG9mIFBhaW50ZWQgQmF5XkEdGB0qGE8ZFlNoZWxsIEZvcmVzdF5BGTsZQxc3F0dGbGlwcGVyIEZvcmVzdF5BGTkZPxgiGDhGbGlwcGVyIEZvcmVzdF5BG0AbRhdMGCNNYW5lIEZvcmVzdF5BHBQcKRciFylCaWcgRm9yZXN0XkEbTBtQGRgZPVRhaWwgRm9yZXN0XkEbURwhFzEXO0JpZyBGb3Jlc3ReQRhTGRoXNxdOVGh1bXBlciBGb3Jlc3ReQRtPHCsWURcXQmlnIEZvcmVzdF5BHUceMhZMFlBNeXN0aWMgRm9yZXN0XkEaNBsXGScZLE1vb24gRm9yZXN0XkEdUB4bFU4WHkJyaWRsZSBGb3Jlc3ReQRk9GUQXSBgiRmxpcHBlciBGb3Jlc3ReQRxRHRoXMhdNTXV6emxlIEZvcmVzdF5BGDUYPxhEGR1EZXcgRm9yZXN0XkEbKhs/GBYYIk1hbmUgRm9yZXN0XkEaSBsaGRUZJk1vb24gRm9yZXN0XkEeLx5IFi0WO015c3RpYyBGb3Jlc3ReQRhAGE0YQxkfRGV3IEZvcmVzdF5BG0ocNxcYFyFCaWcgRm9yZXN0XkEYMhkUGEoZF0RldyBGb3Jlc3ReQRsmGz8XPhgVTWFuZSBGb3Jlc3ReQRs5G0wZFRlAVGFpbCBGb3Jlc3ReQR02HkoWPxZLTXlzdGljIEZvcmVzdF5JHTUdOBgxGDMwVGhlIE5ldmVyZW5kaW5nIElzbGVzXkkeMB4zGBcYGTBTb2xvbW9uIElzbGVeSR06HT8XLRcxMFBhbG0gSXNsZV5JHj8eRBhEGEowTm9uZXN1Y2ggSXNsZV5JHU4eFBkwGTU2SXNsZSBvZiBIYXJkbHleSR0/HUQYKBgvMFRoZSBOZXZlcmVuZGluZyBJc2xlc15JHSMdKRcWFxwwVGFsb24gSXNsZV5JHTsdQhg2GD0wVGhlIE5ldmVyZW5kaW5nIElzbGVzXkkeLh4zGRYZITBSb2NrIElzbGVeSR1OHhYYMBg3MFRoZSBOZXZlcmVuZGluZyBJc2xlc15JHU8eFxgiGCkwVGhlIE5ldmVyZW5kaW5nIElzbGVzXkkeOx5EGFMZGjBTcGlyaXQgSXNsZV5JHSMdLhk8GUI1UHV1aG9udWEgSXNsZV5JHTMdPRk4GUAwUGF0c3kgSXNsZV5JHTkdQxgZGCEwU3BpY2UgSXNsZV5JHi0eNRg4GEIzSGF2ZW4gSXNsZV5JGh8aJxsjGy4yVGhlIFNhbmQgSXNsZXNeSR4uHjYYQxhOM0hhbGYgSGF2ZW4gSXNsZV5JHjIePBcyFzswQ3JhenkgRWRkaWUncyBJc2xlXkkdUB4ZFyYXMDBBdHJvcG9zIElzbGVeSR0+HUgZNBk9MFBhdHN5IElzbGVeSRk4GUQaNho+MlRoZSBTYW5kIElzbGVzXkkdQR1MFzUXPjBNYXJlIElzbGVeSR1CHVAYPhhIM1RyYW5xdWlsaXR5IElzbGVeSR1RHhoYPxhPMFNlcmVuaXR5IElzbGVeSR1CHUsXHhcuMEFyZGVudCBJc2xlXkkdPx1NGSIZLTBEcmlsbCBJc2xlXkkeHx4tGDkYRDNIYXZlbiBJc2xlXkkeFR4lGigaMjBBZXNvcCBJc2xlXkkeRR5QGBwYKzBIb3R6ZXBsb3R6IElzbGVeSR4fHi0YRRhSM0hhdmVuIElzbGVeSRwVHCAVUhYkMFdlbGNvbWUgSXNsZV5JHSodOxcZFyUwU2hpbW1lciBJc2xlXkkdQR1OGEwZHDBMaWxhYyBJc2xlXkkeMh49GCAYNDBMb2NoIElzbGVeSRkwGUYaKxo1MlRoZSBTYW5kIElzbGVzXkkaQRsVFywXNzJNYW5lIElzbGVeSR41HkYXHhcrMFBhcmFkaXNlIElzbGVeSRo3GkcXOBdGMk1hbmUgSXNsZV5JGhUaHhsUGy0yVGhlIFNhbmQgSXNsZXNeSR5GHxUYMRhBMFRoZW9icm9tYSBJc2xlXkkeTh8mFCoUNDFJY2ljbGUgSXNsZV5JHUgeFxdIGBkwUXVpZXQgSXNsZV5JHlEfGhdJGCgwSG90emVwbG90eiBJc2xlXkkeLR5HF0sYFzBCb25lIElzbGVeSR4fHjIUSRUbMVNub3diYWxsIElzbGVeSRw2HEUULBRDMUNocmlzdG1hcyBJc2xlXkkbGxsyFkgXGDJNYW5lIElzbGVeSR4eHioXTxguMENyZXNjZW50IElzbGVeSR4VHi4ZFhklMFJvY2sgSXNsZV5JHUIdTxY5FxgwU2FkZGxlIElzbGVeSRROFSkWMBZANVJhaW4gSXNsZV5JHkIfGxctFz8wRWxkb3JhZG8gSXNsZV5JIiAiNxZDFxc3VGVwaHJhIElzbGVeSRlQGjkUJRQxMUdsYWNpZXIgSXNsZV5JIkwjJRdSGCc3U2NvcmlhIElzbGVeSRw4HE0UTRUmMUJlcmcgSXNsZV5JGkcbJhcZFysyTWFuZSBJc2xlXkkZTBohGDoZFTBUYWlsIElzbGVeSSMYIzIUMhRJM0hhdCBJc2xlXkkeIB4+FC0UQzFQb2xhciBJc2xlXkkfJh89GBoYOTBDYWJpbiBJc2xlXkkdLh1MGiwaRDJEdXN0IElzbGVeSR4bHjAaPhsiMlRvcnJpZCBJc2xlXkkeHB43FyoXSjBCb25lIElzbGVeSRgsGRUZRxodMFRhaWwgSXNsZV5JHkwfGxYkFyEwU2FkZGxlIElzbGVeSRUqFUUWKRZLNVZpbmUgSXNsZV5JIkQjMhQcFDEzSGF0IElzbGVeSR1QHiUWLBcdMFNhZGRsZSBJc2xlXkkZFhk0GTcaGjBUYWlsIElzbGVeSRwhHEMZKxlNMEhvb2YgSXNsZV5JF08YKxkxGh0wVGFpbCBJc2xlXkkfKiAiGDoYUDBDYWJpbiBJc2xlXkkZOBoUGkIbLjJUaGUgU2FuZCBJc2xlc15JHR0dQRYvFlIwU2FkZGxlIElzbGVeSRQfFEgUIhRCMFByaXNvbiBJc2xlXkkdNB4wGkYbHDJUb3JyaWQgSXNsZV5JIj4jJRccFz43TWFnbWEgSXNsZV5JIRQhPxQmFEUzVHJlYXN1cmUgSXNsZV5JHTgeIRVGFiswUmlkZXIgSXNsZV5JFEAVQRZMFyU1VmluZSBJc2xlXkkYTRk3GjYbHjJUaGUgU2FuZCBJc2xlc15JHSAeIBsdGzoyVG9ycmlkIElzbGVeSR8UH0IZURo+N1B1bWljZSBJc2xlXkkcOR0ZFTcWPTBIb3JuIElzbGVeSRksGiMVFhU/MEFydCBJc2xlXkkcQh03GDIZIDBUdXJ0bGUgSXNsZV5JGSIaFRYqFxwwQ2F0IElzbGVeSRk1GiUZFhlPMFRhaWwgSXNsZV5JHzchGBcbFzkwV2hvcmwgSXNsZV5JHz4gPBdJGDowQ2FiaW4gSXNsZV5JFC8VLhcmGBg1VmluZSBJc2xlXkkWUxdOGScaHTBTdGFyZmlzaCBJc2xlXkkVThY0FCcVPDVXZWIgSXNsZV5JIjojKRoWGxw3QmFzYWx0IElzbGVeSR4mHksVQhcbMFNhZGRsZSBJc2xlXkkcTR4eFDQVHTFJY2UgSXNsZV5JFR0VTRQ2FT81V2ViIElzbGVeSRpSG0oVIRYiMFJpbmcgSXNsZV5JGCMZJBg1GTU0Rmxvd2VyIElzbGVeSRg1GSAWPRgiMEhhcmUgSXNsZV5JGhcbGRVJFkwwQmlyZCBJc2xlXkkeIR9LFCwVFzFQb2xhciBJc2xlXkkhGyIsFy0YMzdJZ25lb3VzIElzbGVeSRhJGS8ZIhs+MlllbGxvdyBCcmljayBJc2xlXkkZLBosFyYYSDBEb2xwaGluIElzbGVeSRo+HDcUIhUZMVNub3cgSXNsZV5JISwjFxQ2FU4zUGlyYXRlIElzbGVeSR8xISAVMRcaMFdob3JsIElzbGVeSRU8FzoYHhk8NUp1bmdsZSBJc2xlXkkgFiMfGDIZPzdMYXZhIElzbGVeSRlOHSkaKhtBMkRlc2VydCBJc2xlXkkULxU7FSIZKzVEb2cgSXNsZV5JHz4iNhk/Gzc3TGF2YSBJc2xlXkkUGxdLGUEbLTZUaGUgQ2xvdWQgSXNsZXNeSRopHTQWLhlGMEhvcnNlIElzbGVeSRU8GRsUShgdNUp1bmdsZSBJc2xl", - "PlayerInfoUpdateOrCreate": "FhUVNBcbFBQeTGk=", - "PlayerLeave": "FhZMaQ==", - "PlaySound": "I1BN", - "ProfilePage": "GFRSQU5TIFJJR0hUUyBBUkUgSFVNQU4gUklHSFRT", - "SecCode_AdminMod": "gVJzQ1VB", - "SecCode_Admin": "gXVTRVVB", - "SecCode_Mod": "gUMzM1VN", - "SecCode_User": "gTNTNVVO", - "SwfModule_Force": "KHRlc3Quc3dm", - "SwfModule_Gentle": "KnRlc3Quc3dm", - "SwfModule_Cutscene": "KXRlc3Quc3dm", - "TileClickInfo": "d1RyYW5zIFJpZ2h0cyBBcmUgSHVtYW4gUmlnaHRz", - "TileOverlayFlags": "dTEyMzEyMzEyMw==", - "TimeAndWeatherUpdate": "ehQeFBgcMVNVTk5Z", - "WeatherUpdate": "ehNDTE9VRA==" -} \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/ResultLogger.cs b/HorseIsleServer/HISPtests/ResultLogger.cs deleted file mode 100644 index 3dc1f1b..0000000 --- a/HorseIsleServer/HISPtests/ResultLogger.cs +++ /dev/null @@ -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 + " *"); - } - } - } -} diff --git a/HorseIsleServer/HISPtests/UnitTests/AuthenticationTest.cs b/HorseIsleServer/HISPtests/UnitTests/AuthenticationTest.cs deleted file mode 100644 index 9bbd4bc..0000000 --- a/HorseIsleServer/HISPtests/UnitTests/AuthenticationTest.cs +++ /dev/null @@ -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 results = new List(); - - // 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; - } - } -} diff --git a/HorseIsleServer/HISPtests/UnitTests/PacketTest.cs b/HorseIsleServer/HISPtests/UnitTests/PacketTest.cs deleted file mode 100644 index bd41a03..0000000 --- a/HorseIsleServer/HISPtests/UnitTests/PacketTest.cs +++ /dev/null @@ -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 knownGoodPackets = new Dictionary(); - - 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>(); - #endif - - List results = new List(); - - 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; - } - } -} diff --git a/HorseIsleServer/HISPtests/UnitTests/ServerStartTest.cs b/HorseIsleServer/HISPtests/UnitTests/ServerStartTest.cs deleted file mode 100644 index a1ad156..0000000 --- a/HorseIsleServer/HISPtests/UnitTests/ServerStartTest.cs +++ /dev/null @@ -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; - } - } - } -} diff --git a/HorseIsleServer/HISPtests/UnitTests/UserTest.cs b/HorseIsleServer/HISPtests/UnitTests/UserTest.cs deleted file mode 100644 index 2ac491f..0000000 --- a/HorseIsleServer/HISPtests/UnitTests/UserTest.cs +++ /dev/null @@ -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 receiveAsync(Socket s) - { - byte[] buffer = new byte[s.Available]; - await s.ReceiveAsync(buffer); - return buffer; - } - - public static async Task RunUserTest() - { - List results = new List(); - - 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; - - } - - - } - - } -} - diff --git a/HorseIsleServer/Installer/Installer.vdproj b/HorseIsleServer/Installer/Installer.vdproj new file mode 100644 index 0000000..3d8c519 --- /dev/null +++ b/HorseIsleServer/Installer/Installer.vdproj @@ -0,0 +1,956 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:Installer" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_0D21C5FF039F49C088EB634A33FC411B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1564B665DC1B4C84B3B06154ED218D5B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_1A4693530D8B4CBBB2A5EC31D8340F0F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_28A4D7E632204CABA7FE740BEFC91DEF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5677B9A3E24F4F6C967D0E86BC2E3E74" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_611F30D5162547E3BA321F145FD40AC5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_98F70300FEAC42DE808CBC3BF0A4EDEE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9B65B8D30BEB46508FDC1142245936E3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A323663C87734476B43AED93BCEE5E78" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Windows" + { + "DisplayName" = "8:Windows" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Windows\\HISP-N00BS-INSTALLER.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2" + { + "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.7.2" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_5202EFE80DEE4723BF89431D6D801282" + { + "Name" = "8:.NET Core" + "Message" = "8:[VSDNETCOREMSG]" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:https://dotnet.microsoft.com/download/dotnet-core/[NetCoreVerMajorDotMinor]" + "IsNETCore" = "11:TRUE" + "Architecture" = "2:0" + "Runtime" = "2:0" + } + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D21C5FF039F49C088EB634A33FC411B" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\flash.dll" + "TargetName" = "8:flash.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1564B665DC1B4C84B3B06154ED218D5B" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\HISP-N00BS.exe" + "TargetName" = "8:HISP-N00BS.exe" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A4693530D8B4CBBB2A5EC31D8340F0F" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\PresentationNative_cor3.dll" + "TargetName" = "8:PresentationNative_cor3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28A4D7E632204CABA7FE740BEFC91DEF" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\vcruntime140_cor3.dll" + "TargetName" = "8:vcruntime140_cor3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5677B9A3E24F4F6C967D0E86BC2E3E74" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\PenImc_cor3.dll" + "TargetName" = "8:PenImc_cor3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_611F30D5162547E3BA321F145FD40AC5" + { + "SourcePath" = "8:..\\N00BS\\icon.ico" + "TargetName" = "8:icon.ico" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_98F70300FEAC42DE808CBC3BF0A4EDEE" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\e_sqlite3.dll" + "TargetName" = "8:e_sqlite3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9B65B8D30BEB46508FDC1142245936E3" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\wpfgfx_cor3.dll" + "TargetName" = "8:wpfgfx_cor3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A323663C87734476B43AED93BCEE5E78" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\D3DCompiler_47_cor3.dll" + "TargetName" = "8:D3DCompiler_47_cor3.dll" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:VersionNT64" + "Transitive" = "11:TRUE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{1525181F-901A-416C-8A58-119130FE478E}:_2BED5EC5191147F4815904695DFB5319" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_3B89F894B58B4F149DD0DBE5EC931BA2" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_E3419B32123541589220537FB1154298" + { + "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:HISP-N00BS" + "ProductCode" = "8:{60BA2AF1-4913-4A37-9280-093E8E7DAADE}" + "PackageCode" = "8:{88A7C3C4-CB07-4D31-ADA6-1FA3B9FFAB19}" + "UpgradeCode" = "8:{FAD2FB5F-7B7C-4293-BF2D-09384146449E}" + "AspNetVersion" = "8:2.0.50727.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:TRUE" + "DetectNewerInstalledVersion" = "11:FALSE" + "InstallAllUsers" = "11:TRUE" + "ProductVersion" = "8:1.3.0" + "Manufacturer" = "8:IsleHorse" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:HISP N00BS INSTALLER" + "Subject" = "8:" + "ARPCONTACT" = "8:SilicaAndPina" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:Horse Isle Server Emulator (N00BS Package)" + "ARPURLINFOABOUT" = "8:islehorse.com" + "ARPPRODUCTICON" = "8:_611F30D5162547E3BA321F145FD40AC5" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_64C38CA6346B449692BF6B4AA592D702" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AC38AB208C084DF4BA565F75F0BE4432" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A730B92ABA6442DA8A8DE8F8B12B006C" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1DE78BC22BE74532BD96E9D0C76B8456" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_0EE8B0868FFB48F9A5AF0E106F29270F" + { + "Name" = "8:HISP-N00BS" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B" + "Folder" = "8:_2BED5EC5191147F4815904695DFB5319" + "WorkingFolder" = "8:_E3419B32123541589220537FB1154298" + "Icon" = "8:_611F30D5162547E3BA321F145FD40AC5" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_8C2FF2BBC6C5459CB7C3C3D7563A6B24" + { + "Name" = "8:HISP-N00BS" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_DBECA6BD50F344FFAF7D3BC0A6A35A2B" + "Folder" = "8:_3B89F894B58B4F149DD0DBE5EC931BA2" + "WorkingFolder" = "8:_E3419B32123541589220537FB1154298" + "Icon" = "8:_611F30D5162547E3BA321F145FD40AC5" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_07CE736F4DA7413AAEC990B2E3F8E5E6" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_090F0EE34745459F9686C050B2C11242" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\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:\\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:\\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:\\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:\\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:\\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:\\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:\\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:\\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:\\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:\\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:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_DBECA6BD50F344FFAF7D3BC0A6A35A2B" + { + "SourcePath" = "8:..\\N00BS\\bin\\x64\\Windows\\net6.0\\win-x64\\publish\\HISP-N00BS.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_E3419B32123541589220537FB1154298" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:PublishItems" + "OutputProjectGuid" = "8:{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}" + "ShowKeyOutput" = "11:TRUE" + "PublishProfilePath" = "8:Properties\\PublishProfiles\\Win64.pubxml" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/HorseIsleServer/LibHISP/Game/AbuseReport.cs b/HorseIsleServer/LibHISP/Game/AbuseReport.cs old mode 100755 new mode 100644 index 4fb543c..2f4e648 --- a/HorseIsleServer/LibHISP/Game/AbuseReport.cs +++ b/HorseIsleServer/LibHISP/Game/AbuseReport.cs @@ -1,5 +1,4 @@ -using HISP.Server; -using System.Collections.Generic; +using System.Collections.Generic; namespace HISP.Game { public class AbuseReport diff --git a/HorseIsleServer/LibHISP/Game/Arena.cs b/HorseIsleServer/LibHISP/Game/Arena.cs old mode 100755 new mode 100644 index 8b5acc0..ae54006 --- a/HorseIsleServer/LibHISP/Game/Arena.cs +++ b/HorseIsleServer/LibHISP/Game/Arena.cs @@ -2,7 +2,7 @@ using HISP.Player; using HISP.Security; using HISP.Server; -using HISP.Util; + using System; using System.Collections.Generic; using System.Linq; @@ -14,7 +14,7 @@ namespace HISP.Game { private static List arenas = new List(); - private ThreadSafeList entries; + private List entries; private Timer arenaTimeout; public static int[] ExpRewards; public int Id; @@ -59,7 +59,7 @@ namespace HISP.Game Slots = slots; Timeout = timeOut; arenas.Add(this); - entries = new ThreadSafeList(); + entries = new List(); } public bool HaveAllPlayersCompleted() @@ -201,10 +201,10 @@ namespace HISP.Game break; } 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); - entry.EnteredUser.Client.SendPacket(swfModulePacket); - entry.EnteredUser.Client.SendPacket(startingUpEventPacket); + entry.EnteredUser.LoggedinClient.SendPacket(swfModulePacket); + entry.EnteredUser.LoggedinClient.SendPacket(startingUpEventPacket); } arenaTimeout = new Timer(new TimerCallback(arenaTimedOut), null, Timeout * 60 * 1000, Timeout * 60 * 1000); @@ -275,7 +275,7 @@ namespace HISP.Game try { byte[] arenaResults = PacketBuilder.CreateChat(chatMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - entry.EnteredUser.Client.SendPacket(arenaResults); + entry.EnteredUser.LoggedinClient.SendPacket(arenaResults); int expReward = expRewards[place]; @@ -289,7 +289,7 @@ namespace HISP.Game byte[] youWinMessage = PacketBuilder.CreateChat(Messages.FormatArenaYouWinMessage(prize, expReward), PacketBuilder.CHAT_BOTTOM_RIGHT); - entry.EnteredUser.Client.SendPacket(youWinMessage); + entry.EnteredUser.LoggedinClient.SendPacket(youWinMessage); // Awards: @@ -327,7 +327,7 @@ namespace HISP.Game entry.EnteredUser.Awards.AddAward(Award.GetAwardById(32)); // Perseverance byte[] youDONTWinMessage = PacketBuilder.CreateChat(Messages.FormatArenaOnlyWinnerWinsMessage(expReward), PacketBuilder.CHAT_BOTTOM_RIGHT); - entry.EnteredUser.Client.SendPacket(youDONTWinMessage); + entry.EnteredUser.LoggedinClient.SendPacket(youDONTWinMessage); } place++; } @@ -361,8 +361,8 @@ namespace HISP.Game if (Entries.Length + 1 > Slots) { byte[] enterFailed = PacketBuilder.CreateChat(Messages.ArenaFullErrorMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(enterFailed); - GameServer.UpdateArea(user.Client); + user.LoggedinClient.SendPacket(enterFailed); + GameServer.UpdateArea(user.LoggedinClient); return; } } @@ -378,7 +378,7 @@ namespace HISP.Game user.TakeMoney(EntryCost); 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); return; diff --git a/HorseIsleServer/LibHISP/Game/Book.cs b/HorseIsleServer/LibHISP/Game/Book.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Chat/ChatMsg.cs b/HorseIsleServer/LibHISP/Game/Chat/Chat.cs similarity index 62% rename from HorseIsleServer/LibHISP/Game/Chat/ChatMsg.cs rename to HorseIsleServer/LibHISP/Game/Chat/Chat.cs index fecd2a7..f7d9473 100644 --- a/HorseIsleServer/LibHISP/Game/Chat/ChatMsg.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/Chat.cs @@ -1,509 +1,634 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; - -using HISP.Player; -using HISP.Server; - -namespace HISP.Game.Chat -{ - public class ChatMsg - { - public struct Correction - { - public string FilteredWord; - public string ReplacedWord; - } - - public struct Reason - { - public string Name; - public string Message; - } - public struct Filter - { - public string FilteredWord; - public Reason Reason; - public bool MatchAll; - } - - - public enum ChatChannel - { - All = 0x14, - Ads = 0x1D, - Near = 0x15, - Buddies = 0x17, - Here = 0x18, - Isle = 0x1A, - Dm = 0x16, - Mod = 0x1c, - Admin = 0x1b - } - public static string PrivateMessageSound; - - private static List filteredWords = new List(); - private static List correctedWords = new List(); - private static List reasons = new List(); - - public static void AddFilter(Filter filter) - { - filteredWords.Add(filter); - } - public static void AddCorrection(Correction correction) - { - correctedWords.Add(correction); - } - public static void AddReason(Reason reason) - { - reasons.Add(reason); - } - public static Filter[] FilteredWords - { - get - { - return filteredWords.ToArray(); - } - } - public static Correction[] CorrectedWords - { - get - { - return correctedWords.ToArray(); - } - } - public static Reason[] Reasons - { - get - { - return reasons.ToArray(); - } - } - - public static bool ProcessCommand(User user, string message) - { - if (message.Length < 1) - return false; - - string parsedMessage = message; - - parsedMessage = parsedMessage.Trim(); - char cLetter = parsedMessage[0]; - parsedMessage = parsedMessage.Substring(1).Trim(); - - string messageToGive = parsedMessage; - - - foreach (CommandRegister cmd in CommandRegister.RegisteredCommands) - { - if(cmd.CmdLetter == cLetter) - { - if (parsedMessage.ToUpper(CultureInfo.InvariantCulture).StartsWith(cmd.CmdName)) - { - string[] args = parsedMessage.Substring(cmd.CmdName.Length).Trim().Split(' '); - return cmd.Execute(messageToGive, args, user); - } - } - } - return false; - } - public static Object FilterMessage(string message) // Handles chat filtering and violation stuffs - { - if (!ConfigReader.EnableSwearFilter) // Freedom of Speech Mode - return null; - - - string[] wordsSaid; - if (message.Contains(' ')) - wordsSaid = message.Split(' '); - else - wordsSaid = new string[] { message }; - - - foreach(Filter filter in FilteredWords) - { - if (!filter.MatchAll) - { - foreach (string word in wordsSaid) - { - if (word.ToLower() == filter.FilteredWord.ToLower()) - return filter.Reason; - } - } - else - { - if (message.ToLower().Contains(filter.FilteredWord)) - return filter.Reason; - } - } - - return null; - } - - public static byte GetSide(ChatChannel channel) - { - switch (channel) - { - case ChatChannel.All: - case ChatChannel.Ads: - case ChatChannel.Isle: - return PacketBuilder.CHAT_BOTTOM_LEFT; - case ChatChannel.Buddies: - case ChatChannel.Here: - case ChatChannel.Admin: - case ChatChannel.Mod: - return PacketBuilder.CHAT_BOTTOM_RIGHT; - case ChatChannel.Dm: - return PacketBuilder.CHAT_DM_RIGHT; - default: - Logger.ErrorPrint("unknown channel: " + (byte)channel); - return PacketBuilder.CHAT_BOTTOM_LEFT; - } - - } - - public static string GetDmRecipiant(string message) - { - if(message.Contains('|')) - { - string recipiantName = message.Split('|')[0]; - return recipiantName; - } - else - { - return null; - } - } - - public static string GetDmMessage(string message) - { - if (message.Contains('|')) - { - string messageStr = message.Split('|')[1]; - return messageStr; - } - else - { - return message; - } - } - - public static GameClient[] GetRecipiants(User user, ChatChannel channel, string to=null) - { - if (channel == ChatChannel.All) - { - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (!client.User.MuteGlobal && !client.User.MuteAll) - if (client.User.Id != user.Id) - if(!client.User.MutePlayer.IsUserMuted(user)) - recipiants.Add(client); - } - return recipiants.ToArray(); - } - - if(channel == ChatChannel.Ads) - { - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (!client.User.MuteAds && !client.User.MuteAll) - if (client.User.Id != user.Id) - if (!client.User.MutePlayer.IsUserMuted(user)) - recipiants.Add(client); - } - return recipiants.ToArray(); - } - - if(channel == ChatChannel.Buddies) - { - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (!client.User.MuteBuddy && !client.User.MuteAll) - if (client.User.Id != user.Id) - if (client.User.Friends.List.Contains(user.Id)) - if (!client.User.MutePlayer.IsUserMuted(user)) - recipiants.Add(client); - } - return recipiants.ToArray(); - } - - if (channel == ChatChannel.Isle) - { - List recipiants = new List(); - if(World.InIsle(user.X,user.Y)) - { - User[] usersInSile = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), true, false); - foreach (User userInIsle in usersInSile) - { - if (user.Id != userInIsle.Id) - if(!userInIsle.MuteAll && !userInIsle.MuteIsland) - if(!userInIsle.MutePlayer.IsUserMuted(user)) - recipiants.Add(userInIsle.Client); - } - return recipiants.ToArray(); - } - else - { - return new GameClient[0]; - } - - } - - if (channel == ChatChannel.Here) - { - List recipiants = new List(); - User[] usersHere = GameServer.GetUsersAt(user.X, user.Y, true, false); - foreach (User userHere in usersHere) - { - if (user.Id != userHere.Id) - if (!userHere.MuteAll && !userHere.MuteHere) - if (!userHere.MutePlayer.IsUserMuted(user)) - recipiants.Add(userHere.Client); - } - return recipiants.ToArray(); - } - - if (channel == ChatChannel.Near) - { - List recipiants = new List(); - User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, true, false); - foreach (User nearbyUser in nearbyUsers) - { - if (user.Id != nearbyUser.Id) - if (!nearbyUser.MuteAll && !nearbyUser.MuteNear) - if (!nearbyUser.MutePlayer.IsUserMuted(user)) - recipiants.Add(nearbyUser.Client); - } - return recipiants.ToArray(); - } - - if (channel == ChatChannel.Mod) - { - 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."); - return new GameClient[0]; - } - - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (client.User.Moderator) - if (client.User.Id != user.Id) - recipiants.Add(client); - } - return recipiants.ToArray(); - } - - if(channel == ChatChannel.Admin) - { - if (!user.Administrator) // No admin chat for non-admins! - { - Logger.WarnPrint(user.Username + " attempted to send in ADMIN chat, without being an ADMIN."); - return new GameClient[0]; - } - - - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (client.User.Administrator) - if (client.User.Id != user.Id) - recipiants.Add(client); - } - return recipiants.ToArray(); - } - - if(channel == ChatChannel.Dm) - { - if (to != null && to != "") - { - List recipiants = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (!client.User.MutePrivateMessage && !client.User.MuteAll) - { - if (client.User.Username.ToLower().StartsWith(to.ToLower())) - { - recipiants.Add(client); - break; - } - - } - } - } - return recipiants.ToArray(); - } - else - { - Logger.ErrorPrint("Channel is " + channel + " (DM) BUT no 'to' Paramater was specfied"); - return new GameClient[0]; - } - } - - - Logger.ErrorPrint(user.Username + " Sent message in unknown channel: " + (byte)channel); - return new GameClient[0]; // No recipiants - } - - public static string DoCorrections(string message) - { - if (!ConfigReader.EnableCorrections) - return message; - - foreach(Correction correct in CorrectedWords) - message = message.Replace(correct.FilteredWord, correct.ReplacedWord); - - return message.Trim(); - } - public static string EscapeMessage(string message) - { - return message.Replace("<", "<"); - } - - public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply=false) - { - - switch (channel) - { - case ChatChannel.All: - if (user.Moderator || user.Administrator) - return Messages.FormatGlobalChatMessageForMod(user.Username, message); - else - return Messages.FormatGlobalChatMessage(user.Username, message); - case ChatChannel.Ads: - return Messages.FormatAdsChatMessage(user.Username, message); - case ChatChannel.Buddies: - return Messages.FormatBuddyChatMessage(user.Username, message); - case ChatChannel.Dm: - string badge = ""; - if (user.Moderator || user.Administrator) - badge += Messages.DmModBadge; - if (autoReply) - badge += Messages.DmAutoResponse; - return Messages.FormatDirectMessage(user.Username, message, badge); - case ChatChannel.Near: - return Messages.FormatNearbyChatMessage(user.Username, message); - case ChatChannel.Isle: - return Messages.FormatIsleChatMessage(user.Username, message); - case ChatChannel.Here: - return Messages.FormatHereChatMessage(user.Username, message); - case ChatChannel.Mod: - if (user.Moderator || user.Administrator) - return Messages.FormatModChatMessage(user.Username, message); - else - { - Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); - return ""; - } - case ChatChannel.Admin: - if (user.Administrator) - return Messages.FormatAdminChatMessage(user.Username, message); - else - { - Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); - return ""; - } - default: - Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); - return "not implemented yet :("; - } - } - public static string FormatChatForSender(User user, ChatChannel channel, string message, string dmRecipiant=null, bool autoReply=false) - { - switch (channel) - { - case ChatChannel.All: - if (user.Moderator || user.Administrator) - return Messages.FormatGlobalChatMessageForMod(user.Username, message); - else - return Messages.FormatGlobalChatMessage(user.Username, message); - case ChatChannel.Ads: - int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat(); // vry specific function ik - return Messages.FormatAdsChatForSender(numbListening-1, user.Username, message); - case ChatChannel.Buddies: - return Messages.FormatBuddyChatMessageForSender(GameServer.GetNumberOfBuddiesOnline(user), user.Username, message); - case ChatChannel.Isle: - int inIsle = 0; - if (World.InIsle(user.X, user.Y)) - inIsle = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), false, false).Length -1; - return Messages.FormatIsleChatMessageForSender(inIsle, user.Username, message); - case ChatChannel.Here: - int usersHere = GameServer.GetUsersAt(user.X, user.Y, false, false).Length -1; - return Messages.FormatHereChatMessageForSender(usersHere, user.Username, message); - case ChatChannel.Near: - int nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, false).Length -1; - return Messages.FormatNearChatMessageForSender(nearbyUsers, user.Username, message); - case ChatChannel.Mod: - int modsOnline = GameServer.GetNumberOfModsOnline() - 1; - return Messages.FormatModChatForSender(modsOnline, user.Username, message); - case ChatChannel.Admin: - int adminsOnline = GameServer.GetNumberOfAdminsOnline() - 1; - return Messages.FormatAdminChatForSender(adminsOnline, user.Username, message); - case ChatChannel.Dm: - string badge = ""; - if (user.Moderator || user.Administrator) - badge += Messages.DmModBadge; - if (autoReply) - badge += Messages.DmAutoResponse; - return Messages.FormatDirectChatMessageForSender(user.Username, dmRecipiant, message, badge); - default: - Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); - return "not implemented yet :("; - } - } - - public static string NonViolationChecks(User user, string message) - { - if(!ConfigReader.EnableNonViolations) - return null; - - // Check if contains password. - if (message.ToLower().Contains(user.Password.ToLower())) - return Messages.PasswordNotice; - - // Check if ALL CAPS - string[] wordsSaid; - if (message.Contains(' ')) - wordsSaid = message.Split(' '); - else - wordsSaid = new string[] { message }; - - foreach (string word in wordsSaid) - { - string lettersOnly = ""; - foreach(char c in word) - { - if((byte)c >= (byte)'A' && (byte)c <= (byte)'z') // is letter - { - lettersOnly += c; - } - } - if (lettersOnly.ToUpper() == lettersOnly && lettersOnly.Length >= 5) - return Messages.CapsNotice; - } - - return null; - } - public static Reason GetReason(string name) - { - foreach (Reason reason in Reasons) - if (reason.Name == name) - return reason; - - throw new KeyNotFoundException("Reason " + name + " not found."); - } - - } -} +using System; +using System.Collections.Generic; +using System.Linq; + +using HISP.Player; +using HISP.Server; + +namespace HISP.Game.Chat +{ + public class Chat + { + public struct Correction + { + public string FilteredWord; + public string ReplacedWord; + } + + public struct Reason + { + public string Name; + public string Message; + } + public struct Filter + { + public string FilteredWord; + public Reason Reason; + public bool MatchAll; + } + + + public enum ChatChannel + { + All = 0x14, + Ads = 0x1D, + Near = 0x15, + Buddies = 0x17, + Here = 0x18, + Isle = 0x1A, + Dm = 0x16, + Mod = 0x1c, + Admin = 0x1b + } + public static string PrivateMessageSound; + + private static List filteredWords = new List(); + private static List correctedWords = new List(); + private static List reasons = new List(); + + public static void AddFilter(Filter filter) + { + filteredWords.Add(filter); + } + public static void AddCorrection(Correction correction) + { + correctedWords.Add(correction); + } + public static void AddReason(Reason reason) + { + reasons.Add(reason); + } + public static Filter[] FilteredWords + { + get + { + return filteredWords.ToArray(); + } + } + public static Correction[] CorrectedWords + { + get + { + return correctedWords.ToArray(); + } + } + public static Reason[] Reasons + { + get + { + return reasons.ToArray(); + } + } + public static bool ProcessCommand(User user, string message) + { + if (message.Length < 1) + return false; + + string[] args = message.Split(' ').Skip(1).ToArray(); + + if (user.Administrator || user.Moderator) + { + if (message[0] == '%') + { + if (message.ToUpper().StartsWith("%GIVE")) + return Command.Give(message, args, user); + if (message.ToUpper().StartsWith("%SWF")) + return Command.Swf(message, args, user); + if (message.ToUpper().StartsWith("%GOTO")) + return Command.Goto(message, args, user); + if (message.ToUpper().StartsWith("%JUMP")) + return Command.Jump(message, args, user); + if (message.ToUpper().StartsWith("%KICK")) + return Command.Kick(message, args, user); + if (message.ToUpper().StartsWith("%RULES")) + return Command.Rules(message, args, user); + if (message.ToUpper().StartsWith("%PRISON")) + return Command.Prison(message, args, user); + if (message.ToUpper().StartsWith("%NOCLIP")) + return Command.NoClip(message, args, user); + if (message.ToUpper().StartsWith("%STEALTH")) + return Command.Stealth(message, args, user); + if (message.ToUpper().StartsWith("%BAN")) + return Command.Ban(message, args, user); + if (message.ToUpper().StartsWith("%UNBAN")) + return Command.UnBan(message, args, user); + if (message.ToUpper().StartsWith("%ESCAPE")) + return Command.Escape(message, args, user); + if (message.ToUpper().StartsWith("%MODHORSE")) + return Command.ModHorse(message, args, user); + if (message.ToUpper().StartsWith("%DELITEM")) + return Command.DelItem(message, args, user); + if (message.ToUpper().StartsWith("%SHUTDOWN")) + return Command.Shutdown(message, args, user); + if (message.ToUpper().StartsWith("%CALL HORSE")) + return Command.CallHorse(message, args, user); + return false; + } + + } + if (message[0] == '!') + { + + // Alias for !MUTE + if (message.ToUpper().StartsWith("!MUTEALL")) + return Command.Mute(message, new string[] { "ALL" }, user); + else if (message.ToUpper().StartsWith("!MUTEADS")) + return Command.Mute(message, new string[] { "ADS" }, user); + else if (message.ToUpper().StartsWith("!MUTEGLOBAL")) + return Command.Mute(message, new string[] { "GLOBAL" }, user); + else if (message.ToUpper().StartsWith("!MUTEISLAND")) + return Command.Mute(message, new string[] { "ISLAND" }, user); + else if (message.ToUpper().StartsWith("!MUTENEAR")) + return Command.Mute(message, new string[] { "NEAR" }, user); + else if (message.ToUpper().StartsWith("!MUTEHERE")) + return Command.Mute(message, new string[] { "HERE" }, user); + else if (message.ToUpper().StartsWith("!MUTEBUDDY")) + return Command.Mute(message, new string[] { "BUDDY" }, user); + else if (message.ToUpper().StartsWith("!MUTEPM")) + return Command.Mute(message, new string[] { "PM" }, user); + else if (message.ToUpper().StartsWith("!MUTEBR")) + return Command.Mute(message, new string[] { "BR" }, user); + else if (message.ToUpper().StartsWith("!MUTESOCIALS")) + return Command.Mute(message, new string[] { "SOCIALS" }, user); + else if (message.ToUpper().StartsWith("!MUTELOGINS")) + return Command.Mute(message, new string[] { "LOGINS" }, user); + + + else if (message.ToUpper().StartsWith("!MUTE")) + return Command.Mute(message, args, user); + + // Alias for !UNMUTE + else if (message.ToUpper().StartsWith("!UNMUTEALL")) + return Command.UnMute(message, new string[] { "ALL" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEADS")) + return Command.UnMute(message, new string[] { "ADS" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEGLOBAL")) + return Command.UnMute(message, new string[] { "GLOBAL" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEISLAND")) + return Command.UnMute(message, new string[] { "ISLAND" }, user); + else if (message.ToUpper().StartsWith("!UNMUTENEAR")) + return Command.UnMute(message, new string[] { "NEAR" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEHERE")) + return Command.UnMute(message, new string[] { "HERE" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEBUDDY")) + return Command.UnMute(message, new string[] { "BUDDY" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEPM")) + return Command.UnMute(message, new string[] { "PM" }, user); + else if (message.ToUpper().StartsWith("!UNMUTEBR")) + return Command.UnMute(message, new string[] { "BR" }, user); + else if (message.ToUpper().StartsWith("!UNMUTESOCIALS")) + return Command.UnMute(message, new string[] { "SOCIALS" }, user); + else if (message.ToUpper().StartsWith("!UNMUTELOGINS")) + return Command.UnMute(message, new string[] { "LOGINS" }, user); + + else if (message.ToUpper().StartsWith("!UNMUTE")) + return Command.UnMute(message, args, user); + + // Alias for !HEAR + else if (message.ToUpper().StartsWith("!HEARALL")) + return Command.UnMute(message, new string[] { "ALL" }, user); + else if (message.ToUpper().StartsWith("!HEARADS")) + return Command.UnMute(message, new string[] { "ADS" }, user); + else if (message.ToUpper().StartsWith("!HEARGLOBAL")) + return Command.UnMute(message, new string[] { "GLOBAL" }, user); + else if (message.ToUpper().StartsWith("!HEARISLAND")) + return Command.UnMute(message, new string[] { "ISLAND" }, user); + else if (message.ToUpper().StartsWith("!HEARNEAR")) + return Command.UnMute(message, new string[] { "NEAR" }, user); + else if (message.ToUpper().StartsWith("!HEARHERE")) + return Command.UnMute(message, new string[] { "HERE" }, user); + else if (message.ToUpper().StartsWith("!HEARBUDDY")) + return Command.UnMute(message, new string[] { "BUDDY" }, user); + else if (message.ToUpper().StartsWith("!HEARPM")) + return Command.UnMute(message, new string[] { "PM" }, user); + else if (message.ToUpper().StartsWith("!HEARBR")) + return Command.UnMute(message, new string[] { "BR" }, user); + else if (message.ToUpper().StartsWith("!HEARSOCIALS")) + return Command.UnMute(message, new string[] { "SOCIALS" }, user); + else if (message.ToUpper().StartsWith("!HEARLOGINS")) + return Command.UnMute(message, new string[] { "LOGINS" }, user); + + else if (message.ToUpper().StartsWith("!HEAR")) + return Command.UnMute(message, args, user); + + else if (message.ToUpper().StartsWith("!AUTOREPLY")) + return Command.AutoReply(message, args, user); + + else if (message.ToUpper().StartsWith("!QUIZ")) + return Command.Quiz(message, args, user); + + else if (message.ToUpper().StartsWith("!WARP")) // some stupid handling on this one. + { + string placeName = message.Substring("!WARP".Length); + placeName = placeName.Trim(); + + return Command.Warp(message, placeName.Split(' '), user); + } + + else if (message.ToUpper().StartsWith("!DANCE")) + return Command.Dance(message, args, user); + + else if (message.ToUpper().StartsWith("!VERSION")) + return Command.Version(message, args, user); + } + return false; + } + public static Object FilterMessage(string message) // Handles chat filtering and violation stuffs + { + if (!ConfigReader.BadWords) // Freedom of Speech Mode + return null; + + + string[] wordsSaid; + if (message.Contains(' ')) + wordsSaid = message.Split(' '); + else + wordsSaid = new string[] { message }; + + + foreach(Filter filter in FilteredWords) + { + if (!filter.MatchAll) + { + foreach (string word in wordsSaid) + { + if (word.ToLower() == filter.FilteredWord.ToLower()) + return filter.Reason; + } + } + else + { + if (message.ToLower().Contains(filter.FilteredWord)) + return filter.Reason; + } + } + + return null; + } + + public static byte GetSide(ChatChannel channel) + { + switch (channel) + { + case ChatChannel.All: + case ChatChannel.Ads: + case ChatChannel.Isle: + return PacketBuilder.CHAT_BOTTOM_LEFT; + case ChatChannel.Buddies: + case ChatChannel.Here: + case ChatChannel.Admin: + case ChatChannel.Mod: + return PacketBuilder.CHAT_BOTTOM_RIGHT; + case ChatChannel.Dm: + return PacketBuilder.CHAT_DM_RIGHT; + default: + Logger.ErrorPrint("unknown channel: " + (byte)channel); + return PacketBuilder.CHAT_BOTTOM_LEFT; + } + + } + + public static string GetDmRecipiant(string message) + { + if(message.Contains('|')) + { + string recipiantName = message.Split('|')[0]; + return recipiantName; + } + else + { + return null; + } + } + + public static string GetDmMessage(string message) + { + if (message.Contains('|')) + { + string messageStr = message.Split('|')[1]; + return messageStr; + } + else + { + return message; + } + } + + public static GameClient[] GetRecipiants(User user, ChatChannel channel, string to=null) + { + if (channel == ChatChannel.All) + { + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (!client.LoggedinUser.MuteGlobal && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != user.Id) + if(!client.LoggedinUser.MutePlayer.IsUserMuted(user)) + recipiants.Add(client); + } + return recipiants.ToArray(); + } + + if(channel == ChatChannel.Ads) + { + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (!client.LoggedinUser.MuteAds && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != user.Id) + if (!client.LoggedinUser.MutePlayer.IsUserMuted(user)) + recipiants.Add(client); + } + return recipiants.ToArray(); + } + + if(channel == ChatChannel.Buddies) + { + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (!client.LoggedinUser.MuteBuddy && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != user.Id) + if (client.LoggedinUser.Friends.List.Contains(user.Id)) + if (!client.LoggedinUser.MutePlayer.IsUserMuted(user)) + recipiants.Add(client); + } + return recipiants.ToArray(); + } + + if (channel == ChatChannel.Isle) + { + List recipiants = new List(); + if(World.InIsle(user.X,user.Y)) + { + User[] usersInSile = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), true, false); + foreach (User userInIsle in usersInSile) + { + if (user.Id != userInIsle.Id) + if(!userInIsle.MuteAll && !userInIsle.MuteIsland) + if(!userInIsle.MutePlayer.IsUserMuted(user)) + recipiants.Add(userInIsle.LoggedinClient); + } + return recipiants.ToArray(); + } + else + { + return new GameClient[0]; + } + + } + + if (channel == ChatChannel.Here) + { + List recipiants = new List(); + User[] usersHere = GameServer.GetUsersAt(user.X, user.Y, true, false); + foreach (User userHere in usersHere) + { + if (user.Id != userHere.Id) + if (!userHere.MuteAll && !userHere.MuteHere) + if (!userHere.MutePlayer.IsUserMuted(user)) + recipiants.Add(userHere.LoggedinClient); + } + return recipiants.ToArray(); + } + + if (channel == ChatChannel.Near) + { + List recipiants = new List(); + User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, true, false); + foreach (User nearbyUser in nearbyUsers) + { + if (user.Id != nearbyUser.Id) + if (!nearbyUser.MuteAll && !nearbyUser.MuteNear) + if (!nearbyUser.MutePlayer.IsUserMuted(user)) + recipiants.Add(nearbyUser.LoggedinClient); + } + return recipiants.ToArray(); + } + + if (channel == ChatChannel.Mod) + { + 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."); + return new GameClient[0]; + } + + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (client.LoggedinUser.Moderator) + if (client.LoggedinUser.Id != user.Id) + recipiants.Add(client); + } + return recipiants.ToArray(); + } + + if(channel == ChatChannel.Admin) + { + if (!user.Administrator) // No admin chat for non-admins! + { + Logger.WarnPrint(user.Username + " attempted to send in ADMIN chat, without being an ADMIN."); + return new GameClient[0]; + } + + + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (client.LoggedinUser.Administrator) + if (client.LoggedinUser.Id != user.Id) + recipiants.Add(client); + } + return recipiants.ToArray(); + } + + if(channel == ChatChannel.Dm) + { + if (to != null && to != "") + { + List recipiants = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (!client.LoggedinUser.MutePrivateMessage && !client.LoggedinUser.MuteAll) + { + if (client.LoggedinUser.Username.ToLower().StartsWith(to.ToLower())) + { + recipiants.Add(client); + break; + } + + } + } + } + return recipiants.ToArray(); + } + else + { + Logger.ErrorPrint("Channel is " + channel + " (DM) BUT no 'to' Paramater was specfied"); + return new GameClient[0]; + } + } + + + Logger.ErrorPrint(user.Username + " Sent message in unknown channel: " + (byte)channel); + return new GameClient[0]; // No recipiants + } + + public static string DoCorrections(string message) + { + if (!ConfigReader.DoCorrections) + return message; + + foreach(Correction correct in CorrectedWords) + message = message.Replace(correct.FilteredWord, correct.ReplacedWord); + + return message.Trim(); + } + public static string EscapeMessage(string message) + { + return message.Replace("<", "<"); + } + + public static string FormatChatForOthers(User user, ChatChannel channel, string message, bool autoReply=false) + { + + switch (channel) + { + case ChatChannel.All: + if (user.Moderator || user.Administrator) + return Messages.FormatGlobalChatMessageForMod(user.Username, message); + else + return Messages.FormatGlobalChatMessage(user.Username, message); + case ChatChannel.Ads: + return Messages.FormatAdsChatMessage(user.Username, message); + case ChatChannel.Buddies: + return Messages.FormatBuddyChatMessage(user.Username, message); + case ChatChannel.Dm: + string badge = ""; + if (user.Moderator || user.Administrator) + badge += Messages.DmModBadge; + if (autoReply) + badge += Messages.DmAutoResponse; + return Messages.FormatDirectMessage(user.Username, message, badge); + case ChatChannel.Near: + return Messages.FormatNearbyChatMessage(user.Username, message); + case ChatChannel.Isle: + return Messages.FormatIsleChatMessage(user.Username, message); + case ChatChannel.Here: + return Messages.FormatHereChatMessage(user.Username, message); + case ChatChannel.Mod: + if (user.Moderator || user.Administrator) + return Messages.FormatModChatMessage(user.Username, message); + else + { + Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); + return ""; + } + case ChatChannel.Admin: + if (user.Administrator) + return Messages.FormatAdminChatMessage(user.Username, message); + else + { + Logger.HackerPrint(user.Username + " Tried to send in mod chat without being a moderator. (Hack/Code Attempt)"); + return ""; + } + default: + Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); + return "not implemented yet :("; + } + } + public static string FormatChatForSender(User user, ChatChannel channel, string message, string dmRecipiant=null, bool autoReply=false) + { + switch (channel) + { + case ChatChannel.All: + if (user.Moderator || user.Administrator) + return Messages.FormatGlobalChatMessageForMod(user.Username, message); + else + return Messages.FormatGlobalChatMessage(user.Username, message); + case ChatChannel.Ads: + int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat(); // vry specific function ik + return Messages.FormatAdsChatForSender(numbListening-1, user.Username, message); + case ChatChannel.Buddies: + return Messages.FormatBuddyChatMessageForSender(GameServer.GetNumberOfBuddiesOnline(user), user.Username, message); + case ChatChannel.Isle: + int inIsle = 0; + if (World.InIsle(user.X, user.Y)) + inIsle = GameServer.GetUsersInIsle(World.GetIsle(user.X, user.Y), false, false).Length -1; + return Messages.FormatIsleChatMessageForSender(inIsle, user.Username, message); + case ChatChannel.Here: + int usersHere = GameServer.GetUsersAt(user.X, user.Y, false, false).Length -1; + return Messages.FormatHereChatMessageForSender(usersHere, user.Username, message); + case ChatChannel.Near: + int nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, false).Length -1; + return Messages.FormatNearChatMessageForSender(nearbyUsers, user.Username, message); + case ChatChannel.Mod: + int modsOnline = GameServer.GetNumberOfModsOnline() - 1; + return Messages.FormatModChatForSender(modsOnline, user.Username, message); + case ChatChannel.Admin: + int adminsOnline = GameServer.GetNumberOfAdminsOnline() - 1; + return Messages.FormatAdminChatForSender(adminsOnline, user.Username, message); + case ChatChannel.Dm: + string badge = ""; + if (user.Moderator || user.Administrator) + badge += Messages.DmModBadge; + if (autoReply) + badge += Messages.DmAutoResponse; + return Messages.FormatDirectChatMessageForSender(user.Username, dmRecipiant, message, badge); + default: + Logger.ErrorPrint(user.Username + " is trying to end a message in unknown channel " + channel.ToString("X")); + return "not implemented yet :("; + } + } + + public static string NonViolationChecks(User user, string message) + { + if(!ConfigReader.DoNonViolations) + return null; + + // Check if contains password. + if (message.ToLower().Contains(user.Password.ToLower())) + return Messages.PasswordNotice; + + // Check if ALL CAPS + string[] wordsSaid; + if (message.Contains(' ')) + wordsSaid = message.Split(' '); + else + wordsSaid = new string[] { message }; + + foreach (string word in wordsSaid) + { + string lettersOnly = ""; + foreach(char c in word) + { + if((byte)c >= (byte)'A' && (byte)c <= (byte)'z') // is letter + { + lettersOnly += c; + } + } + if (lettersOnly.ToUpper() == lettersOnly && lettersOnly.Length >= 5) + return Messages.CapsNotice; + } + + return null; + } + public static Reason GetReason(string name) + { + foreach (Reason reason in Reasons) + if (reason.Name == name) + return reason; + + throw new KeyNotFoundException("Reason " + name + " not found."); + } + + } +} diff --git a/HorseIsleServer/LibHISP/Game/Chat/Command.cs b/HorseIsleServer/LibHISP/Game/Chat/Command.cs old mode 100755 new mode 100644 index 463696b..2ab0e52 --- a/HorseIsleServer/LibHISP/Game/Chat/Command.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/Command.cs @@ -1,1106 +1,986 @@ -using HISP.Player; -using HISP.Server; -using HISP.Game.Items; -using HISP.Game.Events; -using HISP.Game.Horse; -using HISP.Game.Inventory; - -using System.Linq; -using System; -using System.Collections.Generic; -using Newtonsoft.Json.Linq; - -namespace HISP.Game.Chat -{ - public class Command - { - private static User findNamePartial(string name) - { - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client == null) - continue; - if (client.LoggedIn) - { - if (client.User.Username.ToLower().StartsWith(name.ToLower())) - { - return client.User; - } - } - } - throw new KeyNotFoundException("name not found"); - } - - public static void RegisterCommands() - { - // Admin Commands - new CommandRegister('%', "GIVE", "OBJECT [username / ALL]\nMONEY [username]\nHORSE [username]\nQUEST [FORCE]\nAWARD [username]", Command.Give, true, false); - new CommandRegister('%', "SWF", " [username / ALL]", Command.Swf, true, false); - new CommandRegister('%', "GOTO", ",\nPLAYER \nAREA \nNPC ", Command.Goto, true, false); - new CommandRegister('%', "JUMP", " HERE", Command.Jump, true, false); - new CommandRegister('%', "NOCLIP", "", Command.NoClip, true, false); - new CommandRegister('%', "MODHORSE", " ", Command.ModHorse, true, false); - new CommandRegister('%', "DELITEM", " [username]", Command.DelItem, true, false); - new CommandRegister('%', "SHUTDOWN", "", Command.Shutdown, true, false); - new CommandRegister('%', "CALL", "HORSE", Command.CallHorse, true, false); - new CommandRegister('%', "MESSAGE", "", Command.Message, true, false); - new CommandRegister('%', "PERMISSION", " ", Command.Permission, true, false); - - // Moderator commands - new CommandRegister('%', "RULES", "", Command.Rules, false, true); - new CommandRegister('%', "PRISON", "", Command.Prison, false, true); - new CommandRegister('%', "STEALTH", "", Command.Stealth, false, true); - new CommandRegister('%', "KICK", " [reason]", Command.Kick, false, true); - new CommandRegister('%', "BAN", " [reason]", Command.Ban, false, true); - new CommandRegister('%', "UNBAN", "", Command.UnBan, false, true); - new CommandRegister('%', "ESCAPE", "", Command.Escape, false, true); - - // User commands - new CommandRegister('%', "VERSION", "", Command.Version, false, false); - new CommandRegister('%', "HELP", "", Command.Help, false, false); - - new CommandRegister('!', "MUTE", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.Mute, false, false); - new CommandRegister('!', "UNMUTE", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.UnMute, false, false); - new CommandRegister('!', "HEAR", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.UnMute, false, false); - new CommandRegister('!', "AUTOREPLY", "[message]", Command.AutoReply, false, false); - new CommandRegister('!', "QUIZ", "", Command.Quiz, false, false); - new CommandRegister('!', "WARP", "", Command.Warp, false, false); - new CommandRegister('!', "DANCE", "", Command.Dance, false, false); - } - - public static bool Help(string message, string[] args, User user) - { - - foreach (CommandRegister cmd in CommandRegister.RegisteredCommands) - { - if (!cmd.HasPermission(user)) continue; - - user.Client.SendPacket(PacketBuilder.CreateChat(Messages.FormatHispHelpUsage(cmd.CmdLetter, cmd.CmdName, cmd.CmdUsage).Replace("\n", "
\t"), PacketBuilder.CHAT_BOTTOM_LEFT)); - } - - user.Client.SendPacket(PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT)); - - return true; - } - - public static bool Permission(string message, string[] args, User user) - { - if (args.Length < 2) - return false; - string username = args[0].Trim(); - string privledgeLevel = args[1].ToUpper().Trim(); - - try - { - User modifyUser = findNamePartial(username); - - if (privledgeLevel == "NORMAL") - { - modifyUser.Administrator = false; - modifyUser.Moderator = false; - } - else if (privledgeLevel == "ADMIN") - { - modifyUser.Administrator = true; - modifyUser.Moderator = true; - } - else if (privledgeLevel == "MOD" || privledgeLevel == "MODERATOR") - { - modifyUser.Administrator = false; - modifyUser.Moderator = true; - } - else - { - return false; - } - } - catch (KeyNotFoundException) - { - try - { - int playerId = Database.GetUserid(username); - - if (privledgeLevel == "NORMAL") - { - Database.SetUserAdmin(playerId, false); - Database.SetUserMod(playerId, false); - } - else if (privledgeLevel == "ADMIN") - { - Database.SetUserAdmin(playerId, true); - Database.SetUserMod(playerId, true); - } - else if (privledgeLevel == "MOD" || privledgeLevel == "MODERATOR") - { - Database.SetUserAdmin(playerId, false); - Database.SetUserMod(playerId, true); - } - else - { - return false; - } - } - catch (KeyNotFoundException) { return false; }; - }; - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - - return true; - } - - public static bool Message(string message, string[] args, User user) - { - - string serverAnnoucement = String.Join(" ", args); - - byte[] chatLeftPacket = PacketBuilder.CreateChat(Messages.FormatServerAnnoucement(serverAnnoucement), PacketBuilder.CHAT_BOTTOM_LEFT); - byte[] chatRightPacket = PacketBuilder.CreateChat(Messages.FormatServerAnnoucement(serverAnnoucement), PacketBuilder.CHAT_BOTTOM_RIGHT); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - client.SendPacket(chatLeftPacket); - client.SendPacket(chatRightPacket); - } - } - - return true; - } - public static bool Shutdown(string message, string[] args, User user) - { - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - GameServer.ShutdownServer("Administrator initiated"); - - return true; - } - public static bool Give(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - if(args[0].ToUpper() == "OBJECT") - { - int itemId = 0; - try - { - if(args[1] != "RANDOM") - { - itemId = int.Parse(args[1]); - } - else - { - itemId = Item.GetRandomItem().Id; - } - - Item.GetItemById(itemId); // Calling this makes sure this item id exists. - - ItemInstance newItemInstance = new ItemInstance(itemId); - - if (itemId == Item.Present) - newItemInstance.Data = Item.GetRandomItem().Id; - - if (args.Length >= 3) - { - if(args[2] == "ALL") - { - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - ItemInstance itmInstance = new ItemInstance(itemId); - - if (itemId == Item.Present) - itmInstance.Data = Item.GetRandomItem().Id; - - client.User.Inventory.AddIgnoringFull(itmInstance); - } - } - } - else - { - findNamePartial(args[2]).Inventory.AddIgnoringFull(newItemInstance); - } - } - else - { - user.Inventory.AddIgnoringFull(newItemInstance); - } - } - catch(Exception) - { - return false; - } - } - else if (args[0].ToUpper() == "HORSE") - { - int horseId = 0; - try - { - horseId = int.Parse(args[1]); - HorseInstance horse = new HorseInstance(HorseInfo.GetBreedById(horseId)); - - if (args.Length >= 3) - { - findNamePartial(args[2]).HorseInventory.AddHorse(horse); - } - else - { - user.HorseInventory.AddHorse(horse); - } - } - catch (Exception) - { - return false; - } - } - else if(args[0].ToUpper() == "AWARD") - { - int awardId = 0; - try - { - awardId = int.Parse(args[1]); - if (args.Length >= 3) - { - findNamePartial(args[2]).Awards.AddAward(Award.GetAwardById(awardId)); - } - else - { - user.Awards.AddAward(Award.GetAwardById(awardId)); - } - - } - catch (Exception) - { - return false; - } - } - else if (args[0].ToUpper() == "MONEY") - { - int money = 0; - try - { - money = int.Parse(args[1]); - if (args.Length >= 3) - { - findNamePartial(args[2]).AddMoney(money); - } - else - { - user.AddMoney(money); - } - } - catch (Exception) - { - return false; - } - } - else if (args[0].ToUpper() == "QUEST") - { - int questId = 0; - try - { - questId = int.Parse(args[1]); - if(args.Length >= 3) - { - if (args[2].ToUpper() == "FORCE") - { - Quest.CompleteQuest(user, Quest.GetQuestById(questId)); - goto msg; - } - } - Quest.ActivateQuest(user, Quest.GetQuestById(questId)); - } - catch (Exception) - { - return false; - } - } - else - { - return false; - } - msg:; - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Swf(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - - - try - { - string swfName = args[0]; - string swfUser = user.Username; - if (args.Length <= 2) - swfUser = args[1]; - - byte[] packetBytes = PacketBuilder.CreateSwfModule(swfName, PacketBuilder.PACKET_SWF_MODULE_FORCE); - if (swfUser.ToUpper() == "ALL") - { - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - client.SendPacket(packetBytes); - } - } - else - { - User player = findNamePartial(swfUser); - player.Client.SendPacket(packetBytes); - } - } - catch (Exception) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - - public static bool UnBan(string message, string[] args, User user) - { - if(args.Length <= 0) - return false; - - try{ - string userName = args[0]; - int id = Database.GetUserid(userName); - Database.UnBanUser(id); - } - catch(Exception e) - { - Logger.ErrorPrint(e.Message); - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - - public static bool Version(string message, string[] args, User user) - { - // Get current version and send to client - byte[] versionPacket = PacketBuilder.CreateChat(ServerVersion.GetBuildString(), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(versionPacket); - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatPlayerCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - public static bool Ban(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - - try - { - string userName = args[0]; - int id = Database.GetUserid(userName); - string ip = Database.GetIpAddress(id); - string reason = "NONE SPECIFIED"; - if (args.Length >= 2) - { - reason = string.Join(" ", args, 1, args.Length - 1); - } - - Database.BanUser(id, ip, reason); - } - catch(Exception) - { - return false; - } - try{ - User bannedUser = GameServer.GetUserByName(args[0]); - bannedUser.Client.Kick(Messages.KickReasonBanned); - } - catch(KeyNotFoundException){}; - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - public static bool Escape(string message, string[] args, User user) - { - - user.Teleport(Map.ModIsleX, Map.ModIsleY); - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message) + Messages.ModIsleMessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Stealth(string message, string[] args, User user) - { - - user.Stealth = !user.Stealth; - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - public static bool NoClip(string message, string[] args, User user) - { - user.NoClip = !user.NoClip; - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Rules(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - - try - { - User toSend = GameServer.GetUserByName(args[0]); - - toSend.Teleport(Map.RulesIsleX, Map.RulesIsleY); - byte[] studyTheRulesMsg = PacketBuilder.CreateChat(Messages.RulesIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - toSend.Client.SendPacket(studyTheRulesMsg); - } - catch (KeyNotFoundException) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message)+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Prison(string message, string[] args, User user) - { - - if (args.Length <= 0) - return false; - - try - { - User toSend = GameServer.GetUserByName(args[0]); - - toSend.Teleport(Map.PrisonIsleX, Map.PrisonIsleY); - byte[] dontDoTheTime = PacketBuilder.CreateChat(Messages.PrisonIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - toSend.Client.SendPacket(dontDoTheTime); - } - catch (KeyNotFoundException) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message) + Messages.FormatPrisonCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - - } - public static bool Kick(string message, string[] args, User user) - { - - if (args.Length <= 0) - return false; - - try - { - User toKick = GameServer.GetUserByName(args[0]); - - if (args.Length >= 2) - { - string reason = string.Join(" ", args, 1, args.Length - 1); - toKick.Client.Kick(reason); - } - else - { - toKick.Client.Kick(Messages.KickReasonKicked); - } - } - catch (KeyNotFoundException) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Jump(string message, string[] args, User user) - { - if (args.Length < 2) - return false; - - - try - { - User tp = findNamePartial(args[0]); - if (args[1].ToUpper() == "HERE") - tp.Teleport(user.X, user.Y); - } - catch (KeyNotFoundException) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool DelItem(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - - int itemId = 0; - try - { - itemId = int.Parse(args[0]); - User target = user; - if (args.Length > 1) - target = findNamePartial(args[1]); - - if (target.Inventory.HasItemId(itemId)) - { - InventoryItem itm = target.Inventory.GetItemByItemId(itemId); - - foreach (ItemInstance instance in itm.ItemInstances) - { - target.Inventory.Remove(instance); - } - } - } - catch (Exception) - { - return false; - } - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - public static bool Goto(string message, string[] args, User user) - { - if (args.Length <= 0) - return false; - if(args[0].ToUpper() == "PLAYER") - { - if(args.Length < 2) - return false; - try - { - User tpTo = findNamePartial(args[1]); - user.Teleport(tpTo.X, tpTo.Y); - } - catch (KeyNotFoundException) - { - return false; - } - } - else if(args[0].ToUpper() == "AREA") - { - if (args.Length < 2) - return false; - - try - { - string area = string.Join(" ", args, 1, args.Length - 1); - bool teleported = false; - foreach(World.Waypoint waypnt in World.Waypoints) - { - if(waypnt.Name.ToLower().StartsWith(area.ToLower())) - { - user.Teleport(waypnt.PosX, waypnt.PosY); - teleported = true; - break; - } - } - if(!teleported) - return false; - } - catch(Exception) - { - return false; - } - } - else if(args[0].ToUpper() == "NPC") - { - if (args.Length < 2) - return false; - - try - { - string npcName = string.Join(" ", args, 1, args.Length - 1); - bool teleported = false; - foreach (Npc.NpcEntry npc in Npc.NpcList) - { - if (npc.Name.ToLower().StartsWith(npcName.ToLower())) - { - user.Teleport(npc.X, npc.Y); - teleported = true; - break; - } - } - if (!teleported) - return false; - } - catch (Exception) - { - return false; - } - } - else if(args[0].Contains(",")) - { - try - { - string[] xy = args[0].Split(','); - int x = int.Parse(xy[0]); - int y = int.Parse(xy[1]); - user.Teleport(x, y); - } - catch(FormatException) - { - return false; - } - } - else - { - return false; - } - - - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - - public static bool ModHorse(string message, string[] args, User user) - { - if (args.Length < 3) - return false; - - - int id = 0; - int amount = 0; - try - { - id = int.Parse(args[0]); - if(args[1].ToUpper() != "COLOR") - amount = int.Parse(args[2]); - } - catch (Exception) - { - return false; - } - - - int i = 0; - foreach (HorseInfo.Category category in HorseInfo.HorseCategories) - { - HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray(); - if (horsesInCategory.Length > 0) - { - foreach (HorseInstance instance in horsesInCategory) - { - i++; - - if(i == id) - { - switch (args[1].ToUpper()) - { - case "INTELLIGENCE": - instance.AdvancedStats.Inteligence = amount; - break; - case "PERSONALITY": - instance.AdvancedStats.Personality = amount; - break; - case "HEIGHT": - instance.AdvancedStats.Height = amount; - break; - case "COLOR": - instance.Color = args[2].ToLower(); - break; - case "EXPERIENCE": - instance.BasicStats.Experience = amount; - break; - case "SPEED": - instance.AdvancedStats.Speed = amount; - break; - case "STRENGTH": - instance.AdvancedStats.Strength = amount; - break; - case "CONFORMATION": - instance.AdvancedStats.Conformation = amount; - break; - case "ENDURANCE": - instance.AdvancedStats.Endurance = amount; - break; - case "AGILITY": - instance.AdvancedStats.Agility = amount; - break; - } - } - } - } - } - - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - - public static bool Warp(string message, string[] args, User user) - { - - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - if (user.CurrentlyRidingHorse == null) - goto onlyRiddenUnicorn; - - if (user.CurrentlyRidingHorse.Breed.Type == "unicorn") - goto doCommand; - - goto onlyRiddenUnicorn; - - onlyRiddenUnicorn:; - formattedmessage = Messages.OnlyUnicornCanWarp; - goto sendText; - - - cantUnderstandCommand:; - formattedmessage += Messages.FailedToUnderstandLocation; - goto sendText; - - - doCommand:; - - string areaName = string.Join(" ", args).ToLower(); - areaName = areaName.Trim(); - if (args.Length <= 0) - areaName = "horse isle"; - try - { - User tp = GameServer.GetUserByName(areaName); - - user.Teleport(tp.X, tp.Y); - formattedmessage += Messages.SuccessfullyWarpedToPlayer; - goto playSwf; - - } - catch (KeyNotFoundException) - { - foreach (World.Waypoint waypoint in World.Waypoints) - { - if (waypoint.Name.ToLower().StartsWith(areaName)) - { - user.Teleport(waypoint.PosX, waypoint.PosY); - formattedmessage += Messages.SuccessfullyWarpedToLocation; - goto playSwf; - } - } - - goto cantUnderstandCommand; - } - - playSwf:; - byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - user.Client.SendPacket(swfPacket); - - - sendText:; - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - - public static bool CallHorse(string message, string[] args, User user) - { - - if (args.Length <= 0) - return false; - string formattedmessage = ""; - try - { - if (args[0].ToUpper() != "HORSE") - return false; - - formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - WildHorse horse = WildHorse.WildHorses[GameServer.RandomNumberGenerator.Next(0, WildHorse.WildHorses.Length)]; - horse.X = user.X; - horse.Y = user.Y; - - GameServer.UpdateAreaForAll(user.X, user.Y); - } - catch (Exception) - { - return false; - } - - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - - } - - public static bool AutoReply(string message, string[] args, User user) - { - string replyMessage = string.Join(" ", args); - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - replyMessage = replyMessage.Trim(); - - if (replyMessage.Length > 1024) - { - byte[] tooLong = PacketBuilder.CreateChat(Messages.AutoReplyTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(tooLong); - - return false; - } - - Object violationReason = ChatMsg.FilterMessage(replyMessage); - if (violationReason != null) - { - byte[] hasVios = PacketBuilder.CreateChat(Messages.AutoReplyHasViolations, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(hasVios); - - return false; - } - - user.AutoReplyText = replyMessage; - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - } - public static bool Dance(string message, string[] args, User user) - { - string moves = string.Join(" ", args).ToLower(); - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - if (user.ActiveDance != null) - user.ActiveDance.Dispose(); - - user.ActiveDance = new Dance(user, moves); - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - - } - - public static bool Quiz(string message, string[] args, User user) - { - bool quizActive = (GameServer.QuizEvent != null); - if(user.InRealTimeQuiz) - { - byte[] cantEnterRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventAlreadyEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(cantEnterRealTimeQuiz); - return false; - } - if (quizActive) - { - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - RealTimeQuiz.Participent participent = GameServer.QuizEvent.JoinEvent(user); - - if(participent.Quit) - { - byte[] quizQuit = PacketBuilder.CreateChat(Messages.EventQuitRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(quizQuit); - - return false; - } - - participent.UpdateParticipent(); - byte[] enteredRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(enteredRealTimeQuiz); - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - return true; - - } - else - { - byte[] quizUnavailable = PacketBuilder.CreateChat(Messages.EventUnavailableRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(quizUnavailable); - return false; - } - - } - - public static bool Mute(string message, string[] args, User user) - { - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - if (args.Length <= 0) - { - formattedmessage += Messages.MuteHelp; - } - else - { - - string muteType = args[0]; - - if (muteType.ToUpper() == "GLOBAL") - { - user.MuteGlobal = true; - } - else if (muteType.ToUpper() == "ISLAND") - { - user.MuteIsland = true; - } - else if (muteType.ToUpper() == "NEAR") - { - user.MuteNear = true; - } - else if (muteType.ToUpper() == "HERE") - { - user.MuteHere = true; - } - else if (muteType.ToUpper() == "BUDDY") - { - user.MuteBuddy = true; - } - else if (muteType.ToUpper() == "SOCIALS") - { - user.MuteSocials = true; - } - else if (muteType.ToUpper() == "PM") - { - user.MutePrivateMessage = true; - } - else if (muteType.ToUpper() == "BR") - { - user.MuteBuddyRequests = true; - } - else if (muteType.ToUpper() == "LOGINS") - { - user.MuteLogins = true; - } - else if (muteType.ToUpper() == "ADS") - { - user.MuteAds = true; - } - else if (muteType.ToUpper() == "ALL") - { - user.MuteAll = true; - user.MuteGlobal = true; - user.MuteIsland = true; - user.MuteNear = true; - user.MuteHere = true; - user.MuteBuddy = true; - user.MuteSocials = true; - user.MutePrivateMessage = true; - user.MuteBuddyRequests = true; - user.MuteLogins = true; - } - else - { - formattedmessage += Messages.MuteHelp; - } - } - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - - public static bool UnMute(string message, string[] args, User user) - { - string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message); - - if (args.Length <= 0) - { - formattedmessage += Messages.UnMuteHelp; - } - else - { - string muteType = args[0]; - - if (muteType.ToUpper() == "GLOBAL") - { - user.MuteGlobal = false; - } - else if (muteType.ToUpper() == "ISLAND") - { - user.MuteIsland = false; - } - else if (muteType.ToUpper() == "ADS") - { - user.MuteAds = false; - } - else if (muteType.ToUpper() == "NEAR") - { - user.MuteNear = false; - } - else if (muteType.ToUpper() == "HERE") - { - user.MuteHere = false; - } - else if (muteType.ToUpper() == "BUDDY") - { - user.MuteBuddy = false; - } - else if (muteType.ToUpper() == "SOCIALS") - { - user.MuteSocials = false; - } - else if (muteType.ToUpper() == "PM") - { - user.MutePrivateMessage = false; - } - else if (muteType.ToUpper() == "BR") - { - user.MuteBuddyRequests = false; - } - else if (muteType.ToUpper() == "LOGINS") - { - user.MuteLogins = false; - } - else if (muteType.ToUpper() == "ALL") - { - user.MuteAll = false; - user.MuteGlobal = false; - user.MuteIsland = false; - user.MuteNear = false; - user.MuteHere = false; - user.MuteBuddy = false; - user.MuteSocials = false; - user.MutePrivateMessage = false; - user.MuteBuddyRequests = false; - user.MuteLogins = false; - } - else - { - formattedmessage += Messages.UnMuteHelp; - } - } - - - byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - return true; - } - } -} +using HISP.Player; +using HISP.Server; +using HISP.Game.Items; +using System; +using System.Collections.Generic; +using HISP.Game.Events; +using HISP.Game.Horse; +using System.Linq; +using HISP.Game.Inventory; +using System.Threading; + +namespace HISP.Game.Chat +{ + public class Command + { + + private static User findNamePartial(string name) + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client == null) + continue; + if (client.LoggedIn) + { + if (client.LoggedinUser.Username.ToLower().StartsWith(name.ToLower())) + { + return client.LoggedinUser; + } + } + } + throw new KeyNotFoundException("name not found"); + } + + public static bool Shutdown(string message, string[] args, User user) + { + if (!user.Administrator) + return false; + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + GameServer.ShutdownServer(); + + return true; + } + public static bool Give(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator) + return false; + if(args[0].ToUpper() == "OBJECT") + { + int itemId = 0; + try + { + if(args[1] != "RANDOM") + { + itemId = int.Parse(args[1]); + } + else + { + itemId = Item.GetRandomItem().Id; + } + + Item.GetItemById(itemId); // Calling this makes sure this item id exists. + + ItemInstance newItemInstance = new ItemInstance(itemId); + + if (itemId == Item.Present) + newItemInstance.Data = Item.GetRandomItem().Id; + + if (args.Length >= 3) + { + if(args[2] == "ALL") + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + ItemInstance itmInstance = new ItemInstance(itemId); + + if (itemId == Item.Present) + itmInstance.Data = Item.GetRandomItem().Id; + + client.LoggedinUser.Inventory.AddIgnoringFull(itmInstance); + } + } + } + else + { + findNamePartial(args[2]).Inventory.AddIgnoringFull(newItemInstance); + } + } + else + { + user.Inventory.AddIgnoringFull(newItemInstance); + } + } + catch(Exception) + { + return false; + } + } + else if (args[0].ToUpper() == "HORSE") + { + int horseId = 0; + try + { + horseId = int.Parse(args[1]); + HorseInstance horse = new HorseInstance(HorseInfo.GetBreedById(horseId)); + + if (args.Length >= 3) + { + findNamePartial(args[2]).HorseInventory.AddHorse(horse); + } + else + { + user.HorseInventory.AddHorse(horse); + } + } + catch (Exception) + { + return false; + } + } + else if(args[0].ToUpper() == "AWARD") + { + int awardId = 0; + try + { + awardId = int.Parse(args[1]); + if (args.Length >= 3) + { + findNamePartial(args[2]).Awards.AddAward(Award.GetAwardById(awardId)); + } + else + { + user.Awards.AddAward(Award.GetAwardById(awardId)); + } + + } + catch (Exception) + { + return false; + } + } + else if (args[0].ToUpper() == "MONEY") + { + int money = 0; + try + { + money = int.Parse(args[1]); + if (args.Length >= 3) + { + findNamePartial(args[2]).AddMoney(money); + } + else + { + user.AddMoney(money); + } + } + catch (Exception) + { + return false; + } + } + else if (args[0].ToUpper() == "QUEST") + { + int questId = 0; + try + { + questId = int.Parse(args[1]); + if(args.Length >= 3) + { + if (args[2].ToUpper() == "FORCE") + { + Quest.CompleteQuest(user, Quest.GetQuestById(questId)); + goto msg; + } + } + Quest.ActivateQuest(user, Quest.GetQuestById(questId)); + } + catch (Exception) + { + return false; + } + } + else + { + return false; + } + msg:; + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Swf(string message, string[] args, User user) + { + if (args.Length <= 2) + return false; + + if (!user.Administrator && !user.Moderator) + return false; + + try + { + string swfName = args[0]; + string swfUser = args[1]; + byte[] packetBytes = PacketBuilder.CreateSwfModulePacket(swfName, PacketBuilder.PACKET_SWF_MODULE_FORCE); + if (swfUser.ToUpper() == "ALL") + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + client.SendPacket(packetBytes); + } + } + else + { + User player = findNamePartial(args[1]); + player.LoggedinClient.SendPacket(packetBytes); + } + } + catch (Exception) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + + public static bool UnBan(string message, string[] args, User user) + { + if(args.Length <= 0) + return false; + if(!user.Administrator && !user.Moderator) + return false; + + try{ + string userName = args[0]; + int id = Database.GetUserid(userName); + Database.UnBanUser(id); + } + catch(Exception e) + { + Logger.ErrorPrint(e.Message); + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + + public static bool Version(string message, string[] args, User user) + { + // Get current version and send to client + byte[] versionPacket = PacketBuilder.CreateChat(ServerVersion.GetBuildString(), PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(versionPacket); + + // Send Command complete message to client. + byte[] versionCommandCompletePacket = PacketBuilder.CreateChat(Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(versionCommandCompletePacket); + return true; + } + public static bool Ban(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator && !user.Moderator) + return false; + try + { + string userName = args[0]; + int id = Database.GetUserid(userName); + string ip = Database.GetIpAddress(id); + string reason = "NONE SPECIFIED"; + if (args.Length >= 2) + { + reason = string.Join(" ", args, 1, args.Length - 1); + } + + Database.BanUser(id, ip, reason); + } + catch(Exception) + { + return false; + } + try{ + User bannedUser = GameServer.GetUserByName(args[0]); + bannedUser.LoggedinClient.Kick(Messages.KickReasonBanned); + } + catch(KeyNotFoundException){}; + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + public static bool Escape(string message, string[] args, User user) + { + if (!user.Administrator && !user.Moderator) + return false; + + user.Teleport(Map.ModIsleX, Map.ModIsleY); + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)) + Messages.ModIsleMessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Stealth(string message, string[] args, User user) + { + if (!user.Administrator && !user.Moderator) + return false; + + user.Stealth = !user.Stealth; + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + public static bool NoClip(string message, string[] args, User user) + { + if (!user.Administrator) + return false; + + user.NoClip = !user.NoClip; + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Rules(string message, string[] args, User user) + { + if (!user.Administrator && !user.Moderator) + return false; + + if (args.Length <= 0) + return false; + + try + { + User toSend = GameServer.GetUserByName(args[0]); + + toSend.Teleport(Map.RulesIsleX, Map.RulesIsleY); + byte[] studyTheRulesMsg = PacketBuilder.CreateChat(Messages.RulesIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + toSend.LoggedinClient.SendPacket(studyTheRulesMsg); + } + catch (KeyNotFoundException) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1))+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Prison(string message, string[] args, User user) + { + if (!user.Administrator && !user.Moderator) + return false; + + if (args.Length <= 0) + return false; + + try + { + User toSend = GameServer.GetUserByName(args[0]); + + toSend.Teleport(Map.PrisonIsleX, Map.PrisonIsleY); + byte[] dontDoTheTime = PacketBuilder.CreateChat(Messages.PrisonIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + toSend.LoggedinClient.SendPacket(dontDoTheTime); + } + catch (KeyNotFoundException) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)) + Messages.FormatPrisonCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + + } + public static bool Kick(string message, string[] args, User user) + { + if (!user.Administrator && !user.Moderator) + return false; + + if (args.Length <= 0) + return false; + + try + { + User toKick = GameServer.GetUserByName(args[0]); + + if (args.Length >= 2) + { + string reason = string.Join(" ", args, 1, args.Length - 1); + toKick.LoggedinClient.Kick(reason); + } + else + { + toKick.LoggedinClient.Kick(Messages.KickReasonKicked); + } + } + catch (KeyNotFoundException) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Jump(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator) + return false; + + if(args.Length < 2) + { + return false; + } + + try + { + User tp = findNamePartial(args[0]); + if (args[1].ToUpper() == "HERE") + tp.Teleport(user.X, user.Y); + } + catch (KeyNotFoundException) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool DelItem(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator) + return false; + + int itemId = 0; + try + { + itemId = int.Parse(args[0]); + User target = user; + if (args.Length > 1) + target = findNamePartial(args[1]); + + if (target.Inventory.HasItemId(itemId)) + { + InventoryItem itm = target.Inventory.GetItemByItemId(itemId); + + foreach (ItemInstance instance in itm.ItemInstances) + { + target.Inventory.Remove(instance); + } + } + } + catch (Exception) + { + return false; + } + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + public static bool Goto(string message, string[] args, User user) + { + if (args.Length <= 0) + return false; + if (!user.Administrator) + return false; + if(args[0].ToUpper() == "PLAYER") + { + if(args.Length < 2) + return false; + try + { + User tpTo = findNamePartial(args[1]); + user.Teleport(tpTo.X, tpTo.Y); + } + catch (KeyNotFoundException) + { + return false; + } + } + else if(args[0].ToUpper() == "AREA") + { + if (args.Length < 2) + return false; + + try + { + string area = string.Join(" ", args, 1, args.Length - 1); + bool teleported = false; + foreach(World.Waypoint waypnt in World.Waypoints) + { + if(waypnt.Name.ToLower().StartsWith(area.ToLower())) + { + user.Teleport(waypnt.PosX, waypnt.PosY); + teleported = true; + break; + } + } + if(!teleported) + return false; + } + catch(Exception) + { + return false; + } + } + else if(args[0].ToUpper() == "NPC") + { + if (args.Length < 2) + return false; + + try + { + string npcName = string.Join(" ", args, 1, args.Length - 1); + bool teleported = false; + foreach (Npc.NpcEntry npc in Npc.NpcList) + { + if (npc.Name.ToLower().StartsWith(npcName.ToLower())) + { + user.Teleport(npc.X, npc.Y); + teleported = true; + break; + } + } + if (!teleported) + return false; + } + catch (Exception) + { + return false; + } + } + else if(args[0].Contains(",")) + { + try + { + string[] xy = args[0].Split(','); + int x = int.Parse(xy[0]); + int y = int.Parse(xy[1]); + user.Teleport(x, y); + } + catch(FormatException) + { + return false; + } + } + else + { + return false; + } + + + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + + public static bool ModHorse(string message, string[] args, User user) + { + if (!user.Administrator) + return false; + + if (args.Length < 3) + return false; + + + int id = 0; + int amount = 0; + try + { + id = int.Parse(args[0]); + if(args[1].ToUpper() != "COLOR") + amount = int.Parse(args[2]); + } + catch (Exception) + { + return false; + } + + + int i = 0; + foreach (HorseInfo.Category category in HorseInfo.HorseCategories) + { + HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray(); + if (horsesInCategory.Length > 0) + { + foreach (HorseInstance instance in horsesInCategory) + { + i++; + + if(i == id) + { + switch (args[1].ToUpper()) + { + case "INTELLIGENCE": + instance.AdvancedStats.Inteligence = amount; + break; + case "PERSONALITY": + instance.AdvancedStats.Personality = amount; + break; + case "HEIGHT": + instance.AdvancedStats.Height = amount; + break; + case "COLOR": + instance.Color = args[2].ToLower(); + break; + case "EXPERIENCE": + instance.BasicStats.Experience = amount; + break; + case "SPEED": + instance.AdvancedStats.Speed = amount; + break; + case "STRENGTH": + instance.AdvancedStats.Strength = amount; + break; + case "CONFORMATION": + instance.AdvancedStats.Conformation = amount; + break; + case "ENDURANCE": + instance.AdvancedStats.Endurance = amount; + break; + case "AGILITY": + instance.AdvancedStats.Agility = amount; + break; + } + } + } + } + } + + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message.Substring(1)), PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + + public static bool Warp(string message, string[] args, User user) + { + + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + if (user.CurrentlyRidingHorse == null) + goto onlyRiddenUnicorn; + + if (user.CurrentlyRidingHorse.Breed.Type == "unicorn") + goto doCommand; + + goto onlyRiddenUnicorn; + + onlyRiddenUnicorn:; + formattedmessage = Messages.OnlyUnicornCanWarp; + goto sendText; + + + cantUnderstandCommand:; + formattedmessage += Messages.FailedToUnderstandLocation; + goto sendText; + + + doCommand:; + + string areaName = string.Join(" ", args).ToLower(); + areaName = areaName.Trim(); + if (args.Length <= 0) + areaName = "horse isle"; + try + { + User tp = GameServer.GetUserByName(areaName); + + user.Teleport(tp.X, tp.Y); + formattedmessage += Messages.SuccessfullyWarpedToPlayer; + goto playSwf; + + } + catch (KeyNotFoundException) + { + foreach (World.Waypoint waypoint in World.Waypoints) + { + if (waypoint.Name.ToLower().StartsWith(areaName)) + { + user.Teleport(waypoint.PosX, waypoint.PosY); + formattedmessage += Messages.SuccessfullyWarpedToLocation; + goto playSwf; + } + } + + goto cantUnderstandCommand; + } + + playSwf:; + byte[] swfPacket = PacketBuilder.CreateSwfModulePacket("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE); + user.LoggedinClient.SendPacket(swfPacket); + + + sendText:; + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + + public static bool CallHorse(string message, string[] args, User user) + { + if (!user.Administrator) + return false; + + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + WildHorse horse = WildHorse.WildHorses[GameServer.RandomNumberGenerator.Next(0, WildHorse.WildHorses.Length)]; + horse.X = user.X; + horse.Y = user.Y; + + GameServer.UpdateAreaForAll(user.X, user.Y); + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + + } + + public static bool AutoReply(string message, string[] args, User user) + { + string replyMessage = string.Join(" ", args); + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + replyMessage = replyMessage.Trim(); + + if (replyMessage.Length > 1024) + { + byte[] tooLong = PacketBuilder.CreateChat(Messages.AutoReplyTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(tooLong); + + return false; + } + + Object violationReason = Chat.FilterMessage(replyMessage); + if (violationReason != null) + { + byte[] hasVios = PacketBuilder.CreateChat(Messages.AutoReplyHasViolations, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(hasVios); + + return false; + } + + user.AutoReplyText = replyMessage; + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + } + public static bool Dance(string message, string[] args, User user) + { + string moves = string.Join(" ", args).ToLower(); + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + if (user.ActiveDance != null) + user.ActiveDance.Dispose(); + + user.ActiveDance = new Dance(user, moves); + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + + } + + public static bool Quiz(string message, string[] args, User user) + { + bool quizActive = (GameServer.QuizEvent != null); + if(user.InRealTimeQuiz) + { + byte[] cantEnterRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventAlreadyEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(cantEnterRealTimeQuiz); + return false; + } + if (quizActive) + { + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + RealTimeQuiz.Participent participent = GameServer.QuizEvent.JoinEvent(user); + + if(participent.Quit) + { + byte[] quizQuit = PacketBuilder.CreateChat(Messages.EventQuitRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(quizQuit); + + return false; + } + + participent.UpdateParticipent(); + byte[] enteredRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(enteredRealTimeQuiz); + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + return true; + + } + else + { + byte[] quizUnavailable = PacketBuilder.CreateChat(Messages.EventUnavailableRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(quizUnavailable); + return false; + } + + } + + public static bool Mute(string message, string[] args, User user) + { + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + if (args.Length <= 0) + { + formattedmessage += Messages.MuteHelp; + goto leave; + } + + string muteType = args[0]; + + if (muteType.ToUpper() == "GLOBAL") + { + user.MuteGlobal = true; + } else if (muteType.ToUpper() == "ISLAND") + { + user.MuteIsland = true; + } else if (muteType.ToUpper() == "NEAR") + { + user.MuteNear = true; + } else if (muteType.ToUpper() == "HERE") + { + user.MuteHere = true; + } else if (muteType.ToUpper() == "BUDDY") + { + user.MuteBuddy = true; + } else if (muteType.ToUpper() == "SOCIALS") + { + user.MuteSocials = true; + } + else if (muteType.ToUpper() == "PM") + { + user.MutePrivateMessage = true; + } + else if (muteType.ToUpper() == "BR") + { + user.MuteBuddyRequests = true; + } + else if (muteType.ToUpper() == "LOGINS") + { + user.MuteLogins = true; + } + else if (muteType.ToUpper() == "ADS") + { + user.MuteAds = true; + } + else if (muteType.ToUpper() == "ALL") + { + user.MuteAll = true; + user.MuteGlobal = true; + user.MuteIsland = true; + user.MuteNear = true; + user.MuteHere = true; + user.MuteBuddy = true; + user.MuteSocials = true; + user.MutePrivateMessage = true; + user.MuteBuddyRequests = true; + user.MuteLogins = true; + } + else + { + formattedmessage += Messages.MuteHelp; + goto leave; + } + + leave:; + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + + public static bool UnMute(string message, string[] args, User user) + { + string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1)); + + if (args.Length <= 0) + { + formattedmessage += Messages.UnMuteHelp; + goto leave; + } + + string muteType = args[0]; + + if (muteType.ToUpper() == "GLOBAL") + { + user.MuteGlobal = false; + } + else if (muteType.ToUpper() == "ISLAND") + { + user.MuteIsland = false; + } + else if (muteType.ToUpper() == "ADS") + { + user.MuteAds = false; + } + else if (muteType.ToUpper() == "NEAR") + { + user.MuteNear = false; + } + else if (muteType.ToUpper() == "HERE") + { + user.MuteHere = false; + } + else if (muteType.ToUpper() == "BUDDY") + { + user.MuteBuddy = false; + } + else if (muteType.ToUpper() == "SOCIALS") + { + user.MuteSocials = false; + } + else if (muteType.ToUpper() == "PM") + { + user.MutePrivateMessage = false; + } + else if (muteType.ToUpper() == "BR") + { + user.MuteBuddyRequests = false; + } + else if (muteType.ToUpper() == "LOGINS") + { + user.MuteLogins = false; + } + else if (muteType.ToUpper() == "ALL") + { + user.MuteAll = false; + user.MuteGlobal = false; + user.MuteIsland = false; + user.MuteNear = false; + user.MuteHere = false; + user.MuteBuddy = false; + user.MuteSocials = false; + user.MutePrivateMessage = false; + user.MuteBuddyRequests = false; + user.MuteLogins = false; + } + else + { + formattedmessage += Messages.UnMuteHelp; + goto leave; + } + + leave:; + + byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); + user.LoggedinClient.SendPacket(chatPacket); + + return true; + } + } +} diff --git a/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs b/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs deleted file mode 100755 index 9868011..0000000 --- a/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs +++ /dev/null @@ -1,57 +0,0 @@ -using HISP.Player; -using System; -using System.Collections.Generic; -using System.Globalization; - -namespace HISP.Game.Chat -{ - public class CommandRegister - { - private static List registeredComamnds = new List(); - public static CommandRegister[] RegisteredCommands - { - get - { - return registeredComamnds.ToArray(); - } - } - private Func commandCallback; - - public bool CmdRequiresAdmin; - public bool CmdRequiresMod; - - public char CmdLetter; - public string CmdName; - public string CmdUsage; - public CommandRegister(char cmdLetter, string cmdName, string cmdUsage, Func cmdCallback, bool cmdRequiresAdmin, bool cmdRequiresMod) - { - this.CmdLetter = cmdLetter; - this.CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture).Trim(); - this.CmdUsage = cmdUsage; - - this.CmdRequiresMod = cmdRequiresMod; - this.CmdRequiresAdmin = cmdRequiresAdmin; - - this.commandCallback = cmdCallback; - - registeredComamnds.Add(this); - } - - public bool HasPermission(User user) - { - if (CmdRequiresAdmin && !(user.Administrator)) - return false; - if (CmdRequiresMod && !(user.Moderator || user.Administrator)) - return false; - - return true; - } - - public bool Execute(string message, string[] args, User user) - { - if(HasPermission(user)) - return commandCallback(message, args, user); - return false; - } - } -} diff --git a/HorseIsleServer/LibHISP/Game/Chat/SocialType.cs b/HorseIsleServer/LibHISP/Game/Chat/SocialType.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Events/IsleCardTradingGame.cs b/HorseIsleServer/LibHISP/Game/Events/IsleCardTradingGame.cs old mode 100755 new mode 100644 index 2c9812b..288669d --- a/HorseIsleServer/LibHISP/Game/Events/IsleCardTradingGame.cs +++ b/HorseIsleServer/LibHISP/Game/Events/IsleCardTradingGame.cs @@ -54,16 +54,16 @@ namespace HISP.Game.Events int totalTypes = 0; foreach (int itemId in Item.TradingCards) - if (client.User.Inventory.HasItemId(itemId)) - totalCards += client.User.Inventory.GetItemByItemId(itemId).ItemInstances.Length; + if (client.LoggedinUser.Inventory.HasItemId(itemId)) + totalCards += client.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances.Length; - if (client.User.Inventory.HasItemId(Item.ColtTradingCard)) + if (client.LoggedinUser.Inventory.HasItemId(Item.ColtTradingCard)) totalTypes++; - if (client.User.Inventory.HasItemId(Item.FillyTradingCard)) + if (client.LoggedinUser.Inventory.HasItemId(Item.FillyTradingCard)) totalTypes++; - if (client.User.Inventory.HasItemId(Item.MareTradingCard)) + if (client.LoggedinUser.Inventory.HasItemId(Item.MareTradingCard)) totalTypes++; - if (client.User.Inventory.HasItemId(Item.StallionTradingCard)) + if (client.LoggedinUser.Inventory.HasItemId(Item.StallionTradingCard)) totalTypes++; if(totalCards > 4) @@ -93,12 +93,12 @@ namespace HISP.Game.Events } 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); client.SendPacket(wonIsleCardGame); - client.User.AddMoney(25000); + client.LoggedinUser.AddMoney(25000); } diff --git a/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs b/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs old mode 100755 new mode 100644 index d49c8fd..d541eaa --- a/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs +++ b/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs @@ -1,7 +1,6 @@ using HISP.Game.Items; using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; using System.Threading; @@ -14,7 +13,7 @@ namespace HISP.Game.Events public ThrowTracker(User thrower) { Thrower = thrower; - thrownAt = new ThreadSafeList(); + thrownAt = new List(); } public void AddThrownAt(User user) @@ -22,7 +21,7 @@ namespace HISP.Game.Events thrownAt.Add(user); } public User Thrower; - private ThreadSafeList thrownAt; + private List thrownAt; public User[] ThrownAt { get @@ -34,7 +33,7 @@ namespace HISP.Game.Events public bool Active = false; public const int REVENGE_TIMEOUT = 10; - private ThreadSafeList trackedThrows; + private List trackedThrows; private Timer revengeTimeout; public ThrowTracker[] TrackedThrows { @@ -46,7 +45,7 @@ namespace HISP.Game.Events public ModsRevenge() { - trackedThrows = new ThreadSafeList(); + trackedThrows = new List(); Active = false; } @@ -148,8 +147,8 @@ namespace HISP.Game.Events thrower.AddMoney(50); throwAt.AddMoney(500); - thrower.Client.SendPacket(youEarned); - throwAt.Client.SendPacket(otherEarned); + thrower.LoggedinClient.SendPacket(youEarned); + throwAt.LoggedinClient.SendPacket(otherEarned); throwCounter.AddThrownAt(throwAt); } diff --git a/HorseIsleServer/LibHISP/Game/Events/RandomEvent.cs b/HorseIsleServer/LibHISP/Game/Events/RandomEvent.cs old mode 100755 new mode 100644 index 63a6dee..6807f25 --- a/HorseIsleServer/LibHISP/Game/Events/RandomEvent.cs +++ b/HorseIsleServer/LibHISP/Game/Events/RandomEvent.cs @@ -59,7 +59,7 @@ namespace HISP.Game.Events string msg = Messages.FormatRandomEvent(rngEvent.Text, moneyEarned, horseName); byte[] chatPacket = PacketBuilder.CreateChat(Messages.RandomEventPrefix + msg, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return; } diff --git a/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs b/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs old mode 100755 new mode 100644 index f172557..15cd3e4 --- a/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs +++ b/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs @@ -1,6 +1,5 @@ using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; using System.Threading; @@ -47,8 +46,8 @@ namespace HISP.Game.Events if (this.Quit) return; - byte[] realTimeQuizQuestion = PacketBuilder.CreateMeta(Meta.BuildRealTimeQuiz(this)); - this.UserInstance.Client.SendPacket(realTimeQuizQuestion); + byte[] realTimeQuizQuestion = PacketBuilder.CreateMetaPacket(Meta.BuildRealTimeQuiz(this)); + this.UserInstance.LoggedinClient.SendPacket(realTimeQuizQuestion); } public void CheckAnswer(string answer) @@ -98,11 +97,11 @@ namespace HISP.Game.Events return participents.ToArray(); } } - private ThreadSafeList participents; + private List participents; public RealTimeQuiz() { - participents = new ThreadSafeList(); + participents = new List(); Questions = new QuizQuestion[8]; for(int i = 0; i < 8; i++) { @@ -160,7 +159,7 @@ namespace HISP.Game.Events Participent partcipent = getParticipent(user.Id); partcipent.Quit = true; user.InRealTimeQuiz = false; - GameServer.UpdateArea(user.Client); + GameServer.UpdateArea(user.LoggedinClient); } catch (KeyNotFoundException) { }; } @@ -219,7 +218,7 @@ namespace HISP.Game.Events participent.UserInstance.InRealTimeQuiz = false; - GameServer.UpdateArea(participent.UserInstance.Client); + GameServer.UpdateArea(participent.UserInstance.LoggedinClient); int money = 0; @@ -238,12 +237,12 @@ namespace HISP.Game.Events if (participent.Won) { byte[] wonBonusMessage = PacketBuilder.CreateChat(Messages.FormatEventRealTimeQuizWinBonus(money), PacketBuilder.CHAT_BOTTOM_RIGHT); - participent.UserInstance.Client.SendPacket(wonBonusMessage); + participent.UserInstance.LoggedinClient.SendPacket(wonBonusMessage); } else { 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); diff --git a/HorseIsleServer/LibHISP/Game/Events/RealTimeRiddle.cs b/HorseIsleServer/LibHISP/Game/Events/RealTimeRiddle.cs old mode 100755 new mode 100644 index 45f82db..0049830 --- a/HorseIsleServer/LibHISP/Game/Events/RealTimeRiddle.cs +++ b/HorseIsleServer/LibHISP/Game/Events/RealTimeRiddle.cs @@ -59,7 +59,7 @@ namespace HISP.Game.Events if (Database.HasPlayerCompletedRealTimeRiddle(RiddleId, winner.Id)) { byte[] alreadyWonRiddleMessage = PacketBuilder.CreateChat(Messages.EventAlreadySovledRealTimeRiddle, PacketBuilder.CHAT_BOTTOM_RIGHT); - winner.Client.SendPacket(alreadyWonRiddleMessage); + winner.LoggedinClient.SendPacket(alreadyWonRiddleMessage); return; } @@ -81,7 +81,7 @@ namespace HISP.Game.Events foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (client.User.Id != winner.Id) + if (client.LoggedinUser.Id != winner.Id) client.SendPacket(riddleWonMessage); else client.SendPacket(riddleYouWonMessage); diff --git a/HorseIsleServer/LibHISP/Game/Events/TackShopGiveaway.cs b/HorseIsleServer/LibHISP/Game/Events/TackShopGiveaway.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Events/WaterBalloonGame.cs b/HorseIsleServer/LibHISP/Game/Events/WaterBalloonGame.cs old mode 100755 new mode 100644 index 2d0752e..e6f0765 --- a/HorseIsleServer/LibHISP/Game/Events/WaterBalloonGame.cs +++ b/HorseIsleServer/LibHISP/Game/Events/WaterBalloonGame.cs @@ -80,7 +80,7 @@ namespace HISP.Game.Events { byte[] youWinMsg = PacketBuilder.CreateChat(Messages.EventWonWaterBallonGame, PacketBuilder.CHAT_BOTTOM_RIGHT); winner.UserHit.AddMoney(20000); - winner.UserHit.Client.SendPacket(youWinMsg); + winner.UserHit.LoggedinClient.SendPacket(youWinMsg); winner.UserHit.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WaterbaloonGameWin).Count++; } diff --git a/HorseIsleServer/LibHISP/Game/GameExceptions.cs b/HorseIsleServer/LibHISP/Game/GameExceptions.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Horse/HorseInfo.cs b/HorseIsleServer/LibHISP/Game/Horse/HorseInfo.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Horse/HorseInstance.cs b/HorseIsleServer/LibHISP/Game/Horse/HorseInstance.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Horse/Leaser.cs b/HorseIsleServer/LibHISP/Game/Horse/Leaser.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Horse/WildHorse.cs b/HorseIsleServer/LibHISP/Game/Horse/WildHorse.cs old mode 100755 new mode 100644 index 443676d..8d6ddf2 --- a/HorseIsleServer/LibHISP/Game/Horse/WildHorse.cs +++ b/HorseIsleServer/LibHISP/Game/Horse/WildHorse.cs @@ -1,6 +1,5 @@ using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Game.Horse { @@ -182,7 +181,7 @@ namespace HISP.Game.Horse Despawn(this); } - private static ThreadSafeList wildHorses = new ThreadSafeList(); + private static List wildHorses = new List(); public static WildHorse[] WildHorses { get diff --git a/HorseIsleServer/LibHISP/Game/Inventory/HorseInventory.cs b/HorseIsleServer/LibHISP/Game/Inventory/HorseInventory.cs old mode 100755 new mode 100644 index 8472f2e..0c56761 --- a/HorseIsleServer/LibHISP/Game/Inventory/HorseInventory.cs +++ b/HorseIsleServer/LibHISP/Game/Inventory/HorseInventory.cs @@ -1,7 +1,6 @@ using HISP.Game.Horse; using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Game.Inventory @@ -9,7 +8,7 @@ namespace HISP.Game.Inventory public class HorseInventory { private User baseUser; - private ThreadSafeList horsesList = new ThreadSafeList(); + private List horsesList = new List(); public HorseInstance[] HorseList { get diff --git a/HorseIsleServer/LibHISP/Game/Inventory/IInventory.cs b/HorseIsleServer/LibHISP/Game/Inventory/IInventory.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Inventory/InventoryItem.cs b/HorseIsleServer/LibHISP/Game/Inventory/InventoryItem.cs old mode 100755 new mode 100644 index ace7df3..8f4662f --- a/HorseIsleServer/LibHISP/Game/Inventory/InventoryItem.cs +++ b/HorseIsleServer/LibHISP/Game/Inventory/InventoryItem.cs @@ -1,20 +1,21 @@ -using HISP.Game.Items; -using HISP.Util; - +using System; +using System.Collections.Generic; +using HISP.Game.Items; + namespace HISP.Game.Inventory { public class InventoryItem { public InventoryItem() { - itemInstances = new ThreadSafeList(); + itemInstances = new List(); Infinite = false; ItemId = 0; } public int ItemId; public bool Infinite; - private ThreadSafeList itemInstances; + private List itemInstances; public void RemoveItem(ItemInstance itm) { itemInstances.Remove(itm); diff --git a/HorseIsleServer/LibHISP/Game/Inventory/PlayerInventory.cs b/HorseIsleServer/LibHISP/Game/Inventory/PlayerInventory.cs old mode 100755 new mode 100644 index 55a3db8..2bde518 --- a/HorseIsleServer/LibHISP/Game/Inventory/PlayerInventory.cs +++ b/HorseIsleServer/LibHISP/Game/Inventory/PlayerInventory.cs @@ -4,20 +4,19 @@ using System.Linq; using HISP.Player; using HISP.Server; using HISP.Game.Items; -using HISP.Util; - + namespace HISP.Game.Inventory -{ - +{ + public class PlayerInventory : IInventory { public User BaseUser; - private ThreadSafeList inventoryItems; + private List inventoryItems; public PlayerInventory(User forUser) { - inventoryItems = new ThreadSafeList(); + inventoryItems = new List(); BaseUser = forUser; ItemInstance[] instances = Database.GetPlayerInventory(BaseUser.Id).ToArray(); diff --git a/HorseIsleServer/LibHISP/Game/Inventory/ShopInventory.cs b/HorseIsleServer/LibHISP/Game/Inventory/ShopInventory.cs old mode 100755 new mode 100644 index 2a25915..3869ea2 --- a/HorseIsleServer/LibHISP/Game/Inventory/ShopInventory.cs +++ b/HorseIsleServer/LibHISP/Game/Inventory/ShopInventory.cs @@ -4,14 +4,13 @@ using HISP.Game.Items; using System.Collections.Generic; using System.Linq; -using HISP.Util; - + namespace HISP.Game.Inventory { public class ShopInventory : IInventory { private Shop baseShop; - private ThreadSafeList inventoryItems; + private List inventoryItems; public int Count { get @@ -22,7 +21,7 @@ namespace HISP.Game.Inventory public ShopInventory(Shop shopkeeper) { baseShop = shopkeeper; - inventoryItems = new ThreadSafeList(); + inventoryItems = new List(); } private void addItem(ItemInstance item, bool addToDatabase) diff --git a/HorseIsleServer/LibHISP/Game/Items/DroppedItems.cs b/HorseIsleServer/LibHISP/Game/Items/DroppedItems.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Items/Item.cs b/HorseIsleServer/LibHISP/Game/Items/Item.cs old mode 100755 new mode 100644 index 12dc35f..771c2e6 --- a/HorseIsleServer/LibHISP/Game/Items/Item.cs +++ b/HorseIsleServer/LibHISP/Game/Items/Item.cs @@ -150,7 +150,7 @@ namespace HISP.Game.Items if (isle.Name == "Prison Isle") { byte[] dontWorkHere = PacketBuilder.CreateChat(Messages.RanchDorothyShoesPrisonIsleMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(dontWorkHere); + user.LoggedinClient.SendPacket(dontWorkHere); return; } } @@ -162,14 +162,14 @@ namespace HISP.Game.Items return; } 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); } else if (itm.ItemId == Item.Telescope) { byte[] birdMap = PacketBuilder.CreateBirdMap(user.X, user.Y); - user.Client.SendPacket(birdMap); + user.LoggedinClient.SendPacket(birdMap); } else { diff --git a/HorseIsleServer/LibHISP/Game/Items/ItemInstance.cs b/HorseIsleServer/LibHISP/Game/Items/ItemInstance.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Items/Tack.cs b/HorseIsleServer/LibHISP/Game/Items/Tack.cs old mode 100755 new mode 100644 index bb479ad..b368c56 --- a/HorseIsleServer/LibHISP/Game/Items/Tack.cs +++ b/HorseIsleServer/LibHISP/Game/Items/Tack.cs @@ -4,8 +4,7 @@ using System.Collections.Generic; using System.Text; using HISP.Server; -using HISP.Util; - + namespace HISP.Game.Items { public class Tack @@ -123,13 +122,13 @@ namespace HISP.Game.Items try { - TackSet set = GetSetByName(Helper.CapitalizeFirstLetter(itemInfo.EmbedSwf)); + TackSet set = GetSetByName(Util.CapitalizeFirstLetter(itemInfo.EmbedSwf)); set.Add(itemInfo); } catch(KeyNotFoundException) { TackSet tackSet = new TackSet(); - tackSet.SetName = Helper.CapitalizeFirstLetter(itemInfo.EmbedSwf); + tackSet.SetName = Util.CapitalizeFirstLetter(itemInfo.EmbedSwf); tackSet.Add(itemInfo); tackSets.Add(tackSet); } diff --git a/HorseIsleServer/LibHISP/Game/Map.cs b/HorseIsleServer/LibHISP/Game/Map.cs old mode 100755 new mode 100644 index 8d3b926..25ddf74 --- a/HorseIsleServer/LibHISP/Game/Map.cs +++ b/HorseIsleServer/LibHISP/Game/Map.cs @@ -12,14 +12,7 @@ namespace HISP.Game public string Type; } - public struct TileDepth - { - public bool ShowPlayer; - public bool Passable; - } - - public static TileDepth[] OverlayTileDepth; - public static TerrainTile[] TerrainTiles; + public static int[] OverlayTileDepth; public static int Width; public static int Height; @@ -27,6 +20,8 @@ namespace HISP.Game public static byte[] MapData; public static byte[] oMapData; + public static TerrainTile[] TerrainTiles; + public static int NewUserStartX; public static int NewUserStartY; @@ -80,9 +75,19 @@ namespace HISP.Game if (World.InIsle(x, y)) tileset = World.GetIsle(x, y).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) return false; diff --git a/HorseIsleServer/LibHISP/Game/Messages.cs b/HorseIsleServer/LibHISP/Game/Messages.cs old mode 100755 new mode 100644 index 1b93c88..9e823ef --- a/HorseIsleServer/LibHISP/Game/Messages.cs +++ b/HorseIsleServer/LibHISP/Game/Messages.cs @@ -1,3051 +1,3027 @@ -using System; -using System.Drawing; -using System.Globalization; - -using HISP.Security; -using HISP.Server; -using HISP.Util; -using HISP.Game.Chat; - -namespace HISP.Game -{ - public class Messages - { - // HISP specific - public static string HISPHelpCommandUsageFormat; - - // extended config - public static int RequiredChatViolations; - - // Message Queue - public static string MessageQueueHeader; - - // Timed Messages - public static string PlaytimeMessageFormat; - public static string[] RngMessages; - - // Prison Isle - public static string PrisonIsleSentMessage; - public static string PrisonIsleCommandMessageFormat; - - // Rules Isle - public static string RulesIsleSentMessage; - public static string RulesIsleCommandMessageFormat; - - // Mod - public static string ModIsleMessage; - public static string ModSplatterballEarnedYouFormat; - public static string ModSplatterballEarnedOtherFormat; - - // Add Buddy - public static string AddBuddyPending; - public static string AddBuddyOtherPendingFormat; - public static string AddBuddyYourNowBuddiesFormat; - public static string AddBuddyDeleteBuddyFormat; - - // Mute Command - public static string NowMutingPlayerFormat; - public static string StoppedMutingPlayerFormat; - - public static string PlayerIgnoringYourPrivateMessagesFormat; - public static string PlayerIgnoringYourBuddyRequests; - public static string PlayerIgnoringYourSocials; - - public static string PlayerIgnoringAllPrivateMessagesFormat; - public static string PlayerIgnoringAllBuddyRequests; - public static string PlayerIgnoringAllSocials; - - public static string CantSendInMutedChannel; - public static string CantSendPrivateMessageWhileMuted; - public static string CantSendBuddyRequestWhileMuted; - - public static string CantSendPrivateMessagePlayerMutedFormat; - - // Chat Errors - public static string CantFindPlayerToPrivateMessage; - public static string AdsOnlyOncePerMinute; - public static string GlobalChatLimited; - public static string GlobalChatTooLong; - public static string AdsChatTooLong; - - - // Auto Sell - public static string AutoSellNotStandingInSamePlace; - public static string AutoSellSuccessFormat; - public static string HorseAutoSellValueTooHigh; - public static string AutoSellInsufficentFunds; - public static string AutoSellTooManyHorses; - public static string AutoSellYouSoldHorseFormat; - public static string AutoSellYouSoldHorseOfflineFormat; - - // Tag - public static string TagYourItFormat; - public static string TagOtherBuddiesOnlineFormat; - - // Socials - public static string SocialButton; - public static string SocialMessageFormat; - public static string SocialTypeFormat; - public static string SocialPlayerNoLongerNearby; - - // Random Event - public static string RandomEventPrefix; - - // Events : Mods Revenge - public static string EventStartModsRevenge; - public static string EventEndModsRevenge; - - // Events : Isle Cards Trading Game - public static string EventStartIsleTradingGame; - public static string EventDisqualifiedIsleTradingGame; - public static string EventOnlyOneTypeIsleTradingGame; - public static string EventOnlyTwoTypeIsleTradingGame; - public static string EventOnlyThreeTypeIsleTradingGame; - public static string EventNoneIsleTradingGame; - public static string EventWonIsleTradingGame; - - // Events : Water Balloon Game - public static string EventStartWaterBallonGame; - public static string EventWonWaterBallonGame; - public static string EventEndWaterBalloonGame; - public static string EventWinnerWaterBalloonGameFormat; - - // Events : Real Time Quiz - public static string EventMetaRealTimeQuizFormat; - public static string EventStartRealTimeQuiz; - public static string EventEndRealTimeQuiz; - public static string EventBonusRealTimeQuizFormat; - public static string EventWinBonusRealTimeQuizFormat; - public static string EventWinRealTimeQuizFormat; - public static string EventUnavailableRealTimeQuiz; - public static string EventEnteredRealTimeQuiz; - public static string EventAlreadyEnteredRealTimeQuiz; - public static string EventQuitRealTimeQuiz; - - // Events : Real Time Riddles - public static string EventStartRealTimeRiddleFormat; - public static string EventEndRealTimeRiddle; - public static string EventWonRealTimeRiddleForOthersFormat; - public static string EventWonRealTimeRiddleForYouFormat; - public static string EventAlreadySovledRealTimeRiddle; - - // Events : Tack Shop Giveaway - public static string EventStartTackShopGiveawayFormat; - public static string Event1MinTackShopGiveawayFormat; - public static string EventWonTackShopGiveawayFormat; - public static string EventEndTackShopGiveawayFormat; - - // MultiHorses - public static string OtherPlayersHere; - public static string MultiHorseSelectOneToJoinWith; - public static string MultiHorseFormat; - - // 2Player - public static string TwoPlayerOtherPlayer; - public static string TwoPlayerPlayerFormat; - public static string TwoPlayerInviteButton; - public static string TwoPlayerAcceptButton; - public static string TwoPlayerSentInvite; - public static string TwoPlayerPlayingWithFormat; - - public static string TwoPlayerGameInProgressFormat; - - public static string TwoPlayerYourInvitedFormat; - public static string TwoPlayerInvitedFormat; - public static string TwoPlayerStartingUpGameFormat; - - public static string TwoPlayerGameClosed; - public static string TwoPlayerGameClosedOther; - - public static string TwoPlayerRecordedWinFormat; - public static string TwoPlayerRecordedLossFormat; - - // Trading - public static string TradeWithPlayerFormat; - - public static string TradeWaitingForOtherDone; - public static string TradeOtherPlayerIsDone; - public static string TradeFinalReview; - - public static string TradeYourOfferingFormat; - - public static string TradeAddItems; - public static string TradeOtherOfferingFormat; - - public static string TradeWhenDoneClick; - public static string TradeCancelAnytime; - public static string TradeAcceptTrade; - - public static string TradeOfferingNothing; - public static string TradeOfferingMoneyFormat; - public static string TradeOfferingItemFormat; - public static string TradeOfferingHorseFormat; - - // Trading : What to Offer (menu) - - public static string TradeWhatToOfferFormat; - public static string TradeOfferMoney; - - public static string TradeOfferHorse; - public static string TradeOfferHorseFormat; - public static string TradeOfferHorseTacked; - - public static string TradeOfferItem; - public static string TradeOfferItemFormat; - public static string TradeOfferItemOtherPlayerInvFull; - - // Trading : Offer Submenu - - public static string TradeMoneyOfferSubmenuFormat; - public static string TradeItemOfferSubmenuFormat; - - // Trading : Messages - - public static string TradeWaitingForOthersToAcceptMessage; - - public static string TradeRequiresBothPlayersMessage; - public static string TradeCanceledBecuasePlayerMovedMessage; - - public static string TradeItemOfferAtleast1; - public static string TradeItemOfferTooMuchFormat; - public static string TradeMoneyOfferTooMuch; - - public static string TradeOtherPlayerHasNegativeMoney; - public static string TradeYouHaveNegativeMoney; - - public static string TradeAcceptedMessage; - public static string TradeCanceledByYouMessage; - public static string TradeCanceledByOtherPlayerFormat; - public static string TradeCanceledInterupted; - - public static string TradeYouCantHandleMoreHorses; - public static string TradeOtherPlayerCantHandleMoreHorsesFormat; - - public static string TradeYouSpentMoneyMessageFormat; - public static string TradeYouReceivedMoneyMessageFormat; - - public static string TradeRiddenHorse; - - public static string TradeYouCantCarryMoreItems; - public static string TradeOtherCantCarryMoreItems; - - public static string TradeNotAllowedWhileBidding; - public static string TradeNotAllowedWhileOtherBidding; - - public static string TradeWillGiveYouTooMuchMoney; - public static string TradeWillGiveOtherTooMuchMoney; - - // Player Interaction - public static string PlayerHereMenuFormat; - - public static string PlayerHereProfileButton; - public static string PlayerHereSocialButton; - public static string PlayerHereTradeButton; - public static string PlayerHereAddBuddyButton; - public static string PlayerHereTagButton; - - public static string PmButton; - - // Auction House - public static string AuctionsRunning; - public static string AuctionHorseEntryFormat; - public static string AuctionPlayersHereFormat; - - public static string AuctionAHorse; - public static string AuctionListHorse; - - public static string AuctionHorseListEntryFormat; - public static string AuctionHorseViewButton; - public static string AuctionHorseIsTacked; - - public static string AuctionBidMax; - public static string AuctionBidRaisedFormat; - public static string AuctionTopBid; - public static string AuctionExistingBidHigher; - - public static string AuctionYouveBeenOutbidFormat; - public static string AuctionCantAffordBid; - public static string AuctionCantAffordAuctionFee; - public static string AuctionOneHorsePerPlayer; - - public static string AuctionYouHaveTooManyHorses; - public static string AuctionOnlyOneWinningBidAllowed; - - public static string AuctionYouBroughtAHorseFormat; - public static string AuctionNoHorseBrought; - - public static string AuctionHorseSoldFormat; - - public static string AuctionSoldToFormat; - public static string AuctionNotSold; - public static string AuctionGoingToFormat; - - public static string AuctionNoOtherTransactionAllowed; - - // Warp Command - public static string SuccessfullyWarpedToLocation; - public static string SuccessfullyWarpedToPlayer; - public static string OnlyUnicornCanWarp; - public static string FailedToUnderstandLocation; - - // Click - public static string ClickPlayerHereFormat; - - // Hammock - public static string HammockText; - - // Horse Leaser - public static string HorseLeaserCantAffordMessage; - public static string HorseLeaserTemporaryHorseAdded; - public static string HorseLeaserHorsesFull; - - public static string HorseLeaserReturnedToUniterPegasus; - - public static string HorseLeaserReturnedToUniterFormat; - public static string HorseLeaserReturnedToOwnerFormat; - - // Horse Games - public static string HorseGamesSelectHorse; - public static string HorseGamesHorseEntryFormat; - - // Competitions - public static string ArenaResultsMessage; - public static string ArenaPlacingFormat; - - public static string ArenaFirstPlace; - public static string ArenaSecondPlace; - public static string ArenaThirdPlace; - public static string ArenaFourthPlace; - public static string ArenaFifthPlace; - public static string ArenaSixthPlace; - - public static string ArenaEnteredInto; - - public static string ArenaAlreadyEntered; - public static string ArenaCantAfford; - - public static string ArenaYourScoreFormat; - - public static string ArenaJumpingStartup; - public static string ArenaDraftStartup; - public static string ArenaRacingStartup; - public static string ArenaConformationStartup; - - public static string ArenaYouWinFormat; - public static string ArenaOnlyWinnerWins; - - public static string ArenaTooHungry; - public static string ArenaTooThirsty; - public static string ArenaNeedsFarrier; - public static string ArenaTooTired; - public static string ArenaNeedsVet; - - public static string ArenaEventNameFormat; - public static string ArenaFullErrorMessage; - - public static string ArenaCurrentlyTakingEntriesFormat; - public static string ArenaCompetitionInProgress; - public static string ArenaYouHaveHorseEntered; - public static string ArenaCompetitionFull; - - public static string ArenaEnterHorseFormat; - public static string ArenaCurrentCompetitors; - public static string ArenaCompetingHorseFormat; - - - // City Hall - public static string CityHallMenu; - public static string CityHallMailSendMeta; - public static string CityHallSentMessageFormat; - public static string CityHallCantAffordPostageMessage; - public static string CityHallCantFindPlayerMessageFormat; - - // City Hall : Auto Sell - public static string CityHallCheapestAutoSells; - public static string CityHallCheapestAutoSellHorseEntryFormat; - public static string CityHallMostExpAutoSells; - public static string CityHallMostExpAutoSellHorseEntryFormat; - - // City Hall : Ranch Investment - public static string CityHallTop25Ranches; - public static string CityHallRanchEntryFormat; - - // City Hall : Richest Players - public static string CityHallTop25Players; - public static string CityHallRichPlayerFormat; - - // City Hall : Spoiled Horses - public static string CityHallTop100SpoiledHorses; - public static string CityHallSpoiledHorseEntryFormat; - - // City Hall : Most Adventurous Players - public static string CityHallTop25AdventurousPlayers; - public static string CityHallAdventurousPlayerEntryFormat; - - // City Hall : Most Experienced Players - public static string CityHallTop25ExperiencedPlayers; - public static string CityHallExperiencePlayerEntryFormat; - - // City Hall : Most Played Minigames - public static string CityHallTop25MinigamePlayers; - public static string CityHallMinigamePlayerEntryFormat; - - // City Hall : Most Experienced Horses - public static string CityHallTop25ExperiencedHorses; - public static string CityHallExperiencedHorseEntryFormat; - - - // Mail Messages - public static string MailReceivedMessage; - public static string MailSe; - public static string MailSelectFromFollowing; - - public static string MailEntryFormat; - public static string MailReadMetaFormat; - public static string MailRippedMessage; - - // Ranch - public static string RanchUnownedRanchFormat; - public static string RanchYouCouldPurchaseThisRanch; - public static string RanchYouAllreadyOwnARanch; - public static string RanchSubscribersOnly; - public static string RanchDescriptionOthersFormat; - public static string RanchUnownedRanchClicked; - public static string RanchClickMessageFormat; - - public static string RanchNoDorothyShoesMessage; - public static string RanchDorothyShoesMessage; - public static string RanchDorothyShoesPrisonIsleMessage; - - public static string RanchCantAffordRanch; - public static string RanchRanchBroughtMessageFormat; - public static string RanchForcefullySoldFormat; - public static string RanchSavedRanchDescripton; - public static string RanchSavedTitleTooLongError; - public static string RanchSavedDescrptionTooLongError; - public static string RanchSavedTitleViolationsError; - public static string RanchSavedDescrptionViolationsErrorFormat; - - - public static string RanchDefaultRanchTitle; - - public static string RanchEditDescriptionMetaFormat; - public static string RanchTitleFormat; - public static string RanchYourDescriptionFormat; - - public static string RanchSellAreYouSure; - public static string RanchSoldFormat; - - // Ranch: Build. - public static string RanchCanBuildOneOfTheFollowingInThisSpot; - public static string RanchBuildingEntryFormat; - public static string RanchCantAffordThisBuilding; - public static string RanchBuildingInformationFormat; - public static string RanchBuildingComplete; - public static string RanchBuildingAlreadyHere; - public static string RanchTornDownRanchBuildingFormat; - public static string RanchViewBuildingFormat; - public static string RanchBarnHorsesFormat; - - // Ranch: Upgrade - public static string UpgradedMessage; - public static string UpgradeCannotAfford; - public static string UpgradeCurrentUpgradeFormat; - public static string UpgradeNextUpgradeFormat; - - // Ranch: Special - public static string BuildingRestHere; - public static string BuildingGrainSilo; - public static string BuildingBarnFormat; - public static string BuildingBigBarnFormat; - public static string BuildingGoldBarnFormat; - public static string BuildingWaterWell; - public static string BuildingWindmillFormat; - public static string BuildingWagon; - public static string BuildingTrainingPen; - public static string BuildingVegatableGarden; - - public static string RanchTrainAllAttempt; - public static string RanchTrainSuccessFormat; - public static string RanchTrainBadMoodFormat; - public static string RanchTrainCantTrainFormat; - public static string RanchHorsesFullyRested; - public static string RanchWagonDroppedYouOff; - - // Training Pen - public static string TrainedInStatFormat; - public static string TrainerHeaderFormat; - public static string TrainerHorseEntryFormat; - public static string TrainerHorseFullyTrainedFormat; - public static string TrainerCantTrainAgainInFormat; - public static string TrainerCantAfford; - - // Santa - public static string SantaHiddenText; // Text that claims that it costs $10 to wrap a present thats sent to the client but never displayed for some reason. also wrapping is free on pinto so IDEK. - public static string SantaWrapItemFormat; - public static string SantaWrappedObjectMessage; - public static string SantaCantWrapInvFull; - public static string SantaCantOpenNothingInside; - public static string SantaItemOpenedFormat; - public static string SantaItemCantOpenInvFull; - - // Tools - public static string BinocularsNothing; - public static string MagnifyNothing; - public static string RakeNothing; - public static string ShovelNothing; - - // Pronouns - public static string PronounMaleHe; - public static string PronounMaleHis; - - public static string PronounFemaleShe; - public static string PronounFemaleHer; - - public static string PronounNeutralYour; - - public static string PronounNeutralThey; - public static string PronounNeutralTheir; - // Stats Page - public static string StatsBarFormat; - public static string StatsAreaFormat; - public static string StatsMoneyFormat; - public static string StatsFreeTimeFormat; - public static string StatsDescriptionFormat; - public static string StatsExpFormat; - public static string StatsQuestpointsFormat; - public static string StatsHungerFormat; - public static string StatsThirstFormat; - public static string StatsTiredFormat; - public static string StatsGenderFormat; - public static string StatsJewelFormat; - public static string StatsCompetitionGearFormat; - - public static string JewelrySlot1Format; - public static string JewelrySlot2Format; - public static string JewelrySlot3Format; - public static string JewelrySlot4Format; - - public static string JewelryRemoveSlot1Button; - public static string JewelryRemoveSlot2Button; - public static string JewelryRemoveSlot3Button; - public static string JewelryRemoveSlot4Button; - - public static string CompetitionGearHeadFormat; - public static string CompetitionGearBodyFormat; - public static string CompetitionGearLegsFormat; - public static string CompetitionGearFeetFormat; - - public static string CompetitionGearRemoveHeadButton; - public static string CompetitionGearRemoveBodyButton; - public static string CompetitionGearRemoveLegsButton; - public static string CompetitionGearRemoveFeetButton; - - public static string StatsPrivateNotesButton; - public static string StatsQuestsButton; - public static string StatsMinigameRankingButton; - public static string StatsAwardsButton; - public static string StatsMiscButton; - - public static string NoJewerlyEquipped; - public static string NoJewerlyEquippedOther; - - public static string NoCompetitionGear; - public static string NoCompetitionGearOther; - - public static string JewelrySelected; - public static string JewelrySelectedOther; - - public static string CompetitionGearSelected; - public static string CompetitionGearSelectedOther; - - public static string StatHunger; - public static string StatThirst; - public static string StatTired; - - public static string StatsOtherHorses; - - public static string[] StatPlayerFormats; - - public static string StatThirstDizzy; - public static string StatHungerStumble; - - - // Misc Stats - - public static string StatMiscHeader; - public static string StatMiscNoneRecorded; - public static string StatMiscEntryFormat; - - // Quests Completed Page - public static string QuestLogHeader; - public static string QuestFormat; - - public static string QuestNotCompleted; - public static string QuestNotAvalible; - public static string QuestCompleted; - - public static string QuestFooterFormat; - - // Announcements - public static string NewUserMessage; - public static string WelcomeFormat; - public static string MotdFormat; - public static string IdleWarningFormat; - public static string LoginMessageFormat; - public static string LogoutMessageFormat; - - // Libary - public static string LibaryMainMenu; - public static string LibaryFindNpc; - public static string LibaryFindNpcSearchResultsHeader; - public static string LibaryFindNpcSearchResultFormat; - public static string LibaryFindNpcSearchNoResults; - public static string LibaryFindNpcLimit5; - - public static string LibaryFindRanch; - public static string LibaryFindRanchResultsHeader; - public static string LibaryFindRanchResultFormat; - public static string LibaryFindRanchResultsNoResults; - - - public static string HorseBreedFormat; - public static string HorseRelativeFormat; - public static string BreedViewerFormat; - - - // Records - - public static string PrivateNotesSavedMessage; - public static string PrivateNotesMetaFormat; - - // Profile - - public static string ProfileSavedMessage; - public static string ProfileTooLongMessage; - public static string ProfileSaveBlockedFormat; - - public static string ProfileViolationFormat; - // Hay Pile - - public static string HasPitchforkMeta; - public static string NoPitchforkMeta; - - // Chat - - public static string GlobalChatFormat; - public static string AdsChatFormat; - public static string BuddyChatFormat; - public static string NearChatFormat; - public static string IsleChatFormat; - public static string HereChatFormat; - public static string DirectChatFormat; - public static string ModChatFormat; - public static string AdminChatFormat; - - public static string YouWereSentToPrisionIsle; - - public static string AdminCommandFormat; - public static string PlayerCommandFormat; - - public static string MuteHelp; - public static string UnMuteHelp; - - public static string GlobalChatFormatForModerators; - public static string DirectChatFormatForModerators; - - public static string IsleChatFormatForSender; - public static string NearChatFormatForSender; - public static string HereChatFormatForSender; - public static string AdsChatFormatForSender; - public static string BuddyChatFormatForSender; - public static string DirectChatFormatForSender; - public static string AdminChatFormatForSender; - public static string ModChatFormatForSender; - - public static string ServerAnnoucementFormat; - - public static string DmModBadge; - public static string DmAutoResponse; - - public static string ChatViolationMessageFormat; - public static string PasswordNotice; - public static string CapsNotice; - public static string RandomMovement; - - // AutoReply - public static string AutoReplyTooLong; - public static string AutoReplyHasViolations; - - // Transport - - public static string CantAffordTransport; - public static string WelcomeToAreaFormat; - public static string TransportFormat; - public static string TransportCostFormat; - public static string TransportWagonFree; - - //Dropped Items - - public static string NothingMessage; - public static string ItemsOnGroundMessage; - public static string GrabItemFormat; - public static string GrabAllItemsButton; - public static string GrabAllItemsMessage; - public static string GrabbedItemMessage; - public static string GrabbedItemButInventoryFull; - public static string GrabbedAllItemsButInventoryFull; - public static string GrabbedAllItemsMessage; - public static string DroppedAnItemMessage; - public static string DroppedItemTileIsFull; - public static string DroppedItemCouldntPickup; - public static string ItemInformationFormat; - - // Pond - public static string PondHeader; - public static string PondGoFishing; - public static string PondNoFishingPole; - public static string PondNoEarthWorms; - public static string PondDrinkHereIfSafe; - public static string PondHorseDrinkFormat; - - public static string PondNotThirstyFormat; - public static string PondDrinkFullFormat; - public static string PondCantDrinkHpLowFormat; - public static string PondDrinkOhNoesFormat; - - // Mud Hole - - public static string MudHoleNoHorses; - public static string MudHoleRuinedGroomFormat; - - // Competition Gear - - public static string EquipCompetitionGearFormat; - public static string RemoveCompetitionGear; - - // Jewelry - public static string EquipJewelryFormat; - public static string MaxJewelryMessage; - public static string RemoveJewelry; - - // Books (Libary) - public static string BooksOfHorseIsle; - public static string BookEntryFormat; - public static string BookReadFormat; - - // Awards (Libary) - public static string AwardsAvalible; - public static string AwardEntryFormat; - - // Locations (Libary) - public static string LocationKnownIslands; - public static string LocationKnownTowns; - public static string LocationIslandFormat; - public static string LocationTownFormat; - public static string LocationDescriptionFormat; - - // Minigames (Libary) - public static string MinigameSingleplayer; - public static string MinigameTwoplayer; - public static string MinigameMultiplayer; - public static string MinigameCompetitions; - public static string MinigameEntryFormat; - - // Companion (Libary) - public static string CompanionViewFormat; - public static string CompanionEntryFormat; - - // Tack (Libary) - public static string TackViewSetFormat; - public static string TackSetPeiceFormat; - - // Workshop - public static string WorkshopCraftEntryFormat; - public static string WorkshopRequiresFormat; - public static string WorkshopRequireEntryFormat; - public static string WorkshopAnd; - - public static string WorkshopNoRoomInInventory; - public static string WorkshopMissingRequiredItem; - public static string WorkshopCraftingSuccess; - public static string WorkshopCannotAfford; - - // Horse - public static string BreedViewerMaximumStats; - public static string AdvancedStatFormat; - public static string BasicStatFormat; - public static string HorsesHere; - public static string WildHorseFormat; - public static string HorseCaptureTimer; - public static string YouCapturedTheHorse; - public static string HorseEvadedCapture; - public static string HorseEscapedAnyway; - public static string TooManyHorses; - public static string HorsesMenuHeader; - public static string UpdateHorseCategory; - public static string HorseEntryFormat; - public static string ViewBaiscStats; - public static string ViewAdvancedStats; - public static string HorseBuckedYou; - public static string HorseLlamaBuckedYou; - public static string HorseCamelBuckedYou; - - public static string HorseRidingMessageFormat; - public static string HorseNameYoursFormat; - public static string HorseNameOthersFormat; - public static string HorseDescriptionFormat; - public static string HorseHandsHeightFormat; - public static string HorseExperienceEarnedFormat; - - public static string HorseTrainableInFormat; - public static string HorseIsTrainable; - - public static string HorseLeasedRemainingTimeFormat; - - public static string HorseCannotMountUntilTackedMessage; - public static string HorseDismountedBecauseNotTackedMessageFormat; - public static string HorseMountButtonFormat; - public static string HorseDisMountButtonFormat; - public static string HorseFeedButtonFormat; - public static string HorseTackButtonFormat; - public static string HorsePetButtonFormat; - public static string HorseProfileButtonFormat; - - public static string HorseNoAutoSell; - public static string HorseAutoSellOthersFormat; - public static string HorseAutoSellFormat; - public static string HorseAutoSellPriceFormat; - public static string HorseCantAutoSellTacked; - public static string HorseCurrentlyCategoryFormat; - public static string HorseMarkAsCategory; - public static string HorseStats; - public static string HorseTacked; - public static string HorseTackFormat; - public static string HorseCompanion; - public static string HorseCompanionFormat; - public static string HorseNoCompanion; - - public static string HorseAdvancedStatsFormat; - public static string HorseBreedDetailsFormat; - public static string HorseHeightRangeFormat; - public static string HorsePossibleColorsFormat; - public static string HorseReleaseButton; - public static string HorseOthers; - - public static string HorseDescriptionEditFormat; - - public static string HorseSavedProfileMessageFormat; - public static string HorseProfileMessageTooLongError; - public static string HorseNameTooLongError; - public static string HorseNameViolationsError; - public static string HorseProfileMessageProfileError; - - - public static string HorseCatchTooManyHorsesMessage; - public static string HorseEquipTackMessageFormat; - public static string HorseUnEquipTackMessageFormat; - public static string HorseStopRidingMessage; - - public static string HorsePetMessageFormat; - public static string HorsePetTooHappy; - public static string HorsePetTooTired; - public static string HorseSetNewCategoryMessageFormat; - - public static string HorseAutoSellMenuFormat; - public static string HorseIsAutoSell; - public static string HorseAutoSellConfirmedFormat; - public static string HorseAutoSellRemoved; - - public static string HorseChangeAutoSell; - public static string HorseSetAutoSell; - public static string HorseCompanionChangeButton; - - public static string HorseTackFailAutoSell; - public static string HorseAreYouSureYouWantToReleaseFormat; - public static string HorseCantReleaseTheHorseYourRidingOn; - public static string HorseReleasedMeta; - public static string HorseReleasedBy; - - // All Stats (basic) - public static string HorseAllBasicStats; - public static string HorseBasicStatEntryFormat; - - // All Stats (all) - - public static string HorseAllStatsHeader; - public static string HorseNameEntryFormat; - public static string HorseBasicStatsCompactedFormat; - public static string HorseAdvancedStatsCompactedFormat; - public static string HorseAllStatsLegend; - - // Horse compainion menu - public static string HorseCompanionMenuHeaderFormat; - public static string HorseCompnaionMenuCurrentCompanionFormat; - public static string HorseCompanionEntryFormat; - public static string HorseCompanionEquipMessageFormat; - public static string HorseCompanionRemoveMessageFormat; - public static string HorseCompanionMenuCurrentlyAvalibleCompanions; - - // Horse Feed Menu - public static string HorseCurrentStatusFormat; - public static string HorseHoldingHorseFeed; - public static string HorsefeedFormat; - public static string HorseNeighsThanks; - public static string HorseCouldNotFinish; - - public static string HorseFeedPersonalityIncreased; - public static string HorseFeedInteligenceIncreased; - public static string HorseFeedMagicBeanFormat; - public static string HorseFeedMagicDropletFormat; - - // Tack horse menu - public static string HorseTackedAsFollowsFormat; - public static string HorseUnEquipSaddleFormat; - public static string HorseUnEquipSaddlePadFormat; - public static string HorseUnEquipBridleFormat; - public static string HorseTackInInventory; - public static string HorseLlamaTackInInventory; - public static string HorseCamelTackInInventory; - public static string HorseEquipFormat; - public static string BackToHorse; - - // Treasure - public static string PirateTreasureFormat; - public static string PotOfGoldFormat; - - // Farrier - public static string FarrierCurrentShoesFormat; - public static string FarrierApplyIronShoesFormat; - public static string FarrierApplySteelShoesFormat; - public static string FarrierShoeAllFormat; - - public static string FarrierPutOnSteelShoesMessageFormat; - public static string FarrierPutOnIronShoesMessageFormat; - public static string FarrierPutOnSteelShoesAllMesssageFormat; - public static string FarrierShoesCantAffordMessage; - - // Groomer - - public static string GroomerBestToHisAbilitiesFormat; - public static string GroomerCannotAffordMessage; - public static string GroomerBestToHisAbilitiesALL; - public static string GroomerDontNeed; - - public static string GroomerHorseCurrentlyAtFormat; - public static string GroomerApplyServiceFormat; - public static string GroomerApplyServiceForAllFormat; - public static string GroomerCannotImprove; - - // Vet - public static string VetServiceHorseFormat; - public static string VetSerivcesNotNeeded; - public static string VetApplyServicesFormat; - - public static string VetApplyServicesForAllFormat; - public static string VetFullHealthRecoveredMessageFormat; - - public static string VetServicesNotNeededAll; - public static string VetAllFullHealthRecoveredMessage; - public static string VetCannotAffordMessage; - - // Barn - public static string BarnHorseFullyFedFormat; - public static string BarnCantAffordService; - public static string BarnAllHorsesFullyFed; - public static string BarnServiceNotNeeded; - - public static string BarnHorseStatusFormat; - public static string BarnHorseMaxed; - public static string BarnLetHorseRelaxFormat; - public static string BarnLetAllHorsesReleaxFormat; - - // Horse Whisperer - - public static string WhispererHorseLocateButtonFormat; - public static string WhispererServiceCostYouFormat; - - public static string WhispererServiceCannotAfford; - public static string WhispererSearchingAmoungHorses; - public static string WhispererNoneFound; - public static string WhispererHorsesFoundFormat; - - // Consume - - public static string ConsumeItemFormat; - public static string ConsumedButMaxReached; - - // Inventory - public static string InventoryItemFormat; - public static string InventoryHeaderFormat; - - public static string ItemDropButton; - public static string ItemInformationButton; - public static string ItemInformationByIdButton; - public static string ItemConsumeButton; - public static string ItemThrowButton; - public static string ItemOpenButton; - public static string ItemUseButton; - public static string ItemWearButton; - public static string ItemReadButton; - - public static string ShopEntryFormat; - public static string ShopBuyButton; - public static string ShopBuy5Button; - public static string ShopBuy25Button; - - public static string SellButton; - public static string SellAllButton; - - // Highscore List - public static string HighscoreHeaderMeta; - public static string HighscoreFormat; - public static string BestTimeFormat; - - public static string GameBestTimeFormat; - public static string GameBestTimeHeaderFormat; - public static string GameHighScoreHeaderFormat; - public static string GameHighScoreFormat; - public static string GameWinLooseHeaderFormat; - public static string GameWinLooseFormat; - - // Awards - - public static string AwardOthersFormat; - public static string AwardHeader; - public static string NoAwards; - public static string AwardFormat; - - // Wishing Well - - public static string NoWishingCoins; - public static string WishingWellMeta; - public static string YouHaveWishingCoinsFormat; - - public static string TossedCoin; - public static string WishItemsFormat; - public static string WishMoneyFormat; - public static string WishWorldPeaceFormat; - public static string WorldPeaceOnlySoDeep; - - - // Shop - public static string ThingsIAmSelling; - public static string ThingsYouSellMe; - public static string InfinitySign; - public static string CantAfford1; - public static string CantAfford5; - public static string CantAfford25; - public static string Brought1Format; - public static string Brought1ButInventoryFull; - public static string Brought5ButInventoryFull; - public static string Brought25ButInventoryFull; - public static string Brought5Format; - public static string Brought25Format; - public static string Sold1Format; - public static string SoldAllFormat; - public static string CannotSellYoudGetTooMuchMoney; - - // Bank - public static string BankMadeInIntrestFormat; - public static string BankCarryingFormat; - public static string BankWhatToDo; - public static string BankOptionsFormat; - - public static string BankWithdrewMoneyFormat; - public static string BankDepositedMoneyFormat; - - public static string BankCantHoldThisMuch; - public static string BankYouCantHoldThisMuch; - - // Npc - public static string NpcStartChatFormat; - public static string NpcNoChatpoints; - public static string NpcChatpointFormat; - public static string NpcReplyFormat; - public static string NpcInformationButton; - public static string NpcTalkButton; - public static string NpcInformationFormat; - - // Sec Codes - public static string InvalidSecCodeError; - public static string YouEarnedAnItemFormat; - public static string YouEarnedAnItemButInventoryWasFullFormat; - public static string YouLostAnItemFormat; - public static string YouEarnedMoneyFormat; - public static string BeatHighscoreFormat; - public static string BeatBestHighscore; - public static string BeatBestTimeFormat; - - // Abuse Report - public static string AbuseReportMetaFormat; - public static string AbuseReportReasonFormat; - public static string AbuseReportPlayerNotFoundFormat; - public static string AbuseReportFiled; - public static string AbuseReportProvideValidReason; - - // Player List - public static string PlayerListAbuseReport; - public static string PlayerListHeader; - public static string PlayerListSelectFromFollowing; - public static string PlayerListOfBuddiesFormat; - public static string PlayerListOfNearby; - public static string PlayerListOfPlayersFormat; - public static string PlayerListOfPlayersAlphabetically; - public static string PlayerListMapAllBuddiesForamt; - public static string PlayerListMapAllPlayersFormat; - - public static string MuteButton; - public static string HearButton; - - public static int ThreeMonthSubscripitionIcon; - public static int YearSubscriptionIcon; - public static int NewUserIcon; - public static int MonthSubscriptionIcon; - public static int AdminIcon; - public static int ModeratorIcon; - - public static string BuddyListHeader; - public static string BuddyListOnlineBuddyEntryFormat; - public static string BuddyListOfflineBuddys; - public static string BuddyListOfflineBuddyEntryFormat; - - public static string NearbyPlayersListHeader; - public static string PlayerListEntryFormat; - - public static string PlayerListAllHeader; - public static string PlayerListAllAlphabeticalHeader; - - public static string PlayerListIdle; - public static string PlayerListIconFormat; - public static string PlayerListIconInformation; - - - - // Meta - public static string IsleFormat; - public static string TownFormat; - public static string AreaFormat; - public static string LocationFormat; - public static string PlayersHere; - public static string NearbyPlayers; - public static string North; - public static string East; - public static string South; - public static string West; - - public static string TileFormat; - public static string Seperator; - public static string VenusFlyTrapFormat; - public static string PasswordEntry; - - public static string ExitThisPlace; - public static string BackToMap; - public static string BackToMapHorse; - public static string LongFullLine; - public static string MetaTerminator; - public static string R1; - - // Pawneer - public static string PawneerUntackedHorsesICanBuy; - public static string PawneerHorseFormat; - public static string PawneerOrderMeta; - public static string PawneerHorseConfirmationFormat; - public static string PawneerHorseSoldMessagesFormat; - public static string PawneerHorseNotFound; - - public static string PawneerOrderSelectBreed; - public static string PawneerOrderBreedEntryFormat; - - public static string PawneerOrderSelectColorFormat; - public static string PawneerOrderColorEntryFormat; - - public static string PawneerOrderSelectGenderFormat; - public static string PawneerOrderGenderEntryFormat; - - public static string PawneerOrderHorseFoundFormat; - - // Shortcuts - public static string NoTelescope; - - // Drawing room - public static string DrawingLastToDrawFormat; - public static string DrawingContentsSavedInSlotFormat; - public static string DrawingContentsLoadedFromSlotFormat; - public static string DrawingPlzClearLoad; - public static string DrawingPlzClearDraw; - public static string DrawingNotSentNotSubscribed; - public static string DrawingCannotLoadNotSubscribed; - - // Birckpoet - public static string LastPoetFormat; - - // Multiroom - public static string MultiroomPlayersParticipating; - public static string MultiroomParticipentFormat; - - // Inn - public static string InnBuyMeal; - public static string InnBuyRest; - public static string InnItemEntryFormat; - public static string InnEnjoyedServiceFormat; - public static string InnFullyRested; - public static string InnCannotAffordService; - - // Fountain - public static string FountainMeta; - public static string FountainDrankYourFull; - public static string FountainDroppedMoneyFormat; - - // Login Fail messages - public static string LoginFailedReasonBanned; - public static string LoginFailedReasonBannedIpFormat; - - // Disconnect Messages - public static string KickReasonBanned; - public static string KickReasonKicked; - public static string KickReasonDuplicateLogin; - public static string KickReasonIdleFormat; - public static string KickReasonNoTime; - - // Riddler - public static string RiddlerEnterAnswerFormat; - public static string RiddlerCorrectAnswerFormat; - public static string RiddlerIncorrectAnswer; - public static string RiddlerAnsweredAll; - - // Password - public static string IncorrectPasswordMessage; - - // Swf - public static string BoatCutscene; - public static string WagonCutscene; - public static string BallonCutscene; - - // Click - public static string NothingInterestingHere; - - // HISP Help Command - public static string FormatHispHelpUsage(char commandPrefix, string commandName, string commandUsage) - { - return HISPHelpCommandUsageFormat.Replace("%PREFIX%", commandPrefix.ToString()).Replace("%COMMANDNAME%", commandName).Replace("%USAGE%", ChatMsg.EscapeMessage(commandUsage)); - } - - // Violations - public static string FormatProfileSavedBlocked(string reasons) - { - return ProfileViolationFormat.Replace("%REASON%", reasons); - } - public static string FormatRanchDesriptionBlocked(string reasons) - { - return RanchSavedDescrptionViolationsErrorFormat.Replace("%REASON%", reasons); - } - public static string FormatHorseProfileBlocked(string reasons) - { - return HorseProfileMessageProfileError.Replace("%REASON%", reasons); - } - - // Throwables - public static string FormatModSplatterBallAwardedOther(string username) - { - return ModSplatterballEarnedOtherFormat.Replace("%USERNAME%", username); - } - public static string FormatModSplatterBallAwardedYou(string username) - { - return ModSplatterballEarnedYouFormat.Replace("%USERNAME%", username); - } - public static string FormatThrownItemMessage(string itemFormat, string username) - { - return itemFormat.Replace("%USERNAME%", username); - } - - // Random Events - public static string FormatRandomEvent(string txt, int moneyEarned, string horseName) - { - return txt.Replace("%HORSENAME%", horseName).Replace("%MONEYEARNED%", "$" + moneyEarned.ToString("N0", CultureInfo.InvariantCulture).Replace("-", "")); - } - - // Event : Water Ballon Game - public static string FormatWaterBalloonGameWinner(string username, int timesHit) - { - return EventWinnerWaterBalloonGameFormat.Replace("%USERNAME%", username).Replace("%AMOUNT%", timesHit.ToString("N0", CultureInfo.InvariantCulture)); - } - - // Event : Real Time Quiz - public static string FormatEventRealTimeQuizMeta(int questionNo, int totalMistakes, string category, string question) - { - return EventMetaRealTimeQuizFormat.Replace("%QUESTIONNUMBER%", questionNo.ToString()).Replace("%MISTAKES%", totalMistakes.ToString()).Replace("%CATEGORY%", category).Replace("%QUESTIONTEXT%", question); - } - public static string FormatEventRealTimeQuizBonus(int bonusMoney) - { - return EventBonusRealTimeQuizFormat.Replace("%MONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatEventRealTimeQuizWinBonus(int bonusMoney) - { - return EventWinBonusRealTimeQuizFormat.Replace("%MONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatEventRealTimeQuizWin(string winner) - { - return EventWinRealTimeQuizFormat.Replace("%USERNAME%", winner); - } - - - // Event : Tack Shop Giveaway - public static string FormatEventTackShopGiveawayEnd(string shopName, string townName) - { - return EventEndTackShopGiveawayFormat.Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); - } - public static string FormatEventTackShopGiveawayWon(string playerName, string breed, string shopName, string townName, int totalPlayersAt) - { - return EventWonTackShopGiveawayFormat.Replace("%PLAYERNAME%", playerName).Replace("%BREED%", breed).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName).Replace("%PLAYERCOUNT%", totalPlayersAt.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatEventTackShopGiveaway1Min(string color, string breed, string gender, string shopName, string townName) - { - return Event1MinTackShopGiveawayFormat.Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%GENDER%", gender).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); - } - public static string FormatEventTackShopGiveawayStart(string color, string breed, string gender, string shopName, string townName) - { - return EventStartTackShopGiveawayFormat.Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%GENDER%", gender).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); - } - - // Event : Real Time Riddle - public static string FormatEventRealTimeRiddleStart(string riddleText) - { - return EventStartRealTimeRiddleFormat.Replace("%RIDDLETEXT%", riddleText); - } - public static string FormatEventRealTimeRiddleWonForOthers(string winnerUserName) - { - return EventWonRealTimeRiddleForOthersFormat.Replace("%PLAYERNAME%", winnerUserName); - } - public static string FormatEventRealTimeRiddleWonForYou(int prize) - { - return EventWonRealTimeRiddleForYouFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); - } - - // Prison Command - public static string FormatPrisonCommandMessage(string username) - { - return PrisonIsleCommandMessageFormat.Replace("%USERNAME%", username.ToUpper()); - } - - // Rules Command - public static string FormatRulesCommandMessage(string username) - { - return RulesIsleCommandMessageFormat.Replace("%USERNAME%", username.ToUpper()); - } - - // Mute Command - public static string FormatStoppedMutingPlayer(string username) - { - return StoppedMutingPlayerFormat.Replace("%USERNAME%", username); - } - public static string FormatNowMutingPlayer(string username) - { - return NowMutingPlayerFormat.Replace("%USERNAME%", username); - } - public static string FormatCantSendYourIgnoringPlayer(string username) - { - return CantSendPrivateMessagePlayerMutedFormat.Replace("%USERNAME%", username); - } - public static string FormatPlayerIgnoringAllPms(string username) - { - return PlayerIgnoringAllPrivateMessagesFormat.Replace("%USERNAME%", username); - } - public static string FormatPlayerIgnoringYourPms(string username) - { - return PlayerIgnoringYourPrivateMessagesFormat.Replace("%USERNAME%", username); - } - - - // AUTO SELL - - public static string FormatAutoSellSoldOffline(string horseName, int price, string toUsername) - { - return AutoSellYouSoldHorseOfflineFormat.Replace("%HORSE%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", toUsername); - } - - public static string FormatAutoSellSold(string horseName, int price, string toUsername) - { - return AutoSellYouSoldHorseFormat.Replace("%HORSE%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", toUsername); - } - - public static string FormatAutoSellSuccess(string horseName) - { - return AutoSellSuccessFormat.Replace("%HORSENAME%", horseName); - } - - // MULTIHORSES - public static string FormatMultiHorses(int placing, string horseName, string horseBreed, string swf) - { - return MultiHorseFormat.Replace("%NUMBER%", placing.ToString()).Replace("%HORSENAME%", horseName).Replace("%BREED%", horseBreed).Replace("%SWF%", swf); - } - - // 2PLAYER - public static string Format2PlayerRecordLose(string gameTitle) - { - return TwoPlayerRecordedLossFormat.Replace("%GAMETITLE%", gameTitle); - } - public static string Format2PlayerRecordWin(string gameTitle) - { - return TwoPlayerRecordedWinFormat.Replace("%GAMETITLE%", gameTitle); - } - public static string Format2PlayerStartingGame(string playerName) - { - return TwoPlayerStartingUpGameFormat.Replace("%PLAYERNAME%", playerName); - } - public static string Format2PlayerYouInvited(string playerName) - { - return TwoPlayerYourInvitedFormat.Replace("%PLAYERNAME%", playerName); - } - public static string Format2PlayerYourInvited(string playerName) - { - return TwoPlayerYourInvitedFormat.Replace("%PLAYERNAME%", playerName); - } - public static string Format2PlayerGameInProgress(string playerName) - { - return TwoPlayerGameInProgressFormat.Replace("%PLAYERNAME%", playerName); - } - public static string Format2PlayerPlayingWith(string playerName) - { - return TwoPlayerPlayingWithFormat.Replace("%PLAYERNAME%", playerName); - } - public static string Format2PlayerAcceptButton(int playerId) - { - return TwoPlayerAcceptButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string Format2PlayerInviteButton(int playerId) - { - return TwoPlayerInviteButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string Format2PlayerPlayerName(string playerName) - { - return TwoPlayerPlayerFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatAddBuddyRemoveBuddy(string buddyName) - { - return AddBuddyDeleteBuddyFormat.Replace("%PLAYERNAME%", buddyName); - } - - - public static string FormatTagTotalBuddies(int count) - { - return TagOtherBuddiesOnlineFormat.Replace("%TOTALBUDDIESON%", count.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTagYourIt(string taggedPlayer, string tagger) - { - return TagYourItFormat.Replace("%PLAYERNAME%", taggedPlayer).Replace("%USERNAME%", tagger); - } - public static string FormatAddBuddyConfirmed(string playername) - { - return AddBuddyYourNowBuddiesFormat.Replace("%PLAYERNAME%", playername); - } - public static string FormatAddBuddyPendingOther(string playername) - { - return AddBuddyOtherPendingFormat.Replace("%PLAYERNAME%", playername); - } - public static string FormatOtherNoCompetitionGear(string pronoun) - { - return NoCompetitionGearOther.Replace("%PRONOUN%", pronoun); - } - public static string FormatOtherCompetitionGear(string pronoun) - { - return CompetitionGearSelectedOther.Replace("%PRONOUN%", pronoun); - } - public static string FormatOtherJewelerySelected(string pronoun) - { - return JewelrySelectedOther.Replace("%PRONOUN%", pronoun); - } - public static string FormatOtherNoJewelery(string pronoun) - { - return NoJewerlyEquippedOther.Replace("%PRONOUN%", pronoun); - } - public static string FormatOtherHorsesMeta(string pronoun) - { - return StatsOtherHorses.Replace("%PRONOUN%", pronoun); - } - - // Socials - public static string FormatSocialButton(int socialId, string buttonName) - { - string id = "" + Convert.ToChar(0x21 + socialId); - return SocialButton.Replace("%ID%", id).Replace("%SOCIALNAME%", buttonName); - } - public static string FormatSocialMessage(string socialMsg, string targetName, string senderName) - { - return SocialMessageFormat.Replace("%SOCIALMSG%", socialMsg.Replace("%TARGETNAME%", targetName).Replace("%SENDERNAME%", senderName)); - } - public static string FormatSocialMenuType(string type) - { - return SocialTypeFormat.Replace("%TYPE%", Helper.CapitalizeFirstLetter(type.ToLower())); - } - - // Trading - - public static string FormatTradeYouReceived(int money) - { - return TradeYouReceivedMoneyMessageFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTradeYouSpent(int money) - { - return TradeYouSpentMoneyMessageFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTradePlayerCantHandleMoreHorses(string playerName) - { - return TradeOtherPlayerCantHandleMoreHorsesFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatTradeCanceledByPlayer(string playerName) - { - return TradeCanceledByOtherPlayerFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatTradeItemOfferTooMuch(int quantity, int enteredAmount) - { - return TradeItemOfferTooMuchFormat.Replace("%QUANTITY%", quantity.ToString()).Replace("%ENTEREDAMOUNT%", enteredAmount.ToString()); - } - public static string FormatTradeOfferMoneySubmenu(int currentOffer) - { - return TradeMoneyOfferSubmenuFormat.Replace("%CURRENTMONEYOFFER%", currentOffer.ToString()); - } - public static string FormatTradeOfferItemSubmenu(int quantity) - { - return TradeItemOfferSubmenuFormat.Replace("%QUANTITY%", quantity.ToString()); - } - public static string FormatTradeOfferItem(int itemIconId, string itemName, int itemCount, int itemId) - { - return TradeOfferItemFormat.Replace("%ICONID%", itemIconId.ToString()).Replace("%ITEMNAME%", itemName).Replace("%ITEMCOUNT%", itemCount.ToString()).Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatTradeOfferHorse(string horseName, bool tacked, int horseRandomId) - { - return TradeOfferHorseFormat.Replace("%HORSENAME%", horseName).Replace("%ISTACKED%", tacked ? Messages.TradeOfferHorseTacked : "").Replace("%HORSERANDOMID%", horseRandomId.ToString()); - } - public static string FormatTradeWhatToOffer(string playerName) - { - return TradeWhatToOfferFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatTradeHorseOffer(string horseName, int horseRandomId) - { - return TradeOfferingHorseFormat.Replace("%HORSENAME%", horseName).Replace("%HORSERANDOMID%", horseRandomId.ToString()); - } - public static string FormatTradeItemOffer(int iconId, int quantity, string item) - { - return TradeOfferingItemFormat.Replace("%ICONID%", iconId.ToString()).Replace("%TOTAL%", quantity.ToString()).Replace("%ITEM%", item); - } - public static string FormatTradeMoneyOffer(int amount) - { - return TradeOfferingMoneyFormat.Replace("%MONEY%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTradeOtherOffering(string playerName) - { - return TradeOtherOfferingFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatTradeYourOffering(string playerName) - { - return TradeYourOfferingFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatTradeWithPlayer(string playerName) - { - return TradeWithPlayerFormat.Replace("%PLAYERNAME%", playerName); - } - - // Player Interactions - public static string FormatPmButton(string playerName) - { - return PmButton.Replace("%PLAYERNAME%", playerName); - } - public static string FormatPlayerHereTagButton(int playerId) - { - return PlayerHereTagButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerHereBuddyButton(int playerId) - { - return PlayerHereAddBuddyButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerHereTradeButton(int playerId) - { - return PlayerHereTradeButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerHereSocialButtton(int playerId) - { - return PlayerHereSocialButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerHereProfileButton(int playerId) - { - return PlayerHereProfileButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerHereMenu(int playerIcon, string playerName, string button) - { - string vstr = "^I" + playerIcon.ToString(); - if (playerIcon == -1) - vstr = ""; - return PlayerHereMenuFormat.Replace("%PLAYERICON%", vstr).Replace("%PLAYERNAME%", playerName).Replace("%BUTTONS%", button); - } - - // Auctions - public static string FormatAuctionSoldTo(string playerName, int money) - { - return AuctionSoldToFormat.Replace("%PLAYERNAME%", playerName).Replace("%PRICE%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAuctionGoingTo(int timeRemaining, string winningPlayer, int winningBid, int auctionRandomId) - { - return AuctionGoingToFormat.Replace("%TIME%", timeRemaining.ToString()).Replace("%WINNINGPLAYER%", winningPlayer).Replace("%WINNINGBID%", winningBid.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AUCTIONRANDOMID%", auctionRandomId.ToString()); - } - public static string FormatAuctionHorseSold(int money) - { - return AuctionHorseSoldFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAuctionBroughtHorse(int money) - { - return AuctionYouBroughtAHorseFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAuctionYourOutbidBy(string username, int amount) - { - return AuctionYouveBeenOutbidFormat.Replace("%USERNAME%", username).Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAuctionBidRaised(int prevAmount, int newAmount) - { - return AuctionBidRaisedFormat.Replace("%AMOUNT%", prevAmount.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NEWAMOUNT%", newAmount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAuctionHorseListEntry(string horseName, bool tacked, int randomId) - { - return AuctionHorseListEntryFormat.Replace("%HORSENAME%", horseName).Replace("%TACKEDORNO%", tacked ? Messages.AuctionHorseIsTacked : "").Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatAuctionHorseEntry(string username, string color, string breedName, string gender, int experience, string lookButton) - { - return AuctionHorseEntryFormat.Replace("%USERNAME%", username).Replace("%COLOR%", color).Replace("%BREED%", breedName).Replace("%GENDER%", gender).Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)).Replace("%LOOKBUTTON%", lookButton); - - } - public static string FormatAuctionViewHorseButton(int randomId) - { - return AuctionHorseViewButton.Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatAuctionPlayersHere(string usernames) - { - return AuctionPlayersHereFormat.Replace("%USERNAMES%", usernames); - } - - - public static string FormatHorseReturnedToOwner(string horseName) - { - return HorseLeaserReturnedToOwnerFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatHorseReturnedToUniter(string horseName) - { - return HorseLeaserReturnedToUniterFormat.Replace("%HORSENAME%", horseName); - } - - public static string FormatArenaCompetingHorseEntry(string userName, string horseName, int horseRandomId) - { - return ArenaCompetingHorseFormat.Replace("%USERNAME%", userName).Replace("%HORSENAME%", horseName).Replace("%HORSERANDOMID%", horseRandomId.ToString()); - } - public static string FormatArenaEnterHorseButton(string horseName, int entryCost, int horseRandomId) - { - return ArenaEnterHorseFormat.Replace("%HORSENAME%", horseName).Replace("%ENTRYCOST%", entryCost.ToString("N0", CultureInfo.InvariantCulture)).Replace("%HORSERANDOMID%", horseRandomId.ToString()); - } - public static string FormatArenaCurrentlyTakingEntries(int hour, int minute, string amOrPm, int timeUntil) - { - return ArenaCurrentlyTakingEntriesFormat.Replace("%HOUR%", hour.ToString()).Replace("%MINUTE%", minute.ToString("00")).Replace("%AMORPM%", amOrPm).Replace("%TIMEUNTIL%", timeUntil.ToString()); - } - public static string FormatArenaEventName(string eventName) - { - return ArenaEventNameFormat.Replace("%EVENTNAME%", eventName); - } - public static string FormatArenaOnlyWinnerWinsMessage(int experience) - { - return ArenaOnlyWinnerWins.Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatArenaYouWinMessage(int prizeMoney, int experience) - { - return ArenaYouWinFormat.Replace("%PRIZE%", prizeMoney.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatRanchForcefullySoldMessage(int amount) - { - return RanchForcefullySoldFormat.Replace("%AMOUNT%", amount.ToString()); - } - public static string FormatArenaYourScore(int score) - { - return ArenaYourScoreFormat.Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatArenaPlacing(string place, string playerName, int score) - { - return ArenaPlacingFormat.Replace("%PLACE%", place).Replace("%USERNAME%", playerName).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatHorseGamesEntry(int placing, string horseName, string Swf) - { - return HorseGamesHorseEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%HORSENAME%", horseName).Replace("%SWF%", Swf); - } - public static string FormatCityHallCantFindPlayerMessage(string playerName) - { - return CityHallCantFindPlayerMessageFormat.Replace("%PLAYERNAME%", playerName); - } - public static string FormatCityHallTopExperiencedHorses(int placing, int experiencePoints, string playerName, string horseName) - { - return CityHallExperiencedHorseEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%EXP%", experiencePoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName); - } - public static string FormatCityHallTopMinigamePlayers(int placing, int gamesPlayed, string playerName) - { - return CityHallMinigamePlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%GAMESPLAYED%", gamesPlayed.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); - } - public static string FormatCityHallTopExperiencedPlayersEntry(int placing, int experiencePoints, string playerName) - { - return CityHallExperiencePlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%EXP%", experiencePoints.ToString()).Replace("%PLAYERNAME%", playerName); - } - public static string FormatCityHallTopAdventurousPlayersEntry(int placing, int questPoints, string playerName) - { - return CityHallAdventurousPlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); - } - public static string FormatCityHallTopSpoiledHorseEntry(int spoiled, string playerName, string horseName) - { - return CityHallSpoiledHorseEntryFormat.Replace("%SPOILED%", spoiled.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName); - } - public static string FormatCityHallTopPlayerEntry(int placing, double money, string playerName) - { - return CityHallRichPlayerFormat.Replace("%PLACING%", placing.ToString()).Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); - } - public static string FormatCityHallTopRanchEntry(int placing, string playerName, int value, string mapxy) - { - return CityHallRanchEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%VALUE%", value.ToString("N0", CultureInfo.InvariantCulture)).Replace("%MAPXY%", mapxy); - } - public static string FormatCityHallBestExpAutoSellEntry(int exp, string playerName, string horseName, int price, string color, string breed) - { - return CityHallMostExpAutoSellHorseEntryFormat.Replace("%EXP%", exp.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%COLOR%", color).Replace("%BREED%", breed); - } - public static string FormatCityHallCheapAutoSellEntry(int price, string playerName, string horseName, string color, string breed, int exp) - { - return CityHallCheapestAutoSellHorseEntryFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatCityHallSendMailMessage(string playerName) - { - return CityHallSentMessageFormat.Replace("%PLAYERNAME%", playerName); - } - - - - public static string FormatMailReadMessage(string fromUser, string date, string subject, string message, int randomId) - { - return MailReadMetaFormat.Replace("%PLAYERNAME%", fromUser).Replace("%DATE%", date).Replace("%SUBJECT%", subject).Replace("%MESSAGE%", message).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatMailEntry(string subject, string fromUser, int randomId) - { - return MailEntryFormat.Replace("%SUBJECT%", subject).Replace("%PLAYERNAME%", fromUser).Replace("%RANDOMID%", randomId.ToString()); - } - - public static string FormatTrainerCantTrainAgainIn(int time) - { - return TrainerCantTrainAgainInFormat.Replace("%TIME%", time.ToString()); - } - public static string FormatTrainerFullyTrained(string horseName, int curStat) - { - return TrainerHorseFullyTrainedFormat.Replace("%HORSENAME%", horseName).Replace("%STAT%", curStat.ToString()); - } - public static string FormatTrainerTrainInEntry(string horseName, int curStat, int maxStat, int randomId) - { - return TrainerHorseEntryFormat.Replace("%HORSENAME%", horseName).Replace("%CURSTAT%", curStat.ToString()).Replace("%MAXSTAT%", maxStat.ToString()).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatTrainerHeaderFormat(string stat, int price, int amountInStat, int expamount) - { - return TrainerHeaderFormat.Replace("%STAT%", stat).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", amountInStat.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXPAMOUNT%", expamount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTrainedInStatFormat(string horseName, string stat) - { - return TrainedInStatFormat.Replace("%HORSENAME%", horseName).Replace("%STAT%", stat); - } - public static string FormatHorseFeedMagicDropletUsed(string oldColor, string newColor) - { - return HorseFeedMagicDropletFormat.Replace("%PREVCOLOR%", oldColor).Replace("%NEWCOLOR%", newColor); - } - public static string FormatHorseFeedMagicBeanUsed(double oldH, double newH) - { - return HorseFeedMagicBeanFormat.Replace("%PREVHANDS%", oldH.ToString(CultureInfo.InvariantCulture)).Replace("%NEWHANDS%", newH.ToString(CultureInfo.InvariantCulture)); - } - public static string FormatSantaOpenPresent(string itemName) - { - return SantaItemOpenedFormat.Replace("%ITEM%", itemName); - } - public static string FormatSantaItemEntry(int iconId, string itemName, int randomId) - { - return SantaWrapItemFormat.Replace("%ICONID%", iconId.ToString()).Replace("%NAME%", itemName).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatPawneerOrderHorseFound(string breedName, string color, string gender, int height, int personality, int inteligence) - { - return PawneerOrderHorseFoundFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color).Replace("%GENDER%", gender).Replace("%HEIGHT%", height.ToString()).Replace("%PERSONALITY%", personality.ToString()).Replace("%INTELIGENCE%", inteligence.ToString()); - } - public static string FormatPawneerOrderGenderEntry(string genderName, string genderInternal) - { - return PawneerOrderGenderEntryFormat.Replace("%GENDERNAME%", genderName).Replace("%GENDERINTERNAL%", genderInternal); - } - public static string FormatPawneerOrderSelectGender(string color, string breedName) - { - return PawneerOrderSelectGenderFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color); - } - - public static string FormatPawneerOrderColorEntry(string color) - { - return PawneerOrderColorEntryFormat.Replace("%COLOR%", color); - } - public static string FormatPawneerOrderSelectColor(string breedName) - { - return PawneerOrderSelectColorFormat.Replace("%BREEDNAME%", breedName); - } - public static string FormatPawneerOrderBreedEntry(string breedName, int breedId) - { - return PawneerOrderBreedEntryFormat.Replace("%BREEDNAME%", breedName).Replace("%BREEDID%", breedId.ToString()); - } - public static string FormatPawneerHorseEntry(string horseName, int price, int randomId) - { - return PawneerHorseFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatPawneerConfirmPawn(string breedName, int randomId) - { - return PawneerHorseConfirmationFormat.Replace("%BREEDNAME%", breedName).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatPawneerSold(string horseName, int price) - { - return PawneerHorseSoldMessagesFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - - - public static string FormatPlayerHereMessage(string playerName) - { - return ClickPlayerHereFormat.Replace("%USERNAME%", playerName); - } - - // Barn Formats - public static string FormatBarnLetAllHorsesReleax(int price) - { - return BarnLetAllHorsesReleaxFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBarnLetHorseRelax(int price, int randomId) - { - return BarnLetHorseRelaxFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatBarnHorseStatus(string horseName, int tiredness, int hunger, int thirst) - { - return BarnHorseStatusFormat.Replace("%HORSENAME%", horseName).Replace("%TIREDNESS%", tiredness.ToString()).Replace("%HUNGER%", hunger.ToString()).Replace("%THIRST%", thirst.ToString()); - } - public static string FormatBarnHorseFullyFed(string horseName) - { - return BarnHorseFullyFedFormat.Replace("%HORSENAME%", horseName); - } - // Farrier Formats - public static string FormatFarrierPutOnSteelShoesAllMesssage(int curShoes, int maxShoes) - { - return FarrierPutOnSteelShoesAllMesssageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); - } - public static string FormatFarrierPutOnIronShoesMessage(int curShoes, int maxShoes) - { - return FarrierPutOnIronShoesMessageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); - } - public static string FormatFarrierPutOnSteelShoesMessage(int curShoes, int maxShoes) - { - return FarrierPutOnSteelShoesMessageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); - } - public static string FormatFarrierApplySteelToAll(int price, int incBy) - { - return FarrierShoeAllFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()); - } - public static string FormatFarrierApplySteel(int price, int incBy, int horseRandomid) - { - return FarrierApplySteelShoesFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()).Replace("%HORSERANDOMID%", horseRandomid.ToString()); - } - public static string FormatFarrierApplyIron(int price, int incBy, int horseRandomid) - { - return FarrierApplyIronShoesFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()).Replace("%HORSERANDOMID%", horseRandomid.ToString()); - } - public static string FormatFarrierCurrentShoes(string horseName, int curShoes, int maxShoes) - { - return FarrierCurrentShoesFormat.Replace("%HORSENAME%", horseName).Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); - } - - - // Ranch Formats - - public static string FormatRanchTrainFail(string horseName, int timeout) - { - return RanchTrainCantTrainFormat.Replace("%HORSENAME%", horseName).Replace("%TIME%", timeout.ToString()); - } - public static string FormatRanchTrainBadMood(string horseName) - { - return RanchTrainBadMoodFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatRanchTrain(string horseName, int speed, int strength, int conformation, int agility, int endurance, int exp) - { - return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName).Replace("%SPEED%", speed.ToString("N0", CultureInfo.InvariantCulture)).Replace("%STRENGTH%", strength.ToString("N0", CultureInfo.InvariantCulture)).Replace("%CONFORMATION%", conformation.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AGILITY%", agility.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ENDURANCE%", endurance.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatRanchDescOthers(string description) - { - return RanchDescriptionOthersFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(description)); - } - public static string FormatRanchSoldMessage(int price) - { - return RanchSoldFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatRanchUnownedMeta(int price) - { - return RanchUnownedRanchFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatRanchClickMessage(string owner, string title) - { - return RanchClickMessageFormat.Replace("%USERNAME%", owner).Replace("%TITLE%", title); - } - public static string FormatRanchBroughtMessage(int price) - { - return RanchRanchBroughtMessageFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatRanchEditDescriptonMeta(string curTitle, string curDesc) - { - return RanchEditDescriptionMetaFormat.Replace("%RANCHTITLE%", curTitle).Replace("%RANCHDESC%", curDesc); - } - public static string FormatRanchTitle(string username, string title) - { - return RanchTitleFormat.Replace("%USERNAME%", username).Replace("%TITLE%", title); - } - public static string FormatRanchYoursDescription(string description) - { - return RanchYourDescriptionFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(description)); - } - public static string FormatBuildingEntry(string name, int price, int buildingId) - { - return RanchBuildingEntryFormat.Replace("%BUILDINGNAME%", name).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BUILDINGID%", buildingId.ToString()); - } - public static string FormatBuildingInformaton(string name, string description) - { - return RanchBuildingInformationFormat.Replace("%BUILDINGNAME%", name).Replace("%BUILINGDESCRIPTION%", description); - } - public static string FormatBuildingAlreadyPlaced(string name, int buildingId, int price) - { - return RanchBuildingAlreadyHere.Replace("%BUILDINGNAME%", name).Replace("%BUILDINGID%", buildingId.ToString()).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuildingTornDown(int price) - { - return RanchTornDownRanchBuildingFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatViewBuilding(string name, string description) - { - return RanchViewBuildingFormat.Replace("%BUILDINGNAME%", name).Replace("%BUILDINGDESC%", description); - } - public static string FormatBarn(string horseList) - { - return RanchBarnHorsesFormat.Replace("%HORSELIST%", horseList); - } - public static string FormatCurrentUpgrade(string curUpgradeName, string curUpgradeDesc, string YouCouldUpgrade, int ranchSellPrice) - { - return UpgradeCurrentUpgradeFormat.Replace("%UPGRADENAME%", curUpgradeName).Replace("%UPGRADEDESC%", curUpgradeDesc).Replace("%YOUCOULDUPGRADE%", YouCouldUpgrade).Replace("%SELLPRICE%", ranchSellPrice.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatNextUpgrade(string nextUpgrade, int cost) - { - return UpgradeNextUpgradeFormat.Replace("%NEXTUPGRADE%", nextUpgrade).Replace("%COST%", cost.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuildingBarn(int numbBarns, int numbHorses) - { - return BuildingBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuildingBigBarn(int numbBarns, int numbHorses) - { - return BuildingBigBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuildingGoldBarn(int numbBarns, int numbHorses) - { - return BuildingGoldBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuildingWindmill(int numbWindmills, int moneyEarns) - { - return BuildingWindmillFormat.Replace("%COUNT%", numbWindmills.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", moneyEarns.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTrainSuccess(string horseName) - { - return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatCantTrain(string horseName) - { - return RanchTrainCantTrainFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatRiddlerRiddle(string riddle) - { - return RiddlerEnterAnswerFormat.Replace("%RIDDLE%", riddle); - } - public static string FormatRiddlerAnswerCorrect(string reason) - { - return RiddlerCorrectAnswerFormat.Replace("%REASON%", reason); - } - public static string FormatPirateTreasure(int prize) - { - return PirateTreasureFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatPotOfGold(int prize) - { - return PotOfGoldFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatWorkshopCraftEntry(int iconId, string itemName, int price, int itemId, int craftId) - { - return WorkshopCraftEntryFormat.Replace("%ICONID%", iconId.ToString()).Replace("%ITEMNAME%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEMID%", itemId.ToString()).Replace("%CRAFTID%", craftId.ToString()); - } - public static string FormatWorkshopRequirements(string requiresTxt) - { - return WorkshopRequiresFormat.Replace("%REQUIRES%", requiresTxt); - } - public static string FormatWorkshopRequireEntry(int requiredCount, string itemNamePlural) - { - return WorkshopRequireEntryFormat.Replace("%REQCOUNT%", requiredCount.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEMNAME%", itemNamePlural); - } - - public static string FormatDrawingRoomSaved(int slot) - { - return DrawingContentsSavedInSlotFormat.Replace("%SLOT%", slot.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatDrawingRoomLoaded(int slot) - { - return DrawingContentsLoadedFromSlotFormat.Replace("%SLOT%", slot.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatLastToDraw(string username) - { - return DrawingLastToDrawFormat.Replace("%USERNAME%", username); - } - public static string FormatGroomerApplyAllService(int count, int price) - { - return GroomerApplyServiceForAllFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatGroomerApplyService(int price, int randomid) - { - return GroomerApplyServiceFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomid.ToString()); - } - public static string FormatHorseGroomCurrentlyAt(string horseName, int currentGroom, int maxGroom) - { - return GroomerHorseCurrentlyAtFormat.Replace("%HORSENAME%", horseName).Replace("%TOTAL%", currentGroom.ToString()).Replace("%MAX%", maxGroom.ToString()); - } - public static string FormatHorseGroomedToBestAbilities(string horseName) - { - return GroomerBestToHisAbilitiesFormat.Replace("%HORSENAME%", horseName); - } - - public static string FormatBookReadMeta(string author, string title, string bookText) - { - return BookReadFormat.Replace("%AUTHOR%", author).Replace("%TITLE%", title).Replace("%TEXT%", bookText); - } - public static string FormatBookEntry(string title, string author, int id) - { - return BookEntryFormat.Replace("%TITLE%", title).Replace("%AUTHOR%", author).Replace("%ID%", id.ToString()); - } - public static string FormatIpBannedMessage(string Ip) - { - return LoginFailedReasonBannedIpFormat.Replace("%IP%", Ip); - } - public static string FormatAwardEntry(int iconId, string awardName, int bonusMoney, string description) - { - return AwardEntryFormat.Replace("%ICONID%", iconId.ToString()).Replace("%AWARDNAME%", awardName).Replace("%BONUSMONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)).Replace("%DESCRIPTION%", description); - } - - public static string FormatLocationDescription(string description) - { - return LocationDescriptionFormat.Replace("%AREADESC%", description); - } - public static string FormatIslandLocation(string isleName, string mapXy) - { - return LocationIslandFormat.Replace("%ISLENAME%", isleName).Replace("%MAPXY%", mapXy); - } - public static string FormatTownLocation(string townName, string mapXy) - { - return LocationTownFormat.Replace("%TOWNNAME%", townName).Replace("%MAPXY%", mapXy); - } - public static string FormatMinigameEntry(string gameName, string mapXy) - { - return MinigameEntryFormat.Replace("%GAMENAME%", gameName).Replace("%MAPXY%", mapXy); - } - public static string FormatCompanionEntry(string itemDescription) - { - return CompanionEntryFormat.Replace("%COMPANIONDESC%", itemDescription); - } - public static string FormatCompanionViewButton(int iconid, string itemName, string swf) - { - return CompanionViewFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COMPANIONNAME%", itemName).Replace("%SWF%", swf); - } - public static string FormatTackSetPeice(string itemName, string itemDescription) - { - return TackSetPeiceFormat.Replace("%ITEMNAME%", itemName).Replace("%ITEMDESC%", itemDescription); - } - - public static string FormatTackSetView(int iconId, string tackSetName, string swf) - { - return TackViewSetFormat.Replace("%ICONID%", iconId.ToString()).Replace("%SETNAME%", tackSetName).Replace("%SWF%", swf); - } - - public static string FormatWhispererHorseFoundMeta(string mapXys) - { - return WhispererHorsesFoundFormat.Replace("%MAPXYS%", mapXys); - } - - public static string FormatWhispererPrice(int price) - { - return WhispererServiceCostYouFormat.Replace("%MONEY%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatWhispererHorseBreedButton(string breedName, int breedId) - { - return WhispererHorseLocateButtonFormat.Replace("%BREEDNAME%", breedName).Replace("%BREEDID%", breedId.ToString()); - } - - public static string FormatVetServiceHorseMeta(string horseName, int currentHealth, int maxHealth) - { - return VetServiceHorseFormat.Replace("%HORSENAME%", horseName).Replace("%CURHEALTH%", currentHealth.ToString()).Replace("%MAXHEALTH%", maxHealth.ToString()); - } - - public static string FormatVetApplyServiceMeta(int price, int randomId) - { - return VetApplyServicesFormat.Replace("%PRICE%", price.ToString()).Replace("%RANDOMID%", randomId.ToString()); - } - - public static string FormatVetApplyAllServiceMeta(int price) - { - return VetApplyServicesForAllFormat.Replace("%PRICE%", price.ToString()); - } - - public static string FormatVetHorseAtFullHealthMessage(string horseName) - { - return VetFullHealthRecoveredMessageFormat.Replace("%HORSENAME%", horseName); - } - - - public static string FormatPondNotThirsty(string horseName) - { - return PondNotThirstyFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatPondDrinkOhNoes(string horseName) - { - return PondDrinkOhNoesFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatPondDrinkFull(string horseName) - { - return PondDrinkFullFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatPondHpLowMessage(string horseName) - { - return PondCantDrinkHpLowFormat.Replace("%HORSENAME%", horseName); - } - - public static string FormatPondDrinkHorseFormat(string horseName, int thirst, int maxThirst, int randomId) - { - return PondHorseDrinkFormat.Replace("%HORSENAME%", horseName).Replace("%THIRST%", thirst.ToString()).Replace("%MAXTHIRST%", maxThirst.ToString()).Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatMudHoleGroomDestroyed(string horseName) - { - return MudHoleRuinedGroomFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatMiscStatsEntry(string statName, int value) - { - return StatMiscEntryFormat.Replace("%STAT%", statName).Replace("%COUNT%", value.ToString()); - } - public static string FormatCompactedAdvancedStats(int speed, int strength, int conformation, int agility, int endurance, int inteligence, int personality) - { - return HorseAdvancedStatsCompactedFormat.Replace("%SPEED%", speed.ToString()).Replace("%STRENGTH%", strength.ToString()).Replace("%CONFORMATION%", conformation.ToString()).Replace("%AGILITY%", agility.ToString()).Replace("%ENDURANCE%", endurance.ToString()).Replace("%INTELIGENCE%", inteligence.ToString()).Replace("%PERSONALITY%", personality.ToString()); - } - public static string FormatCompactedBasicStats(int health, int hunger, int thirst, int mood, int tiredness, int groom, int shoes) - { - int healthPercentage = Convert.ToInt32(Math.Floor((((double)health / 1000.0) * 100.0))); - int hungerPercentage = Convert.ToInt32(Math.Floor((((double)hunger / 1000.0) * 100.0))); - int thirstPercentage = Convert.ToInt32(Math.Floor((((double)thirst / 1000.0) * 100.0))); - int moodPercentage = Convert.ToInt32(Math.Floor((((double)mood / 1000.0) * 100.0))); - int tirednessPercentage = Convert.ToInt32(Math.Floor((((double)tiredness / 1000.0) * 100.0))); - int groomPercentage = Convert.ToInt32(Math.Floor((((double)groom / 1000.0) * 100.0))); - int shoesPercentage = Convert.ToInt32(Math.Floor((((double)shoes / 1000.0) * 100.0))); - - return HorseBasicStatsCompactedFormat.Replace("%HEALTH%", healthPercentage.ToString()).Replace("%HUNGER%", hungerPercentage.ToString()).Replace("%THIRST%", thirstPercentage.ToString()).Replace("%MOOD%", moodPercentage.ToString()).Replace("%TIREDNESS%", tirednessPercentage.ToString()).Replace("%GROOM%", groomPercentage.ToString()).Replace("%SHOES%", shoesPercentage.ToString()); - } - public static string FormatAllStatsEntry(string horseName, string color, string breedName, string sex, int exp) - { - return HorseNameEntryFormat.Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREEDNAME%", breedName).Replace("%SEX%", sex).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormaHorseAllBasicStatsEntry(string horseName, string color, string breedName, string sex, int exp) - { - return HorseBasicStatEntryFormat.Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREEDNAME%", breedName).Replace("%SEX%", sex).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatHorseReleasedBy(string username) - { - return HorseReleasedBy.Replace("%USERNAME%", username); - } - public static string FormatHorseAreYouSureMessage(int randomId) - { - return HorseAreYouSureYouWantToReleaseFormat.Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatHorseCompanionRemoveMessage(string horseName) - { - return HorseCompanionRemoveMessageFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatHorseCompanionEquipMessage(string horseName, string itemName) - { - return HorseCompanionEquipMessageFormat.Replace("%HORSENAME%", horseName).Replace("%ITEM%", itemName); - } - public static string FormatPlaytimeMessage(int hours) - { - return PlaytimeMessageFormat.Replace("%TOTALHOURS%", hours.ToString()); - } - public static string FormatHorseCompanionSelected(int icon, string name) - { - return HorseCompnaionMenuCurrentCompanionFormat.Replace("%ICONID%", icon.ToString()).Replace("%NAME%", name); - } - public static string FormatHorseCompanionMenuHeader(string horseName) - { - return HorseCompanionMenuHeaderFormat.Replace("%HORSENAME%", horseName); - } - public static string FormatHorseCompanionOption(int icon, int count, string name, int id) - { - return HorseCompanionEntryFormat.Replace("%ICONID%", icon.ToString()).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NAME%", name).Replace("%ID%", id.ToString()); - } - public static string FormatHorseDismountedBecauseTackedMessage(string horsename) - { - return HorseDismountedBecauseNotTackedMessageFormat.Replace("%HORSENAME%", horsename); - } - public static string FormatAutoSellConfirmedMessage(int money) - { - return HorseAutoSellConfirmedFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAutoSellMenu(int currentAutoSellPrice) - { - return HorseAutoSellMenuFormat.Replace("%AUTOSELL%", currentAutoSellPrice.ToString()); - } - public static string FormatHorseSetToNewCategory(string category) - { - return HorseSetNewCategoryMessageFormat.Replace("%CATEGORY%", category); - } - public static string FormatHorseSavedProfileMessage(string horsename) - { - return HorseSavedProfileMessageFormat.Replace("%HORSENAME%", horsename); - } - public static string FormatDescriptionEditMeta(string username, string description) - { - return HorseDescriptionEditFormat.Replace("%HORSENAME%", username).Replace("%DESCRIPTION%", description); - } - public static string FormatHorsePetMessage(string messages, int mood, int tiredness) - { - return HorsePetMessageFormat.Replace("%MESSAGES%", messages).Replace("%MOOD%", mood.ToString()).Replace("%TIREDNESS%", tiredness.ToString()); - } - public static string FormatHorseCurrentStatus(string name) - { - return HorseCurrentStatusFormat.Replace("%HORSENAME%", name); - } - - public static string FormatHorseFeedEntry(int icon, int count, string name, int randomId) - { - return HorsefeedFormat.Replace("%ICONID%", icon.ToString()).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NAME%", name).Replace("%RANDOMID%", randomId.ToString()); - } - - public static string FormatHorseRidingMessage(string name) - { - return HorseRidingMessageFormat.Replace("%HORSENAME%", name); - } - public static string FormatEquipTackMessage(string itemName, string horseName) - { - return HorseEquipTackMessageFormat.Replace("%NAME%", itemName).Replace("%HORSENAME%", horseName); - } - public static string FormatUnEquipTackMessage(string horseName) - { - return HorseUnEquipTackMessageFormat.Replace("%HORSENAME%", horseName); - } - - public static string FormatTackedAsFollowedMessage(string name) - { - return HorseTackedAsFollowsFormat.Replace("%NAME%", name); - } - public static string FormatUnEquipSaddle(int iconId, string name) - { - return HorseUnEquipSaddleFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); - } - public static string FormatUnEquipSaddlePad(int iconId, string name) - { - return HorseUnEquipSaddlePadFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); - } - public static string FormatUnEquipBridle(int iconId, string name) - { - return HorseUnEquipBridleFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); - } - public static string FormatHorseEquip(int iconId, int count, string name, int id) - { - return HorseEquipFormat.Replace("%ICONID%", iconId.ToString()).Replace("%COUNT%", count.ToString()).Replace("%NAME%", name).Replace("%ID%", id.ToString()); - } - - - - public static string FormatHorseNameYours(string name) - { - return HorseNameYoursFormat.Replace("%NAME%", name); - } - public static string FormatHorseNameOthers(string name, string username) - { - return HorseNameOthersFormat.Replace("%NAME%", name).Replace("%USERNAME%", username); - } - public static string FormatHorseDescription(string Description) - { - return HorseDescriptionFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(Description)); - } - public static string FormatHorseHandsHigh(string color, string breed,string sex, double handsHigh) - { - return HorseHandsHeightFormat.Replace("%COLOR%", color).Replace("%SEX%", sex).Replace("%HANDS%", handsHigh.ToString(CultureInfo.InvariantCulture)).Replace("%BREED%", breed); - } - public static string FormatHorseExperience(int experience) - { - return HorseExperienceEarnedFormat.Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTrainableIn(int minutes) - { - return HorseTrainableInFormat.Replace("%TIME%", minutes.ToString()); - } - public static string FormatHorseIsLeased(int minutes) - { - return HorseLeasedRemainingTimeFormat.Replace("%TIME%", minutes.ToString()); - } - - public static string FormatDisMountButton(int randomId) - { - return HorseDisMountButtonFormat.Replace("%ID%", randomId.ToString()); - } - public static string FormatMountButton(int randomId) - { - return HorseMountButtonFormat.Replace("%ID%", randomId.ToString()); - } - public static string FormatFeedButton(int randomId) - { - return HorseFeedButtonFormat.Replace("%ID%", randomId.ToString()); - } - public static string FormatTackButton(int randomId) - { - return HorseTackButtonFormat.Replace("%ID%", randomId.ToString()); - } - public static string FormatPetButton(int randomId) - { - return HorsePetButtonFormat.Replace("%ID%", randomId.ToString()); - } - public static string FormatProfileButton(int randomId) - { - return HorseProfileButtonFormat.Replace("%ID%", randomId.ToString()); - } - - public static string FormatAutoSellPrice(int money) - { - return HorseAutoSellPriceFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAutoSellOthers(int price) - { - return HorseAutoSellOthersFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAutoSell(string autoSellStr) - { - return HorseAutoSellFormat.Replace("%AUTOSELL%", autoSellStr); - } - - public static string FormatHorseCategory(string category, string markAsCategoryButtons) - { - return HorseCurrentlyCategoryFormat.Replace("%CATEGORY%", category).Replace("%MARKOPTIONS%", markAsCategoryButtons); - } - public static string FormatHorseTackEntry(int iconId, string name, int itemId) - { - return HorseTackFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatHorseCompanionEntry(int iconId, string name, string companionChangeButton, int itemId) - { - return HorseCompanionFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString()).Replace("%COMPANIONCHANGEBUTTON%", companionChangeButton); - } - - public static string FormatHorseAdvancedStats(int spoiled, int magicUsed) - { - return HorseAdvancedStatsFormat.Replace("%SPOILED%", spoiled.ToString()).Replace("%MAGICUSED%", magicUsed.ToString()); - } - public static string FormatHorseBreedDetails(string breedName, string description) - { - return HorseBreedDetailsFormat.Replace("%BREED%", breedName).Replace("%DESCRIPTION%", description); - } - public static string FormatHorseHeight(double minHeight, double maxHeight) - { - return HorseHeightRangeFormat.Replace("%MIN%", minHeight.ToString()).Replace("%MAX%", maxHeight.ToString()); - } - public static string FormatHorseReleaseButton(string type) - { - return HorseReleaseButton.Replace("%TYPE%", type); - } - public static string FormatPossibleColors(string[] colors) - { - return HorsePossibleColorsFormat.Replace("%COLORS%", String.Join(",", colors)); - } - - public static string FormatHorseCategoryChangedMessage(string newCategory) - { - return UpdateHorseCategory.Replace("%CATEGORY%", newCategory); - } - public static string FormatHorseEntry(int numb, string horseName, string breedName, int randomId, bool hasAutoSell) - { - return HorseEntryFormat.Replace("%NUMB%", numb.ToString()).Replace("%NAME%", horseName).Replace("%BREED%", breedName).Replace("%ID%", randomId.ToString()).Replace("%ISAUTOSELL%", hasAutoSell ? HorseIsAutoSell : ""); - } - public static string FormatHorseHeader(int maxHorses, int numHorses) - { - return HorsesMenuHeader.Replace("%MAXHORSE%", maxHorses.ToString()).Replace("%TOTALHORSE%", numHorses.ToString()); - } - - - public static string FormatWildHorse(string name, string breed, int randomId, bool vowel) - { - return WildHorseFormat.Replace("%NAME%", name).Replace("%BREED%", breed).Replace("%RANDOMID%", randomId.ToString()).Replace("%N%", vowel ? "n" : ""); - } - public static string FormatHorseBreedPreview(string name, string description) - { - return BreedViewerFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); - } - public static string FormatHorseAdvancedStat(int baseStat, int companionBoost, int tackBoost, int maxStat) - { - return AdvancedStatFormat.Replace("%BASE%", baseStat.ToString()).Replace("%COMPAINON%", companionBoost.ToString()).Replace("%TACK%", tackBoost.ToString()).Replace("%MAX%", maxStat.ToString()); - } - public static string FormatHorseBasicStat(int health, int hunger, int thirst, int mood, int energy, int groom, int shoes) - { - return BasicStatFormat.Replace("%HEALTH%", health.ToString()).Replace("%HUNGER%", hunger.ToString()).Replace("%THIRST%", thirst.ToString()).Replace("%MOOD%", mood.ToString()).Replace("%ENERGY%", energy.ToString()).Replace("%GROOM%", groom.ToString()).Replace("%SHOES%", shoes.ToString()); - } - - public static string FormatHorseRelative(string name, int id) - { - return HorseRelativeFormat.Replace("%NAME%", name).Replace("%ID%", id.ToString()); - } - public static string FormatHorseBreed(string name, int id) - { - return HorseBreedFormat.Replace("%NAME%", name).Replace("%ID%", id.ToString()); - } - public static string FormatRanchSearchResult(string name, int x, int y) - { - string mapXy = FormatMapLocation(x, y); - return LibaryFindRanchResultFormat.Replace("%USERNAME%", name).Replace("%MAPXY%", mapXy); - } - public static string FormatNpcSearchResult(string name, string desc,int x, int y) - { - string mapXy = FormatMapLocation(x, y); - return LibaryFindNpcSearchResultFormat.Replace("%NPCNAME%", name).Replace("%MAPXY%", mapXy).Replace("%NPCDESC%", desc); - } - public static string FormatLastPoet(string name) - { - return LastPoetFormat.Replace("%USERNAME%", name); - } - public static string FormatMultiroomParticipent(string name) - { - return MultiroomParticipentFormat.Replace("%USERNAME%", name); - } - public static string FormatVenusFlyTrapMeta(int money) - { - return VenusFlyTrapFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBankIntrestMadeMeta(UInt64 intrestMade) - { - return BankMadeInIntrestFormat.Replace("%MONEY%", intrestMade.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBankCarryingMeta(int money, UInt64 bankMoney) - { - return BankCarryingFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BANKMONEY%", bankMoney.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBankOptionsMeta(int money, UInt64 bankMoney) - { - return BankOptionsFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BANKMONEY%", bankMoney.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatDepositedMoneyMessage(int money) - { - return BankDepositedMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatWithdrawMoneyMessage(int money) - { - return BankWithdrewMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatNumberOfWishingCoins(int amount) - { - return YouHaveWishingCoinsFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatWishThingsMessage(string item1, string item2) - { - return WishItemsFormat.Replace("%ITEM%", item1).Replace("%ITEM2%", item2); - } - public static string FormatWishMoneyMessage(int money) - { - return WishMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatWishWorldPeaceMessage(int money, string item) - { - return WishWorldPeaceFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEM%", item); - } - - - - public static string FormatInnEnjoyedServiceMessage(string item, int price) - { - return InnEnjoyedServiceFormat.Replace("%ITEM%", item).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatInnItemEntry(int iconId, string itemName, int price, int itemId) - { - return InnItemEntryFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ID%", itemId.ToString()); - } - public static string FormatDroppedMoneyMessage(int amount) - { - return FountainDroppedMoneyFormat.Replace("%MONEY%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatAbuseReportPlayerNotFound(string username) - { - return AbuseReportPlayerNotFoundFormat.Replace("%USERNAME%", username); - } - public static string FormatAbuseReportMetaPage(string reasonsMeta) - { - return AbuseReportMetaFormat.Replace("%REASONS%", reasonsMeta); - } - - public static string FormatAbuseReportReason(string id, string name) - { - return AbuseReportReasonFormat.Replace("%ID%", id).Replace("%NAME%", name); - } - public static string FormatIconFormat(int iconId) - { - return PlayerListIconFormat.Replace("%ICON%", iconId.ToString()); - } - - public static string FormatMuteButton(int playerId) - { - return MuteButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatHearButton(int playerId) - { - return HearButton.Replace("%PLAYERID%", playerId.ToString()); - } - public static string FormatPlayerEntry(string iconFormat, string username, int userId, int time, int x, int y, bool idle, bool muteOrHear, bool isYou) - { - string xy = FormatMapLocation(x, y); - string muteButton = FormatMuteButton(userId); - string hearButton = FormatHearButton(userId); - string pmButton = FormatPmButton(username); - string msg = PlayerListEntryFormat.Replace("%ICONFORMAT%", iconFormat).Replace("%USERNAME%", username).Replace("%PLAYERID%", userId.ToString()).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%MAPXY%", xy).Replace("%IDLE%", idle ? PlayerListIdle : ""); - if (isYou) - msg = msg.Replace("%MUTEORHEAR%", "").Replace("%PMBUTTON%", ""); - else - msg = msg.Replace("%MUTEORHEAR%", muteOrHear ? hearButton : muteButton).Replace("%PMBUTTON%", pmButton); - return msg; - } - public static string FormatOnlineBuddyEntry(string iconFormat, string username, int userId, int time, int x, int y) - { - string xy = FormatMapLocation(x, y); - return BuddyListOnlineBuddyEntryFormat.Replace("%ICONFORMAT%", iconFormat).Replace("%USERNAME%", username).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERID%", userId.ToString()).Replace("%MAPXY%", xy); - } - public static string FormatOfflineBuddyEntry(string username, int userId, int time) - { - return BuddyListOfflineBuddyEntryFormat.Replace("%USERNAME%", username).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERID%", userId.ToString()); - } - public static string FormatConsumeItemMessaege(string itemName) - { - return ConsumeItemFormat.Replace("%ITEM%", itemName); - } - public static string FormatAwardHeaderOthers(string username) - { - return AwardOthersFormat.Replace("%USERNAME%", username); - } - public static string FormatAwardEntry(int iconId, string title, int moneyBonus) - { - return AwardFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", title).Replace("%BONUS%", moneyBonus.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatBestTimeHeader(string gameName) - { - return GameBestTimeHeaderFormat.Replace("%GAMETITLE%", gameName); - } - public static string FormatBestTimeListEntry(int ranking, int score, string username, int totalplays) - { - return GameBestTimeFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString().Insert(score.ToString().Length - 2, ".")).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatWinlooseHeader(string gameName) - { - return GameWinLooseHeaderFormat.Replace("%GAMETITLE%", gameName); - } - public static string FormatWinlooseListEntry(int ranking, int wins, int loose, string username, int totalplays) - { - return GameWinLooseFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%WINS%", wins.ToString("N0", CultureInfo.InvariantCulture)).Replace("%LOSES%", loose.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatHighscoreHeader(string gameName) - { - return GameHighScoreHeaderFormat.Replace("%GAMETITLE%", gameName); - } - public static string FormatHighscoreListEntry(int ranking, int score, string username, int totalplays) - { - return GameHighScoreFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatHighscoreStat(string gameTitle, int ranking, int score, int totalplays) - { - return HighscoreFormat.Replace("%GAMETITLE%", gameTitle).Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBestTimeStat(string gameTitle, int ranking, int score, int totalplays) - { - return BestTimeFormat.Replace("%GAMETITLE%", gameTitle).Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString()).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatMoneyEarnedMessage(int money) - { - return YouEarnedMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTimeBeatenMessage(int time) - { - return BeatBestTimeFormat.Replace("%TIME%", time.ToString()); - } - public static string FormatHighscoreBeatenMessage(int score) - { - return BeatHighscoreFormat.Replace("%SCORE%", score.ToString()); - } - public static string FormatQuestFooter(int totalQuestsComplete, int totalQuests, int questPoints, int totalQuestPoints) - { - int questsComplete = Convert.ToInt32(Math.Floor(((decimal)totalQuestsComplete / (decimal)totalQuests) * (decimal)100.0)); - int questPointsComplete = Convert.ToInt32(Math.Floor(((decimal)questPoints / (decimal)totalQuestPoints) * (decimal)100.0)); - return QuestFooterFormat.Replace("%TOTALCOMPLETED%", totalQuestsComplete.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALQUESTS%", totalQuests.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALPERCENT%", questsComplete.ToString()).Replace("%YOURQP%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%YOURQP%", totalQuestPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%QPERCENT%", questPointsComplete.ToString()).Replace("%MAXQP%", totalQuestPoints.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatQuestLogQuest(string questTitle, int questPoints, string difficulty, string completionStatus) - { - return QuestFormat.Replace("%TITLE%", questTitle).Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%DIFFICULTY%", difficulty).Replace("%COMPLETION%", completionStatus); - } - - public static string FormatPrivateNotes(string privateNotes) - { - return PrivateNotesMetaFormat.Replace("%PRIVATENOTES%", privateNotes); - } - public static string FormatRandomMovementMessage(string statName, string message) - { - return RandomMovement.Replace("%STAT%", statName).Replace("%MSG%", message); - } - - public static string FormatJewerlyEquipMessage(string itemName) - { - return EquipJewelryFormat.Replace("%ITEM%", itemName); - } - public static string FormatEquipCompetitionGearMessage(string name) - { - return EquipCompetitionGearFormat.Replace("%ITEM%", name); - } - - public static string FormatPlayerStat(string statFormat, string statName) - { - return statFormat.Replace("%STAT%", statName); - } - public static string FormatJewelrySlot1(string itemName, int icon, bool other) - { - return JewelrySlot1Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot1Button); - } - public static string FormatJewelrySlot2(string itemName, int icon, bool other) - { - return JewelrySlot2Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot2Button); - } - public static string FormatJewelrySlot3(string itemName, int icon, bool other) - { - return JewelrySlot3Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot3Button); - } - public static string FormatJewelrySlot4(string itemName, int icon, bool other) - { - return JewelrySlot4Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot4Button); - } - - public static string FormatCompetitionGearHead(string itemName, string pronoun, int icon, bool other) - { - return CompetitionGearHeadFormat.Replace("%ITEM%", itemName).Replace("%ICON%",icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveHeadButton); - } - public static string FormatCompetitionGearBody(string itemName, string pronoun, int icon, bool other) - { - return CompetitionGearBodyFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveBodyButton); ; - } - public static string FormatCompetitionGearLegs(string itemName, string pronoun, int icon, bool other) - { - return CompetitionGearLegsFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveLegsButton); - } - public static string FormatCompetitionGearFeet(string itemName, string pronoun, int icon, bool other) - { - return CompetitionGearFeetFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveFeetButton ); - } - public static string FormatStatsBar(string username) - { - return StatsBarFormat.Replace("%USERNAME%", username); - } - public static string FormatStatsArea(string area) - { - return StatsAreaFormat.Replace("%AREA%", area); - } - public static string FormatMoneyStat(int money) - { - return StatsMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatFreeTime(int freeMinutes) - { - return StatsFreeTimeFormat.Replace("%FREEMINUTES%", freeMinutes.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatPlayerDescriptionForStatsMenu(string description) - { - return StatsDescriptionFormat.Replace("%PLAYERDESC%", BBCode.EncodeBBCodeToMeta(description)); - } - - public static string FormatExperience(int expPoints) - { - return StatsExpFormat.Replace("%EXPPOINTS%", expPoints.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatQuestPoints(int questPoints) - { - return StatsQuestpointsFormat.Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatHungryStat(string status) - { - return StatsHungerFormat.Replace("%HUNGER%", status); - } - public static string FormatThirstStat(string status) - { - return StatsThirstFormat.Replace("%THIRST%", status); - } - public static string FormatTiredStat(string status) - { - return StatsTiredFormat.Replace("%TIRED%", status); - } - public static string FormatGenderStat(string gender) - { - return StatsGenderFormat.Replace("%GENDER%", gender); - } - public static string FormatJewelryStat(string jewelformat) - { - return StatsJewelFormat.Replace("%JEWELFORMAT%", jewelformat); - } - public static string FormatCompetitionGearStat(string competitonGearFormat) - { - return StatsCompetitionGearFormat.Replace("%GEARFORMAT%", competitonGearFormat); - } - public static string FormatAdminCommandCompleteMessage(string command) - { - return AdminCommandFormat.Replace("%COMMAND%", command); - } - - public static string FormatPlayerCommandCompleteMessage(string command) - { - return PlayerCommandFormat.Replace("%COMMAND%", command); - } - - public static string FormatYouLostAnItemMessage(string itemName) - { - return YouLostAnItemFormat.Replace("%ITEM%", itemName); - } - public static string FormatYouEarnedAnItemButInventoryFullMessage(string itemName) - { - return YouEarnedAnItemButInventoryWasFullFormat.Replace("%ITEM%", itemName); - } - public static string FormatYouEarnedAnItemMessage(string itemName) - { - return YouEarnedAnItemFormat.Replace("%ITEM%", itemName); - } - public static string FormatSellMessage(string itemName, UInt64 price) - { - return Sold1Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatSellAllMessage(string itemName, UInt64 price, int sellAmount) - { - return SoldAllFormat.Replace("%AMOUNT%",sellAmount.ToString()).Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuy25Message(string itemName, UInt64 price) - { - return Brought25Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuy5Message(string itemName, UInt64 price) - { - return Brought5Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatBuyMessage(string itemName, UInt64 price) - { - return Brought1Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatShopEntry(int iconid, string count, string name, UInt64 price) - { - return ShopEntryFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COUNT%", count).Replace("%TITLE%", name).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatWearButton(int randomId) - { - return ItemWearButton.Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatItemInformationByIdButton(int itemId) - { - return ItemInformationByIdButton.Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatBuyItemButton(int itemId) - { - return ShopBuyButton.Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatBuy5ItemButton(int itemId) - { - return ShopBuy5Button.Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatBuy25ItemButton(int itemId) - { - return ShopBuy25Button.Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatSellButton(int randomId) - { - return SellButton.Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatSellAllButton(int itemId) - { - return SellAllButton.Replace("%ITEMID%", itemId.ToString()); - } - - public static string FormatNpcInformation(string name, string description) - { - return NpcInformationFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); - } - public static string FormatItemInformation(string name, string description) - { - return ItemInformationFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); - } - public static string FormatNpcChatpoint(string name, string shortDescription, string chatText) - { - return NpcChatpointFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", shortDescription).Replace("%TEXT%", chatText); - } - - public static string FormatNpcTalkButton(int npcId) - { - return NpcTalkButton.Replace("%ID%", npcId.ToString()); - } - public static string FormatNpcInformationButton(int npcId) - { - return NpcInformationButton.Replace("%ID%", npcId.ToString()); - } - - public static string FormatNpcReply(string replyText, int replyId) - { - return NpcReplyFormat.Replace("%TEXT%", replyText).Replace("%ID%", replyId.ToString()); - } - - public static string FormatNpcStartChatMessage(int iconId, string name, string shortDescription, int npcId) - { - return NpcStartChatFormat.Replace("%ICONID%", iconId.ToString()).Replace("%NAME%", name).Replace("%DESCRIPTION%", shortDescription).Replace("%ID%", npcId.ToString()); - } - - public static string FormatGlobalChatViolationMessage(Chat.ChatMsg.Reason violationReason) - { - return ChatViolationMessageFormat.Replace("%AMOUNT%", RequiredChatViolations.ToString()).Replace("%REASON%", violationReason.Message); - } - - public static string FormatPlayerInventoryHeaderMeta(int itemCount, int maxItems) - { - return InventoryHeaderFormat.Replace("%ITEMCOUNT%", itemCount.ToString()).Replace("%MAXITEMS%", maxItems.ToString()); - } - - public static string FormatPlayerInventoryItemMeta(int iconid, int count, string name) - { - return InventoryItemFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COUNT%", count.ToString()).Replace("%TITLE%", name); - } - - public static string FormatItemThrowButton(int itemId) - { - return ItemThrowButton.Replace("%ITEMID%", itemId.ToString()); - } - public static string FormatItemConsumeButton(int randomid) - { - return ItemConsumeButton.Replace("%RANDOMID%", randomid.ToString()); - } - public static string FormatItemInformationButton(int randomid) - { - return ItemInformationButton.Replace("%RANDOMID%", randomid.ToString()); - } - - public static string FormatItemDropButton(int randomid) - { - return ItemDropButton.Replace("%RANDOMID%", randomid.ToString()); - } - public static string FormatItemOpenButton(int randomId) - { - return ItemOpenButton.Replace("%RANDOMID%", randomId.ToString()); - } - public static string FormatItemUseButton(int randomid) - { - return ItemUseButton.Replace("%RANDOMID%", randomid.ToString()); - } - public static string FormatItemReadButton(int randomid) - { - return ItemReadButton.Replace("%ITEMID%", randomid.ToString()); - } - - // Meta - public static string FormatTileName(string name) - { - return Messages.TileFormat.Replace("%TILENAME%", name); - } - public static string FormatGrabItemMessage(string name, int randomid, int iconid) - { - return GrabItemFormat.Replace("%ICONID%",iconid.ToString()).Replace("%ITEMNAME%", name).Replace("%RANDOMID%", randomid.ToString()); - } - - public static string FormatPlayerBuddyList(int amount) - { - return PlayerListOfBuddiesFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatPlayerList(int amount) - { - return PlayerListOfPlayersFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatMapAllBuddiesList(string buddyxys) - { - return PlayerListMapAllBuddiesForamt.Replace("%BUDDYXYLIST%", buddyxys); - } - - public static string FormatMapAllPlayersList(string playerxys) - { - return PlayerListMapAllPlayersFormat.Replace("%ALLXYLIST%", playerxys); - } - - public static string FormatMapLocations(Point[] xys) - { - string allXys = ""; - foreach(Point xy in xys) - { - allXys += FormatMapLocation(xy.X, xy.Y); - } - return allXys; - } - public static string FormatMapLocation(int x, int y) - { - string xy = ""; - xy += (char)(((x - 4) / 64) + 20); - xy += (char)(((x - 4) % 64) + 20); - - xy += (char)(((y - 1) / 64) + 20); - xy += (char)(((y - 1) % 64) + 20); - return xy; - } - - public static string FormatTransportCost(int cost) - { - return TransportCostFormat.Replace("%COST%", cost.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatTransportMessage(string method, string place, string costFormat, int id, int x, int y) - { - string xy = FormatMapLocation(x, y); - - int iconId = 253; - if(method == "WAGON") - iconId = 254; - return TransportFormat.Replace("%METHOD%", method).Replace("%PLACE%", place).Replace("%COSTFORMAT%", costFormat).Replace("%ID%", id.ToString()).Replace("%ICON%",iconId.ToString()).Replace("%XY%", xy); - } - // For all - public static string FormatGlobalChatMessage(string username, string message) - { - return GlobalChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatBuddyChatMessage(string username, string message) - { - return BuddyChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatIsleChatMessage(string username, string message) - { - return IsleChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatNearbyChatMessage(string username, string message) - { - return NearChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatHereChatMessage(string username, string message) - { - return HereChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatDirectMessage(string username, string message, string formatPart) - { - return DirectChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%FORMATPART%", formatPart); - } - - public static string FormatGlobalChatMessageForMod(string username, string message) - { - return GlobalChatFormatForModerators.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatAdsChatMessage(string username, string message) - { - return AdsChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - public static string FormatModChatMessage(string username, string message) - { - return ModChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - // NOTE: i dont have the correct format for this, im just guessing - public static string FormatAdminChatMessage(string username, string message) - { - return AdminChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); - } - - - // For Sender - public static string FormatBuddyChatMessageForSender(int numbBuddies, string username, string message) - { - return BuddyChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbBuddies.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatHereChatMessageForSender(int numbHere, string username, string message) - { - return HereChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbHere.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatNearChatMessageForSender(int numbNear, string username, string message) - { - return NearChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbNear.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatIsleChatMessageForSender(int numbIsle, string username, string message) - { - return IsleChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbIsle.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatAdminChatForSender(int numbAdmins, string username, string message) - { - return AdminChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbAdmins.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatAdsChatForSender(int numbListening, string username, string message) - { - return AdsChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbListening.ToString("N0", CultureInfo.InvariantCulture)); - } - - public static string FormatModChatForSender(int numbMods, string username, string message) - { - return ModChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbMods.ToString("N0", CultureInfo.InvariantCulture)); - } - public static string FormatDirectChatMessageForSender(string username,string toUsername, string message, string formatPart) - { - return DirectChatFormatForSender.Replace("%FROMUSER%", username).Replace("%TOUSER%", toUsername).Replace("%MESSAGE%", message).Replace("%FORMATPART%", formatPart); - } - public static string FormatIdleWarningMessage() - { - return IdleWarningFormat.Replace("%WARN%", GameServer.IdleWarning.ToString()).Replace("%KICK%", GameServer.IdleTimeout.ToString()); - } - - public static string FormatLoginMessage(string username) - { - return LoginMessageFormat.Replace("%USERNAME%", username); - } - - public static string FormatLogoutMessage(string username) - { - return LogoutMessageFormat.Replace("%USERNAME%", username); - } - - public static string FormatMotd(string Motd) - { - return MotdFormat.Replace("%MOTD%", Motd); - } - public static string FormatWelcomeMessage(string username) - { - return WelcomeFormat.Replace("%USERNAME%", username); - } - - // NOTE: i dont have the correct format for this, im just guessing - public static string FormatServerAnnoucement(string message) - { - return ServerAnnoucementFormat.Replace("%MESSAGE%", message); - } - - // Transport - public static string FormatWelcomeToAreaMessage(string placeName) - { - return WelcomeToAreaFormat.Replace("%PLACE%", placeName); - } - - // Disconnect - public static string FormatIdleKickMessage() - { - return KickReasonIdleFormat.Replace("%KICK%", GameServer.IdleTimeout.ToString()); - } - - } -} +using HISP.Security; +using HISP.Server; +using System; +using System.Drawing; +using System.Globalization; + +namespace HISP.Game +{ + public class Messages + { + public static int RequiredChatViolations; + + // Message Queue + public static string MessageQueueHeader; + + // Timed Messages + public static string PlaytimeMessageFormat; + public static string[] RngMessages; + + // Prision Isle + public static string PrisonIsleSentMessage; + public static string PrisonIsleCommandMessageFormat; + + // Rules Isle + public static string RulesIsleSentMessage; + public static string RulesIsleCommandMessageFormat; + + // Mod + public static string ModIsleMessage; + public static string ModSplatterballEarnedYouFormat; + public static string ModSplatterballEarnedOtherFormat; + + // Add Buddy + public static string AddBuddyPending; + public static string AddBuddyOtherPendingFormat; + public static string AddBuddyYourNowBuddiesFormat; + public static string AddBuddyDeleteBuddyFormat; + + // Mute Command + public static string NowMutingPlayerFormat; + public static string StoppedMutingPlayerFormat; + + public static string PlayerIgnoringYourPrivateMessagesFormat; + public static string PlayerIgnoringYourBuddyRequests; + public static string PlayerIgnoringYourSocials; + + public static string PlayerIgnoringAllPrivateMessagesFormat; + public static string PlayerIgnoringAllBuddyRequests; + public static string PlayerIgnoringAllSocials; + + public static string CantSendInMutedChannel; + public static string CantSendPrivateMessageWhileMuted; + public static string CantSendBuddyRequestWhileMuted; + + public static string CantSendPrivateMessagePlayerMutedFormat; + + // Chat Errors + public static string CantFindPlayerToPrivateMessage; + public static string AdsOnlyOncePerMinute; + public static string GlobalChatLimited; + public static string GlobalChatTooLong; + public static string AdsChatTooLong; + + + // Auto Sell + public static string AutoSellNotStandingInSamePlace; + public static string AutoSellSuccessFormat; + public static string HorseAutoSellValueTooHigh; + public static string AutoSellInsufficentFunds; + public static string AutoSellTooManyHorses; + public static string AutoSellYouSoldHorseFormat; + public static string AutoSellYouSoldHorseOfflineFormat; + + // Tag + public static string TagYourItFormat; + public static string TagOtherBuddiesOnlineFormat; + + // Socials + public static string SocialButton; + public static string SocialMessageFormat; + public static string SocialTypeFormat; + public static string SocialPlayerNoLongerNearby; + + // Random Event + public static string RandomEventPrefix; + + // Events : Mods Revenge + public static string EventStartModsRevenge; + public static string EventEndModsRevenge; + + // Events : Isle Cards Trading Game + public static string EventStartIsleTradingGame; + public static string EventDisqualifiedIsleTradingGame; + public static string EventOnlyOneTypeIsleTradingGame; + public static string EventOnlyTwoTypeIsleTradingGame; + public static string EventOnlyThreeTypeIsleTradingGame; + public static string EventNoneIsleTradingGame; + public static string EventWonIsleTradingGame; + + // Events : Water Balloon Game + public static string EventStartWaterBallonGame; + public static string EventWonWaterBallonGame; + public static string EventEndWaterBalloonGame; + public static string EventWinnerWaterBalloonGameFormat; + + // Events : Real Time Quiz + public static string EventMetaRealTimeQuizFormat; + public static string EventStartRealTimeQuiz; + public static string EventEndRealTimeQuiz; + public static string EventBonusRealTimeQuizFormat; + public static string EventWinBonusRealTimeQuizFormat; + public static string EventWinRealTimeQuizFormat; + public static string EventUnavailableRealTimeQuiz; + public static string EventEnteredRealTimeQuiz; + public static string EventAlreadyEnteredRealTimeQuiz; + public static string EventQuitRealTimeQuiz; + + // Events : Real Time Riddles + public static string EventStartRealTimeRiddleFormat; + public static string EventEndRealTimeRiddle; + public static string EventWonRealTimeRiddleForOthersFormat; + public static string EventWonRealTimeRiddleForYouFormat; + public static string EventAlreadySovledRealTimeRiddle; + + // Events : Tack Shop Giveaway + public static string EventStartTackShopGiveawayFormat; + public static string Event1MinTackShopGiveawayFormat; + public static string EventWonTackShopGiveawayFormat; + public static string EventEndTackShopGiveawayFormat; + + // MultiHorses + public static string OtherPlayersHere; + public static string MultiHorseSelectOneToJoinWith; + public static string MultiHorseFormat; + + // 2Player + public static string TwoPlayerOtherPlayer; + public static string TwoPlayerPlayerFormat; + public static string TwoPlayerInviteButton; + public static string TwoPlayerAcceptButton; + public static string TwoPlayerSentInvite; + public static string TwoPlayerPlayingWithFormat; + + public static string TwoPlayerGameInProgressFormat; + + public static string TwoPlayerYourInvitedFormat; + public static string TwoPlayerInvitedFormat; + public static string TwoPlayerStartingUpGameFormat; + + public static string TwoPlayerGameClosed; + public static string TwoPlayerGameClosedOther; + + public static string TwoPlayerRecordedWinFormat; + public static string TwoPlayerRecordedLossFormat; + + // Trading + public static string TradeWithPlayerFormat; + + public static string TradeWaitingForOtherDone; + public static string TradeOtherPlayerIsDone; + public static string TradeFinalReview; + + public static string TradeYourOfferingFormat; + + public static string TradeAddItems; + public static string TradeOtherOfferingFormat; + + public static string TradeWhenDoneClick; + public static string TradeCancelAnytime; + public static string TradeAcceptTrade; + + public static string TradeOfferingNothing; + public static string TradeOfferingMoneyFormat; + public static string TradeOfferingItemFormat; + public static string TradeOfferingHorseFormat; + + // Trading : What to Offer (menu) + + public static string TradeWhatToOfferFormat; + public static string TradeOfferMoney; + + public static string TradeOfferHorse; + public static string TradeOfferHorseFormat; + public static string TradeOfferHorseTacked; + + public static string TradeOfferItem; + public static string TradeOfferItemFormat; + public static string TradeOfferItemOtherPlayerInvFull; + + // Trading : Offer Submenu + + public static string TradeMoneyOfferSubmenuFormat; + public static string TradeItemOfferSubmenuFormat; + + // Trading : Messages + + public static string TradeWaitingForOthersToAcceptMessage; + + public static string TradeRequiresBothPlayersMessage; + public static string TradeCanceledBecuasePlayerMovedMessage; + + public static string TradeItemOfferAtleast1; + public static string TradeItemOfferTooMuchFormat; + public static string TradeMoneyOfferTooMuch; + + public static string TradeOtherPlayerHasNegativeMoney; + public static string TradeYouHaveNegativeMoney; + + public static string TradeAcceptedMessage; + public static string TradeCanceledByYouMessage; + public static string TradeCanceledByOtherPlayerFormat; + public static string TradeCanceledInterupted; + + public static string TradeYouCantHandleMoreHorses; + public static string TradeOtherPlayerCantHandleMoreHorsesFormat; + + public static string TradeYouSpentMoneyMessageFormat; + public static string TradeYouReceivedMoneyMessageFormat; + + public static string TradeRiddenHorse; + + public static string TradeYouCantCarryMoreItems; + public static string TradeOtherCantCarryMoreItems; + + public static string TradeNotAllowedWhileBidding; + public static string TradeNotAllowedWhileOtherBidding; + + public static string TradeWillGiveYouTooMuchMoney; + public static string TradeWillGiveOtherTooMuchMoney; + + // Player Interaction + public static string PlayerHereMenuFormat; + + public static string PlayerHereProfileButton; + public static string PlayerHereSocialButton; + public static string PlayerHereTradeButton; + public static string PlayerHereAddBuddyButton; + public static string PlayerHereTagButton; + + public static string PmButton; + + // Auction House + public static string AuctionsRunning; + public static string AuctionHorseEntryFormat; + public static string AuctionPlayersHereFormat; + + public static string AuctionAHorse; + public static string AuctionListHorse; + + public static string AuctionHorseListEntryFormat; + public static string AuctionHorseViewButton; + public static string AuctionHorseIsTacked; + + public static string AuctionBidMax; + public static string AuctionBidRaisedFormat; + public static string AuctionTopBid; + public static string AuctionExistingBidHigher; + + public static string AuctionYouveBeenOutbidFormat; + public static string AuctionCantAffordBid; + public static string AuctionCantAffordAuctionFee; + public static string AuctionOneHorsePerPlayer; + + public static string AuctionYouHaveTooManyHorses; + public static string AuctionOnlyOneWinningBidAllowed; + + public static string AuctionYouBroughtAHorseFormat; + public static string AuctionNoHorseBrought; + + public static string AuctionHorseSoldFormat; + + public static string AuctionSoldToFormat; + public static string AuctionNotSold; + public static string AuctionGoingToFormat; + + public static string AuctionNoOtherTransactionAllowed; + + // Warp Command + public static string SuccessfullyWarpedToLocation; + public static string SuccessfullyWarpedToPlayer; + public static string OnlyUnicornCanWarp; + public static string FailedToUnderstandLocation; + + // Click + public static string ClickPlayerHereFormat; + + // Hammock + public static string HammockText; + + // Horse Leaser + public static string HorseLeaserCantAffordMessage; + public static string HorseLeaserTemporaryHorseAdded; + public static string HorseLeaserHorsesFull; + + public static string HorseLeaserReturnedToUniterPegasus; + + public static string HorseLeaserReturnedToUniterFormat; + public static string HorseLeaserReturnedToOwnerFormat; + + // Horse Games + public static string HorseGamesSelectHorse; + public static string HorseGamesHorseEntryFormat; + + // Competitions + public static string ArenaResultsMessage; + public static string ArenaPlacingFormat; + + public static string ArenaFirstPlace; + public static string ArenaSecondPlace; + public static string ArenaThirdPlace; + public static string ArenaFourthPlace; + public static string ArenaFifthPlace; + public static string ArenaSixthPlace; + + public static string ArenaEnteredInto; + + public static string ArenaAlreadyEntered; + public static string ArenaCantAfford; + + public static string ArenaYourScoreFormat; + + public static string ArenaJumpingStartup; + public static string ArenaDraftStartup; + public static string ArenaRacingStartup; + public static string ArenaConformationStartup; + + public static string ArenaYouWinFormat; + public static string ArenaOnlyWinnerWins; + + public static string ArenaTooHungry; + public static string ArenaTooThirsty; + public static string ArenaNeedsFarrier; + public static string ArenaTooTired; + public static string ArenaNeedsVet; + + public static string ArenaEventNameFormat; + public static string ArenaFullErrorMessage; + + public static string ArenaCurrentlyTakingEntriesFormat; + public static string ArenaCompetitionInProgress; + public static string ArenaYouHaveHorseEntered; + public static string ArenaCompetitionFull; + + public static string ArenaEnterHorseFormat; + public static string ArenaCurrentCompetitors; + public static string ArenaCompetingHorseFormat; + + + // City Hall + public static string CityHallMenu; + public static string CityHallMailSendMeta; + public static string CityHallSentMessageFormat; + public static string CityHallCantAffordPostageMessage; + public static string CityHallCantFindPlayerMessageFormat; + + // City Hall : Auto Sell + public static string CityHallCheapestAutoSells; + public static string CityHallCheapestAutoSellHorseEntryFormat; + public static string CityHallMostExpAutoSells; + public static string CityHallMostExpAutoSellHorseEntryFormat; + + // City Hall : Ranch Investment + public static string CityHallTop25Ranches; + public static string CityHallRanchEntryFormat; + + // City Hall : Richest Players + public static string CityHallTop25Players; + public static string CityHallRichPlayerFormat; + + // City Hall : Spoiled Horses + public static string CityHallTop100SpoiledHorses; + public static string CityHallSpoiledHorseEntryFormat; + + // City Hall : Most Adventurous Players + public static string CityHallTop25AdventurousPlayers; + public static string CityHallAdventurousPlayerEntryFormat; + + // City Hall : Most Experienced Players + public static string CityHallTop25ExperiencedPlayers; + public static string CityHallExperiencePlayerEntryFormat; + + // City Hall : Most Played Minigames + public static string CityHallTop25MinigamePlayers; + public static string CityHallMinigamePlayerEntryFormat; + + // City Hall : Most Experienced Horses + public static string CityHallTop25ExperiencedHorses; + public static string CityHallExperiencedHorseEntryFormat; + + + // Mail Messages + public static string MailReceivedMessage; + public static string MailSe; + public static string MailSelectFromFollowing; + + public static string MailEntryFormat; + public static string MailReadMetaFormat; + public static string MailRippedMessage; + + // Ranch + public static string RanchUnownedRanchFormat; + public static string RanchYouCouldPurchaseThisRanch; + public static string RanchYouAllreadyOwnARanch; + public static string RanchSubscribersOnly; + public static string RanchDescriptionOthersFormat; + public static string RanchUnownedRanchClicked; + public static string RanchClickMessageFormat; + + public static string RanchNoDorothyShoesMessage; + public static string RanchDorothyShoesMessage; + public static string RanchDorothyShoesPrisonIsleMessage; + + public static string RanchCantAffordRanch; + public static string RanchRanchBroughtMessageFormat; + public static string RanchForcefullySoldFormat; + public static string RanchSavedRanchDescripton; + public static string RanchSavedTitleTooLongError; + public static string RanchSavedDescrptionTooLongError; + public static string RanchSavedTitleViolationsError; + public static string RanchSavedDescrptionViolationsErrorFormat; + + + public static string RanchDefaultRanchTitle; + + public static string RanchEditDescriptionMetaFormat; + public static string RanchTitleFormat; + public static string RanchYourDescriptionFormat; + + public static string RanchSellAreYouSure; + public static string RanchSoldFormat; + + // Ranch: Build. + public static string RanchCanBuildOneOfTheFollowingInThisSpot; + public static string RanchBuildingEntryFormat; + public static string RanchCantAffordThisBuilding; + public static string RanchBuildingInformationFormat; + public static string RanchBuildingComplete; + public static string RanchBuildingAlreadyHere; + public static string RanchTornDownRanchBuildingFormat; + public static string RanchViewBuildingFormat; + public static string RanchBarnHorsesFormat; + + // Ranch: Upgrade + public static string UpgradedMessage; + public static string UpgradeCannotAfford; + public static string UpgradeCurrentUpgradeFormat; + public static string UpgradeNextUpgradeFormat; + + // Ranch: Special + public static string BuildingRestHere; + public static string BuildingGrainSilo; + public static string BuildingBarnFormat; + public static string BuildingBigBarnFormat; + public static string BuildingGoldBarnFormat; + public static string BuildingWaterWell; + public static string BuildingWindmillFormat; + public static string BuildingWagon; + public static string BuildingTrainingPen; + public static string BuildingVegatableGarden; + + public static string RanchTrainAllAttempt; + public static string RanchTrainSuccessFormat; + public static string RanchTrainBadMoodFormat; + public static string RanchTrainCantTrainFormat; + public static string RanchHorsesFullyRested; + public static string RanchWagonDroppedYouOff; + + // Training Pen + public static string TrainedInStatFormat; + public static string TrainerHeaderFormat; + public static string TrainerHorseEntryFormat; + public static string TrainerHorseFullyTrainedFormat; + public static string TrainerCantTrainAgainInFormat; + public static string TrainerCantAfford; + + // Santa + public static string SantaHiddenText; // Text that claims that it costs $10 to wrap a present thats sent to the client but never displayed for some reason. also wrapping is free on pinto so IDEK. + public static string SantaWrapItemFormat; + public static string SantaWrappedObjectMessage; + public static string SantaCantWrapInvFull; + public static string SantaCantOpenNothingInside; + public static string SantaItemOpenedFormat; + public static string SantaItemCantOpenInvFull; + + // Tools + public static string BinocularsNothing; + public static string MagnifyNothing; + public static string RakeNothing; + public static string ShovelNothing; + + // Pronouns + public static string PronounMaleHe; + public static string PronounMaleHis; + + public static string PronounFemaleShe; + public static string PronounFemaleHer; + + public static string PronounYouYour; + + // Stats Page + public static string StatsBarFormat; + public static string StatsAreaFormat; + public static string StatsMoneyFormat; + public static string StatsFreeTimeFormat; + public static string StatsDescriptionFormat; + public static string StatsExpFormat; + public static string StatsQuestpointsFormat; + public static string StatsHungerFormat; + public static string StatsThirstFormat; + public static string StatsTiredFormat; + public static string StatsGenderFormat; + public static string StatsJewelFormat; + public static string StatsCompetitionGearFormat; + + public static string JewelrySlot1Format; + public static string JewelrySlot2Format; + public static string JewelrySlot3Format; + public static string JewelrySlot4Format; + + public static string JewelryRemoveSlot1Button; + public static string JewelryRemoveSlot2Button; + public static string JewelryRemoveSlot3Button; + public static string JewelryRemoveSlot4Button; + + public static string CompetitionGearHeadFormat; + public static string CompetitionGearBodyFormat; + public static string CompetitionGearLegsFormat; + public static string CompetitionGearFeetFormat; + + public static string CompetitionGearRemoveHeadButton; + public static string CompetitionGearRemoveBodyButton; + public static string CompetitionGearRemoveLegsButton; + public static string CompetitionGearRemoveFeetButton; + + public static string StatsPrivateNotesButton; + public static string StatsQuestsButton; + public static string StatsMinigameRankingButton; + public static string StatsAwardsButton; + public static string StatsMiscButton; + + public static string NoJewerlyEquipped; + public static string NoJewerlyEquippedOther; + + public static string NoCompetitionGear; + public static string NoCompetitionGearOther; + + public static string JewelrySelected; + public static string JewelrySelectedOther; + + public static string CompetitionGearSelected; + public static string CompetitionGearSelectedOther; + + public static string StatHunger; + public static string StatThirst; + public static string StatTired; + + public static string StatsOtherHorses; + + public static string[] StatPlayerFormats; + + public static string StatThirstDizzy; + public static string StatHungerStumble; + + + // Misc Stats + + public static string StatMiscHeader; + public static string StatMiscNoneRecorded; + public static string StatMiscEntryFormat; + + // Quests Completed Page + public static string QuestLogHeader; + public static string QuestFormat; + + public static string QuestNotCompleted; + public static string QuestNotAvalible; + public static string QuestCompleted; + + public static string QuestFooterFormat; + + // Announcements + public static string NewUserMessage; + public static string WelcomeFormat; + public static string MotdFormat; + public static string IdleWarningFormat; + public static string LoginMessageFormat; + public static string LogoutMessageFormat; + + // Libary + public static string LibaryMainMenu; + public static string LibaryFindNpc; + public static string LibaryFindNpcSearchResultsHeader; + public static string LibaryFindNpcSearchResultFormat; + public static string LibaryFindNpcSearchNoResults; + public static string LibaryFindNpcLimit5; + + public static string LibaryFindRanch; + public static string LibaryFindRanchResultsHeader; + public static string LibaryFindRanchResultFormat; + public static string LibaryFindRanchResultsNoResults; + + + public static string HorseBreedFormat; + public static string HorseRelativeFormat; + public static string BreedViewerFormat; + + + // Records + + public static string PrivateNotesSavedMessage; + public static string PrivateNotesMetaFormat; + + // Profile + + public static string ProfileSavedMessage; + public static string ProfileTooLongMessage; + public static string ProfileSaveBlockedFormat; + + public static string ProfileViolationFormat; + // Hay Pile + + public static string HasPitchforkMeta; + public static string NoPitchforkMeta; + + // Chat + + public static string GlobalChatFormat; + public static string AdsChatFormat; + public static string BuddyChatFormat; + public static string NearChatFormat; + public static string IsleChatFormat; + public static string HereChatFormat; + public static string DirectChatFormat; + public static string ModChatFormat; + public static string AdminChatFormat; + + public static string YouWereSentToPrisionIsle; + + public static string AdminCommandFormat; + public static string PlayerCommandFormat; + + public static string MuteHelp; + public static string UnMuteHelp; + + public static string GlobalChatFormatForModerators; + public static string DirectChatFormatForModerators; + + public static string IsleChatFormatForSender; + public static string NearChatFormatForSender; + public static string HereChatFormatForSender; + public static string AdsChatFormatForSender; + public static string BuddyChatFormatForSender; + public static string DirectChatFormatForSender; + public static string AdminChatFormatForSender; + public static string ModChatFormatForSender; + + public static string DmModBadge; + public static string DmAutoResponse; + + public static string ChatViolationMessageFormat; + public static string PasswordNotice; + public static string CapsNotice; + public static string RandomMovement; + + // AutoReply + public static string AutoReplyTooLong; + public static string AutoReplyHasViolations; + + // Transport + + public static string CantAffordTransport; + public static string WelcomeToAreaFormat; + public static string TransportFormat; + public static string TransportCostFormat; + public static string TransportWagonFree; + + //Dropped Items + + public static string NothingMessage; + public static string ItemsOnGroundMessage; + public static string GrabItemFormat; + public static string GrabAllItemsButton; + public static string GrabAllItemsMessage; + public static string GrabbedItemMessage; + public static string GrabbedItemButInventoryFull; + public static string GrabbedAllItemsButInventoryFull; + public static string GrabbedAllItemsMessage; + public static string DroppedAnItemMessage; + public static string DroppedItemTileIsFull; + public static string DroppedItemCouldntPickup; + public static string ItemInformationFormat; + + // Pond + public static string PondHeader; + public static string PondGoFishing; + public static string PondNoFishingPole; + public static string PondNoEarthWorms; + public static string PondDrinkHereIfSafe; + public static string PondHorseDrinkFormat; + + public static string PondNotThirstyFormat; + public static string PondDrinkFullFormat; + public static string PondCantDrinkHpLowFormat; + public static string PondDrinkOhNoesFormat; + + // Mud Hole + + public static string MudHoleNoHorses; + public static string MudHoleRuinedGroomFormat; + + // Competition Gear + + public static string EquipCompetitionGearFormat; + public static string RemoveCompetitionGear; + + // Jewelry + public static string EquipJewelryFormat; + public static string MaxJewelryMessage; + public static string RemoveJewelry; + + // Books (Libary) + public static string BooksOfHorseIsle; + public static string BookEntryFormat; + public static string BookReadFormat; + + // Awards (Libary) + public static string AwardsAvalible; + public static string AwardEntryFormat; + + // Locations (Libary) + public static string LocationKnownIslands; + public static string LocationKnownTowns; + public static string LocationIslandFormat; + public static string LocationTownFormat; + public static string LocationDescriptionFormat; + + // Minigames (Libary) + public static string MinigameSingleplayer; + public static string MinigameTwoplayer; + public static string MinigameMultiplayer; + public static string MinigameCompetitions; + public static string MinigameEntryFormat; + + // Companion (Libary) + public static string CompanionViewFormat; + public static string CompanionEntryFormat; + + // Tack (Libary) + public static string TackViewSetFormat; + public static string TackSetPeiceFormat; + + // Workshop + public static string WorkshopCraftEntryFormat; + public static string WorkshopRequiresFormat; + public static string WorkshopRequireEntryFormat; + public static string WorkshopAnd; + + public static string WorkshopNoRoomInInventory; + public static string WorkshopMissingRequiredItem; + public static string WorkshopCraftingSuccess; + public static string WorkshopCannotAfford; + + // Horse + public static string BreedViewerMaximumStats; + public static string AdvancedStatFormat; + public static string BasicStatFormat; + public static string HorsesHere; + public static string WildHorseFormat; + public static string HorseCaptureTimer; + public static string YouCapturedTheHorse; + public static string HorseEvadedCapture; + public static string HorseEscapedAnyway; + public static string TooManyHorses; + public static string HorsesMenuHeader; + public static string UpdateHorseCategory; + public static string HorseEntryFormat; + public static string ViewBaiscStats; + public static string ViewAdvancedStats; + public static string HorseBuckedYou; + public static string HorseLlamaBuckedYou; + public static string HorseCamelBuckedYou; + + public static string HorseRidingMessageFormat; + public static string HorseNameYoursFormat; + public static string HorseNameOthersFormat; + public static string HorseDescriptionFormat; + public static string HorseHandsHeightFormat; + public static string HorseExperienceEarnedFormat; + + public static string HorseTrainableInFormat; + public static string HorseIsTrainable; + + public static string HorseLeasedRemainingTimeFormat; + + public static string HorseCannotMountUntilTackedMessage; + public static string HorseDismountedBecauseNotTackedMessageFormat; + public static string HorseMountButtonFormat; + public static string HorseDisMountButtonFormat; + public static string HorseFeedButtonFormat; + public static string HorseTackButtonFormat; + public static string HorsePetButtonFormat; + public static string HorseProfileButtonFormat; + + public static string HorseNoAutoSell; + public static string HorseAutoSellOthersFormat; + public static string HorseAutoSellFormat; + public static string HorseAutoSellPriceFormat; + public static string HorseCantAutoSellTacked; + public static string HorseCurrentlyCategoryFormat; + public static string HorseMarkAsCategory; + public static string HorseStats; + public static string HorseTacked; + public static string HorseTackFormat; + public static string HorseCompanion; + public static string HorseCompanionFormat; + public static string HorseNoCompanion; + + public static string HorseAdvancedStatsFormat; + public static string HorseBreedDetailsFormat; + public static string HorseHeightRangeFormat; + public static string HorsePossibleColorsFormat; + public static string HorseReleaseButton; + public static string HorseOthers; + + public static string HorseDescriptionEditFormat; + + public static string HorseSavedProfileMessageFormat; + public static string HorseProfileMessageTooLongError; + public static string HorseNameTooLongError; + public static string HorseNameViolationsError; + public static string HorseProfileMessageProfileError; + + + public static string HorseCatchTooManyHorsesMessage; + public static string HorseEquipTackMessageFormat; + public static string HorseUnEquipTackMessageFormat; + public static string HorseStopRidingMessage; + + public static string HorsePetMessageFormat; + public static string HorsePetTooHappy; + public static string HorsePetTooTired; + public static string HorseSetNewCategoryMessageFormat; + + public static string HorseAutoSellMenuFormat; + public static string HorseIsAutoSell; + public static string HorseAutoSellConfirmedFormat; + public static string HorseAutoSellRemoved; + + public static string HorseChangeAutoSell; + public static string HorseSetAutoSell; + public static string HorseCompanionChangeButton; + + public static string HorseTackFailAutoSell; + public static string HorseAreYouSureYouWantToReleaseFormat; + public static string HorseCantReleaseTheHorseYourRidingOn; + public static string HorseReleasedMeta; + public static string HorseReleasedBy; + + // All Stats (basic) + public static string HorseAllBasicStats; + public static string HorseBasicStatEntryFormat; + + // All Stats (all) + + public static string HorseAllStatsHeader; + public static string HorseNameEntryFormat; + public static string HorseBasicStatsCompactedFormat; + public static string HorseAdvancedStatsCompactedFormat; + public static string HorseAllStatsLegend; + + // Horse compainion menu + public static string HorseCompanionMenuHeaderFormat; + public static string HorseCompnaionMenuCurrentCompanionFormat; + public static string HorseCompanionEntryFormat; + public static string HorseCompanionEquipMessageFormat; + public static string HorseCompanionRemoveMessageFormat; + public static string HorseCompanionMenuCurrentlyAvalibleCompanions; + + // Horse Feed Menu + public static string HorseCurrentStatusFormat; + public static string HorseHoldingHorseFeed; + public static string HorsefeedFormat; + public static string HorseNeighsThanks; + public static string HorseCouldNotFinish; + + public static string HorseFeedPersonalityIncreased; + public static string HorseFeedInteligenceIncreased; + public static string HorseFeedMagicBeanFormat; + public static string HorseFeedMagicDropletFormat; + + // Tack horse menu + public static string HorseTackedAsFollowsFormat; + public static string HorseUnEquipSaddleFormat; + public static string HorseUnEquipSaddlePadFormat; + public static string HorseUnEquipBridleFormat; + public static string HorseTackInInventory; + public static string HorseLlamaTackInInventory; + public static string HorseCamelTackInInventory; + public static string HorseEquipFormat; + public static string BackToHorse; + + // Treasure + public static string PirateTreasureFormat; + public static string PotOfGoldFormat; + + // Farrier + public static string FarrierCurrentShoesFormat; + public static string FarrierApplyIronShoesFormat; + public static string FarrierApplySteelShoesFormat; + public static string FarrierShoeAllFormat; + + public static string FarrierPutOnSteelShoesMessageFormat; + public static string FarrierPutOnIronShoesMessageFormat; + public static string FarrierPutOnSteelShoesAllMesssageFormat; + public static string FarrierShoesCantAffordMessage; + + // Groomer + + public static string GroomerBestToHisAbilitiesFormat; + public static string GroomerCannotAffordMessage; + public static string GroomerBestToHisAbilitiesALL; + public static string GroomerDontNeed; + + public static string GroomerHorseCurrentlyAtFormat; + public static string GroomerApplyServiceFormat; + public static string GroomerApplyServiceForAllFormat; + public static string GroomerCannotImprove; + + // Vet + public static string VetServiceHorseFormat; + public static string VetSerivcesNotNeeded; + public static string VetApplyServicesFormat; + + public static string VetApplyServicesForAllFormat; + public static string VetFullHealthRecoveredMessageFormat; + + public static string VetServicesNotNeededAll; + public static string VetAllFullHealthRecoveredMessage; + public static string VetCannotAffordMessage; + + // Barn + public static string BarnHorseFullyFedFormat; + public static string BarnCantAffordService; + public static string BarnAllHorsesFullyFed; + public static string BarnServiceNotNeeded; + + public static string BarnHorseStatusFormat; + public static string BarnHorseMaxed; + public static string BarnLetHorseRelaxFormat; + public static string BarnLetAllHorsesReleaxFormat; + + // Horse Whisperer + + public static string WhispererHorseLocateButtonFormat; + public static string WhispererServiceCostYouFormat; + + public static string WhispererServiceCannotAfford; + public static string WhispererSearchingAmoungHorses; + public static string WhispererNoneFound; + public static string WhispererHorsesFoundFormat; + + // Consume + + public static string ConsumeItemFormat; + public static string ConsumedButMaxReached; + + // Inventory + public static string InventoryItemFormat; + public static string InventoryHeaderFormat; + + public static string ItemDropButton; + public static string ItemInformationButton; + public static string ItemInformationByIdButton; + public static string ItemConsumeButton; + public static string ItemThrowButton; + public static string ItemOpenButton; + public static string ItemUseButton; + public static string ItemWearButton; + public static string ItemReadButton; + + public static string ShopEntryFormat; + public static string ShopBuyButton; + public static string ShopBuy5Button; + public static string ShopBuy25Button; + + public static string SellButton; + public static string SellAllButton; + + // Highscore List + public static string HighscoreHeaderMeta; + public static string HighscoreFormat; + public static string BestTimeFormat; + + public static string GameBestTimeFormat; + public static string GameBestTimeHeaderFormat; + public static string GameHighScoreHeaderFormat; + public static string GameHighScoreFormat; + public static string GameWinLooseHeaderFormat; + public static string GameWinLooseFormat; + + // Awards + + public static string AwardOthersFormat; + public static string AwardHeader; + public static string NoAwards; + public static string AwardFormat; + + // Wishing Well + + public static string NoWishingCoins; + public static string WishingWellMeta; + public static string YouHaveWishingCoinsFormat; + + public static string TossedCoin; + public static string WishItemsFormat; + public static string WishMoneyFormat; + public static string WishWorldPeaceFormat; + public static string WorldPeaceOnlySoDeep; + + + // Shop + public static string ThingsIAmSelling; + public static string ThingsYouSellMe; + public static string InfinitySign; + public static string CantAfford1; + public static string CantAfford5; + public static string CantAfford25; + public static string Brought1Format; + public static string Brought1ButInventoryFull; + public static string Brought5ButInventoryFull; + public static string Brought25ButInventoryFull; + public static string Brought5Format; + public static string Brought25Format; + public static string Sold1Format; + public static string SoldAllFormat; + public static string CannotSellYoudGetTooMuchMoney; + + // Bank + public static string BankMadeInIntrestFormat; + public static string BankCarryingFormat; + public static string BankWhatToDo; + public static string BankOptionsFormat; + + public static string BankWithdrewMoneyFormat; + public static string BankDepositedMoneyFormat; + + public static string BankCantHoldThisMuch; + public static string BankYouCantHoldThisMuch; + + // Npc + public static string NpcStartChatFormat; + public static string NpcNoChatpoints; + public static string NpcChatpointFormat; + public static string NpcReplyFormat; + public static string NpcInformationButton; + public static string NpcTalkButton; + public static string NpcInformationFormat; + + // Sec Codes + public static string InvalidSecCodeError; + public static string YouEarnedAnItemFormat; + public static string YouEarnedAnItemButInventoryWasFullFormat; + public static string YouLostAnItemFormat; + public static string YouEarnedMoneyFormat; + public static string BeatHighscoreFormat; + public static string BeatBestHighscore; + public static string BeatBestTimeFormat; + + // Abuse Report + public static string AbuseReportMetaFormat; + public static string AbuseReportReasonFormat; + public static string AbuseReportPlayerNotFoundFormat; + public static string AbuseReportFiled; + public static string AbuseReportProvideValidReason; + + // Player List + public static string PlayerListAbuseReport; + public static string PlayerListHeader; + public static string PlayerListSelectFromFollowing; + public static string PlayerListOfBuddiesFormat; + public static string PlayerListOfNearby; + public static string PlayerListOfPlayersFormat; + public static string PlayerListOfPlayersAlphabetically; + public static string PlayerListMapAllBuddiesForamt; + public static string PlayerListMapAllPlayersFormat; + + public static string MuteButton; + public static string HearButton; + + public static int ThreeMonthSubscripitionIcon; + public static int YearSubscriptionIcon; + public static int NewUserIcon; + public static int MonthSubscriptionIcon; + public static int AdminIcon; + public static int ModeratorIcon; + + public static string BuddyListHeader; + public static string BuddyListOnlineBuddyEntryFormat; + public static string BuddyListOfflineBuddys; + public static string BuddyListOfflineBuddyEntryFormat; + + public static string NearbyPlayersListHeader; + public static string PlayerListEntryFormat; + + public static string PlayerListAllHeader; + public static string PlayerListAllAlphabeticalHeader; + + public static string PlayerListIdle; + public static string PlayerListIconFormat; + public static string PlayerListIconInformation; + + + + // Meta + public static string IsleFormat; + public static string TownFormat; + public static string AreaFormat; + public static string LocationFormat; + public static string PlayersHere; + public static string NearbyPlayers; + public static string North; + public static string East; + public static string South; + public static string West; + + public static string TileFormat; + public static string Seperator; + public static string VenusFlyTrapFormat; + public static string PasswordEntry; + + public static string ExitThisPlace; + public static string BackToMap; + public static string BackToMapHorse; + public static string LongFullLine; + public static string MetaTerminator; + public static string R1; + + // Pawneer + public static string PawneerUntackedHorsesICanBuy; + public static string PawneerHorseFormat; + public static string PawneerOrderMeta; + public static string PawneerHorseConfirmationFormat; + public static string PawneerHorseSoldMessagesFormat; + public static string PawneerHorseNotFound; + + public static string PawneerOrderSelectBreed; + public static string PawneerOrderBreedEntryFormat; + + public static string PawneerOrderSelectColorFormat; + public static string PawneerOrderColorEntryFormat; + + public static string PawneerOrderSelectGenderFormat; + public static string PawneerOrderGenderEntryFormat; + + public static string PawneerOrderHorseFoundFormat; + + // Shortcuts + public static string NoTelescope; + + // Drawing room + public static string DrawingLastToDrawFormat; + public static string DrawingContentsSavedInSlotFormat; + public static string DrawingContentsLoadedFromSlotFormat; + public static string DrawingPlzClearLoad; + public static string DrawingPlzClearDraw; + public static string DrawingNotSentNotSubscribed; + public static string DrawingCannotLoadNotSubscribed; + + // Birckpoet + public static string LastPoetFormat; + + // Multiroom + public static string MultiroomPlayersParticipating; + public static string MultiroomParticipentFormat; + + // Inn + public static string InnBuyMeal; + public static string InnBuyRest; + public static string InnItemEntryFormat; + public static string InnEnjoyedServiceFormat; + public static string InnFullyRested; + public static string InnCannotAffordService; + + // Fountain + public static string FountainMeta; + public static string FountainDrankYourFull; + public static string FountainDroppedMoneyFormat; + + // Login Fail messages + public static string LoginFailedReasonBanned; + public static string LoginFailedReasonBannedIpFormat; + + // Disconnect Messages + public static string KickReasonBanned; + public static string KickReasonKicked; + public static string KickReasonDuplicateLogin; + public static string KickReasonIdleFormat; + public static string KickReasonNoTime; + + // Riddler + public static string RiddlerEnterAnswerFormat; + public static string RiddlerCorrectAnswerFormat; + public static string RiddlerIncorrectAnswer; + public static string RiddlerAnsweredAll; + + // Password + public static string IncorrectPasswordMessage; + + // Swf + public static string BoatCutscene; + public static string WagonCutscene; + public static string BallonCutscene; + + // Click + public static string NothingInterestingHere; + + // Violations + public static string FormatProfileSavedBlocked(string reasons) + { + return ProfileViolationFormat.Replace("%REASON%", reasons); + } + public static string FormatRanchDesriptionBlocked(string reasons) + { + return RanchSavedDescrptionViolationsErrorFormat.Replace("%REASON%", reasons); + } + public static string FormatHorseProfileBlocked(string reasons) + { + return HorseProfileMessageProfileError.Replace("%REASON%", reasons); + } + + // Throwables + public static string FormatModSplatterBallAwardedOther(string username) + { + return ModSplatterballEarnedOtherFormat.Replace("%USERNAME%", username); + } + public static string FormatModSplatterBallAwardedYou(string username) + { + return ModSplatterballEarnedYouFormat.Replace("%USERNAME%", username); + } + public static string FormatThrownItemMessage(string itemFormat, string username) + { + return itemFormat.Replace("%USERNAME%", username); + } + + // Random Events + public static string FormatRandomEvent(string txt, int moneyEarned, string horseName) + { + return txt.Replace("%HORSENAME%", horseName).Replace("%MONEYEARNED%", "$" + moneyEarned.ToString("N0", CultureInfo.InvariantCulture).Replace("-", "")); + } + + // Event : Water Ballon Game + public static string FormatWaterBalloonGameWinner(string username, int timesHit) + { + return EventWinnerWaterBalloonGameFormat.Replace("%USERNAME%", username).Replace("%AMOUNT%", timesHit.ToString("N0", CultureInfo.InvariantCulture)); + } + + // Event : Real Time Quiz + public static string FormatEventRealTimeQuizMeta(int questionNo, int totalMistakes, string category, string question) + { + return EventMetaRealTimeQuizFormat.Replace("%QUESTIONNUMBER%", questionNo.ToString()).Replace("%MISTAKES%", totalMistakes.ToString()).Replace("%CATEGORY%", category).Replace("%QUESTIONTEXT%", question); + } + public static string FormatEventRealTimeQuizBonus(int bonusMoney) + { + return EventBonusRealTimeQuizFormat.Replace("%MONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatEventRealTimeQuizWinBonus(int bonusMoney) + { + return EventWinBonusRealTimeQuizFormat.Replace("%MONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatEventRealTimeQuizWin(string winner) + { + return EventWinRealTimeQuizFormat.Replace("%USERNAME%", winner); + } + + + // Event : Tack Shop Giveaway + public static string FormatEventTackShopGiveawayEnd(string shopName, string townName) + { + return EventEndTackShopGiveawayFormat.Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); + } + public static string FormatEventTackShopGiveawayWon(string playerName, string breed, string shopName, string townName, int totalPlayersAt) + { + return EventWonTackShopGiveawayFormat.Replace("%PLAYERNAME%", playerName).Replace("%BREED%", breed).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName).Replace("%PLAYERCOUNT%", totalPlayersAt.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatEventTackShopGiveaway1Min(string color, string breed, string gender, string shopName, string townName) + { + return Event1MinTackShopGiveawayFormat.Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%GENDER%", gender).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); + } + public static string FormatEventTackShopGiveawayStart(string color, string breed, string gender, string shopName, string townName) + { + return EventStartTackShopGiveawayFormat.Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%GENDER%", gender).Replace("%SHOPNAME%", shopName).Replace("%TOWN%", townName); + } + + // Event : Real Time Riddle + public static string FormatEventRealTimeRiddleStart(string riddleText) + { + return EventStartRealTimeRiddleFormat.Replace("%RIDDLETEXT%", riddleText); + } + public static string FormatEventRealTimeRiddleWonForOthers(string winnerUserName) + { + return EventWonRealTimeRiddleForOthersFormat.Replace("%PLAYERNAME%", winnerUserName); + } + public static string FormatEventRealTimeRiddleWonForYou(int prize) + { + return EventWonRealTimeRiddleForYouFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); + } + + // Prison Command + public static string FormatPrisonCommandMessage(string username) + { + return PrisonIsleCommandMessageFormat.Replace("%USERNAME%", username.ToUpper()); + } + + // Rules Command + public static string FormatRulesCommandMessage(string username) + { + return RulesIsleCommandMessageFormat.Replace("%USERNAME%", username.ToUpper()); + } + + // Mute Command + public static string FormatStoppedMutingPlayer(string username) + { + return StoppedMutingPlayerFormat.Replace("%USERNAME%", username); + } + public static string FormatNowMutingPlayer(string username) + { + return NowMutingPlayerFormat.Replace("%USERNAME%", username); + } + public static string FormatCantSendYourIgnoringPlayer(string username) + { + return CantSendPrivateMessagePlayerMutedFormat.Replace("%USERNAME%", username); + } + public static string FormatPlayerIgnoringAllPms(string username) + { + return PlayerIgnoringAllPrivateMessagesFormat.Replace("%USERNAME%", username); + } + public static string FormatPlayerIgnoringYourPms(string username) + { + return PlayerIgnoringYourPrivateMessagesFormat.Replace("%USERNAME%", username); + } + + // AUTO SELL + + public static string FormatAutoSellSoldOffline(string horseName, int price, string toUsername) + { + return AutoSellYouSoldHorseOfflineFormat.Replace("%HORSE%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", toUsername); + } + + public static string FormatAutoSellSold(string horseName, int price, string toUsername) + { + return AutoSellYouSoldHorseFormat.Replace("%HORSE%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", toUsername); + } + + public static string FormatAutoSellSuccess(string horseName) + { + return AutoSellSuccessFormat.Replace("%HORSENAME%", horseName); + } + + // MULTIHORSES + public static string FormatMultiHorses(int placing, string horseName, string horseBreed, string swf) + { + return MultiHorseFormat.Replace("%NUMBER%", placing.ToString()).Replace("%HORSENAME%", horseName).Replace("%BREED%", horseBreed).Replace("%SWF%", swf); + } + + // 2PLAYER + public static string Format2PlayerRecordLose(string gameTitle) + { + return TwoPlayerRecordedLossFormat.Replace("%GAMETITLE%", gameTitle); + } + public static string Format2PlayerRecordWin(string gameTitle) + { + return TwoPlayerRecordedWinFormat.Replace("%GAMETITLE%", gameTitle); + } + public static string Format2PlayerStartingGame(string playerName) + { + return TwoPlayerStartingUpGameFormat.Replace("%PLAYERNAME%", playerName); + } + public static string Format2PlayerYouInvited(string playerName) + { + return TwoPlayerYourInvitedFormat.Replace("%PLAYERNAME%", playerName); + } + public static string Format2PlayerYourInvited(string playerName) + { + return TwoPlayerYourInvitedFormat.Replace("%PLAYERNAME%", playerName); + } + public static string Format2PlayerGameInProgress(string playerName) + { + return TwoPlayerGameInProgressFormat.Replace("%PLAYERNAME%", playerName); + } + public static string Format2PlayerPlayingWith(string playerName) + { + return TwoPlayerPlayingWithFormat.Replace("%PLAYERNAME%", playerName); + } + public static string Format2PlayerAcceptButton(int playerId) + { + return TwoPlayerAcceptButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string Format2PlayerInviteButton(int playerId) + { + return TwoPlayerInviteButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string Format2PlayerPlayerName(string playerName) + { + return TwoPlayerPlayerFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatAddBuddyRemoveBuddy(string buddyName) + { + return AddBuddyDeleteBuddyFormat.Replace("%PLAYERNAME%", buddyName); + } + + + public static string FormatTagTotalBuddies(int count) + { + return TagOtherBuddiesOnlineFormat.Replace("%TOTALBUDDIESON%", count.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTagYourIt(string taggedPlayer, string tagger) + { + return TagYourItFormat.Replace("%PLAYERNAME%", taggedPlayer).Replace("%USERNAME%", tagger); + } + public static string FormatAddBuddyConfirmed(string playername) + { + return AddBuddyYourNowBuddiesFormat.Replace("%PLAYERNAME%", playername); + } + public static string FormatAddBuddyPendingOther(string playername) + { + return AddBuddyOtherPendingFormat.Replace("%PLAYERNAME%", playername); + } + public static string FormatOtherNoCompetitionGear(string pronoun) + { + return NoCompetitionGearOther.Replace("%PRONOUN%", pronoun); + } + public static string FormatOtherCompetitionGear(string pronoun) + { + return CompetitionGearSelectedOther.Replace("%PRONOUN%", pronoun); + } + public static string FormatOtherJewelerySelected(string pronoun) + { + return JewelrySelectedOther.Replace("%PRONOUN%", pronoun); + } + public static string FormatOtherNoJewelery(string pronoun) + { + return NoJewerlyEquippedOther.Replace("%PRONOUN%", pronoun); + } + public static string FormatOtherHorsesMeta(string pronoun) + { + return StatsOtherHorses.Replace("%PRONOUN%", pronoun); + } + + // Socials + public static string FormatSocialButton(int socialId, string buttonName) + { + string id = "" + Convert.ToChar(0x21 + socialId); + return SocialButton.Replace("%ID%", id).Replace("%SOCIALNAME%", buttonName); + } + public static string FormatSocialMessage(string socialMsg, string targetName, string senderName) + { + return SocialMessageFormat.Replace("%SOCIALMSG%", socialMsg.Replace("%TARGETNAME%", targetName).Replace("%SENDERNAME%", senderName)); + } + public static string FormatSocialMenuType(string type) + { + return SocialTypeFormat.Replace("%TYPE%", Util.CapitalizeFirstLetter(type.ToLower())); + } + + // Trading + + public static string FormatTradeYouReceived(int money) + { + return TradeYouReceivedMoneyMessageFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTradeYouSpent(int money) + { + return TradeYouSpentMoneyMessageFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTradePlayerCantHandleMoreHorses(string playerName) + { + return TradeOtherPlayerCantHandleMoreHorsesFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatTradeCanceledByPlayer(string playerName) + { + return TradeCanceledByOtherPlayerFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatTradeItemOfferTooMuch(int quantity, int enteredAmount) + { + return TradeItemOfferTooMuchFormat.Replace("%QUANTITY%", quantity.ToString()).Replace("%ENTEREDAMOUNT%", enteredAmount.ToString()); + } + public static string FormatTradeOfferMoneySubmenu(int currentOffer) + { + return TradeMoneyOfferSubmenuFormat.Replace("%CURRENTMONEYOFFER%", currentOffer.ToString()); + } + public static string FormatTradeOfferItemSubmenu(int quantity) + { + return TradeItemOfferSubmenuFormat.Replace("%QUANTITY%", quantity.ToString()); + } + public static string FormatTradeOfferItem(int itemIconId, string itemName, int itemCount, int itemId) + { + return TradeOfferItemFormat.Replace("%ICONID%", itemIconId.ToString()).Replace("%ITEMNAME%", itemName).Replace("%ITEMCOUNT%", itemCount.ToString()).Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatTradeOfferHorse(string horseName, bool tacked, int horseRandomId) + { + return TradeOfferHorseFormat.Replace("%HORSENAME%", horseName).Replace("%ISTACKED%", tacked ? Messages.TradeOfferHorseTacked : "").Replace("%HORSERANDOMID%", horseRandomId.ToString()); + } + public static string FormatTradeWhatToOffer(string playerName) + { + return TradeWhatToOfferFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatTradeHorseOffer(string horseName, int horseRandomId) + { + return TradeOfferingHorseFormat.Replace("%HORSENAME%", horseName).Replace("%HORSERANDOMID%", horseRandomId.ToString()); + } + public static string FormatTradeItemOffer(int iconId, int quantity, string item) + { + return TradeOfferingItemFormat.Replace("%ICONID%", iconId.ToString()).Replace("%TOTAL%", quantity.ToString()).Replace("%ITEM%", item); + } + public static string FormatTradeMoneyOffer(int amount) + { + return TradeOfferingMoneyFormat.Replace("%MONEY%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTradeOtherOffering(string playerName) + { + return TradeOtherOfferingFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatTradeYourOffering(string playerName) + { + return TradeYourOfferingFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatTradeWithPlayer(string playerName) + { + return TradeWithPlayerFormat.Replace("%PLAYERNAME%", playerName); + } + + // Player Interactions + public static string FormatPmButton(string playerName) + { + return PmButton.Replace("%PLAYERNAME%", playerName); + } + public static string FormatPlayerHereTagButton(int playerId) + { + return PlayerHereTagButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerHereBuddyButton(int playerId) + { + return PlayerHereAddBuddyButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerHereTradeButton(int playerId) + { + return PlayerHereTradeButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerHereSocialButtton(int playerId) + { + return PlayerHereSocialButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerHereProfileButton(int playerId) + { + return PlayerHereProfileButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerHereMenu(int playerIcon, string playerName, string button) + { + string vstr = "^I" + playerIcon.ToString(); + if (playerIcon == -1) + vstr = ""; + return PlayerHereMenuFormat.Replace("%PLAYERICON%", vstr).Replace("%PLAYERNAME%", playerName).Replace("%BUTTONS%", button); + } + + // Auctions + public static string FormatAuctionSoldTo(string playerName, int money) + { + return AuctionSoldToFormat.Replace("%PLAYERNAME%", playerName).Replace("%PRICE%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAuctionGoingTo(int timeRemaining, string winningPlayer, int winningBid, int auctionRandomId) + { + return AuctionGoingToFormat.Replace("%TIME%", timeRemaining.ToString()).Replace("%WINNINGPLAYER%", winningPlayer).Replace("%WINNINGBID%", winningBid.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AUCTIONRANDOMID%", auctionRandomId.ToString()); + } + public static string FormatAuctionHorseSold(int money) + { + return AuctionHorseSoldFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAuctionBroughtHorse(int money) + { + return AuctionYouBroughtAHorseFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAuctionYourOutbidBy(string username, int amount) + { + return AuctionYouveBeenOutbidFormat.Replace("%USERNAME%", username).Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAuctionBidRaised(int prevAmount, int newAmount) + { + return AuctionBidRaisedFormat.Replace("%AMOUNT%", prevAmount.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NEWAMOUNT%", newAmount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAuctionHorseListEntry(string horseName, bool tacked, int randomId) + { + return AuctionHorseListEntryFormat.Replace("%HORSENAME%", horseName).Replace("%TACKEDORNO%", tacked ? Messages.AuctionHorseIsTacked : "").Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatAuctionHorseEntry(string username, string color, string breedName, string gender, int experience, string lookButton) + { + return AuctionHorseEntryFormat.Replace("%USERNAME%", username).Replace("%COLOR%", color).Replace("%BREED%", breedName).Replace("%GENDER%", gender).Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)).Replace("%LOOKBUTTON%", lookButton); + + } + public static string FormatAuctionViewHorseButton(int randomId) + { + return AuctionHorseViewButton.Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatAuctionPlayersHere(string usernames) + { + return AuctionPlayersHereFormat.Replace("%USERNAMES%", usernames); + } + + + public static string FormatHorseReturnedToOwner(string horseName) + { + return HorseLeaserReturnedToOwnerFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatHorseReturnedToUniter(string horseName) + { + return HorseLeaserReturnedToUniterFormat.Replace("%HORSENAME%", horseName); + } + + public static string FormatArenaCompetingHorseEntry(string userName, string horseName, int horseRandomId) + { + return ArenaCompetingHorseFormat.Replace("%USERNAME%", userName).Replace("%HORSENAME%", horseName).Replace("%HORSERANDOMID%", horseRandomId.ToString()); + } + public static string FormatArenaEnterHorseButton(string horseName, int entryCost, int horseRandomId) + { + return ArenaEnterHorseFormat.Replace("%HORSENAME%", horseName).Replace("%ENTRYCOST%", entryCost.ToString("N0", CultureInfo.InvariantCulture)).Replace("%HORSERANDOMID%", horseRandomId.ToString()); + } + public static string FormatArenaCurrentlyTakingEntries(int hour, int minute, string amOrPm, int timeUntil) + { + return ArenaCurrentlyTakingEntriesFormat.Replace("%HOUR%", hour.ToString()).Replace("%MINUTE%", minute.ToString("00")).Replace("%AMORPM%", amOrPm).Replace("%TIMEUNTIL%", timeUntil.ToString()); + } + public static string FormatArenaEventName(string eventName) + { + return ArenaEventNameFormat.Replace("%EVENTNAME%", eventName); + } + public static string FormatArenaOnlyWinnerWinsMessage(int experience) + { + return ArenaOnlyWinnerWins.Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatArenaYouWinMessage(int prizeMoney, int experience) + { + return ArenaYouWinFormat.Replace("%PRIZE%", prizeMoney.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatRanchForcefullySoldMessage(int amount) + { + return RanchForcefullySoldFormat.Replace("%AMOUNT%", amount.ToString()); + } + public static string FormatArenaYourScore(int score) + { + return ArenaYourScoreFormat.Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatArenaPlacing(string place, string playerName, int score) + { + return ArenaPlacingFormat.Replace("%PLACE%", place).Replace("%USERNAME%", playerName).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatHorseGamesEntry(int placing, string horseName, string Swf) + { + return HorseGamesHorseEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%HORSENAME%", horseName).Replace("%SWF%", Swf); + } + public static string FormatCityHallCantFindPlayerMessage(string playerName) + { + return CityHallCantFindPlayerMessageFormat.Replace("%PLAYERNAME%", playerName); + } + public static string FormatCityHallTopExperiencedHorses(int placing, int experiencePoints, string playerName, string horseName) + { + return CityHallExperiencedHorseEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%EXP%", experiencePoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName); + } + public static string FormatCityHallTopMinigamePlayers(int placing, int gamesPlayed, string playerName) + { + return CityHallMinigamePlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%GAMESPLAYED%", gamesPlayed.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); + } + public static string FormatCityHallTopExperiencedPlayersEntry(int placing, int experiencePoints, string playerName) + { + return CityHallExperiencePlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%EXP%", experiencePoints.ToString()).Replace("%PLAYERNAME%", playerName); + } + public static string FormatCityHallTopAdventurousPlayersEntry(int placing, int questPoints, string playerName) + { + return CityHallAdventurousPlayerEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); + } + public static string FormatCityHallTopSpoiledHorseEntry(int spoiled, string playerName, string horseName) + { + return CityHallSpoiledHorseEntryFormat.Replace("%SPOILED%", spoiled.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName); + } + public static string FormatCityHallTopPlayerEntry(int placing, double money, string playerName) + { + return CityHallRichPlayerFormat.Replace("%PLACING%", placing.ToString()).Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName); + } + public static string FormatCityHallTopRanchEntry(int placing, string playerName, int value, string mapxy) + { + return CityHallRanchEntryFormat.Replace("%PLACING%", placing.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%VALUE%", value.ToString("N0", CultureInfo.InvariantCulture)).Replace("%MAPXY%", mapxy); + } + public static string FormatCityHallBestExpAutoSellEntry(int exp, string playerName, string horseName, int price, string color, string breed) + { + return CityHallMostExpAutoSellHorseEntryFormat.Replace("%EXP%", exp.ToString()).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%COLOR%", color).Replace("%BREED%", breed); + } + public static string FormatCityHallCheapAutoSellEntry(int price, string playerName, string horseName, string color, string breed, int exp) + { + return CityHallCheapestAutoSellHorseEntryFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERNAME%", playerName).Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREED%", breed).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatCityHallSendMailMessage(string playerName) + { + return CityHallSentMessageFormat.Replace("%PLAYERNAME%", playerName); + } + + + + public static string FormatMailReadMessage(string fromUser, string date, string subject, string message, int randomId) + { + return MailReadMetaFormat.Replace("%PLAYERNAME%", fromUser).Replace("%DATE%", date).Replace("%SUBJECT%", subject).Replace("%MESSAGE%", message).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatMailEntry(string subject, string fromUser, int randomId) + { + return MailEntryFormat.Replace("%SUBJECT%", subject).Replace("%PLAYERNAME%", fromUser).Replace("%RANDOMID%", randomId.ToString()); + } + + public static string FormatTrainerCantTrainAgainIn(int time) + { + return TrainerCantTrainAgainInFormat.Replace("%TIME%", time.ToString()); + } + public static string FormatTrainerFullyTrained(string horseName, int curStat) + { + return TrainerHorseFullyTrainedFormat.Replace("%HORSENAME%", horseName).Replace("%STAT%", curStat.ToString()); + } + public static string FormatTrainerTrainInEntry(string horseName, int curStat, int maxStat, int randomId) + { + return TrainerHorseEntryFormat.Replace("%HORSENAME%", horseName).Replace("%CURSTAT%", curStat.ToString()).Replace("%MAXSTAT%", maxStat.ToString()).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatTrainerHeaderFormat(string stat, int price, int amountInStat, int expamount) + { + return TrainerHeaderFormat.Replace("%STAT%", stat).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", amountInStat.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXPAMOUNT%", expamount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTrainedInStatFormat(string horseName, string stat) + { + return TrainedInStatFormat.Replace("%HORSENAME%", horseName).Replace("%STAT%", stat); + } + public static string FormatHorseFeedMagicDropletUsed(string oldColor, string newColor) + { + return HorseFeedMagicDropletFormat.Replace("%PREVCOLOR%", oldColor).Replace("%NEWCOLOR%", newColor); + } + public static string FormatHorseFeedMagicBeanUsed(double oldH, double newH) + { + return HorseFeedMagicBeanFormat.Replace("%PREVHANDS%", oldH.ToString(CultureInfo.InvariantCulture)).Replace("%NEWHANDS%", newH.ToString(CultureInfo.InvariantCulture)); + } + public static string FormatSantaOpenPresent(string itemName) + { + return SantaItemOpenedFormat.Replace("%ITEM%", itemName); + } + public static string FormatSantaItemEntry(int iconId, string itemName, int randomId) + { + return SantaWrapItemFormat.Replace("%ICONID%", iconId.ToString()).Replace("%NAME%", itemName).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatPawneerOrderHorseFound(string breedName, string color, string gender, int height, int personality, int inteligence) + { + return PawneerOrderHorseFoundFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color).Replace("%GENDER%", gender).Replace("%HEIGHT%", height.ToString()).Replace("%PERSONALITY%", personality.ToString()).Replace("%INTELIGENCE%", inteligence.ToString()); + } + public static string FormatPawneerOrderGenderEntry(string genderName, string genderInternal) + { + return PawneerOrderGenderEntryFormat.Replace("%GENDERNAME%", genderName).Replace("%GENDERINTERNAL%", genderInternal); + } + public static string FormatPawneerOrderSelectGender(string color, string breedName) + { + return PawneerOrderSelectGenderFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color); + } + + public static string FormatPawneerOrderColorEntry(string color) + { + return PawneerOrderColorEntryFormat.Replace("%COLOR%", color); + } + public static string FormatPawneerOrderSelectColor(string breedName) + { + return PawneerOrderSelectColorFormat.Replace("%BREEDNAME%", breedName); + } + public static string FormatPawneerOrderBreedEntry(string breedName, int breedId) + { + return PawneerOrderBreedEntryFormat.Replace("%BREEDNAME%", breedName).Replace("%BREEDID%", breedId.ToString()); + } + public static string FormatPawneerHorseEntry(string horseName, int price, int randomId) + { + return PawneerHorseFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatPawneerConfirmPawn(string breedName, int randomId) + { + return PawneerHorseConfirmationFormat.Replace("%BREEDNAME%", breedName).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatPawneerSold(string horseName, int price) + { + return PawneerHorseSoldMessagesFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + + + public static string FormatPlayerHereMessage(string playerName) + { + return ClickPlayerHereFormat.Replace("%USERNAME%", playerName); + } + + // Barn Formats + public static string FormatBarnLetAllHorsesReleax(int price) + { + return BarnLetAllHorsesReleaxFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBarnLetHorseRelax(int price, int randomId) + { + return BarnLetHorseRelaxFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatBarnHorseStatus(string horseName, int tiredness, int hunger, int thirst) + { + return BarnHorseStatusFormat.Replace("%HORSENAME%", horseName).Replace("%TIREDNESS%", tiredness.ToString()).Replace("%HUNGER%", hunger.ToString()).Replace("%THIRST%", thirst.ToString()); + } + public static string FormatBarnHorseFullyFed(string horseName) + { + return BarnHorseFullyFedFormat.Replace("%HORSENAME%", horseName); + } + // Farrier Formats + public static string FormatFarrierPutOnSteelShoesAllMesssage(int curShoes, int maxShoes) + { + return FarrierPutOnSteelShoesAllMesssageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); + } + public static string FormatFarrierPutOnIronShoesMessage(int curShoes, int maxShoes) + { + return FarrierPutOnIronShoesMessageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); + } + public static string FormatFarrierPutOnSteelShoesMessage(int curShoes, int maxShoes) + { + return FarrierPutOnSteelShoesMessageFormat.Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); + } + public static string FormatFarrierApplySteelToAll(int price, int incBy) + { + return FarrierShoeAllFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()); + } + public static string FormatFarrierApplySteel(int price, int incBy, int horseRandomid) + { + return FarrierApplySteelShoesFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()).Replace("%HORSERANDOMID%", horseRandomid.ToString()); + } + public static string FormatFarrierApplyIron(int price, int incBy, int horseRandomid) + { + return FarrierApplyIronShoesFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%INCBY%", incBy.ToString()).Replace("%HORSERANDOMID%", horseRandomid.ToString()); + } + public static string FormatFarrierCurrentShoes(string horseName, int curShoes, int maxShoes) + { + return FarrierCurrentShoesFormat.Replace("%HORSENAME%", horseName).Replace("%TOTAL%", curShoes.ToString()).Replace("%MAX%", maxShoes.ToString()); + } + + + // Ranch Formats + + public static string FormatRanchTrainFail(string horseName, int timeout) + { + return RanchTrainCantTrainFormat.Replace("%HORSENAME%", horseName).Replace("%TIME%", timeout.ToString()); + } + public static string FormatRanchTrainBadMood(string horseName) + { + return RanchTrainBadMoodFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatRanchTrain(string horseName, int speed, int strength, int conformation, int agility, int endurance, int exp) + { + return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName).Replace("%SPEED%", speed.ToString("N0", CultureInfo.InvariantCulture)).Replace("%STRENGTH%", strength.ToString("N0", CultureInfo.InvariantCulture)).Replace("%CONFORMATION%", conformation.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AGILITY%", agility.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ENDURANCE%", endurance.ToString("N0", CultureInfo.InvariantCulture)).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatRanchDescOthers(string description) + { + return RanchDescriptionOthersFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(description)); + } + public static string FormatRanchSoldMessage(int price) + { + return RanchSoldFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatRanchUnownedMeta(int price) + { + return RanchUnownedRanchFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatRanchClickMessage(string owner, string title) + { + return RanchClickMessageFormat.Replace("%USERNAME%", owner).Replace("%TITLE%", title); + } + public static string FormatRanchBroughtMessage(int price) + { + return RanchRanchBroughtMessageFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatRanchEditDescriptonMeta(string curTitle, string curDesc) + { + return RanchEditDescriptionMetaFormat.Replace("%RANCHTITLE%", curTitle).Replace("%RANCHDESC%", curDesc); + } + public static string FormatRanchTitle(string username, string title) + { + return RanchTitleFormat.Replace("%USERNAME%", username).Replace("%TITLE%", title); + } + public static string FormatRanchYoursDescription(string description) + { + return RanchYourDescriptionFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(description)); + } + public static string FormatBuildingEntry(string name, int price, int buildingId) + { + return RanchBuildingEntryFormat.Replace("%BUILDINGNAME%", name).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BUILDINGID%", buildingId.ToString()); + } + public static string FormatBuildingInformaton(string name, string description) + { + return RanchBuildingInformationFormat.Replace("%BUILDINGNAME%", name).Replace("%BUILINGDESCRIPTION%", description); + } + public static string FormatBuildingAlreadyPlaced(string name, int buildingId, int price) + { + return RanchBuildingAlreadyHere.Replace("%BUILDINGNAME%", name).Replace("%BUILDINGID%", buildingId.ToString()).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuildingTornDown(int price) + { + return RanchTornDownRanchBuildingFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatViewBuilding(string name, string description) + { + return RanchViewBuildingFormat.Replace("%BUILDINGNAME%", name).Replace("%BUILDINGDESC%", description); + } + public static string FormatBarn(string horseList) + { + return RanchBarnHorsesFormat.Replace("%HORSELIST%", horseList); + } + public static string FormatCurrentUpgrade(string curUpgradeName, string curUpgradeDesc, string YouCouldUpgrade, int ranchSellPrice) + { + return UpgradeCurrentUpgradeFormat.Replace("%UPGRADENAME%", curUpgradeName).Replace("%UPGRADEDESC%", curUpgradeDesc).Replace("%YOUCOULDUPGRADE%", YouCouldUpgrade).Replace("%SELLPRICE%", ranchSellPrice.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatNextUpgrade(string nextUpgrade, int cost) + { + return UpgradeNextUpgradeFormat.Replace("%NEXTUPGRADE%", nextUpgrade).Replace("%COST%", cost.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuildingBarn(int numbBarns, int numbHorses) + { + return BuildingBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuildingBigBarn(int numbBarns, int numbHorses) + { + return BuildingBigBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuildingGoldBarn(int numbBarns, int numbHorses) + { + return BuildingGoldBarnFormat.Replace("%COUNT%", numbBarns.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", numbHorses.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuildingWindmill(int numbWindmills, int moneyEarns) + { + return BuildingWindmillFormat.Replace("%COUNT%", numbWindmills.ToString("N0", CultureInfo.InvariantCulture)).Replace("%AMOUNT%", moneyEarns.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTrainSuccess(string horseName) + { + return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatCantTrain(string horseName) + { + return RanchTrainCantTrainFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatRiddlerRiddle(string riddle) + { + return RiddlerEnterAnswerFormat.Replace("%RIDDLE%", riddle); + } + public static string FormatRiddlerAnswerCorrect(string reason) + { + return RiddlerCorrectAnswerFormat.Replace("%REASON%", reason); + } + public static string FormatPirateTreasure(int prize) + { + return PirateTreasureFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatPotOfGold(int prize) + { + return PotOfGoldFormat.Replace("%PRIZE%", prize.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatWorkshopCraftEntry(int iconId, string itemName, int price, int itemId, int craftId) + { + return WorkshopCraftEntryFormat.Replace("%ICONID%", iconId.ToString()).Replace("%ITEMNAME%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEMID%", itemId.ToString()).Replace("%CRAFTID%", craftId.ToString()); + } + public static string FormatWorkshopRequirements(string requiresTxt) + { + return WorkshopRequiresFormat.Replace("%REQUIRES%", requiresTxt); + } + public static string FormatWorkshopRequireEntry(int requiredCount, string itemNamePlural) + { + return WorkshopRequireEntryFormat.Replace("%REQCOUNT%", requiredCount.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEMNAME%", itemNamePlural); + } + + public static string FormatDrawingRoomSaved(int slot) + { + return DrawingContentsSavedInSlotFormat.Replace("%SLOT%", slot.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatDrawingRoomLoaded(int slot) + { + return DrawingContentsLoadedFromSlotFormat.Replace("%SLOT%", slot.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatLastToDraw(string username) + { + return DrawingLastToDrawFormat.Replace("%USERNAME%", username); + } + public static string FormatGroomerApplyAllService(int count, int price) + { + return GroomerApplyServiceForAllFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatGroomerApplyService(int price, int randomid) + { + return GroomerApplyServiceFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%RANDOMID%", randomid.ToString()); + } + public static string FormatHorseGroomCurrentlyAt(string horseName, int currentGroom, int maxGroom) + { + return GroomerHorseCurrentlyAtFormat.Replace("%HORSENAME%", horseName).Replace("%TOTAL%", currentGroom.ToString()).Replace("%MAX%", maxGroom.ToString()); + } + public static string FormatHorseGroomedToBestAbilities(string horseName) + { + return GroomerBestToHisAbilitiesFormat.Replace("%HORSENAME%", horseName); + } + + public static string FormatBookReadMeta(string author, string title, string bookText) + { + return BookReadFormat.Replace("%AUTHOR%", author).Replace("%TITLE%", title).Replace("%TEXT%", bookText); + } + public static string FormatBookEntry(string title, string author, int id) + { + return BookEntryFormat.Replace("%TITLE%", title).Replace("%AUTHOR%", author).Replace("%ID%", id.ToString()); + } + public static string FormatIpBannedMessage(string Ip) + { + return LoginFailedReasonBannedIpFormat.Replace("%IP%", Ip); + } + public static string FormatAwardEntry(int iconId, string awardName, int bonusMoney, string description) + { + return AwardEntryFormat.Replace("%ICONID%", iconId.ToString()).Replace("%AWARDNAME%", awardName).Replace("%BONUSMONEY%", bonusMoney.ToString("N0", CultureInfo.InvariantCulture)).Replace("%DESCRIPTION%", description); + } + + public static string FormatLocationDescription(string description) + { + return LocationDescriptionFormat.Replace("%AREADESC%", description); + } + public static string FormatIslandLocation(string isleName, string mapXy) + { + return LocationIslandFormat.Replace("%ISLENAME%", isleName).Replace("%MAPXY%", mapXy); + } + public static string FormatTownLocation(string townName, string mapXy) + { + return LocationTownFormat.Replace("%TOWNNAME%", townName).Replace("%MAPXY%", mapXy); + } + public static string FormatMinigameEntry(string gameName, string mapXy) + { + return MinigameEntryFormat.Replace("%GAMENAME%", gameName).Replace("%MAPXY%", mapXy); + } + public static string FormatCompanionEntry(string itemDescription) + { + return CompanionEntryFormat.Replace("%COMPANIONDESC%", itemDescription); + } + public static string FormatCompanionViewButton(int iconid, string itemName, string swf) + { + return CompanionViewFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COMPANIONNAME%", itemName).Replace("%SWF%", swf); + } + public static string FormatTackSetPeice(string itemName, string itemDescription) + { + return TackSetPeiceFormat.Replace("%ITEMNAME%", itemName).Replace("%ITEMDESC%", itemDescription); + } + + public static string FormatTackSetView(int iconId, string tackSetName, string swf) + { + return TackViewSetFormat.Replace("%ICONID%", iconId.ToString()).Replace("%SETNAME%", tackSetName).Replace("%SWF%", swf); + } + + public static string FormatWhispererHorseFoundMeta(string mapXys) + { + return WhispererHorsesFoundFormat.Replace("%MAPXYS%", mapXys); + } + + public static string FormatWhispererPrice(int price) + { + return WhispererServiceCostYouFormat.Replace("%MONEY%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatWhispererHorseBreedButton(string breedName, int breedId) + { + return WhispererHorseLocateButtonFormat.Replace("%BREEDNAME%", breedName).Replace("%BREEDID%", breedId.ToString()); + } + + public static string FormatVetServiceHorseMeta(string horseName, int currentHealth, int maxHealth) + { + return VetServiceHorseFormat.Replace("%HORSENAME%", horseName).Replace("%CURHEALTH%", currentHealth.ToString()).Replace("%MAXHEALTH%", maxHealth.ToString()); + } + + public static string FormatVetApplyServiceMeta(int price, int randomId) + { + return VetApplyServicesFormat.Replace("%PRICE%", price.ToString()).Replace("%RANDOMID%", randomId.ToString()); + } + + public static string FormatVetApplyAllServiceMeta(int price) + { + return VetApplyServicesForAllFormat.Replace("%PRICE%", price.ToString()); + } + + public static string FormatVetHorseAtFullHealthMessage(string horseName) + { + return VetFullHealthRecoveredMessageFormat.Replace("%HORSENAME%", horseName); + } + + + public static string FormatPondNotThirsty(string horseName) + { + return PondNotThirstyFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatPondDrinkOhNoes(string horseName) + { + return PondDrinkOhNoesFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatPondDrinkFull(string horseName) + { + return PondDrinkFullFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatPondHpLowMessage(string horseName) + { + return PondCantDrinkHpLowFormat.Replace("%HORSENAME%", horseName); + } + + public static string FormatPondDrinkHorseFormat(string horseName, int thirst, int maxThirst, int randomId) + { + return PondHorseDrinkFormat.Replace("%HORSENAME%", horseName).Replace("%THIRST%", thirst.ToString()).Replace("%MAXTHIRST%", maxThirst.ToString()).Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatMudHoleGroomDestroyed(string horseName) + { + return MudHoleRuinedGroomFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatMiscStatsEntry(string statName, int value) + { + return StatMiscEntryFormat.Replace("%STAT%", statName).Replace("%COUNT%", value.ToString()); + } + public static string FormatCompactedAdvancedStats(int speed, int strength, int conformation, int agility, int endurance, int inteligence, int personality) + { + return HorseAdvancedStatsCompactedFormat.Replace("%SPEED%", speed.ToString()).Replace("%STRENGTH%", strength.ToString()).Replace("%CONFORMATION%", conformation.ToString()).Replace("%AGILITY%", agility.ToString()).Replace("%ENDURANCE%", endurance.ToString()).Replace("%INTELIGENCE%", inteligence.ToString()).Replace("%PERSONALITY%", personality.ToString()); + } + public static string FormatCompactedBasicStats(int health, int hunger, int thirst, int mood, int tiredness, int groom, int shoes) + { + int healthPercentage = Convert.ToInt32(Math.Floor((((double)health / 1000.0) * 100.0))); + int hungerPercentage = Convert.ToInt32(Math.Floor((((double)hunger / 1000.0) * 100.0))); + int thirstPercentage = Convert.ToInt32(Math.Floor((((double)thirst / 1000.0) * 100.0))); + int moodPercentage = Convert.ToInt32(Math.Floor((((double)mood / 1000.0) * 100.0))); + int tirednessPercentage = Convert.ToInt32(Math.Floor((((double)tiredness / 1000.0) * 100.0))); + int groomPercentage = Convert.ToInt32(Math.Floor((((double)groom / 1000.0) * 100.0))); + int shoesPercentage = Convert.ToInt32(Math.Floor((((double)shoes / 1000.0) * 100.0))); + + return HorseBasicStatsCompactedFormat.Replace("%HEALTH%", healthPercentage.ToString()).Replace("%HUNGER%", hungerPercentage.ToString()).Replace("%THIRST%", thirstPercentage.ToString()).Replace("%MOOD%", moodPercentage.ToString()).Replace("%TIREDNESS%", tirednessPercentage.ToString()).Replace("%GROOM%", groomPercentage.ToString()).Replace("%SHOES%", shoesPercentage.ToString()); + } + public static string FormatAllStatsEntry(string horseName, string color, string breedName, string sex, int exp) + { + return HorseNameEntryFormat.Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREEDNAME%", breedName).Replace("%SEX%", sex).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormaHorseAllBasicStatsEntry(string horseName, string color, string breedName, string sex, int exp) + { + return HorseBasicStatEntryFormat.Replace("%HORSENAME%", horseName).Replace("%COLOR%", color).Replace("%BREEDNAME%", breedName).Replace("%SEX%", sex).Replace("%EXP%", exp.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatHorseReleasedBy(string username) + { + return HorseReleasedBy.Replace("%USERNAME%", username); + } + public static string FormatHorseAreYouSureMessage(int randomId) + { + return HorseAreYouSureYouWantToReleaseFormat.Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatHorseCompanionRemoveMessage(string horseName) + { + return HorseCompanionRemoveMessageFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatHorseCompanionEquipMessage(string horseName, string itemName) + { + return HorseCompanionEquipMessageFormat.Replace("%HORSENAME%", horseName).Replace("%ITEM%", itemName); + } + public static string FormatPlaytimeMessage(int hours) + { + return PlaytimeMessageFormat.Replace("%TOTALHOURS%", hours.ToString()); + } + public static string FormatHorseCompanionSelected(int icon, string name) + { + return HorseCompnaionMenuCurrentCompanionFormat.Replace("%ICONID%", icon.ToString()).Replace("%NAME%", name); + } + public static string FormatHorseCompanionMenuHeader(string horseName) + { + return HorseCompanionMenuHeaderFormat.Replace("%HORSENAME%", horseName); + } + public static string FormatHorseCompanionOption(int icon, int count, string name, int id) + { + return HorseCompanionEntryFormat.Replace("%ICONID%", icon.ToString()).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NAME%", name).Replace("%ID%", id.ToString()); + } + public static string FormatHorseDismountedBecauseTackedMessage(string horsename) + { + return HorseDismountedBecauseNotTackedMessageFormat.Replace("%HORSENAME%", horsename); + } + public static string FormatAutoSellConfirmedMessage(int money) + { + return HorseAutoSellConfirmedFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAutoSellMenu(int currentAutoSellPrice) + { + return HorseAutoSellMenuFormat.Replace("%AUTOSELL%", currentAutoSellPrice.ToString()); + } + public static string FormatHorseSetToNewCategory(string category) + { + return HorseSetNewCategoryMessageFormat.Replace("%CATEGORY%", category); + } + public static string FormatHorseSavedProfileMessage(string horsename) + { + return HorseSavedProfileMessageFormat.Replace("%HORSENAME%", horsename); + } + public static string FormatDescriptionEditMeta(string username, string description) + { + return HorseDescriptionEditFormat.Replace("%HORSENAME%", username).Replace("%DESCRIPTION%", description); + } + public static string FormatHorsePetMessage(string messages, int mood, int tiredness) + { + return HorsePetMessageFormat.Replace("%MESSAGES%", messages).Replace("%MOOD%", mood.ToString()).Replace("%TIREDNESS%", tiredness.ToString()); + } + public static string FormatHorseCurrentStatus(string name) + { + return HorseCurrentStatusFormat.Replace("%HORSENAME%", name); + } + + public static string FormatHorseFeedEntry(int icon, int count, string name, int randomId) + { + return HorsefeedFormat.Replace("%ICONID%", icon.ToString()).Replace("%COUNT%", count.ToString("N0", CultureInfo.InvariantCulture)).Replace("%NAME%", name).Replace("%RANDOMID%", randomId.ToString()); + } + + public static string FormatHorseRidingMessage(string name) + { + return HorseRidingMessageFormat.Replace("%HORSENAME%", name); + } + public static string FormatEquipTackMessage(string itemName, string horseName) + { + return HorseEquipTackMessageFormat.Replace("%NAME%", itemName).Replace("%HORSENAME%", horseName); + } + public static string FormatUnEquipTackMessage(string horseName) + { + return HorseUnEquipTackMessageFormat.Replace("%HORSENAME%", horseName); + } + + public static string FormatTackedAsFollowedMessage(string name) + { + return HorseTackedAsFollowsFormat.Replace("%NAME%", name); + } + public static string FormatUnEquipSaddle(int iconId, string name) + { + return HorseUnEquipSaddleFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); + } + public static string FormatUnEquipSaddlePad(int iconId, string name) + { + return HorseUnEquipSaddlePadFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); + } + public static string FormatUnEquipBridle(int iconId, string name) + { + return HorseUnEquipBridleFormat.Replace("%NAME%", name).Replace("%ICONID%", iconId.ToString()); + } + public static string FormatHorseEquip(int iconId, int count, string name, int id) + { + return HorseEquipFormat.Replace("%ICONID%", iconId.ToString()).Replace("%COUNT%", count.ToString()).Replace("%NAME%", name).Replace("%ID%", id.ToString()); + } + + + + public static string FormatHorseNameYours(string name) + { + return HorseNameYoursFormat.Replace("%NAME%", name); + } + public static string FormatHorseNameOthers(string name, string username) + { + return HorseNameOthersFormat.Replace("%NAME%", name).Replace("%USERNAME%", username); + } + public static string FormatHorseDescription(string Description) + { + return HorseDescriptionFormat.Replace("%DESCRIPTION%", BBCode.EncodeBBCodeToMeta(Description)); + } + public static string FormatHorseHandsHigh(string color, string breed,string sex, double handsHigh) + { + return HorseHandsHeightFormat.Replace("%COLOR%", color).Replace("%SEX%", sex).Replace("%HANDS%", handsHigh.ToString(CultureInfo.InvariantCulture)).Replace("%BREED%", breed); + } + public static string FormatHorseExperience(int experience) + { + return HorseExperienceEarnedFormat.Replace("%EXP%", experience.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTrainableIn(int minutes) + { + return HorseTrainableInFormat.Replace("%TIME%", minutes.ToString()); + } + public static string FormatHorseIsLeased(int minutes) + { + return HorseLeasedRemainingTimeFormat.Replace("%TIME%", minutes.ToString()); + } + + public static string FormatDisMountButton(int randomId) + { + return HorseDisMountButtonFormat.Replace("%ID%", randomId.ToString()); + } + public static string FormatMountButton(int randomId) + { + return HorseMountButtonFormat.Replace("%ID%", randomId.ToString()); + } + public static string FormatFeedButton(int randomId) + { + return HorseFeedButtonFormat.Replace("%ID%", randomId.ToString()); + } + public static string FormatTackButton(int randomId) + { + return HorseTackButtonFormat.Replace("%ID%", randomId.ToString()); + } + public static string FormatPetButton(int randomId) + { + return HorsePetButtonFormat.Replace("%ID%", randomId.ToString()); + } + public static string FormatProfileButton(int randomId) + { + return HorseProfileButtonFormat.Replace("%ID%", randomId.ToString()); + } + + public static string FormatAutoSellPrice(int money) + { + return HorseAutoSellPriceFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAutoSellOthers(int price) + { + return HorseAutoSellOthersFormat.Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAutoSell(string autoSellStr) + { + return HorseAutoSellFormat.Replace("%AUTOSELL%", autoSellStr); + } + + public static string FormatHorseCategory(string category, string markAsCategoryButtons) + { + return HorseCurrentlyCategoryFormat.Replace("%CATEGORY%", category).Replace("%MARKOPTIONS%", markAsCategoryButtons); + } + public static string FormatHorseTackEntry(int iconId, string name, int itemId) + { + return HorseTackFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatHorseCompanionEntry(int iconId, string name, string companionChangeButton, int itemId) + { + return HorseCompanionFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString()).Replace("%COMPANIONCHANGEBUTTON%", companionChangeButton); + } + + public static string FormatHorseAdvancedStats(int spoiled, int magicUsed) + { + return HorseAdvancedStatsFormat.Replace("%SPOILED%", spoiled.ToString()).Replace("%MAGICUSED%", magicUsed.ToString()); + } + public static string FormatHorseBreedDetails(string breedName, string description) + { + return HorseBreedDetailsFormat.Replace("%BREED%", breedName).Replace("%DESCRIPTION%", description); + } + public static string FormatHorseHeight(double minHeight, double maxHeight) + { + return HorseHeightRangeFormat.Replace("%MIN%", minHeight.ToString()).Replace("%MAX%", maxHeight.ToString()); + } + public static string FormatHorseReleaseButton(string type) + { + return HorseReleaseButton.Replace("%TYPE%", type); + } + public static string FormatPossibleColors(string[] colors) + { + return HorsePossibleColorsFormat.Replace("%COLORS%", String.Join(",", colors)); + } + + public static string FormatHorseCategoryChangedMessage(string newCategory) + { + return UpdateHorseCategory.Replace("%CATEGORY%", newCategory); + } + public static string FormatHorseEntry(int numb, string horseName, string breedName, int randomId, bool hasAutoSell) + { + return HorseEntryFormat.Replace("%NUMB%", numb.ToString()).Replace("%NAME%", horseName).Replace("%BREED%", breedName).Replace("%ID%", randomId.ToString()).Replace("%ISAUTOSELL%", hasAutoSell ? HorseIsAutoSell : ""); + } + public static string FormatHorseHeader(int maxHorses, int numHorses) + { + return HorsesMenuHeader.Replace("%MAXHORSE%", maxHorses.ToString()).Replace("%TOTALHORSE%", numHorses.ToString()); + } + + + public static string FormatWildHorse(string name, string breed, int randomId, bool vowel) + { + return WildHorseFormat.Replace("%NAME%", name).Replace("%BREED%", breed).Replace("%RANDOMID%", randomId.ToString()).Replace("%N%", vowel ? "n" : ""); + } + public static string FormatHorseBreedPreview(string name, string description) + { + return BreedViewerFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); + } + public static string FormatHorseAdvancedStat(int baseStat, int companionBoost, int tackBoost, int maxStat) + { + return AdvancedStatFormat.Replace("%BASE%", baseStat.ToString()).Replace("%COMPAINON%", companionBoost.ToString()).Replace("%TACK%", tackBoost.ToString()).Replace("%MAX%", maxStat.ToString()); + } + public static string FormatHorseBasicStat(int health, int hunger, int thirst, int mood, int energy, int groom, int shoes) + { + return BasicStatFormat.Replace("%HEALTH%", health.ToString()).Replace("%HUNGER%", hunger.ToString()).Replace("%THIRST%", thirst.ToString()).Replace("%MOOD%", mood.ToString()).Replace("%ENERGY%", energy.ToString()).Replace("%GROOM%", groom.ToString()).Replace("%SHOES%", shoes.ToString()); + } + + public static string FormatHorseRelative(string name, int id) + { + return HorseRelativeFormat.Replace("%NAME%", name).Replace("%ID%", id.ToString()); + } + public static string FormatHorseBreed(string name, int id) + { + return HorseBreedFormat.Replace("%NAME%", name).Replace("%ID%", id.ToString()); + } + public static string FormatRanchSearchResult(string name, int x, int y) + { + string mapXy = FormatMapLocation(x, y); + return LibaryFindRanchResultFormat.Replace("%USERNAME%", name).Replace("%MAPXY%", mapXy); + } + public static string FormatNpcSearchResult(string name, string desc,int x, int y) + { + string mapXy = FormatMapLocation(x, y); + return LibaryFindNpcSearchResultFormat.Replace("%NPCNAME%", name).Replace("%MAPXY%", mapXy).Replace("%NPCDESC%", desc); + } + public static string FormatLastPoet(string name) + { + return LastPoetFormat.Replace("%USERNAME%", name); + } + public static string FormatMultiroomParticipent(string name) + { + return MultiroomParticipentFormat.Replace("%USERNAME%", name); + } + public static string FormatVenusFlyTrapMeta(int money) + { + return VenusFlyTrapFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBankIntrestMadeMeta(UInt64 intrestMade) + { + return BankMadeInIntrestFormat.Replace("%MONEY%", intrestMade.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBankCarryingMeta(int money, UInt64 bankMoney) + { + return BankCarryingFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BANKMONEY%", bankMoney.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBankOptionsMeta(int money, UInt64 bankMoney) + { + return BankOptionsFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%BANKMONEY%", bankMoney.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatDepositedMoneyMessage(int money) + { + return BankDepositedMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatWithdrawMoneyMessage(int money) + { + return BankWithdrewMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatNumberOfWishingCoins(int amount) + { + return YouHaveWishingCoinsFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatWishThingsMessage(string item1, string item2) + { + return WishItemsFormat.Replace("%ITEM%", item1).Replace("%ITEM2%", item2); + } + public static string FormatWishMoneyMessage(int money) + { + return WishMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatWishWorldPeaceMessage(int money, string item) + { + return WishWorldPeaceFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ITEM%", item); + } + + + + public static string FormatInnEnjoyedServiceMessage(string item, int price) + { + return InnEnjoyedServiceFormat.Replace("%ITEM%", item).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatInnItemEntry(int iconId, string itemName, int price, int itemId) + { + return InnItemEntryFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)).Replace("%ID%", itemId.ToString()); + } + public static string FormatDroppedMoneyMessage(int amount) + { + return FountainDroppedMoneyFormat.Replace("%MONEY%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatAbuseReportPlayerNotFound(string username) + { + return AbuseReportPlayerNotFoundFormat.Replace("%USERNAME%", username); + } + public static string FormatAbuseReportMetaPage(string reasonsMeta) + { + return AbuseReportMetaFormat.Replace("%REASONS%", reasonsMeta); + } + + public static string FormatAbuseReportReason(string id, string name) + { + return AbuseReportReasonFormat.Replace("%ID%", id).Replace("%NAME%", name); + } + public static string FormatIconFormat(int iconId) + { + return PlayerListIconFormat.Replace("%ICON%", iconId.ToString()); + } + + public static string FormatMuteButton(int playerId) + { + return MuteButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatHearButton(int playerId) + { + return HearButton.Replace("%PLAYERID%", playerId.ToString()); + } + public static string FormatPlayerEntry(string iconFormat, string username, int userId, int time, int x, int y, bool idle, bool muteOrHear, bool isYou) + { + string xy = FormatMapLocation(x, y); + string muteButton = FormatMuteButton(userId); + string hearButton = FormatHearButton(userId); + string pmButton = FormatPmButton(username); + string msg = PlayerListEntryFormat.Replace("%ICONFORMAT%", iconFormat).Replace("%USERNAME%", username).Replace("%PLAYERID%", userId.ToString()).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%MAPXY%", xy).Replace("%IDLE%", idle ? PlayerListIdle : ""); + if (isYou) + msg = msg.Replace("%MUTEORHEAR%", "").Replace("%PMBUTTON%", ""); + else + msg = msg.Replace("%MUTEORHEAR%", muteOrHear ? hearButton : muteButton).Replace("%PMBUTTON%", pmButton); + return msg; + } + public static string FormatOnlineBuddyEntry(string iconFormat, string username, int userId, int time, int x, int y) + { + string xy = FormatMapLocation(x, y); + return BuddyListOnlineBuddyEntryFormat.Replace("%ICONFORMAT%", iconFormat).Replace("%USERNAME%", username).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERID%", userId.ToString()).Replace("%MAPXY%", xy); + } + public static string FormatOfflineBuddyEntry(string username, int userId, int time) + { + return BuddyListOfflineBuddyEntryFormat.Replace("%USERNAME%", username).Replace("%TIME%", time.ToString("N0", CultureInfo.InvariantCulture)).Replace("%PLAYERID%", userId.ToString()); + } + public static string FormatConsumeItemMessaege(string itemName) + { + return ConsumeItemFormat.Replace("%ITEM%", itemName); + } + public static string FormatAwardHeaderOthers(string username) + { + return AwardOthersFormat.Replace("%USERNAME%", username); + } + public static string FormatAwardEntry(int iconId, string title, int moneyBonus) + { + return AwardFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", title).Replace("%BONUS%", moneyBonus.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatBestTimeHeader(string gameName) + { + return GameBestTimeHeaderFormat.Replace("%GAMETITLE%", gameName); + } + public static string FormatBestTimeListEntry(int ranking, int score, string username, int totalplays) + { + return GameBestTimeFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString().Insert(score.ToString().Length - 2, ".")).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatWinlooseHeader(string gameName) + { + return GameWinLooseHeaderFormat.Replace("%GAMETITLE%", gameName); + } + public static string FormatWinlooseListEntry(int ranking, int wins, int loose, string username, int totalplays) + { + return GameWinLooseFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%WINS%", wins.ToString("N0", CultureInfo.InvariantCulture)).Replace("%LOSES%", loose.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatHighscoreHeader(string gameName) + { + return GameHighScoreHeaderFormat.Replace("%GAMETITLE%", gameName); + } + public static string FormatHighscoreListEntry(int ranking, int score, string username, int totalplays) + { + return GameHighScoreFormat.Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)).Replace("%USERNAME%", username).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatHighscoreStat(string gameTitle, int ranking, int score, int totalplays) + { + return HighscoreFormat.Replace("%GAMETITLE%", gameTitle).Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBestTimeStat(string gameTitle, int ranking, int score, int totalplays) + { + return BestTimeFormat.Replace("%GAMETITLE%", gameTitle).Replace("%RANKING%", ranking.ToString("N0", CultureInfo.InvariantCulture)).Replace("%SCORE%", score.ToString()).Replace("%TOTALPLAYS%", totalplays.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatMoneyEarnedMessage(int money) + { + return YouEarnedMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTimeBeatenMessage(int time) + { + return BeatBestTimeFormat.Replace("%TIME%", time.ToString()); + } + public static string FormatHighscoreBeatenMessage(int score) + { + return BeatHighscoreFormat.Replace("%SCORE%", score.ToString()); + } + public static string FormatQuestFooter(int totalQuestsComplete, int totalQuests, int questPoints, int totalQuestPoints) + { + int questsComplete = Convert.ToInt32(Math.Floor(((decimal)totalQuestsComplete / (decimal)totalQuests) * (decimal)100.0)); + int questPointsComplete = Convert.ToInt32(Math.Floor(((decimal)questPoints / (decimal)totalQuestPoints) * (decimal)100.0)); + return QuestFooterFormat.Replace("%TOTALCOMPLETED%", totalQuestsComplete.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALQUESTS%", totalQuests.ToString("N0", CultureInfo.InvariantCulture)).Replace("%TOTALPERCENT%", questsComplete.ToString()).Replace("%YOURQP%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%YOURQP%", totalQuestPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%QPERCENT%", questPointsComplete.ToString()).Replace("%MAXQP%", totalQuestPoints.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatQuestLogQuest(string questTitle, int questPoints, string difficulty, string completionStatus) + { + return QuestFormat.Replace("%TITLE%", questTitle).Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)).Replace("%DIFFICULTY%", difficulty).Replace("%COMPLETION%", completionStatus); + } + + public static string FormatPrivateNotes(string privateNotes) + { + return PrivateNotesMetaFormat.Replace("%PRIVATENOTES%", privateNotes); + } + public static string FormatRandomMovementMessage(string statName, string message) + { + return RandomMovement.Replace("%STAT%", statName).Replace("%MSG%", message); + } + + public static string FormatJewerlyEquipMessage(string itemName) + { + return EquipJewelryFormat.Replace("%ITEM%", itemName); + } + public static string FormatEquipCompetitionGearMessage(string name) + { + return EquipCompetitionGearFormat.Replace("%ITEM%", name); + } + + public static string FormatPlayerStat(string statFormat, string statName) + { + return statFormat.Replace("%STAT%", statName); + } + public static string FormatJewelrySlot1(string itemName, int icon, bool other) + { + return JewelrySlot1Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot1Button); + } + public static string FormatJewelrySlot2(string itemName, int icon, bool other) + { + return JewelrySlot2Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot2Button); + } + public static string FormatJewelrySlot3(string itemName, int icon, bool other) + { + return JewelrySlot3Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot3Button); + } + public static string FormatJewelrySlot4(string itemName, int icon, bool other) + { + return JewelrySlot4Format.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%BUTTON%", other ? "" : Messages.JewelryRemoveSlot4Button); + } + + public static string FormatCompetitionGearHead(string itemName, string pronoun, int icon, bool other) + { + return CompetitionGearHeadFormat.Replace("%ITEM%", itemName).Replace("%ICON%",icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveHeadButton); + } + public static string FormatCompetitionGearBody(string itemName, string pronoun, int icon, bool other) + { + return CompetitionGearBodyFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveBodyButton); ; + } + public static string FormatCompetitionGearLegs(string itemName, string pronoun, int icon, bool other) + { + return CompetitionGearLegsFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveLegsButton); + } + public static string FormatCompetitionGearFeet(string itemName, string pronoun, int icon, bool other) + { + return CompetitionGearFeetFormat.Replace("%ITEM%", itemName).Replace("%ICON%", icon.ToString()).Replace("%PRONOUN%", pronoun) + (other ? "" : Messages.CompetitionGearRemoveFeetButton ); + } + public static string FormatStatsBar(string username) + { + return StatsBarFormat.Replace("%USERNAME%", username); + } + public static string FormatStatsArea(string area) + { + return StatsAreaFormat.Replace("%AREA%", area); + } + public static string FormatMoneyStat(int money) + { + return StatsMoneyFormat.Replace("%MONEY%", money.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatFreeTime(int freeMinutes) + { + return StatsFreeTimeFormat.Replace("%FREEMINUTES%", freeMinutes.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatPlayerDescriptionForStatsMenu(string description) + { + return StatsDescriptionFormat.Replace("%PLAYERDESC%", BBCode.EncodeBBCodeToMeta(description)); + } + + public static string FormatExperience(int expPoints) + { + return StatsExpFormat.Replace("%EXPPOINTS%", expPoints.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatQuestPoints(int questPoints) + { + return StatsQuestpointsFormat.Replace("%QUESTPOINTS%", questPoints.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatHungryStat(string status) + { + return StatsHungerFormat.Replace("%HUNGER%", status); + } + public static string FormatThirstStat(string status) + { + return StatsThirstFormat.Replace("%THIRST%", status); + } + public static string FormatTiredStat(string status) + { + return StatsTiredFormat.Replace("%TIRED%", status); + } + public static string FormatGenderStat(string gender) + { + return StatsGenderFormat.Replace("%GENDER%", gender); + } + public static string FormatJewelryStat(string jewelformat) + { + return StatsJewelFormat.Replace("%JEWELFORMAT%", jewelformat); + } + public static string FormatCompetitionGearStat(string competitonGearFormat) + { + return StatsCompetitionGearFormat.Replace("%GEARFORMAT%", competitonGearFormat); + } + public static string FormatAdminCommandCompleteMessage(string command) + { + return AdminCommandFormat.Replace("%COMMAND%", command); + } + + public static string FormatPlayerCommandCompleteMessage(string command) + { + return PlayerCommandFormat.Replace("%COMMAND%", command); + } + + public static string FormatYouLostAnItemMessage(string itemName) + { + return YouLostAnItemFormat.Replace("%ITEM%", itemName); + } + public static string FormatYouEarnedAnItemButInventoryFullMessage(string itemName) + { + return YouEarnedAnItemButInventoryWasFullFormat.Replace("%ITEM%", itemName); + } + public static string FormatYouEarnedAnItemMessage(string itemName) + { + return YouEarnedAnItemFormat.Replace("%ITEM%", itemName); + } + public static string FormatSellMessage(string itemName, UInt64 price) + { + return Sold1Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatSellAllMessage(string itemName, UInt64 price, int sellAmount) + { + return SoldAllFormat.Replace("%AMOUNT%",sellAmount.ToString()).Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuy25Message(string itemName, UInt64 price) + { + return Brought25Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuy5Message(string itemName, UInt64 price) + { + return Brought5Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatBuyMessage(string itemName, UInt64 price) + { + return Brought1Format.Replace("%ITEM%", itemName).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatShopEntry(int iconid, string count, string name, UInt64 price) + { + return ShopEntryFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COUNT%", count).Replace("%TITLE%", name).Replace("%PRICE%", price.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatWearButton(int randomId) + { + return ItemWearButton.Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatItemInformationByIdButton(int itemId) + { + return ItemInformationByIdButton.Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatBuyItemButton(int itemId) + { + return ShopBuyButton.Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatBuy5ItemButton(int itemId) + { + return ShopBuy5Button.Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatBuy25ItemButton(int itemId) + { + return ShopBuy25Button.Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatSellButton(int randomId) + { + return SellButton.Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatSellAllButton(int itemId) + { + return SellAllButton.Replace("%ITEMID%", itemId.ToString()); + } + + public static string FormatNpcInformation(string name, string description) + { + return NpcInformationFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); + } + public static string FormatItemInformation(string name, string description) + { + return ItemInformationFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", description); + } + public static string FormatNpcChatpoint(string name, string shortDescription, string chatText) + { + return NpcChatpointFormat.Replace("%NAME%", name).Replace("%DESCRIPTION%", shortDescription).Replace("%TEXT%", chatText); + } + + public static string FormatNpcTalkButton(int npcId) + { + return NpcTalkButton.Replace("%ID%", npcId.ToString()); + } + public static string FormatNpcInformationButton(int npcId) + { + return NpcInformationButton.Replace("%ID%", npcId.ToString()); + } + + public static string FormatNpcReply(string replyText, int replyId) + { + return NpcReplyFormat.Replace("%TEXT%", replyText).Replace("%ID%", replyId.ToString()); + } + + public static string FormatNpcStartChatMessage(int iconId, string name, string shortDescription, int npcId) + { + return NpcStartChatFormat.Replace("%ICONID%", iconId.ToString()).Replace("%NAME%", name).Replace("%DESCRIPTION%", shortDescription).Replace("%ID%", npcId.ToString()); + } + + public static string FormatGlobalChatViolationMessage(Chat.Chat.Reason violationReason) + { + return ChatViolationMessageFormat.Replace("%AMOUNT%", RequiredChatViolations.ToString()).Replace("%REASON%", violationReason.Message); + } + + public static string FormatPlayerInventoryHeaderMeta(int itemCount, int maxItems) + { + return InventoryHeaderFormat.Replace("%ITEMCOUNT%", itemCount.ToString()).Replace("%MAXITEMS%", maxItems.ToString()); + } + + public static string FormatPlayerInventoryItemMeta(int iconid, int count, string name) + { + return InventoryItemFormat.Replace("%ICONID%", iconid.ToString()).Replace("%COUNT%", count.ToString()).Replace("%TITLE%", name); + } + + public static string FormatItemThrowButton(int itemId) + { + return ItemThrowButton.Replace("%ITEMID%", itemId.ToString()); + } + public static string FormatItemConsumeButton(int randomid) + { + return ItemConsumeButton.Replace("%RANDOMID%", randomid.ToString()); + } + public static string FormatItemInformationButton(int randomid) + { + return ItemInformationButton.Replace("%RANDOMID%", randomid.ToString()); + } + + public static string FormatItemDropButton(int randomid) + { + return ItemDropButton.Replace("%RANDOMID%", randomid.ToString()); + } + public static string FormatItemOpenButton(int randomId) + { + return ItemOpenButton.Replace("%RANDOMID%", randomId.ToString()); + } + public static string FormatItemUseButton(int randomid) + { + return ItemUseButton.Replace("%RANDOMID%", randomid.ToString()); + } + public static string FormatItemReadButton(int randomid) + { + return ItemReadButton.Replace("%ITEMID%", randomid.ToString()); + } + + // Meta + public static string FormatTileName(string name) + { + return Messages.TileFormat.Replace("%TILENAME%", name); + } + public static string FormatGrabItemMessage(string name, int randomid, int iconid) + { + return GrabItemFormat.Replace("%ICONID%",iconid.ToString()).Replace("%ITEMNAME%", name).Replace("%RANDOMID%", randomid.ToString()); + } + + public static string FormatPlayerBuddyList(int amount) + { + return PlayerListOfBuddiesFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatPlayerList(int amount) + { + return PlayerListOfPlayersFormat.Replace("%AMOUNT%", amount.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatMapAllBuddiesList(string buddyxys) + { + return PlayerListMapAllBuddiesForamt.Replace("%BUDDYXYLIST%", buddyxys); + } + + public static string FormatMapAllPlayersList(string playerxys) + { + return PlayerListMapAllPlayersFormat.Replace("%ALLXYLIST%", playerxys); + } + + public static string FormatMapLocations(Point[] xys) + { + string allXys = ""; + foreach(Point xy in xys) + { + allXys += FormatMapLocation(xy.X, xy.Y); + } + return allXys; + } + public static string FormatMapLocation(int x, int y) + { + string xy = ""; + xy += (char)(((x - 4) / 64) + 20); + xy += (char)(((x - 4) % 64) + 20); + + xy += (char)(((y - 1) / 64) + 20); + xy += (char)(((y - 1) % 64) + 20); + return xy; + } + + public static string FormatTransportCost(int cost) + { + return TransportCostFormat.Replace("%COST%", cost.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatTransportMessage(string method, string place, string costFormat, int id, int x, int y) + { + string xy = FormatMapLocation(x, y); + + int iconId = 253; + if(method == "WAGON") + iconId = 254; + return TransportFormat.Replace("%METHOD%", method).Replace("%PLACE%", place).Replace("%COSTFORMAT%", costFormat).Replace("%ID%", id.ToString()).Replace("%ICON%",iconId.ToString()).Replace("%XY%", xy); + } + // For all + public static string FormatGlobalChatMessage(string username, string message) + { + return GlobalChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatBuddyChatMessage(string username, string message) + { + return BuddyChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatIsleChatMessage(string username, string message) + { + return IsleChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatNearbyChatMessage(string username, string message) + { + return NearChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatHereChatMessage(string username, string message) + { + return HereChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatDirectMessage(string username, string message, string formatPart) + { + return DirectChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%FORMATPART%", formatPart); + } + + public static string FormatGlobalChatMessageForMod(string username, string message) + { + return GlobalChatFormatForModerators.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatAdsChatMessage(string username, string message) + { + return AdsChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatModChatMessage(string username, string message) + { + return ModChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + public static string FormatAdminChatMessage(string username, string message) + { + return AdminChatFormat.Replace("%USERNAME%", username).Replace("%MESSAGE%", message); + } + + + // For Sender + public static string FormatBuddyChatMessageForSender(int numbBuddies, string username, string message) + { + return BuddyChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbBuddies.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatHereChatMessageForSender(int numbHere, string username, string message) + { + return HereChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbHere.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatNearChatMessageForSender(int numbNear, string username, string message) + { + return NearChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbNear.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatIsleChatMessageForSender(int numbIsle, string username, string message) + { + return IsleChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbIsle.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatAdminChatForSender(int numbAdmins, string username, string message) + { + return AdminChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbAdmins.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatAdsChatForSender(int numbListening, string username, string message) + { + return AdsChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbListening.ToString("N0", CultureInfo.InvariantCulture)); + } + + public static string FormatModChatForSender(int numbMods, string username, string message) + { + return ModChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbMods.ToString("N0", CultureInfo.InvariantCulture)); + } + public static string FormatDirectChatMessageForSender(string username,string toUsername, string message, string formatPart) + { + return DirectChatFormatForSender.Replace("%FROMUSER%", username).Replace("%TOUSER%", toUsername).Replace("%MESSAGE%", message).Replace("%FORMATPART%", formatPart); + } + public static string FormatIdleWarningMessage() + { + return IdleWarningFormat.Replace("%WARN%", GameServer.IdleWarning.ToString()).Replace("%KICK%", GameServer.IdleTimeout.ToString()); + } + + public static string FormatLoginMessage(string username) + { + return LoginMessageFormat.Replace("%USERNAME%", username); + } + + public static string FormatLogoutMessage(string username) + { + return LogoutMessageFormat.Replace("%USERNAME%", username); + } + + public static string FormatMOTD() + { + return MotdFormat.Replace("%MOTD%", ConfigReader.Motd); + } + public static string FormatWelcomeMessage(string username) + { + return WelcomeFormat.Replace("%USERNAME%", username); + } + + // Transport + public static string FormatWelcomeToAreaMessage(string placeName) + { + return WelcomeToAreaFormat.Replace("%PLACE%", placeName); + } + + // Disconnect + public static string FormatIdleKickMessage() + { + return KickReasonIdleFormat.Replace("%KICK%", GameServer.IdleTimeout.ToString()); + } + + } +} diff --git a/HorseIsleServer/LibHISP/Game/Meta.cs b/HorseIsleServer/LibHISP/Game/Meta.cs old mode 100755 new mode 100644 index dcd0d4d..7fade56 --- a/HorseIsleServer/LibHISP/Game/Meta.cs +++ b/HorseIsleServer/LibHISP/Game/Meta.cs @@ -1,3054 +1,3090 @@ -using HISP.Game.Horse; -using HISP.Game.Inventory; -using HISP.Game.Services; -using HISP.Player; -using HISP.Server; -using HISP.Game.Items; -using HISP.Game.Chat; -using HISP.Game.Events; - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Drawing; -using HISP.Util; - -namespace HISP.Game -{ - public class Meta - { - private static bool overwrite = false; - - private static string buildLocationString(int x, int y) - { - string areaString = buildAreaString(x, y); - if (areaString != "") - areaString = Messages.LocationFormat.Replace("%META%", areaString); - return areaString; - } - private static string buildAreaString(int x, int y) - { - string locationString = ""; - - if (World.InArea(x, y)) - locationString += Messages.AreaFormat.Replace("%AREA%", World.GetArea(x, y).Name); - if (World.InTown(x, y)) - locationString += Messages.TownFormat.Replace("%TOWN%", World.GetTown(x, y).Name); - if (World.InIsle(x, y)) - locationString += Messages.IsleFormat.Replace("%ISLE%", World.GetIsle(x, y).Name); - return locationString; - } - - private static string buildPlayersHere(User fromUser, int x, int y) - { - string playersHere = ""; - User[] playersAt = GameServer.GetUsersAt(x, y, true, true); - if(playersAt.Length > 1) - { - playersHere += Messages.PlayersHere; - int count = 0; - foreach(User playerAt in playersAt) - { - if (playerAt.Id == fromUser.Id) - continue; - string buttons = ""; - buttons += Messages.FormatPlayerHereProfileButton(playerAt.Id); - buttons += Messages.FormatPlayerHereSocialButtton(playerAt.Id); - buttons += Messages.FormatPlayerHereTradeButton(playerAt.Id); - if (fromUser.Friends.IsFriend(playerAt.Id)) - buttons += Messages.FormatPlayerHereTagButton(playerAt.Id); - else - buttons += Messages.FormatPlayerHereBuddyButton(playerAt.Id); - buttons += Messages.FormatPmButton(playerAt.Username); - - playersHere += Messages.FormatPlayerHereMenu(playerAt.GetPlayerListIcon(), playerAt.Username,buttons); - count++; - } - - if(count >= 2) - { - SocialType stype = SocialType.GetSocialType("GROUP"); - foreach(SocialType.Social social in stype.Socials) - { - playersHere += Messages.FormatSocialButton(social.Id, social.ButtonName); - } - playersHere += Messages.R1; - } - - if (count <= 0) - return ""; - } - - return playersHere; - } - - private static string buildNearbyString(int x, int y, bool showNearbyPlayersHeader=true) - { - string playersNearby = ""; - - User[] nearbyUsers = GameServer.GetNearbyUsers(x, y, true, true); - int count = 0; - if (nearbyUsers.Length > 1) - { - if(showNearbyPlayersHeader) - { - playersNearby += Messages.NearbyPlayers; - } - - string usersWest = ""; - string usersNorth = ""; - string usersEast = ""; - string usersSouth = ""; - - foreach (User nearbyUser in nearbyUsers) - { - if (nearbyUser.X == x && nearbyUser.Y == y) // not yourself - continue; - - int xDiff = x - nearbyUser.X; - int yDiff = y - nearbyUser.Y; - double angle = (Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI); - angle -= 45; - angle = (angle % 360 + 360) % 360; - - if (angle >= 270 && angle <= 360 ) - usersWest += nearbyUser.Username + " "; - else if (angle >= 90 && angle <= 180) - usersEast += nearbyUser.Username + " "; - else if (angle >= 180 && angle <= 270) - usersSouth += nearbyUser.Username + " "; - else if (angle >= 0 && angle <= 90) - usersNorth += nearbyUser.Username + " "; - - - count++; - } - - if (usersEast != "") - playersNearby += " " + Messages.East + usersEast + Messages.Seperator; - if (usersWest != "") - playersNearby += " " + Messages.West + usersWest + Messages.Seperator; - if (usersSouth != "") - playersNearby += " " + Messages.South + usersSouth + Messages.Seperator; - if (usersNorth != "") - playersNearby += " " + Messages.North + usersNorth + Messages.Seperator; - - - - } - if(count <= 0) - { - return ""; - } - return playersNearby; - - } - private static string buildShopInfo(Shop shop, IInventory shopperInventory) - { - string message = ""; - InventoryItem[] itemList = shop.Inventory.GetItemList(); - - // Get shops stock - message += Messages.ThingsIAmSelling; - foreach (InventoryItem item in itemList) - { - message += Messages.R1; - Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); - - int count = item.ItemInstances.Length; - string countStr = count.ToString(); - if (item.Infinite) - countStr = Messages.InfinitySign; - - - message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateBuyCost(itemInfo)); - - message += Messages.FormatBuyItemButton(itemInfo.Id); - if (count >= 5) - message += Messages.FormatBuy5ItemButton(itemInfo.Id); - if (count >= 25) - message += Messages.FormatBuy25ItemButton(itemInfo.Id); - - message += Messages.FormatItemInformationByIdButton(itemInfo.Id); - - } - - // Check whats avalilble to be sold - message += Messages.R1 + Messages.ThingsYouSellMe; - InventoryItem[] shopperItemList = shopperInventory.GetItemList(); - - foreach (InventoryItem shopperitem in shopperItemList) - { - Item.ItemInformation itemInfo = Item.GetItemById(shopperitem.ItemId); - - // Prevent items that cannot be sold to this shopkeeper. - if (!shop.CanSell(itemInfo)) - continue; - - - int count = shopperitem.ItemInstances.Length; - string countStr = count.ToString(); - - - message += Messages.R1; - message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateSellCost(itemInfo)); - message += Messages.FormatSellButton(shopperitem.ItemInstances[0].RandomId); - message += Messages.FormatSellAllButton(itemInfo.Id); - message += Messages.FormatItemInformationButton(shopperitem.ItemInstances[0].RandomId); - } - - message += Messages.R1 + Messages.ExitThisPlace; - return message; - } - - - private static string buildWishingWell(User user) - { - string message = ""; - bool hasCoins = user.Inventory.HasItemId(Item.WishingCoin); - if (!hasCoins) - { - message += Messages.NoWishingCoins; - } - else - { - InventoryItem wishingCoins = user.Inventory.GetItemByItemId(Item.WishingCoin); - int totalCoins = wishingCoins.ItemInstances.Length; - message += Messages.FormatNumberOfWishingCoins(totalCoins); - message += Messages.WishingWellMeta; - } - - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - - - } - - private static string buildCommonInfo(User user, int x, int y) - { - user.HorseWindowOpen = false; - string message = ""; - message += buildPlayersHere(user, x, y); - bool playersHere = (GameServer.GetUsersAt(x, y, true, true).Length >= 1); - message += buildNearbyString(x, y, playersHere); - - // Dropped Items - DroppedItems.DroppedItem[] Items = DroppedItems.GetItemsAt(x, y); - if (Items.Length == 0) - message += Messages.NothingMessage; - else - { - message += Messages.ItemsOnGroundMessage; - foreach (DroppedItems.DroppedItem item in Items) - { - Item.ItemInformation itemInfo = item.Instance.GetItemInfo(); - message += Messages.FormatGrabItemMessage(itemInfo.Name, item.Instance.RandomId, itemInfo.IconId); - } - if (Items.Length > 1) - message += Messages.GrabAllItemsButton; - } - return message; - } - - private static string buildWornJewelery(User user, bool other) - { - string message = ""; - string pronoun = ""; - - if (other) - pronoun = user.GetPronouns(false); - - if (!other) - message += Messages.JewelrySelected; - else - message += Messages.FormatOtherJewelerySelected(pronoun); - - bool hasMsg = false; - - if (user.EquipedJewelry.Slot1 != null) - { - message += Messages.FormatJewelrySlot1(user.EquipedJewelry.Slot1.Name, user.EquipedJewelry.Slot1.IconId, other); - hasMsg = true; - } - if (user.EquipedJewelry.Slot2 != null) - { - message += Messages.FormatJewelrySlot2(user.EquipedJewelry.Slot2.Name, user.EquipedJewelry.Slot2.IconId, other); - hasMsg = true; - } - if (user.EquipedJewelry.Slot3 != null) - { - message += Messages.FormatJewelrySlot3(user.EquipedJewelry.Slot3.Name, user.EquipedJewelry.Slot3.IconId, other); - hasMsg = true; - } - if (user.EquipedJewelry.Slot4 != null) - { - message += Messages.FormatJewelrySlot4(user.EquipedJewelry.Slot4.Name, user.EquipedJewelry.Slot4.IconId, other); - hasMsg = true; - } - - if (!hasMsg) - { - if (!other) - message = Messages.NoJewerlyEquipped; - else - message = Messages.FormatOtherNoJewelery(pronoun); - } - - - - return message; - } - - private static string buildMultiroom(string id, User user) - { - - string message = Messages.MultiroomPlayersParticipating; - - Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); - room.Join(user); - - foreach (User userOnTile in room.JoinedUsers) - { - if (userOnTile.Id == user.Id) - continue; - - message += Messages.FormatMultiroomParticipent(userOnTile.Username); - } - - message += Messages.R1; - - if(id == null) // Generic - { - // Do nothing - } - else if (id[0] == 'P') // Poet - { - int lastPoet = Database.GetLastPlayer(id); - string username = ""; - if (lastPoet != -1) - username = Database.GetUsername(lastPoet); - - message += Messages.FormatLastPoet(username); - } - else if (id[0] == 'D') // Drawning room - { - int lastDraw = Database.GetLastPlayer(id); - string username = ""; - if (lastDraw != -1) - username = Database.GetUsername(lastDraw); - - message += Messages.FormatLastToDraw(username); - } - - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildEquippedCompetitionGear(User user, bool other = false) - { - string message = ""; - - if (!other) - message = Messages.CompetitionGearSelected; - - string pronoun = Messages.PronounNeutralYour; - string possessivePronoun = Messages.PronounNeutralYour; - if (other) - { - pronoun = user.GetPronouns(false); - possessivePronoun = user.GetPronouns(true); - - message = Messages.FormatOtherCompetitionGear(pronoun); - } - - bool hasMsg = false; - - if (user.EquipedCompetitionGear.Head != null) - { - message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, possessivePronoun, user.EquipedCompetitionGear.Head.IconId, other); - hasMsg = true; - } - if (user.EquipedCompetitionGear.Body != null) - { - message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, possessivePronoun, user.EquipedCompetitionGear.Body.IconId, other); - hasMsg = true; - } - if (user.EquipedCompetitionGear.Legs != null) - { - message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, possessivePronoun, user.EquipedCompetitionGear.Legs.IconId, other); - hasMsg = true; - } - if (user.EquipedCompetitionGear.Feet != null) - { - message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, possessivePronoun, user.EquipedCompetitionGear.Feet.IconId, other); - hasMsg = true; - } - - if (!hasMsg) - { - if (!other) - message = Messages.NoCompetitionGear; - else - message = Messages.FormatOtherNoCompetitionGear(pronoun); - } - - return message; - - } - - private static string buildHorseListIndependantlyOfUserInstance(int userId) - { - string message = ""; - int i = 1; - - - foreach (HorseInfo.Category category in HorseInfo.HorseCategories) - { - HorseInstance[] horsesInCategory = Database.GetPlayerHorsesInCategory(userId, category.Name).OrderBy(o => o.Name).ToArray(); - if (horsesInCategory.Length > 0) - { - message += category.MetaOthers; - foreach (HorseInstance instance in horsesInCategory) - { - message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0); - i++; - } - } - } - - return message; - - } - public static string buildLibary() - { - return Messages.LibaryMainMenu + Messages.ExitThisPlace + Messages.MetaTerminator; - } - private static string buildNpc(User user, int x, int y) - { - string message = ""; - Npc.NpcEntry[] entries = Npc.GetNpcByXAndY(x, y); - foreach (Npc.NpcEntry ent in entries) - { - if (ent.AdminOnly && !user.Administrator) - continue; - - if (ent.RequiresQuestIdCompleted != 0) - if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdCompleted) <= 0) - continue; - - if (ent.RequiresQuestIdNotCompleted != 0) - if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdNotCompleted) >= 1) - continue; - - message += Messages.FormatNpcStartChatMessage(ent.IconId, ent.Name, ent.ShortDescription, ent.Id); - if(ent.Chatpoints.Length > 0) - { - if (ent.LongDescription != "") - message += Messages.FormatNpcInformationButton(ent.Id); - message += Messages.FormatNpcTalkButton(ent.Id); - } - else - { - message += Messages.NpcNoChatpoints; - } - message += Messages.R1; - } - return message; - } - public static string buildVenusFlyTrap(User user) - { - int moneyLost = GameServer.RandomNumberGenerator.Next(0, 100); - if (moneyLost > user.Money) - moneyLost = user.Money; - user.TakeMoney(moneyLost); - return Messages.FormatVenusFlyTrapMeta(moneyLost); - } - public static string buildInn(Inn inn) - { - string message = Messages.InnBuyMeal; - foreach (Item.ItemInformation item in inn.MealsOffered) - { - message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id); - } - message += Messages.InnBuyRest; - foreach (Item.ItemInformation item in inn.RestsOffered) - { - message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - - public static string SelectPlayerStatFormat(int statValue) - { - int curValue = 1000; - int devisibleBy = Convert.ToInt32(Math.Floor((decimal)curValue / Messages.StatPlayerFormats.Length)); - - for (int i = 0; i < Messages.StatPlayerFormats.Length; i++) - { - curValue -= devisibleBy; - if (statValue >= curValue) - return Messages.StatPlayerFormats[i]; - - } - throw new Exception("A mathematically impossible error occured. please check wether the laws of physics still apply."); - } - - public static string BuildTradeAdd(Trade trade) - { - string message = Messages.FormatTradeWhatToOffer(trade.OtherTrade.Trader.Username); - message += Messages.TradeOfferMoney; - message += Messages.TradeOfferHorse; - foreach(HorseInstance horse in trade.Trader.HorseInventory.HorseList.OrderBy(o => o.Name)) - { - if (horse.Leaser > 0) - continue; - - if (horse.Category != "TRADING") - continue; - - bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null); - message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId); - } - - if(trade.OtherTrade.Trader.Inventory.Count >= trade.OtherTrade.Trader.MaxItems) - { - message += Messages.TradeOfferItemOtherPlayerInvFull; - } - else - { - message += Messages.TradeOfferItem; - foreach(InventoryItem item in trade.Trader.Inventory.GetItemList()) - { - Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); - if (itemInfo.Type == "QUEST" || itemInfo.Type == "TEXT" || itemInfo.Id == Item.DorothyShoes) - continue; - message += Messages.FormatTradeOfferItem(itemInfo.IconId, itemInfo.Name, item.ItemInstances.Length, item.ItemId); - } - } - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - - } - public static string BuildSocialMenu(bool onHorse) - { - string message = ""; - foreach(SocialType sType in SocialType.SocialTypes) - { - if (sType.Type == "GROUP") - continue; - if (sType.Type == "HORSE") - if (!onHorse) - continue; - - message += Messages.FormatSocialMenuType(sType.Type); - foreach(SocialType.Social social in sType.Socials) - { - message += Messages.FormatSocialButton(social.Id, social.ButtonName); - } - message += Messages.R1; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildTradeAddItem(int totalItems) - { - string message = ""; - message += Messages.FormatTradeOfferItemSubmenu(totalItems); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildTradeAddMoney(int curMoney) - { - string message = ""; - message += Messages.FormatTradeOfferMoneySubmenu(curMoney); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildTrade(Trade trade) - { - - string message = ""; - message += Messages.FormatTradeWithPlayer(trade.OtherTrade.Trader.Username); - - - - if (trade.Stage == "DONE" && trade.OtherTrade.Stage == "DONE") - message += Messages.TradeFinalReview; - else if (trade.Stage == "DONE") - message += Messages.TradeWaitingForOtherDone; - else if (trade.OtherTrade.Stage == "DONE") - message += Messages.TradeOtherPlayerIsDone; - - - message += Messages.FormatTradeYourOffering(trade.OtherTrade.Trader.Username); - if (trade.MoneyOffered == 0 && trade.ItemsOffered.Length == 0 && trade.HorsesOffered.Length == 0) - message += Messages.TradeOfferingNothing; - if (trade.MoneyOffered > 0) - message += Messages.FormatTradeMoneyOffer(trade.MoneyOffered); - if(trade.HorsesOffered.Length > 0) - foreach(HorseInstance horse in trade.HorsesOffered) - message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); - if(trade.ItemsOffered.Length > 0) - foreach(ItemInstance[] item in trade.ItemsOffered) - { - Item.ItemInformation itemInfo = item[0].GetItemInfo(); - string name = itemInfo.Name; - if (item.Length > 1) - name = itemInfo.PluralName; - - message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); - } - - if(trade.Stage == "OPEN") - message += Messages.TradeAddItems; - - message += Messages.FormatTradeOtherOffering(trade.OtherTrade.Trader.Username); - if (trade.OtherTrade.MoneyOffered == 0 && trade.OtherTrade.ItemsOffered.Length == 0 && trade.OtherTrade.HorsesOffered.Length == 0) - message += Messages.TradeOfferingNothing; - if (trade.OtherTrade.MoneyOffered > 0) - message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoneyOffered); - if (trade.OtherTrade.HorsesOffered.Length > 0) - foreach (HorseInstance horse in trade.OtherTrade.HorsesOffered) - message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); - if (trade.OtherTrade.ItemsOffered.Length > 0) - foreach (ItemInstance[] item in trade.OtherTrade.ItemsOffered) - { - Item.ItemInformation itemInfo = item[0].GetItemInfo(); - string name = itemInfo.Name; - if (item.Length > 1) - name = itemInfo.PluralName; - - message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); - } - - if (trade.Stage == "OPEN") - message += Messages.TradeWhenDoneClick; - if (((trade.Stage == "DONE" || trade.Stage == "ACCEPTED") && (trade.OtherTrade.Stage == "DONE" || trade.Stage == "ACCEPTED")) ) - message += Messages.TradeAcceptTrade; - - message += Messages.TradeCancelAnytime; - - return message; - } - - public static string buildTackPeiceLibary(Item.ItemInformation item) - { - string message = ""; - message += Messages.FormatTackSetPeice(item.Name, item.Description); - return message; - } - - public static string BuildTackLibary() - { - string message = ""; - - foreach (Tack.TackSet set in Tack.TackSets.OrderBy(o => o.SortPosition()).ToArray()) - { - string[] setSwfs = set.GetSwfNames(); - string swf = "breedviewer.swf?terrain=book2&breed=tackonly"; - if (setSwfs.Length >= 1) - swf += "&saddle=" + setSwfs[0]; - if (setSwfs.Length >= 2) - swf += "&saddlepad=" + setSwfs[1]; - if (setSwfs.Length >= 3) - swf += "&bridle=" + setSwfs[2]; - swf += "&j="; - - message += Messages.FormatTackSetView(set.IconId, set.SetName, swf); - - // Write all peices - try - { - message += buildTackPeiceLibary(set.GetSaddle()); - message += buildTackPeiceLibary(set.GetSaddlePad()); - message += buildTackPeiceLibary(set.GetBridle()); - } - catch (Exception e) - { - Logger.ErrorPrint(e.Message); - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMinigamesLibary() - { - string message = ""; - message += Messages.MinigameSingleplayer; - foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) - { - if (tile.TypeFlag == "1PLAYER") - { - string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); - message += Messages.FormatMinigameEntry(tile.Title, mapXy); - } - } - message += Messages.MinigameTwoplayer; - foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) - { - if (tile.TypeFlag == "2PLAYER") - { - string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); - message += Messages.FormatMinigameEntry(tile.Title, mapXy); - } - } - message += Messages.MinigameMultiplayer; - foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) - { - if (tile.TypeFlag == "MULTIPLAYER") - { - string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); - message += Messages.FormatMinigameEntry(tile.Title, mapXy); - } - } - message += Messages.MinigameCompetitions; - foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) - { - if (tile.TypeFlag == "ARENA") - { - string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); - message += Messages.FormatMinigameEntry(tile.Title, mapXy); - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildRealTimeQuiz(RealTimeQuiz.Participent participent) - { - // Uber Priority xD - participent.UserInstance.MinorPriority = true; - participent.UserInstance.MajorPriority = true; - return Messages.FormatEventRealTimeQuizMeta(participent.CorrectAnswers, participent.MistakenAnswers, participent.OnQuestion.BaseCategory.Name, participent.OnQuestion.Question); - } - public static string BuildCompanionLibary() - { - string message = ""; - foreach (Item.ItemInformation itm in Item.Items.OrderBy(o => o.GetMiscFlag(0)).ToArray()) - { - if (itm.Type == "COMPANION" && itm.EmbedSwf != null) - { - string swf = "breedviewer.swf?terrain=book2&breed=tackonly&companion=" + itm.EmbedSwf + "&j="; - message += Messages.FormatCompanionViewButton(itm.IconId, itm.Name, swf); - message += Messages.FormatCompanionEntry(itm.Description); - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildLocationsLibary() - { - string message = ""; - message += Messages.LocationKnownIslands; - foreach (World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) - { - if (waypoint.Type == "ISLE") - { - string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); - message += Messages.FormatIslandLocation(waypoint.Name, mapxy); - message += Messages.FormatLocationDescription(waypoint.Description); - } - } - message += Messages.LocationKnownTowns; - foreach (World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) - { - if (waypoint.Type == "TOWN") - { - string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); - message += Messages.FormatTownLocation(waypoint.Name, mapxy); - message += Messages.FormatLocationDescription(waypoint.Description); - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildRanchSearchResults(string search) - { - string message = ""; - message += Messages.LibaryFindRanchResultsHeader; - int totalResults = 0; - foreach(Ranch ranch in Ranch.Ranches) - { - if(ranch.OwnerId != -1) - { - string ranchOwnerName = Database.GetUsername(ranch.OwnerId); - if(ranchOwnerName.ToLower().Contains(search.ToLower())) - { - message += Messages.FormatRanchSearchResult(ranchOwnerName, ranch.X, ranch.Y); - totalResults++; - } - } - if (totalResults >= 10) - break; - } - if (totalResults == 0) - message += Messages.LibaryFindRanchResultsNoResults; - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildRanchSearchLibary() - { - string message = ""; - message += Messages.LibaryFindRanch; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildAwardsLibary() - { - string message = ""; - message += Messages.AwardsAvalible; - foreach (Award.AwardEntry award in Award.GlobalAwardList.OrderBy(o => o.Sort).ToArray()) - { - message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus, award.Description); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildBookReadLibary(Book book) - { - string message = ""; - message = Messages.FormatBookReadMeta(book.Author, book.Title, book.Text); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildBooksLibary() - { - string message = ""; - message += Messages.BooksOfHorseIsle; - foreach (Book libaryBook in Book.LibaryBooks.OrderBy(o => o.Title).ToArray()) - { - message += Messages.FormatBookEntry(libaryBook.Title, libaryBook.Author, libaryBook.Id); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildHorseReleased() - { - string message = ""; - message += Messages.HorseReleasedMeta; - message += Messages.BackToMapHorse; - message += Messages.MetaTerminator; - return message; - - } - - public static string BuildTopHighscores(string gameName) - { - Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20); - if (scores.Length <= 0) - return "ERROR: No scores recorded." + Messages.BackToMap + Messages.MetaTerminator; - string message = ""; - - message += Messages.FormatHighscoreHeader(gameName); - - for (int i = 0; i < scores.Length; i++) - { - message += Messages.FormatHighscoreListEntry(i + 1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildTopWinners(string gameName) - { - Highscore.HighscoreTableEntry[] scores = Database.GetTopWinners(gameName, 20); - if (scores.Length <= 0) - return "ERROR: No wins recorded." + Messages.BackToMap + Messages.MetaTerminator; - string message = ""; - - message += Messages.FormatWinlooseHeader(gameName); - - for (int i = 0; i < scores.Length; i++) - { - message += Messages.FormatWinlooseListEntry(i + 1, scores[i].Wins, scores[i].Looses, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildTopTimes(string gameName) - { - Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20, false); - if (scores.Length <= 0) - return "ERROR: No times recorded. "+Messages.BackToMap+Messages.MetaTerminator; - string message = ""; - - message += Messages.FormatBestTimeHeader(gameName); - - for (int i = 0; i < scores.Length; i++) - { - message += Messages.FormatBestTimeListEntry(i + 1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMinigameRankingsForUser(User user) - { - string message = Messages.HighscoreHeaderMeta; - foreach (Highscore.HighscoreTableEntry highscore in user.Highscores.HighscoreList) - { - if (highscore.Type == "SCORE") - message += Messages.FormatHighscoreStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed); - else if (highscore.Type == "TIME") - message += Messages.FormatBestTimeStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName, true), highscore.Score, highscore.TimesPlayed); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildPrivateNotes(User user) - { - string message = ""; - message += Messages.FormatPrivateNotes(user.PrivateNotes); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildNpcInfo(Npc.NpcEntry npcInfo) - { - string message = ""; - message += Messages.FormatNpcInformation(npcInfo.Name, npcInfo.LongDescription); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildItemInfo(Item.ItemInformation itemInfo) - { - string message = ""; - message += Messages.FormatItemInformation(itemInfo.Name, itemInfo.Description); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildRanchTraining(User user) - { - string message = ""; - message += Messages.RanchTrainAllAttempt; - int horsesTrained = 0; - foreach(HorseInstance horse in user.HorseInventory.HorseList) - { - if(horse.BasicStats.Mood < 200) - { - message += Messages.FormatRanchTrainBadMood(horse.Name); - } - if(horse.TrainTimer == 0) - { - horse.AdvancedStats.Speed += 1; - horse.AdvancedStats.Strength += 1; - horse.AdvancedStats.Conformation += 1; - horse.AdvancedStats.Agility += 1; - horse.AdvancedStats.Endurance += 1; - horse.BasicStats.Experience += 1; - horse.TrainTimer = 720; - horsesTrained++; - message += Messages.FormatRanchTrain(horse.Name, 1, 1, 1, 1, 1, 1); - } - else - { - message += Messages.FormatRanchTrainFail(horse.Name, horse.TrainTimer); - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildTransportInfo(User user, Transport.TransportPoint transportPoint) - { - string message = ""; - // Build list of locations - for (int i = 0; i < transportPoint.Locations.Length; i++) - { - int transportLocationId = transportPoint.Locations[i]; - Transport.TransportLocation transportLocation = Transport.GetTransportLocation(transportLocationId); - string costFormat = Messages.FormatTransportCost(transportLocation.Cost); - if(transportLocation.Type == "WAGON") - { - if (user.OwnedRanch != null) - { - if (user.OwnedRanch.GetBuildingCount(7) > 0) // Wagon - { - costFormat = Messages.TransportWagonFree; - } - } - } - - - message += Messages.FormatTransportMessage(transportLocation.Type, transportLocation.LocationTitle, costFormat, transportLocation.Id, transportLocation.GotoX, transportLocation.GotoY); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - public static string BuildStatsMenu(User user, bool other=false) - { - string message = Messages.FormatStatsBar(user.Username); - - string areaString = buildAreaString(user.X, user.Y); - if (areaString != "") - message += Messages.FormatStatsArea(areaString); - if(!other) - message += Messages.FormatMoneyStat(user.Money); - if (!user.Subscribed) - message += Messages.FormatFreeTime(user.FreeMinutes); - message += Messages.FormatPlayerDescriptionForStatsMenu(user.ProfilePage); - message += Messages.FormatExperience(user.Experience); - message += Messages.FormatHungryStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Hunger), Messages.StatHunger)); - message += Messages.FormatThirstStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Thirst), Messages.StatThirst)); - message += Messages.FormatTiredStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Tiredness), Messages.StatTired)); - message += Messages.FormatGenderStat(user.Gender); - message += Messages.FormatJewelryStat(buildWornJewelery(user, other)); - message += Messages.FormatCompetitionGearStat(buildEquippedCompetitionGear(user, other)); - - if(!other) - { - message += Messages.StatsPrivateNotesButton; - message += Messages.StatsQuestsButton; - message += Messages.StatsMinigameRankingButton; - message += Messages.StatsAwardsButton; - message += Messages.StatsMiscButton; - } - else - { - string pronoun = user.GetPronouns(true); - message += Messages.FormatOtherHorsesMeta(pronoun); - message += buildHorseList(user, false); - - message += Messages.FormatAwardHeaderOthers(user.Username); - foreach (Award.AwardEntry award in user.Awards.AwardsEarned) - message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); - - } - - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - public static string BuildWildHorseList(User user) - { - string message = ""; - WildHorse[] horses = WildHorse.GetHorsesAt(user.X, user.Y); - if (horses.Length > 0) - { - message = Messages.HorsesHere; - foreach (WildHorse horse in horses) - { - bool vowel = (horse.Instance.Breed.Name[0].ToString().ToLower() == "a" || horse.Instance.Breed.Name[0].ToString().ToLower() == "i" || horse.Instance.Breed.Name[0].ToString().ToLower() == "u" || horse.Instance.Breed.Name[0].ToString().ToLower() == "e" || horse.Instance.Breed.Name[0].ToString().ToLower() == "o"); - message += Messages.FormatWildHorse(horse.Instance.Name, horse.Instance.Breed.Name, horse.Instance.RandomId, vowel); - } - } - return message; - } - public static string BuildAwardList(User user) - { - string message = Messages.AwardHeader; - if (user.Awards.AwardsEarned.Length <= 0) - message += Messages.NoAwards; - else - foreach (Award.AwardEntry award in user.Awards.AwardsEarned) - message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildQuestLog(User user) - { - string message = ""; - message += Messages.QuestLogHeader; - Quest.QuestEntry[] questList = Quest.GetPublicQuestList(); - foreach (Quest.QuestEntry quest in questList) - { - string fmsg = ""; - if (user.Quests.GetTrackedQuestAmount(quest.Id) > 0) - fmsg = Messages.QuestCompleted; - else - fmsg = Messages.QuestNotCompleted; - - foreach (int questId in quest.RequiresQuestIdCompleteStatsMenu) - { - if (user.Quests.GetTrackedQuestAmount(questId) > 0) - continue; - fmsg = Messages.QuestNotAvalible; - break; - } - - message += Messages.FormatQuestLogQuest(quest.Title, quest.QuestPointsEarned, quest.Difficulty, fmsg); - } - - int totalComplete = Quest.GetTotalQuestsComplete(user); - int totalQuestPoints = Quest.GetTotalQuestPoints(); - - message += Messages.FormatQuestFooter(totalComplete, questList.Length, user.QuestPoints, totalQuestPoints); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - - - public static string BuildNearbyList(User currentUser) - { - string message = ""; - message += Messages.NearbyPlayersListHeader; - User[] nearbyUsers = GameServer.GetNearbyUsers(currentUser.X, currentUser.Y, false, true); - foreach (User nearbyUser in nearbyUsers) - { - if (nearbyUser.Stealth) - continue; - - if (nearbyUser.Id == currentUser.Id) - continue; - - - bool isYou = (nearbyUser.Id == currentUser.Id); - - int icon = nearbyUser.GetPlayerListIcon(); - string iconFormat = ""; - if (icon != -1) - iconFormat = Messages.FormatIconFormat(icon); - - message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - nearbyUser.LoginTime).TotalMinutes)), nearbyUser.X, nearbyUser.Y, nearbyUser.Idle, currentUser.MutePlayer.IsUserMuted(nearbyUser), isYou); - } - - message += Messages.PlayerListIconInformation; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - public static string BuildPlayerListAlphabetical(User currentUser) - { - string message = Messages.PlayerListAllAlphabeticalHeader; - GameClient[] clients = GameClient.ConnectedClients; - List onlineUsers = new List(); - - foreach (GameClient client in clients) - { - if (client.LoggedIn) - { - if (client.User.Stealth) - continue; - onlineUsers.Add(client.User); - } - } - - onlineUsers = onlineUsers.OrderBy(o => o.Username).ToList(); - - foreach (User onlineUser in onlineUsers) - { - - bool isYou = (onlineUser.Id == currentUser.Id); - int icon = onlineUser.GetPlayerListIcon(); - string iconFormat = ""; - if (icon != -1) - iconFormat = Messages.FormatIconFormat(icon); - - message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - onlineUser.LoginTime).TotalMinutes)), onlineUser.X, onlineUser.Y, onlineUser.Idle, currentUser.MutePlayer.IsUserMuted(onlineUser), isYou); - } - - message += Messages.PlayerListIconInformation; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - public static string BuildPlayerList(User currentUser) - { - string message = Messages.PlayerListAllHeader; - GameClient[] clients = GameClient.ConnectedClients; - foreach (GameClient client in clients) - { - if (client.LoggedIn) - { - if (client.User.Stealth) - continue; - - bool isYou = (client.User.Id == currentUser.Id); - - int icon = client.User.GetPlayerListIcon(); - string iconFormat = ""; - if (icon != -1) - 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.PlayerListIconInformation; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - public static string BuildBuddyList(User user) - { - string message = Messages.BuddyListHeader; - foreach (int id in user.Friends.List.ToArray()) - { - try - { - User friend = GameServer.GetUserById(id); - if (friend.Stealth) - continue; - - int icon = friend.GetPlayerListIcon(); - string iconFormat = ""; - if (icon != -1) - iconFormat = Messages.FormatIconFormat(icon); - - message += Messages.FormatOnlineBuddyEntry(iconFormat, friend.Username, friend.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - friend.LoginTime).TotalMinutes)), friend.X, friend.Y); - - } - catch (KeyNotFoundException) { } - - } - message += Messages.BuddyListOfflineBuddys; - - - foreach (int id in user.Friends.List.ToArray()) - { - if (GameServer.IsUserOnline(id)) - continue; - - string username = Database.GetUsername(id); - int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Helper.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes)); - - message += Messages.FormatOfflineBuddyEntry(username, id, minutes); - } - - message += Messages.PlayerListIconInformation; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - - public static string BuildBreedViewerLibary(HorseInfo.Breed breed) - { - string message = Messages.FormatHorseBreedPreview(breed.Name, breed.Description); - message += Messages.BreedViewerMaximumStats; - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Speed * 2, 0, 0, breed.BaseStats.Speed * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Strength * 2, 0, 0, breed.BaseStats.Strength * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Conformation * 2, 0, 0, breed.BaseStats.Conformation * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Agility * 2, 0, 0, breed.BaseStats.Agility * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Endurance * 2, 0, 0, breed.BaseStats.Endurance * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Inteligence * 2, 0, 0, breed.BaseStats.Inteligence * 2); - message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Personality * 2, 0, 0, breed.BaseStats.Personality * 2); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildHorseBreedListLibary() - { - string message = ""; - foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) - { - if (breed.Swf == "") - continue; - if (breed.Type == "horse") - message += Messages.FormatHorseBreed(breed.Name, breed.Id); - else - message += Messages.FormatHorseRelative(breed.Name, breed.Id); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildNpcSearch(string search) - { - List foundNpcs = new List(); - foreach (Npc.NpcEntry npc in Npc.NpcList) - { - if (npc.Name.ToLower().Contains(search.ToLower())) - { - if (npc.LibarySearchable) - { - if (foundNpcs.Count >= 5) - break; - foundNpcs.Add(npc); - } - else - { - continue; - } - } - else - { - continue; - } - } - string message = Messages.LibaryFindNpcSearchNoResults; - if (foundNpcs.Count >= 1) - { - message = Messages.LibaryFindNpcSearchResultsHeader; - foreach (Npc.NpcEntry npc in foundNpcs) - { - string searchResult = Messages.FormatNpcSearchResult(npc.Name, npc.ShortDescription, npc.X, npc.Y); - Logger.DebugPrint(searchResult); - message += searchResult; - } - } - if (foundNpcs.Count >= 5) - { - message += Messages.LibaryFindNpcLimit5; - } - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - - } - - public static string BuildFindNpcMenu() - { - string message = Messages.LibaryFindNpc; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildWhisperSearchResults(WildHorse[] results) - { - string message = Messages.WhispererSearchingAmoungHorses; - if (results.Length <= 0) - { - message = Messages.WhispererNoneFound; - } - else - { - List locations = new List(); - foreach (WildHorse result in results) - { - Point location = new Point(); - location.X = result.X; - location.Y = result.Y; - locations.Add(location); - } - string mapxys = Messages.FormatMapLocations(locations.ToArray()); - message += Messages.FormatWhispererHorseFoundMeta(mapxys); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - private static string buildFountain() - { - return Messages.FountainMeta; - } - private static string buildPond(User user) - { - string message = Messages.PondHeader; - if (!user.Inventory.HasItemId(Item.FishingPole)) - { - message += Messages.PondNoFishingPole; - } - else if (!user.Inventory.HasItemId(Item.Earthworm)) - { - message += Messages.PondNoEarthWorms; - } - else - { - message += Messages.PondGoFishing; - } - message += Messages.PondDrinkHereIfSafe; - foreach (HorseInstance horse in user.HorseInventory.HorseList) - { - message += Messages.FormatPondDrinkHorseFormat(horse.Name, horse.BasicStats.Thirst, 1000, horse.RandomId); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildMudHole(User user) - { - string message = ""; - if (user.HorseInventory.HorseList.Length > 0) - { - int rngHorseIndex = GameServer.RandomNumberGenerator.Next(0, user.HorseInventory.HorseList.Length); - HorseInstance horse = user.HorseInventory.HorseList[rngHorseIndex]; - horse.BasicStats.Groom = 0; - message += Messages.FormatMudHoleGroomDestroyed(horse.Name); - } - else - { - message += Messages.MudHoleNoHorses; - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildPassword() - { - return Messages.PasswordEntry + Messages.ExitThisPlace + Messages.MetaTerminator; - } - - private static string buildHorseWhisperer() - { - string message = ""; - foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) - { - if (breed.Swf == "") - continue; - if (breed.SpawnInArea == "none") - continue; - message += Messages.FormatWhispererHorseBreedButton(breed.Name, breed.Id); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - - private static string buildBank(User user) - { - double moneyMade = 0; - if (user.BankInterest > user.BankMoney) - { - moneyMade = user.BankInterest - user.BankMoney; - if (moneyMade > 100000000) - moneyMade = 100000000; - user.BankMoney += moneyMade; - - } - - string message = ""; - moneyMade = Math.Floor(moneyMade); - if (moneyMade > 0) - message += Messages.FormatBankIntrestMadeMeta(Convert.ToUInt64(moneyMade)); - - message += Messages.FormatBankCarryingMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); - message += Messages.BankWhatToDo; - message += Messages.FormatBankOptionsMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - - - return message; - } - public static string BuildMinigamePlayers() - { - string message = Messages.CityHallTop25MinigamePlayers; - int placing = 1; - foreach (int userId in Database.GetMinigamePlayers()) - { - string username = Database.GetUsername(userId); - int totalMinigames = Database.GetPlayerTotalMinigamesPlayed(userId); - - message += Messages.FormatCityHallTopMinigamePlayers(placing, totalMinigames, username); - placing++; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMostExperienedHoses() - { - string message = Messages.CityHallTop25ExperiencedHorses; - - int placing = 1; - foreach (HorseInstance horse in Database.GetMostExperiencedHorses()) - { - message += Messages.FormatCityHallTopExperiencedHorses(placing, horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name); - placing++; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildExperiencedPlayers() - { - string message = Messages.CityHallTop25ExperiencedPlayers; - int placing = 1; - foreach (int userId in Database.GetExperiencedPlayers()) - { - string username = Database.GetUsername(userId); - int exp = Database.GetExperience(userId); - - message += Messages.FormatCityHallTopExperiencedPlayersEntry(placing, exp, username); - placing++; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildAdventurousPlayers() - { - string message = Messages.CityHallTop25AdventurousPlayers; - int placing = 1; - foreach (int userId in Database.GetAdventurousPlayers()) - { - string username = Database.GetUsername(userId); - int questPoints = Database.GetPlayerQuestPoints(userId); - - message += Messages.FormatCityHallTopAdventurousPlayersEntry(placing, questPoints, username); - placing++; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMostSpoiledHorses() - { - string message = Messages.CityHallTop100SpoiledHorses; - foreach(HorseInstance horse in Database.GetMostSpoiledHorses()) - { - message += Messages.FormatCityHallTopSpoiledHorseEntry(horse.Spoiled, Database.GetUsername(horse.Owner), horse.Name); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildRichestPlayers() - { - string message = Messages.CityHallTop25Players; - int placing = 1; - foreach(int userId in Database.GetRichestPlayers()) - { - string username = Database.GetUsername(userId); - double totalMoney = Math.Floor(Database.GetPlayerMoney(userId) + Database.GetPlayerBankMoney(userId)); - - message += Messages.FormatCityHallTopPlayerEntry(placing, totalMoney, username); - placing++; - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - private static string buildMultiHorses(User user, string swf) - { - string message = Messages.OtherPlayersHere; - Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); - room.Join(user); - - foreach (User userOnTile in room.JoinedUsers) - { - if (userOnTile.Id == user.Id) - continue; - - message += Messages.FormatMultiroomParticipent(userOnTile.Username); - } - - message += Messages.R1; - - message += Messages.MultiHorseSelectOneToJoinWith; - int placing = 1; - foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray()) - { - if (horse.Leaser > 0) - continue; - - HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user); - HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user); - HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user); - HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user); - HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user); - HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user); - HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user); - - message += Messages.FormatMultiHorses(placing, horse.Name, horse.Breed.Name, swf + ".swf?ID=" + horse.RandomId + "&PL=" + user.Username + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&"); - } - - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - - } - private static string buildHorseGame(User user, string swf) - { - string message = Messages.HorseGamesSelectHorse; - int placing = 1; - foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray()) - { - if (horse.Leaser > 0) - continue; - - - HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user); - HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user); - HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user); - HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user); - HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user); - HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user); - HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user); - - - message += Messages.FormatHorseGamesEntry(placing, horse.Name, swf + ".swf?ID=" + horse.RandomId + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&"); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMostValuedRanches() - { - string message = Messages.CityHallTop25Ranches; - int total = 1; - - foreach(Ranch ranch in Ranch.Ranches.OrderByDescending(o => o.InvestedMoney).ToList()) - { - if (ranch.OwnerId == -1) - continue; - - - message += Messages.FormatCityHallTopRanchEntry(total, Database.GetUsername(ranch.OwnerId), ranch.InvestedMoney, Messages.FormatMapLocation(ranch.X, ranch.Y)); - - if (total > 26) - break; - - total++; - } - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildTopAutoSellHorses() - { - string message = Messages.CityHallCheapestAutoSells; - HorseInstance[] horses = Database.GetCheapestHorseAutoSell(); - foreach(HorseInstance horse in horses) - { - message += Messages.FormatCityHallCheapAutoSellEntry(horse.AutoSell, Database.GetUsername(horse.Owner), horse.Name, horse.Color, horse.Breed.Name, horse.BasicStats.Experience); - } - message += Messages.CityHallMostExpAutoSells; - HorseInstance[] horsesExp = Database.GetBiggestExpAutoSell(); - foreach (HorseInstance horse in horsesExp) - { - message += Messages.FormatCityHallBestExpAutoSellEntry(horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name, horse.AutoSell, horse.Color, horse.Breed.Name); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildRanchEdit(Ranch ranch) - { - return Messages.FormatRanchEditDescriptonMeta(ranch.Title, ranch.Description) + Messages.BackToMap + Messages.MetaTerminator; - } - public static string BuildRanchSellConfirmation() - { - return Messages.RanchSellAreYouSure + Messages.BackToMap + Messages.MetaTerminator; - } - public static string BuildRanchUpgrade(Ranch ranch) - { - string message = ""; - Ranch.RanchUpgrade currentUpgrade = ranch.GetRanchUpgrade(); - bool canUpgrade = Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1); - - string upgrade = ""; - if(canUpgrade) - { - Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1); - upgrade = Messages.FormatNextUpgrade(nextUpgrade.Title, nextUpgrade.Cost); - } - message += Messages.FormatCurrentUpgrade(currentUpgrade.Title, currentUpgrade.Description, upgrade, ranch.GetSellPrice()); - message += Messages.BackToMap; - return message; - } - public static string BuildRanchBuildingsAvalible(Ranch ranch, int slot) - { - string message = ""; - if(ranch.GetBuilding(slot-1) != null) - { - Ranch.RanchBuilding building = ranch.GetBuilding(slot - 1); - message += Messages.FormatBuildingAlreadyPlaced(building.Title, building.Id, building.GetTeardownPrice()); - } - else - { - message += Messages.RanchCanBuildOneOfTheFollowingInThisSpot; - foreach (Ranch.RanchBuilding building in Ranch.RanchBuilding.RanchBuildings) - { - message += Messages.FormatBuildingEntry(building.Title, building.Cost, building.Id); - } - } - - message += Messages.BackToMap; - return message; - } - public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchUpgrade upgrade) - { - string message = ""; - message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description); - - message += Messages.BackToMap; - return message; - } - public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding building) - { - string message = ""; - message += Messages.FormatViewBuilding(building.Title, building.Description); - if(building.Id == 1 || building.Id == 10 || building.Id == 11) // Barn, Big Barn, Gold Barn - { - int ranchOwner = ranch.OwnerId; // TOCTOU BAD - - if (ranchOwner != -1) - { - string horsesList = buildHorseListIndependantlyOfUserInstance(ranchOwner); - message += Messages.FormatBarn(horsesList); - } - } - message += Messages.BackToMap; - return message; - } - private static string buildRanch(User user, int ranchId) - { - - string message = ""; - - if(!Ranch.RanchExists(ranchId)) // Ghost ranchs exist.. apparently? - { - user.MajorPriority = false; - return BuildMetaInfo(user, user.X, user.Y); - } - - Ranch ranch = Ranch.GetRanchById(ranchId); - bool mine = (ranch.OwnerId == user.Id); - string swfModule = ranch.GetSwf(mine); - - byte[] moduleSwf = PacketBuilder.CreateSwfModule(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE); - user.Client.SendPacket(moduleSwf); - - if (mine) // This is My DS. - { - GameServer.CheckMail(user); - user.DoRanchActions(); - - string title = ranch.Title; - if (title == "" || title == null) - title = Messages.RanchDefaultRanchTitle; - message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title); - message += Messages.BuildingRestHere; - - int numbBarns = ranch.GetBuildingCount(1); - int numbWaterWell = ranch.GetBuildingCount(2); - int numbGrainSilo = ranch.GetBuildingCount(3); - int numbTrainingPen = ranch.GetBuildingCount(6); - int numbWagon = ranch.GetBuildingCount(7); - int numbWindmill = ranch.GetBuildingCount(8); - int numbGarden = ranch.GetBuildingCount(9); - int numbBigBarn = ranch.GetBuildingCount(10); - int numbGoldBarn = ranch.GetBuildingCount(11); - - - if (numbBarns > 0) - message += Messages.FormatBuildingBarn(numbBarns, numbBarns * 4); - if (numbBigBarn > 0) - message += Messages.FormatBuildingBarn(numbBigBarn, numbBigBarn * 8); - if (numbGoldBarn > 0) - message += Messages.FormatBuildingBarn(numbGoldBarn, numbGoldBarn * 12); - if (numbBarns > 0 || numbBigBarn > 0 || numbGoldBarn > 0) - message += Messages.RanchHorsesFullyRested; - if (numbWaterWell > 0) - message += Messages.BuildingWaterWell; - if (numbGrainSilo > 0) - message += Messages.BuildingGrainSilo; - if (numbWindmill > 0) - message += Messages.FormatBuildingWindmill(numbWindmill, 5000 * numbWindmill); - if (numbGarden > 0) - message += Messages.BuildingVegatableGarden; - if (numbWagon > 0) - message += Messages.BuildingWagon; - if (numbTrainingPen > 0) - message += Messages.BuildingTrainingPen; - - message += Messages.FormatRanchYoursDescription(ranch.Description); - } - else if(ranch.OwnerId == -1) // No mans sky - { - - message += Messages.FormatRanchUnownedMeta(ranch.Value); - if (user.OwnedRanch == null) - { - if (user.Subscribed) - message += Messages.RanchYouCouldPurchaseThisRanch; - else - message += Messages.RanchSubscribersOnly; - } - else - { - message += Messages.RanchYouAllreadyOwnARanch; - } - } - else - { - string title = ranch.Title; - if (title == "" || title == null) - title = Messages.RanchDefaultRanchTitle; - - message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title); - message += Messages.FormatRanchDescOthers(ranch.Description); - } - - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - - return message; - } - public static string BuildAuctionHorseList(User user) - { - string message = Messages.AuctionListHorse; - foreach(HorseInstance horse in user.HorseInventory.HorseList) - { - if (horse.Leaser > 0) - continue; - if (horse.Category != "TRADING") - continue; - - bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null); - - message += Messages.FormatAuctionHorseListEntry(horse.Name, tacked, horse.RandomId); - } - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - private static string buildAuction(User user, Auction auction) - { - Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); - room.Join(user); - - string message = ""; - message += Messages.AuctionsRunning; - foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray()) - { - message += Messages.FormatAuctionHorseEntry(Database.GetUsername(entry.OwnerId), entry.Horse.Color, entry.Horse.Breed.Name, entry.Horse.Gender, entry.Horse.BasicStats.Experience, entry.Completed ? "" : Messages.FormatAuctionViewHorseButton(entry.Horse.RandomId)); - if (!entry.Completed) - message += Messages.FormatAuctionGoingTo(entry.TimeRemaining, Database.GetUsername(entry.HighestBidder), entry.HighestBid, entry.RandomId); - else - { - if (entry.HighestBidder == entry.OwnerId) - message += Messages.AuctionNotSold; - else - message += Messages.FormatAuctionSoldTo(Database.GetUsername(entry.HighestBidder), entry.HighestBid); - } - } - User[] users = room.JoinedUsers.ToArray(); - List usernames = new List(); - foreach(User userInst in users) - { - usernames.Add(userInst.Username); - } - message += Messages.FormatAuctionPlayersHere(string.Join(", ", usernames.ToArray())); - message += Messages.AuctionAHorse; - - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildWorkshop(User user) - { - Workshop shop = Workshop.GetWorkshopAt(user.X, user.Y); - string message = ""; - foreach (Workshop.CraftableItem craft in shop.CraftableItems) - { - Item.ItemInformation itmInfo = Item.GetItemById(craft.GiveItemId); - message += Messages.FormatWorkshopCraftEntry(itmInfo.IconId, itmInfo.Name, craft.MoneyCost, itmInfo.Id, craft.Id); - // Get requirements - List Requirements = new List(); - foreach (Workshop.RequiredItem reqItem in craft.RequiredItems) - { - - Item.ItemInformation requiredItemInfo = Item.GetItemById(reqItem.RequiredItemId); - string requirementTxt; - if (reqItem.RequiredItemCount <= 1) - requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.Name); - else - requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.PluralName); - Requirements.Add(requirementTxt); - } - message += Messages.FormatWorkshopRequirements(string.Join(Messages.WorkshopAnd, Requirements.ToArray())); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildGroomer(User User, Groomer groomer) - { - string message = ""; - int totalPrice = 0; - int count = 0; - foreach(HorseInstance horse in User.HorseInventory.HorseList) - { - message += Messages.FormatHorseGroomCurrentlyAt(horse.Name, horse.BasicStats.Groom, 1000); - if(horse.BasicStats.Groom < groomer.Max) - { - int price = groomer.CalculatePrice(horse.BasicStats.Groom); - totalPrice += price; - count++; - message += Messages.FormatGroomerApplyService(price, horse.RandomId); - } - } - message += Messages.FormatGroomerApplyAllService(count, totalPrice); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildVet(User user, Vet vet) - { - string message = ""; - int totalPrice = 0; - - - foreach (HorseInstance horse in user.HorseInventory.HorseList) - { - message += Messages.FormatVetServiceHorseMeta(horse.Name, horse.BasicStats.Health, 1000); - - if (horse.BasicStats.Health >= 1000) - message += Messages.VetSerivcesNotNeeded; - else - { - int price = vet.CalculatePrice(horse.BasicStats.Health); - totalPrice += price; - - message += Messages.FormatVetApplyServiceMeta(price, horse.RandomId); - } - - } - if (user.HorseInventory.HorseList.Length > 0) - message += Messages.FormatVetApplyAllServiceMeta(totalPrice); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildBarn(User user, Barn barn) - { - string message = ""; - int totalPrice = 0; - foreach (HorseInstance horse in user.HorseInventory.HorseList) - { - message += Messages.FormatBarnHorseStatus(horse.Name, horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); - - int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); - if(price > 0) - { - totalPrice += price; - message += Messages.FormatBarnLetHorseRelax(price, horse.RandomId); - } - else - { - message += Messages.BarnHorseMaxed; - } - - } - message += Messages.FormatBarnLetAllHorsesReleax(totalPrice); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildFarrier(User user, Farrier farrier) - { - string message = ""; - int totalPrice = 0; - int maxShoes = 1000; - foreach (HorseInstance horse in user.HorseInventory.HorseList) - { - message += Messages.FormatFarrierCurrentShoes(horse.Name, horse.BasicStats.Shoes, maxShoes); - if (horse.BasicStats.Shoes < farrier.IronShoesAmount) - message += Messages.FormatFarrierApplyIron(farrier.IronCost, farrier.IronShoesAmount, horse.RandomId); - - if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) - { - totalPrice += farrier.SteelCost; - message += Messages.FormatFarrierApplySteel(farrier.SteelCost, farrier.SteelShoesAmount, horse.RandomId); - } - - } - if(totalPrice > 0) - message += Messages.FormatFarrierApplySteelToAll(totalPrice, farrier.SteelShoesAmount); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildRiddlerRiddle(User user) - { - string message = ""; - if (Riddler.HasCompletedAllRiddles(user)) { - message = Messages.RiddlerAnsweredAll; - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - else - { - Riddler riddle = Riddler.GetRandomRiddle(user); - user.LastRiddle = riddle; - - message += Messages.FormatRiddlerRiddle(riddle.Riddle); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - } - - - public static string BuildHorseEscapedMessage() - { - string message = Messages.HorseEvadedCapture; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildHorseEscapedAnyway() - { - string message = Messages.HorseEscapedAnyway; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildHorseCaughtMessage() - { - string message = Messages.YouCapturedTheHorse; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildAbuseReportPage() - { - string reportReasons = ""; - foreach(AbuseReport.ReportReason reason in AbuseReport.ReportReasons) - { - reportReasons += Messages.FormatAbuseReportReason(reason.Id, reason.Name); - } - return Messages.FormatAbuseReportMetaPage(reportReasons); - } - private static string buildHorseList(User user, bool youView=true) - { - string message = ""; - int i = 1; - foreach (HorseInfo.Category category in HorseInfo.HorseCategories) - { - HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray(); - if (horsesInCategory.Length > 0) - { - if (youView) - message += category.Meta; - else - message += category.MetaOthers; - foreach (HorseInstance instance in horsesInCategory) - { - message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0); - i++; - } - } - } - return message; - - } - public static string BuildHorseInventory(User user) - { - string message = Messages.FormatHorseHeader(user.MaxHorses, user.HorseInventory.HorseList.Length); - - message += buildHorseList(user); - message += Messages.ViewBaiscStats; - message += Messages.ViewAdvancedStats; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildPlayerListMenu(User user) - { - string message = ""; - - int friendsOnline = 0; - foreach(int friendId in user.Friends.List) - { - if (GameServer.IsUserOnline(friendId)) - friendsOnline++; - } - - message += Messages.PlayerListHeader; - message += Messages.PlayerListSelectFromFollowing; - message += Messages.FormatPlayerBuddyList(friendsOnline); - message += Messages.PlayerListOfNearby; - message += Messages.FormatPlayerList(GameServer.GetNumberOfPlayers() - 1); - message += Messages.PlayerListOfPlayersAlphabetically; - - message += Messages.FormatMapAllBuddiesList(Messages.FormatMapLocations(GameServer.GetAllBuddyLocations(user))); - message += Messages.FormatMapAllPlayersList(Messages.FormatMapLocations(GameServer.GetAllPlayerLocations(user))); - - message += Messages.PlayerListAbuseReport; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - - return message; - } - public static string BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId) - { - DateTime time = Helper.UnixTimeStampToDateTime(mailMessage.Timestamp); - string amOrPm = "am"; - string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - string minutes = time.Minute.ToString(); - if (minutes.Length <= 1) - minutes = "0" + minutes; - int hours = time.Hour; - if (hours == 0) - { - amOrPm = "am"; - hours = 12; - } - if (hours > 12) - { - hours -= 12; - amOrPm = "pm"; - } - - - string date = months[time.Month-1] + " " + time.Day + ", " + time.Year + " " + hours + ":" + minutes + amOrPm; - string message = Messages.FormatMailReadMessage(Database.GetUsername(mailMessage.FromUser), date, mailMessage.Subject, mailMessage.Message, itemRandomId); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildMailList(User user, InventoryItem mailMessageForPlayer) - { - string message = Messages.MailSelectFromFollowing; - foreach(ItemInstance inst in mailMessageForPlayer.ItemInstances) - { - Mailbox.Mail mail = user.MailBox.GetMessageByRandomId(inst.Data); - message += Messages.FormatMailEntry(mail.Subject, Database.GetUsername(mail.FromUser), inst.RandomId); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildInventoryInfo(PlayerInventory inv) - { - string message = ""; - message += Messages.FormatPlayerInventoryHeaderMeta(inv.Count, inv.BaseUser.MaxItems); - InventoryItem[] items = inv.GetItemList(); - foreach(InventoryItem item in items) - { - Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); - string title = itemInfo.Name; - if (item.ItemInstances.Length > 1 && itemInfo.PluralName != "") - title = itemInfo.PluralName; - - - message += Messages.FormatPlayerInventoryItemMeta(itemInfo.IconId, item.ItemInstances.Length, title); - - int randomId = item.ItemInstances[0].RandomId; - if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && !(itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) && World.CanDropItems(inv.BaseUser.X, inv.BaseUser.Y)) - message += Messages.FormatItemDropButton(randomId); - - if (itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) - message += Messages.FormatItemUseButton(randomId); - - if (itemInfo.Id == Item.Present) - message += Messages.FormatItemOpenButton(randomId); - - if (itemInfo.Type == "CLOTHES" || itemInfo.Type == "JEWELRY") - message += Messages.FormatWearButton(randomId); - - if (itemInfo.Type == "TEXT") - message += Messages.FormatItemReadButton(item.ItemId); - - if (itemInfo.Type == "PLAYERFOOD") - message += Messages.FormatItemConsumeButton(randomId); - - if (Item.IsThrowable(itemInfo.Id)) - message += Messages.FormatItemThrowButton(itemInfo.Id); - - message += Messages.FormatItemInformationButton(randomId); - message += Messages.R1; - } - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildHorseFeedMenu(HorseInstance horse, User user) - { - string message = ""; - message += Messages.FormatHorseCurrentStatus(horse.Name); - message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); - message += Messages.HorseHoldingHorseFeed; - foreach(InventoryItem item in user.Inventory.GetItemList()) - { - Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); - bool isHorseFood = false; - if (itemInfo.Effects.Length >= 2) - isHorseFood = (itemInfo.Effects[1].EffectsWhat == "MOOD" && itemInfo.Effects[0].EffectsWhat == "HUNGER"); - if (itemInfo.Type == "HORSEFOOD" || isHorseFood) - { - message += Messages.FormatHorseFeedEntry(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, item.ItemInstances[0].RandomId); - } - - } - message += Messages.BackToHorse; - return message; - } - - public static string BuildAutoSellMenu(HorseInstance horse) - { - string message = ""; - message += Messages.FormatAutoSellMenu(horse.AutoSell); - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - - - public static string BuildHorseReleaseConfirmationMessage(HorseInstance horse) - { - string message = Messages.FormatHorseAreYouSureMessage(horse.RandomId); - message += Messages.BackToMapHorse; - message += Messages.MetaTerminator; - return message; - } - public static string BuildHorseCompanionEquipMenu(HorseInstance horse, User user) - { - string message = ""; - message += Messages.FormatHorseCompanionMenuHeader(horse.Name); - if (horse.Equipment.Companion != null) - message += Messages.FormatHorseCompanionSelected(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name); - message += Messages.HorseCompanionMenuCurrentlyAvalibleCompanions; - foreach (InventoryItem item in user.Inventory.GetItemList()) - { - Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); - if(itemInfo.Type == "COMPANION") - { - message += Messages.FormatHorseCompanionOption(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, item.ItemId); - } - } - message += Messages.BackToHorse; - return message; - } - - public static string BuildAllBasicStats(User user) - { - string message = Messages.HorseAllBasicStats; - foreach(HorseInstance horse in user.HorseInventory.HorseList) - { - message += Messages.FormaHorseAllBasicStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Gender, horse.BasicStats.Experience); - message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildHorseDescriptionEditMeta(HorseInstance horse) - { - string message = Messages.FormatDescriptionEditMeta(horse.Name, horse.Description); - message += Messages.BackToHorse; - return message; - } - public static string BuildHorseInformation(HorseInstance horse, User user) - { - bool isMyHorse = horse.Owner == user.Id; - user.HorseWindowOpen = true; - - string message = ""; - if (isMyHorse) - message += Messages.FormatHorseNameYours(horse.Name); - else - message += Messages.FormatHorseNameOthers(horse.Name, Database.GetUsername(horse.Owner)); - - message += Messages.FormatHorseDescription(horse.Description); - message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Gender, HorseInfo.CalculateHands(horse.AdvancedStats.Height, false)); - message += Messages.FormatHorseExperience(horse.BasicStats.Experience); - - - if (horse.TrainTimer > 0) - message += Messages.FormatTrainableIn(horse.TrainTimer); - else - message += Messages.HorseIsTrainable; - - if(horse.Leaser != 0) - { - message += Messages.FormatHorseIsLeased(horse.LeaseTime); - } - - if (isMyHorse) - { - if (user.CurrentlyRidingHorse == null) - message += Messages.FormatMountButton(horse.RandomId); - else - message += Messages.FormatDisMountButton(horse.RandomId); - - - message += Messages.FormatFeedButton(horse.RandomId); - if (horse.Leaser == 0) - { - message += Messages.FormatTackButton(horse.RandomId); - } - message += Messages.FormatPetButton(horse.RandomId); - if (horse.Leaser == 0) - { - message += Messages.FormatProfileButton(horse.RandomId); - - if (horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Bridle == null && horse.Equipment.Companion == null) - { - string autoSellMessage = Messages.HorseNoAutoSell; - if (horse.AutoSell > 0) - autoSellMessage = Messages.FormatAutoSellPrice(horse.AutoSell); - message += Messages.FormatAutoSell(autoSellMessage); - if (horse.AutoSell > 0) - message += Messages.HorseChangeAutoSell; - else - message += Messages.HorseSetAutoSell; - } - else - { - message += Messages.HorseCantAutoSellTacked; - } - } - else - { - message += Messages.R1; - } - } - else - { - if (horse.AutoSell > 0) - message += Messages.FormatAutoSellOthers(horse.AutoSell); - } - - - if (horse.Leaser == 0) - { - - if (isMyHorse) - message += Messages.FormatHorseCategory(horse.Category, Messages.HorseMarkAsCategory); - else - message += Messages.FormatHorseCategory(horse.Category, ""); - } - - message += Messages.HorseStats; - - // Energy == Tiredness - message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); - message += Messages.HorseTacked; - - if (horse.Equipment.Saddle != null) - message += Messages.FormatHorseTackEntry(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name, horse.Equipment.Saddle.Id); - - if (horse.Equipment.SaddlePad != null) - message += Messages.FormatHorseTackEntry(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name, horse.Equipment.SaddlePad.Id); - if (horse.Equipment.Bridle != null) - message += Messages.FormatHorseTackEntry(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name, horse.Equipment.Bridle.Id); - - if(horse.Leaser == 0) - { - message += Messages.HorseCompanion; - if (horse.Equipment.Companion != null) - if (isMyHorse) - message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, Messages.HorseCompanionChangeButton, horse.Equipment.Companion.Id); - else - message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, "", horse.Equipment.Companion.Id); - else - if (isMyHorse) - message += Messages.HorseNoCompanion; - } - - message += Messages.FormatHorseAdvancedStats(horse.Spoiled, horse.MagicUsed); - - HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); - HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); - HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); - HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); - HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); - HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE); - HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY); - - message += Messages.FormatHorseAdvancedStat(speedStat.BreedValue, speedStat.CompanionOffset, speedStat.TackOffset, speedStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(strengthStat.BreedValue, strengthStat.CompanionOffset, strengthStat.TackOffset, strengthStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(conformationStat.BreedValue, conformationStat.CompanionOffset, conformationStat.TackOffset, conformationStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(agilityStat.BreedValue, agilityStat.CompanionOffset, agilityStat.TackOffset, agilityStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(enduranceStat.BreedValue, enduranceStat.CompanionOffset, enduranceStat.TackOffset, enduranceStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(inteligenceStat.BreedValue, inteligenceStat.CompanionOffset, inteligenceStat.TackOffset, inteligenceStat.MaxValue); - message += Messages.FormatHorseAdvancedStat(personalityStat.BreedValue, personalityStat.CompanionOffset, personalityStat.TackOffset, personalityStat.MaxValue); - - message += Messages.FormatHorseBreedDetails(horse.Breed.Name, horse.Breed.Description); - message += Messages.FormatHorseHeight(HorseInfo.CalculateHands(horse.Breed.BaseStats.MinHeight, false), HorseInfo.CalculateHands(horse.Breed.BaseStats.MaxHeight, false)); - - message += Messages.FormatPossibleColors(horse.Breed.Colors); - if (horse.Leaser == 0) - { - if (isMyHorse) - { - bool canRelease = true; - if (World.InTown(user.X, user.Y)) - canRelease = false; - - - if (World.InSpecialTile(user.X, user.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(user.X, user.Y); - if (tile.Code != null) - canRelease = false; - } - - if (canRelease) - message += Messages.FormatHorseReleaseButton(horse.Breed.Type.ToUpper()); - } - } - - - message += Messages.HorseOthers; - if (isMyHorse) - message += buildHorseList(user); - else - message += buildHorseListIndependantlyOfUserInstance(horse.Owner); - - message += Messages.BackToMapHorse; - message += Messages.MetaTerminator; - - return message; - - } - - public static string BuildAllStats(User user) - { - string message = Messages.HorseAllStatsHeader; - foreach(HorseInstance horse in user.HorseInventory.HorseList) - { - HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); - HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); - HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); - HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); - HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); - HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE); - HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY); - - message += Messages.FormatAllStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Gender, horse.BasicStats.Experience); - message += Messages.FormatCompactedBasicStats(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); - message += Messages.FormatCompactedAdvancedStats(speedStat.Total, strengthStat.Total, conformationStat.Total, agilityStat.Total, enduranceStat.Total, inteligenceStat.Total, personalityStat.Total); - } - message += Messages.HorseAllStatsLegend; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - public static string BuildMiscStats(User user) - { - string message = Messages.StatMiscHeader; - if (user.TrackedItems.TrackingItems.Length <= 0) - message += Messages.StatMiscNoneRecorded; - foreach(Tracking.TrackedItem trackedItem in user.TrackedItems.TrackingItems.OrderBy(o => Tracking.GetTrackedItemsStatsMenuName(o.What))) - { - try - { - message += Messages.FormatMiscStatsEntry(Tracking.GetTrackedItemsStatsMenuName(trackedItem.What), trackedItem.Count); - } - catch(KeyNotFoundException) - { - Logger.ErrorPrint(user.Username + " Has tracked items in db that dont have a value associated."); - continue; - } - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - - - public static string BuildTackMenu(HorseInstance horse, User user) - { - string message = Messages.FormatTackedAsFollowedMessage(horse.Name); - if(horse.Equipment.Saddle != null) - message += Messages.FormatUnEquipSaddle(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name); - if (horse.Equipment.SaddlePad != null) - message += Messages.FormatUnEquipSaddlePad(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name); - if (horse.Equipment.Bridle != null) - message += Messages.FormatUnEquipBridle(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name); - if (horse.Breed.Type == "llama") - message += Messages.HorseLlamaTackInInventory; - else if (horse.Breed.Type == "camel") - message += Messages.HorseCamelTackInInventory; - else - message += Messages.HorseTackInInventory; - - foreach(InventoryItem item in user.Inventory.GetItemList()) - { - Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); - if (itemInfo.Type == "TACK") - { - if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(1) != 1) - continue; - else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(1) != 2) - continue; - else if (!(horse.Breed.Type == "llama" || horse.Breed.Type == "camel") && itemInfo.GetMiscFlag(1) != 0) - continue; - message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, itemInfo.Id); - } - } - - message += Messages.BackToHorse; - return message; - } - public static string BuildNpcChatpoint(User user, Npc.NpcEntry npc, Npc.NpcChat chatpoint) - { - bool hideReplys = false; - if (chatpoint.ActivateQuestId != 0) - { - Quest.QuestEntry quest = Quest.GetQuestById(chatpoint.ActivateQuestId); - user.MajorPriority = true; - - Quest.QuestResult result = Quest.ActivateQuest(user, quest, true); - if (result.QuestCompleted) - { - if (result.SetChatpoint != -1) - Npc.SetDefaultChatpoint(user, npc, result.SetChatpoint); - - if (result.GotoChatpoint != -1) - chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint); - - if (result.NpcChat != null && result.NpcChat.Trim() != "") - chatpoint.ChatText = result.NpcChat; - } - else - { - if (result.GotoChatpoint != -1) - chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint); - - if (result.NpcChat != null && result.NpcChat.Trim() != "") - chatpoint.ChatText = result.NpcChat; - - if (result.HideRepliesOnFail) - hideReplys = true; - } - } - - - string message = ""; - message += Messages.FormatNpcChatpoint(npc.Name, npc.ShortDescription, chatpoint.ChatText); - foreach(Npc.NpcReply reply in chatpoint.Replies) - { - if(reply.RequiresQuestIdCompleted != 0) - if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdCompleted) <= 0) - continue; - if (reply.RequiresQuestIdNotCompleted != 0) - if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdNotCompleted) >= 1) - continue; - if (hideReplys) - continue; - message += Messages.FormatNpcReply(reply.ReplyText, reply.Id); - } - message += Messages.BackToMap + Messages.MetaTerminator; - return message; - } - - public static string BuildMetaInfo(User user, int x, int y) - { - string message = ""; - message += buildLocationString(x, y); - message += BuildWildHorseList(user); - message += buildNpc(user, x, y); - - message += buildCommonInfo(user, x, y); - return message; - } - public static string BuildPawneerOrderFound(HorseInstance instance) - { - string message = Messages.FormatPawneerOrderHorseFound(instance.Breed.Name, instance.Color, instance.Gender, instance.AdvancedStats.Height, instance.AdvancedStats.Personality, instance.AdvancedStats.Inteligence); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildPawneerOrderGenderList(HorseInfo.Breed breed, string color) - { - string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name); - foreach (string gender in breed.GenderTypes()) - message += Messages.FormatPawneerOrderGenderEntry(Helper.CapitalizeFirstLetter(gender), gender); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildPawneerOrderColorList(HorseInfo.Breed breed) - { - string message = Messages.FormatPawneerOrderSelectColor(breed.Name); - foreach (string color in breed.Colors) - message += Messages.FormatPawneerOrderColorEntry(color); - - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - - } - public static string BuildPawneerOrderBreedList() - { - string message = Messages.PawneerOrderSelectBreed; - foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) - { - if (breed.Swf == "") - continue; - if (breed.SpawnInArea == "none") - continue; - message += Messages.FormatPawneerOrderBreedEntry(breed.Name, breed.Id); - } - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - public static string BuildPawneerConfimation(HorseInstance horse) - { - string message = ""; - message += Messages.FormatPawneerConfirmPawn(horse.Breed.Name, horse.RandomId); - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - private static string buildSanta(User user) - { - string message = Messages.SantaHiddenText; - InventoryItem[] items = user.Inventory.GetItemList(); - foreach (InventoryItem item in items) - { - Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); - int randomId = item.ItemInstances[0].RandomId; - if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && itemInfo.Type != "COMPANION" && itemInfo.Id != Item.Present) - message += Messages.FormatSantaItemEntry(itemInfo.IconId, itemInfo.Name, randomId); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildTrainer(User user, Trainer trainer) - { - string message = ""; - message += Messages.FormatTrainerHeaderFormat(trainer.ImprovesStat, trainer.MoneyCost, trainer.ImprovesAmount, trainer.ExperienceGained); - - - foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList()) - { - HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); - HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); - HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); - HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); - HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); - - HorseInfo.StatCalculator statCalculator; - switch (trainer.ImprovesStat.ToUpper()) - { - case "SPEED": - statCalculator = speedStat; - break; - case "STRENGTH": - statCalculator = strengthStat; - break; - case "AGILITY": - statCalculator = agilityStat; - break; - case "ENDURANCE": - statCalculator = enduranceStat; - break; - case "CONFORMATION": - statCalculator = conformationStat; - break; - default: - statCalculator = speedStat; - break; - } - - bool allowed = false; - - /* - * Pinto bug: If you try to train a horse, but doing so would go over the maximum amount - * Then it just says its maxed trained, and u have to use a ranch. - */ - - if (ConfigReader.FixOfficalBugs) - allowed = (statCalculator.BreedValue < statCalculator.MaxValue); - else - allowed = ((statCalculator.BreedValue + trainer.ImprovesAmount) < statCalculator.MaxValue); - - if(allowed) - message += Messages.FormatTrainerTrainInEntry(horse.Name, statCalculator.BreedValue, statCalculator.MaxValue, horse.RandomId); - else - message += Messages.FormatTrainerFullyTrained(horse.Name, statCalculator.BreedValue); - - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildPawneer(User user) - { - string message = ""; - if (user.Inventory.HasItemId(Item.PawneerOrder) && (user.HorseInventory.HorseList.Length < user.MaxHorses)) - message += Messages.PawneerOrderMeta; - message += Messages.PawneerUntackedHorsesICanBuy; - foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList()) - { - if(horse.Category == "TRADING" && horse.Equipment.Bridle == null && horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Companion == null) - { - message += Messages.FormatPawneerHorseEntry(horse.Name, Pawneer.CalculateTotalPrice(horse), horse.RandomId); - } - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - public static string BuildLeaserOnLeaseInfo(Leaser leaser) - { - string mesasge = ""; - mesasge += leaser.OnLeaseText; - mesasge += Messages.BackToMap; - mesasge += Messages.MetaTerminator; - return mesasge; - } - private static string buildLeaser(User user, Leaser[] leasers) - { - string message = ""; - foreach(Leaser leaser in leasers) - { - message += leaser.Info; - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - public static string build2PlayerGame(User user, string swf) - { - Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); - room.Join(user); - - if (TwoPlayer.IsPlayerInGame(user)) - { - string username = ""; - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(user); - if (twoPlayerGame.Invitee.Id == user.Id) - username = twoPlayerGame.Invitee.Username; - else - username = twoPlayerGame.Inviting.Username; - overwrite = true; - - return Messages.Format2PlayerGameInProgress(username); - } - - string message = Messages.TwoPlayerOtherPlayer; - foreach(User userAt in room.JoinedUsers.ToArray()) - { - if (userAt.Id == user.Id) - continue; - - message += Messages.Format2PlayerPlayerName(userAt.Username); - - if(!TwoPlayer.IsPlayerInGame(userAt)) - { - if (TwoPlayer.IsPlayerInvitingPlayer(user, userAt)) - message += Messages.TwoPlayerSentInvite; - else - message += Messages.Format2PlayerInviteButton(userAt.Id); - if (TwoPlayer.IsPlayerInvitingPlayer(userAt, user)) - message += Messages.Format2PlayerAcceptButton(userAt.Id); - - } - else - { - string username = ""; - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(userAt); - if (twoPlayerGame.Invitee.Id == userAt.Id) - username = twoPlayerGame.Invitee.Username; - else - username = twoPlayerGame.Inviting.Username; - - message += Messages.Format2PlayerPlayingWith(username); - } - - message += Messages.R1; - } - message += Messages.ExitThisPlace; - return message; - } - public static string BuildComposeMailMenu() - { - string message = Messages.CityHallMailSendMeta; - message += Messages.BackToMap; - message += Messages.MetaTerminator; - return message; - } - private static string buildTownHall(User user) - { - GameServer.CheckMail(user); - - string message = Messages.CityHallMenu; - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - private static string buildArena(User user, Arena arena) - { - string message = Messages.FormatArenaEventName(arena.Type); - if(arena.Mode == "TAKINGENTRIES") - { - int minutes = World.ServerTime.Minutes % 60; - - int lastMinutes = minutes - (minutes % arena.RaceEvery); - int lastHours = (lastMinutes / 60); - - string amOrPm = "am"; - if (lastHours == 0) - { - amOrPm = "am"; - lastHours = 12; - } - if (lastHours > 12) - { - lastHours -= 12; - amOrPm = "pm"; - } - - message += Messages.FormatArenaCurrentlyTakingEntries(lastHours, lastMinutes, amOrPm, arena.RaceEvery - minutes); - if (arena.Entries.Length + 1 > arena.Slots) - { - message += Messages.ArenaCompetitionFull; - } - else if (!arena.UserHasHorseEntered(user)) - { - - foreach(HorseInstance horseInstance in user.HorseInventory.HorseList) - { - if (horseInstance.Leaser > 0) - continue; - - if(horseInstance.Equipment.Saddle != null && horseInstance.Equipment.SaddlePad != null && horseInstance.Equipment.Bridle != null) - message += Messages.FormatArenaEnterHorseButton(horseInstance.Name, arena.EntryCost, horseInstance.RandomId); - } - } - else - { - message += Messages.ArenaYouHaveHorseEntered; - } - - } - else if(arena.Mode == "COMPETING") - { - message += Messages.ArenaCompetitionInProgress; - } - - message += Messages.ArenaCurrentCompetitors; - foreach(Arena.ArenaEntry entries in arena.Entries) - { - message += Messages.FormatArenaCompetingHorseEntry(entries.EnteredUser.Username, entries.EnteredHorse.Name, entries.EnteredHorse.RandomId); - } - message += Messages.ExitThisPlace; - message += Messages.MetaTerminator; - return message; - } - public static string BuildSpecialTileInfo(User user, World.SpecialTile specialTile) - { - string message = ""; - - if (specialTile.Code == null) - message += buildLocationString(specialTile.X, specialTile.Y); - - - if (specialTile.Title != null && specialTile.Title != "") - message += Messages.FormatTileName(specialTile.Title); - - - if (specialTile.Description != null && specialTile.Description != "") - { - message += specialTile.Description; - message += Messages.Seperator; //
- } - - - string npc = buildNpc(user, specialTile.X, specialTile.Y); - message += npc; - - if (specialTile.Code == null || specialTile.Code == "") - message += buildCommonInfo(user, specialTile.X, specialTile.Y); - else - { - - user.MinorPriority = true; - - string TileCode = specialTile.Code; - - string TileArg = ""; - if (TileCode.Contains("-")) - { - TileArg = TileCode.Split('-')[1]; - TileCode = TileCode.Split('-')[0]; - } - if (TileCode == "EXITABLE") - message += Messages.ExitThisPlace; - - if (TileCode == "TRANSPORT") - { - Transport.TransportPoint point = Transport.GetTransportPoint(specialTile.X, specialTile.Y); - message += Meta.BuildTransportInfo(user, point); - } - - if (TileCode == "STRAWPILE") - { - if (user.Inventory.HasItemId(Item.Pitchfork)) - message += Messages.HasPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator; - else - message += Messages.NoPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator; - } - - if (TileCode == "STORE") - { - int ShopID = int.Parse(TileArg); - Shop shop = Shop.GetShopById(ShopID); - user.LastShoppedAt = shop; - message += buildShopInfo(shop, user.Inventory); - - } - if(TileCode == "TOWNHALL") - { - message += buildTownHall(user); - } - if (TileCode == "VET") - { - message += buildVet(user, Vet.GetVetById(int.Parse(TileArg))); - } - if(TileCode == "GROOMER") - { - message += buildGroomer(user, Groomer.GetGroomerById(int.Parse(TileArg))); - } - if (TileCode == "FARRIER") - { - message += buildFarrier(user, Farrier.GetFarrierById(int.Parse(TileArg))); - } - if(TileCode == "BARN") - { - message += buildBarn(user, Barn.GetBarnById(int.Parse(TileArg))); - } - if (TileCode == "BANK") - { - message += buildBank(user); - } - if (TileCode == "WISHINGWELL") - { - message += buildWishingWell(user); - } - if(TileCode == "HORSEPAWNEER") - { - message += buildPawneer(user); - } - if (TileCode == "VENUSFLYTRAP") - { - message += buildVenusFlyTrap(user); - } - if (TileCode == "RIDDLER") - { - message += buildRiddlerRiddle(user); - } - if(TileCode == "ARENA") - { - message += buildArena(user, Arena.GetAreaById(int.Parse(TileArg))); - } - if(TileCode == "AUCTION") - { - message += buildAuction(user, Auction.GetAuctionRoomById(int.Parse(TileArg))); - } - if(TileCode == "TRAINER") - { - message += buildTrainer(user, Trainer.GetTrainerById(int.Parse(TileArg))); - } - if(TileCode == "HORSELEASER") - { - message += buildLeaser(user, Leaser.GetLeasersById(int.Parse(TileArg))); - } - if (TileCode == "LIBRARY") - { - message += buildLibary(); - } - if(TileCode == "MULTIHORSES") - { - message += buildMultiHorses(user, TileArg); - } - if (TileCode == "POND") - { - message += buildPond(user); - } - if(TileCode == "2PLAYER") - { - string msg = build2PlayerGame(user, TileArg); - if (!overwrite) - message += msg; - else - message = msg; - - overwrite = false; - } - if(TileCode == "HORSES") - { - message += buildHorseGame(user, TileArg); - } - if (TileCode == "WORKSHOP") - { - message += buildWorkshop(user); - } - if (TileCode == "MUDHOLE") - { - message += buildMudHole(user); - } - if (TileCode == "RANCH") - { - message += buildRanch(user, int.Parse(TileArg)); - } - if(TileCode == "SANTA") - { - message += buildSanta(user); - } - if (TileCode == "MULTIROOM") - { - message += buildMultiroom(TileArg != "" ? TileArg : null, user); - } - if (TileCode == "PASSWORD") - { - message += buildPassword(); - } - if (TileCode == "HORSEWHISPERER") - { - message += buildHorseWhisperer(); - } - if (TileCode == "INN") - { - int InnID = int.Parse(TileArg); - Inn inn = Inn.GetInnById(InnID); - user.LastVisitedInn = inn; - message += buildInn(inn); - } - if (TileCode == "FOUNTAIN") - { - message += buildFountain(); - - } - } - - - - return message; - } - - - } -} +using HISP.Game.Horse; +using HISP.Game.Inventory; +using HISP.Game.Services; +using HISP.Player; +using HISP.Server; +using HISP.Game.Items; +using HISP.Game.Chat; +using HISP.Game.Events; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Drawing; + +namespace HISP.Game +{ + public class Meta + { + private static bool overwrite = false; + + private static string buildLocationString(int x, int y) + { + string areaString = buildAreaString(x, y); + if (areaString != "") + areaString = Messages.LocationFormat.Replace("%META%", areaString); + return areaString; + } + private static string buildAreaString(int x, int y) + { + string locationString = ""; + + if (World.InArea(x, y)) + locationString += Messages.AreaFormat.Replace("%AREA%", World.GetArea(x, y).Name); + if (World.InTown(x, y)) + locationString += Messages.TownFormat.Replace("%TOWN%", World.GetTown(x, y).Name); + if (World.InIsle(x, y)) + locationString += Messages.IsleFormat.Replace("%ISLE%", World.GetIsle(x, y).Name); + return locationString; + } + + private static string buildPlayersHere(User fromUser, int x, int y) + { + string playersHere = ""; + User[] playersAt = GameServer.GetUsersAt(x, y, true, true); + if(playersAt.Length > 1) + { + playersHere += Messages.PlayersHere; + int count = 0; + foreach(User playerAt in playersAt) + { + if (playerAt.Id == fromUser.Id) + continue; + string buttons = ""; + buttons += Messages.FormatPlayerHereProfileButton(playerAt.Id); + buttons += Messages.FormatPlayerHereSocialButtton(playerAt.Id); + buttons += Messages.FormatPlayerHereTradeButton(playerAt.Id); + if (fromUser.Friends.IsFriend(playerAt.Id)) + buttons += Messages.FormatPlayerHereTagButton(playerAt.Id); + else + buttons += Messages.FormatPlayerHereBuddyButton(playerAt.Id); + buttons += Messages.FormatPmButton(playerAt.Username); + + playersHere += Messages.FormatPlayerHereMenu(playerAt.GetPlayerListIcon(), playerAt.Username,buttons); + count++; + } + + if(count >= 2) + { + SocialType stype = SocialType.GetSocialType("GROUP"); + foreach(SocialType.Social social in stype.Socials) + { + playersHere += Messages.FormatSocialButton(social.Id, social.ButtonName); + } + playersHere += Messages.R1; + } + + if (count <= 0) + return ""; + } + + return playersHere; + } + + private static string buildNearbyString(int x, int y, bool showNearbyPlayersHeader=true) + { + string playersNearby = ""; + + User[] nearbyUsers = GameServer.GetNearbyUsers(x, y, true, true); + int count = 0; + if (nearbyUsers.Length > 1) + { + if(showNearbyPlayersHeader) + { + playersNearby += Messages.NearbyPlayers; + } + + string usersWest = ""; + string usersNorth = ""; + string usersEast = ""; + string usersSouth = ""; + + foreach (User nearbyUser in nearbyUsers) + { + if (nearbyUser.X == x && nearbyUser.Y == y) // not yourself + continue; + + int xDiff = x - nearbyUser.X; + int yDiff = y - nearbyUser.Y; + double angle = (Math.Atan2(yDiff, xDiff) * 180.0 / Math.PI); + angle -= 45; + angle = (angle % 360 + 360) % 360; + + if (angle >= 270 && angle <= 360 ) + usersWest += nearbyUser.Username + " "; + else if (angle >= 90 && angle <= 180) + usersEast += nearbyUser.Username + " "; + else if (angle >= 180 && angle <= 270) + usersSouth += nearbyUser.Username + " "; + else if (angle >= 0 && angle <= 90) + usersNorth += nearbyUser.Username + " "; + + + count++; + } + + if (usersEast != "") + playersNearby += " " + Messages.East + usersEast + Messages.Seperator; + if (usersWest != "") + playersNearby += " " + Messages.West + usersWest + Messages.Seperator; + if (usersSouth != "") + playersNearby += " " + Messages.South + usersSouth + Messages.Seperator; + if (usersNorth != "") + playersNearby += " " + Messages.North + usersNorth + Messages.Seperator; + + + + } + if(count <= 0) + { + return ""; + } + return playersNearby; + + } + private static string buildShopInfo(Shop shop, IInventory shopperInventory) + { + string message = ""; + InventoryItem[] itemList = shop.Inventory.GetItemList(); + + // Get shops stock + message += Messages.ThingsIAmSelling; + foreach (InventoryItem item in itemList) + { + message += Messages.R1; + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); + + int count = item.ItemInstances.Length; + string countStr = count.ToString(); + if (item.Infinite) + countStr = Messages.InfinitySign; + + + message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateBuyCost(itemInfo)); + + message += Messages.FormatBuyItemButton(itemInfo.Id); + if (count >= 5) + message += Messages.FormatBuy5ItemButton(itemInfo.Id); + if (count >= 25) + message += Messages.FormatBuy25ItemButton(itemInfo.Id); + + message += Messages.FormatItemInformationByIdButton(itemInfo.Id); + + } + + // Check whats avalilble to be sold + message += Messages.R1 + Messages.ThingsYouSellMe; + InventoryItem[] shopperItemList = shopperInventory.GetItemList(); + + foreach (InventoryItem shopperitem in shopperItemList) + { + Item.ItemInformation itemInfo = Item.GetItemById(shopperitem.ItemId); + + // Prevent items that cannot be sold to this shopkeeper. + if (!shop.CanSell(itemInfo)) + continue; + + + int count = shopperitem.ItemInstances.Length; + string countStr = count.ToString(); + + + message += Messages.R1; + message += Messages.FormatShopEntry(itemInfo.IconId, countStr, itemInfo.Name, shop.CalculateSellCost(itemInfo)); + message += Messages.FormatSellButton(shopperitem.ItemInstances[0].RandomId); + message += Messages.FormatSellAllButton(itemInfo.Id); + message += Messages.FormatItemInformationButton(shopperitem.ItemInstances[0].RandomId); + } + + message += Messages.R1 + Messages.ExitThisPlace; + return message; + } + + + private static string buildWishingWell(User user) + { + string message = ""; + bool hasCoins = user.Inventory.HasItemId(Item.WishingCoin); + if (!hasCoins) + { + message += Messages.NoWishingCoins; + } + else + { + InventoryItem wishingCoins = user.Inventory.GetItemByItemId(Item.WishingCoin); + int totalCoins = wishingCoins.ItemInstances.Length; + message += Messages.FormatNumberOfWishingCoins(totalCoins); + message += Messages.WishingWellMeta; + } + + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + + + } + + private static string buildCommonInfo(User user, int x, int y) + { + user.HorseWindowOpen = false; + string message = ""; + message += buildPlayersHere(user, x, y); + bool playersHere = (GameServer.GetUsersAt(x, y, true, true).Length >= 1); + message += buildNearbyString(x, y, playersHere); + + // Dropped Items + DroppedItems.DroppedItem[] Items = DroppedItems.GetItemsAt(x, y); + if (Items.Length == 0) + message += Messages.NothingMessage; + else + { + message += Messages.ItemsOnGroundMessage; + foreach (DroppedItems.DroppedItem item in Items) + { + Item.ItemInformation itemInfo = item.Instance.GetItemInfo(); + message += Messages.FormatGrabItemMessage(itemInfo.Name, item.Instance.RandomId, itemInfo.IconId); + } + if (Items.Length > 1) + message += Messages.GrabAllItemsButton; + } + return message; + } + + private static string buildWornJewelery(User user, bool other) + { + string message = ""; + + // Insert LGBT Patch here + + string pronoun = ""; + + if (other) + { + if (user.Gender == "FEMALE") + { + pronoun = Messages.PronounFemaleShe; + } + + if (user.Gender == "MALE") + { + pronoun = Messages.PronounMaleHe; + } + } + + if (!other) + message += Messages.JewelrySelected; + else + message += Messages.FormatOtherJewelerySelected(pronoun); + + bool hasMsg = false; + + if (user.EquipedJewelry.Slot1 != null) + { + message += Messages.FormatJewelrySlot1(user.EquipedJewelry.Slot1.Name, user.EquipedJewelry.Slot1.IconId, other); + hasMsg = true; + } + if (user.EquipedJewelry.Slot2 != null) + { + message += Messages.FormatJewelrySlot2(user.EquipedJewelry.Slot2.Name, user.EquipedJewelry.Slot2.IconId, other); + hasMsg = true; + } + if (user.EquipedJewelry.Slot3 != null) + { + message += Messages.FormatJewelrySlot3(user.EquipedJewelry.Slot3.Name, user.EquipedJewelry.Slot3.IconId, other); + hasMsg = true; + } + if (user.EquipedJewelry.Slot4 != null) + { + message += Messages.FormatJewelrySlot4(user.EquipedJewelry.Slot4.Name, user.EquipedJewelry.Slot4.IconId, other); + hasMsg = true; + } + + if (!hasMsg) + { + if (!other) + message = Messages.NoJewerlyEquipped; + else + message = Messages.FormatOtherNoJewelery(pronoun); + } + + + + return message; + } + + private static string buildMultiroom(string id, User user) + { + + string message = Messages.MultiroomPlayersParticipating; + + Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); + room.Join(user); + + foreach (User userOnTile in room.JoinedUsers) + { + if (userOnTile.Id == user.Id) + continue; + + message += Messages.FormatMultiroomParticipent(userOnTile.Username); + } + + message += Messages.R1; + + if(id == null) // Generic + { + // Do nothing + } + else if (id[0] == 'P') // Poet + { + int lastPoet = Database.GetLastPlayer(id); + string username = ""; + if (lastPoet != -1) + username = Database.GetUsername(lastPoet); + + message += Messages.FormatLastPoet(username); + } + else if (id[0] == 'D') // Drawning room + { + int lastDraw = Database.GetLastPlayer(id); + string username = ""; + if (lastDraw != -1) + username = Database.GetUsername(lastDraw); + + message += Messages.FormatLastToDraw(username); + } + + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildEquippedCompetitionGear(User user, bool other = false) + { + string message = ""; + + if (!other) + message = Messages.CompetitionGearSelected; + + // Insert LGBT Patch Here + + string pronoun = Messages.PronounYouYour; + string pronoun2 = Messages.PronounYouYour; + if (other) + { + if (user.Gender == "FEMALE") + { + pronoun = Messages.PronounFemaleShe; + pronoun2 = Messages.PronounFemaleHer; + } + else if (user.Gender == "MALE") + { + pronoun = Messages.PronounMaleHe; + pronoun2 = Messages.PronounMaleHis; + } + + message = Messages.FormatOtherCompetitionGear(pronoun); + } + + bool hasMsg = false; + + if (user.EquipedCompetitionGear.Head != null) + { + message += Messages.FormatCompetitionGearHead(user.EquipedCompetitionGear.Head.Name, pronoun2, user.EquipedCompetitionGear.Head.IconId, other); + hasMsg = true; + } + if (user.EquipedCompetitionGear.Body != null) + { + message += Messages.FormatCompetitionGearBody(user.EquipedCompetitionGear.Body.Name, pronoun2, user.EquipedCompetitionGear.Body.IconId, other); + hasMsg = true; + } + if (user.EquipedCompetitionGear.Legs != null) + { + message += Messages.FormatCompetitionGearLegs(user.EquipedCompetitionGear.Legs.Name, pronoun2, user.EquipedCompetitionGear.Legs.IconId, other); + hasMsg = true; + } + if (user.EquipedCompetitionGear.Feet != null) + { + message += Messages.FormatCompetitionGearFeet(user.EquipedCompetitionGear.Feet.Name, pronoun2, user.EquipedCompetitionGear.Feet.IconId, other); + hasMsg = true; + } + + if (!hasMsg) + { + if (!other) + message = Messages.NoCompetitionGear; + else + message = Messages.FormatOtherNoCompetitionGear(pronoun); + } + + return message; + + } + + private static string buildHorseListIndependantlyOfUserInstance(int userId) + { + string message = ""; + int i = 1; + + + foreach (HorseInfo.Category category in HorseInfo.HorseCategories) + { + HorseInstance[] horsesInCategory = Database.GetPlayerHorsesInCategory(userId, category.Name).OrderBy(o => o.Name).ToArray(); + if (horsesInCategory.Length > 0) + { + message += category.MetaOthers; + foreach (HorseInstance instance in horsesInCategory) + { + message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0); + i++; + } + } + } + + return message; + + } + public static string buildLibary() + { + return Messages.LibaryMainMenu + Messages.ExitThisPlace + Messages.MetaTerminator; + } + private static string buildNpc(User user, int x, int y) + { + string message = ""; + Npc.NpcEntry[] entries = Npc.GetNpcByXAndY(x, y); + foreach (Npc.NpcEntry ent in entries) + { + if (ent.AdminOnly && !user.Administrator) + continue; + + if (ent.RequiresQuestIdCompleted != 0) + if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdCompleted) <= 0) + continue; + + if (ent.RequiresQuestIdNotCompleted != 0) + if (user.Quests.GetTrackedQuestAmount(ent.RequiresQuestIdNotCompleted) >= 1) + continue; + + message += Messages.FormatNpcStartChatMessage(ent.IconId, ent.Name, ent.ShortDescription, ent.Id); + if(ent.Chatpoints.Length > 0) + { + if (ent.LongDescription != "") + message += Messages.FormatNpcInformationButton(ent.Id); + message += Messages.FormatNpcTalkButton(ent.Id); + } + else + { + message += Messages.NpcNoChatpoints; + } + message += Messages.R1; + } + return message; + } + public static string buildVenusFlyTrap(User user) + { + int moneyLost = GameServer.RandomNumberGenerator.Next(0, 100); + if (moneyLost > user.Money) + moneyLost = user.Money; + user.TakeMoney(moneyLost); + return Messages.FormatVenusFlyTrapMeta(moneyLost); + } + public static string buildInn(Inn inn) + { + string message = Messages.InnBuyMeal; + foreach (Item.ItemInformation item in inn.MealsOffered) + { + message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id); + } + message += Messages.InnBuyRest; + foreach (Item.ItemInformation item in inn.RestsOffered) + { + message += Messages.FormatInnItemEntry(item.IconId, item.Name, inn.CalculateBuyCost(item), item.Id); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + + public static string SelectPlayerStatFormat(int statValue) + { + int curValue = 1000; + int devisibleBy = Convert.ToInt32(Math.Floor((decimal)curValue / Messages.StatPlayerFormats.Length)); + + for (int i = 0; i < Messages.StatPlayerFormats.Length; i++) + { + curValue -= devisibleBy; + if (statValue >= curValue) + return Messages.StatPlayerFormats[i]; + + } + throw new Exception("A mathematically impossible error occured. please check wether the laws of physics still apply."); + } + + public static string BuildTradeAdd(Trade trade) + { + string message = Messages.FormatTradeWhatToOffer(trade.OtherTrade.Trader.Username); + message += Messages.TradeOfferMoney; + message += Messages.TradeOfferHorse; + foreach(HorseInstance horse in trade.Trader.HorseInventory.HorseList.OrderBy(o => o.Name)) + { + if (horse.Leaser > 0) + continue; + + if (horse.Category != "TRADING") + continue; + + bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null); + message += Messages.FormatTradeOfferHorse(horse.Name, tacked, horse.RandomId); + } + + if(trade.OtherTrade.Trader.Inventory.Count >= trade.OtherTrade.Trader.MaxItems) + { + message += Messages.TradeOfferItemOtherPlayerInvFull; + } + else + { + message += Messages.TradeOfferItem; + foreach(InventoryItem item in trade.Trader.Inventory.GetItemList()) + { + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); + if (itemInfo.Type == "QUEST" || itemInfo.Type == "TEXT" || itemInfo.Id == Item.DorothyShoes) + continue; + message += Messages.FormatTradeOfferItem(itemInfo.IconId, itemInfo.Name, item.ItemInstances.Length, item.ItemId); + } + } + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + + } + public static string BuildSocialMenu(bool onHorse) + { + string message = ""; + foreach(SocialType sType in SocialType.SocialTypes) + { + if (sType.Type == "GROUP") + continue; + if (sType.Type == "HORSE") + if (!onHorse) + continue; + + message += Messages.FormatSocialMenuType(sType.Type); + foreach(SocialType.Social social in sType.Socials) + { + message += Messages.FormatSocialButton(social.Id, social.ButtonName); + } + message += Messages.R1; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildTradeAddItem(int totalItems) + { + string message = ""; + message += Messages.FormatTradeOfferItemSubmenu(totalItems); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildTradeAddMoney(int curMoney) + { + string message = ""; + message += Messages.FormatTradeOfferMoneySubmenu(curMoney); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildTrade(Trade trade) + { + + string message = ""; + message += Messages.FormatTradeWithPlayer(trade.OtherTrade.Trader.Username); + + + + if (trade.Stage == "DONE" && trade.OtherTrade.Stage == "DONE") + message += Messages.TradeFinalReview; + else if (trade.Stage == "DONE") + message += Messages.TradeWaitingForOtherDone; + else if (trade.OtherTrade.Stage == "DONE") + message += Messages.TradeOtherPlayerIsDone; + + + message += Messages.FormatTradeYourOffering(trade.OtherTrade.Trader.Username); + if (trade.MoneyOffered == 0 && trade.ItemsOffered.Length == 0 && trade.HorsesOffered.Length == 0) + message += Messages.TradeOfferingNothing; + if (trade.MoneyOffered > 0) + message += Messages.FormatTradeMoneyOffer(trade.MoneyOffered); + if(trade.HorsesOffered.Length > 0) + foreach(HorseInstance horse in trade.HorsesOffered) + message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); + if(trade.ItemsOffered.Length > 0) + foreach(ItemInstance[] item in trade.ItemsOffered) + { + Item.ItemInformation itemInfo = item[0].GetItemInfo(); + string name = itemInfo.Name; + if (item.Length > 1) + name = itemInfo.PluralName; + + message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); + } + + if(trade.Stage == "OPEN") + message += Messages.TradeAddItems; + + message += Messages.FormatTradeOtherOffering(trade.OtherTrade.Trader.Username); + if (trade.OtherTrade.MoneyOffered == 0 && trade.OtherTrade.ItemsOffered.Length == 0 && trade.OtherTrade.HorsesOffered.Length == 0) + message += Messages.TradeOfferingNothing; + if (trade.OtherTrade.MoneyOffered > 0) + message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoneyOffered); + if (trade.OtherTrade.HorsesOffered.Length > 0) + foreach (HorseInstance horse in trade.OtherTrade.HorsesOffered) + message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); + if (trade.OtherTrade.ItemsOffered.Length > 0) + foreach (ItemInstance[] item in trade.OtherTrade.ItemsOffered) + { + Item.ItemInformation itemInfo = item[0].GetItemInfo(); + string name = itemInfo.Name; + if (item.Length > 1) + name = itemInfo.PluralName; + + message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); + } + + if (trade.Stage == "OPEN") + message += Messages.TradeWhenDoneClick; + if (((trade.Stage == "DONE" || trade.Stage == "ACCEPTED") && (trade.OtherTrade.Stage == "DONE" || trade.Stage == "ACCEPTED")) ) + message += Messages.TradeAcceptTrade; + + message += Messages.TradeCancelAnytime; + + return message; + } + + public static string buildTackPeiceLibary(Item.ItemInformation item) + { + string message = ""; + message += Messages.FormatTackSetPeice(item.Name, item.Description); + return message; + } + + public static string BuildTackLibary() + { + string message = ""; + + foreach (Tack.TackSet set in Tack.TackSets.OrderBy(o => o.SortPosition()).ToArray()) + { + string[] setSwfs = set.GetSwfNames(); + string swf = "breedviewer.swf?terrain=book2&breed=tackonly"; + if (setSwfs.Length >= 1) + swf += "&saddle=" + setSwfs[0]; + if (setSwfs.Length >= 2) + swf += "&saddlepad=" + setSwfs[1]; + if (setSwfs.Length >= 3) + swf += "&bridle=" + setSwfs[2]; + swf += "&j="; + + message += Messages.FormatTackSetView(set.IconId, set.SetName, swf); + + // Write all peices + try + { + message += buildTackPeiceLibary(set.GetSaddle()); + message += buildTackPeiceLibary(set.GetSaddlePad()); + message += buildTackPeiceLibary(set.GetBridle()); + } + catch (Exception e) + { + Logger.ErrorPrint(e.Message); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMinigamesLibary() + { + string message = ""; + message += Messages.MinigameSingleplayer; + foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) + { + if (tile.TypeFlag == "1PLAYER") + { + string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); + message += Messages.FormatMinigameEntry(tile.Title, mapXy); + } + } + message += Messages.MinigameTwoplayer; + foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) + { + if (tile.TypeFlag == "2PLAYER") + { + string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); + message += Messages.FormatMinigameEntry(tile.Title, mapXy); + } + } + message += Messages.MinigameMultiplayer; + foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) + { + if (tile.TypeFlag == "MULTIPLAYER") + { + string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); + message += Messages.FormatMinigameEntry(tile.Title, mapXy); + } + } + message += Messages.MinigameCompetitions; + foreach (World.SpecialTile tile in World.SpecialTiles.OrderBy(o => o.Title)) + { + if (tile.TypeFlag == "ARENA") + { + string mapXy = Messages.FormatMapLocation(tile.X, tile.Y); + message += Messages.FormatMinigameEntry(tile.Title, mapXy); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildRealTimeQuiz(RealTimeQuiz.Participent participent) + { + // Uber Priority xD + participent.UserInstance.MinorPriority = true; + participent.UserInstance.MajorPriority = true; + return Messages.FormatEventRealTimeQuizMeta(participent.CorrectAnswers, participent.MistakenAnswers, participent.OnQuestion.BaseCategory.Name, participent.OnQuestion.Question); + } + public static string BuildCompanionLibary() + { + string message = ""; + foreach (Item.ItemInformation itm in Item.Items.OrderBy(o => o.GetMiscFlag(0)).ToArray()) + { + if (itm.Type == "COMPANION" && itm.EmbedSwf != null) + { + string swf = "breedviewer.swf?terrain=book2&breed=tackonly&companion=" + itm.EmbedSwf + "&j="; + message += Messages.FormatCompanionViewButton(itm.IconId, itm.Name, swf); + message += Messages.FormatCompanionEntry(itm.Description); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildLocationsLibary() + { + string message = ""; + message += Messages.LocationKnownIslands; + foreach (World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) + { + if (waypoint.Type == "ISLE") + { + string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); + message += Messages.FormatIslandLocation(waypoint.Name, mapxy); + message += Messages.FormatLocationDescription(waypoint.Description); + } + } + message += Messages.LocationKnownTowns; + foreach (World.Waypoint waypoint in World.Waypoints.OrderBy(o => o.Name).ToArray()) + { + if (waypoint.Type == "TOWN") + { + string mapxy = Messages.FormatMapLocation(waypoint.PosX, waypoint.PosY); + message += Messages.FormatTownLocation(waypoint.Name, mapxy); + message += Messages.FormatLocationDescription(waypoint.Description); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildRanchSearchResults(string search) + { + string message = ""; + message += Messages.LibaryFindRanchResultsHeader; + int totalResults = 0; + foreach(Ranch ranch in Ranch.Ranches) + { + if(ranch.OwnerId != -1) + { + string ranchOwnerName = Database.GetUsername(ranch.OwnerId); + if(ranchOwnerName.ToLower().Contains(search.ToLower())) + { + message += Messages.FormatRanchSearchResult(ranchOwnerName, ranch.X, ranch.Y); + totalResults++; + } + } + if (totalResults >= 10) + break; + } + if (totalResults == 0) + message += Messages.LibaryFindRanchResultsNoResults; + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildRanchSearchLibary() + { + string message = ""; + message += Messages.LibaryFindRanch; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildAwardsLibary() + { + string message = ""; + message += Messages.AwardsAvalible; + foreach (Award.AwardEntry award in Award.GlobalAwardList.OrderBy(o => o.Sort).ToArray()) + { + message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus, award.Description); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildBookReadLibary(Book book) + { + string message = ""; + message = Messages.FormatBookReadMeta(book.Author, book.Title, book.Text); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildBooksLibary() + { + string message = ""; + message += Messages.BooksOfHorseIsle; + foreach (Book libaryBook in Book.LibaryBooks.OrderBy(o => o.Title).ToArray()) + { + message += Messages.FormatBookEntry(libaryBook.Title, libaryBook.Author, libaryBook.Id); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildHorseReleased() + { + string message = ""; + message += Messages.HorseReleasedMeta; + message += Messages.BackToMapHorse; + message += Messages.MetaTerminator; + return message; + + } + + public static string BuildTopHighscores(string gameName) + { + Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20); + if (scores.Length <= 0) + return "ERROR: No scores recorded." + Messages.BackToMap + Messages.MetaTerminator; + string message = ""; + + message += Messages.FormatHighscoreHeader(gameName); + + for (int i = 0; i < scores.Length; i++) + { + message += Messages.FormatHighscoreListEntry(i + 1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildTopWinners(string gameName) + { + Highscore.HighscoreTableEntry[] scores = Database.GetTopWinners(gameName, 20); + if (scores.Length <= 0) + return "ERROR: No wins recorded." + Messages.BackToMap + Messages.MetaTerminator; + string message = ""; + + message += Messages.FormatWinlooseHeader(gameName); + + for (int i = 0; i < scores.Length; i++) + { + message += Messages.FormatWinlooseListEntry(i + 1, scores[i].Wins, scores[i].Looses, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildTopTimes(string gameName) + { + Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameName, 20, false); + if (scores.Length <= 0) + return "ERROR: No times recorded. "+Messages.BackToMap+Messages.MetaTerminator; + string message = ""; + + message += Messages.FormatBestTimeHeader(gameName); + + for (int i = 0; i < scores.Length; i++) + { + message += Messages.FormatBestTimeListEntry(i + 1, scores[i].Score, Database.GetUsername(scores[i].UserId), scores[i].TimesPlayed); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMinigameRankingsForUser(User user) + { + string message = Messages.HighscoreHeaderMeta; + foreach (Highscore.HighscoreTableEntry highscore in user.Highscores.HighscoreList) + { + if (highscore.Type == "SCORE") + message += Messages.FormatHighscoreStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName), highscore.Score, highscore.TimesPlayed); + else if (highscore.Type == "TIME") + message += Messages.FormatBestTimeStat(highscore.GameName, Database.GetRanking(highscore.Score, highscore.GameName, true), highscore.Score, highscore.TimesPlayed); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildPrivateNotes(User user) + { + string message = ""; + message += Messages.FormatPrivateNotes(user.PrivateNotes); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildNpcInfo(Npc.NpcEntry npcInfo) + { + string message = ""; + message += Messages.FormatNpcInformation(npcInfo.Name, npcInfo.LongDescription); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildItemInfo(Item.ItemInformation itemInfo) + { + string message = ""; + message += Messages.FormatItemInformation(itemInfo.Name, itemInfo.Description); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildRanchTraining(User user) + { + string message = ""; + message += Messages.RanchTrainAllAttempt; + int horsesTrained = 0; + foreach(HorseInstance horse in user.HorseInventory.HorseList) + { + if(horse.BasicStats.Mood < 200) + { + message += Messages.FormatRanchTrainBadMood(horse.Name); + } + if(horse.TrainTimer == 0) + { + horse.AdvancedStats.Speed += 1; + horse.AdvancedStats.Strength += 1; + horse.AdvancedStats.Conformation += 1; + horse.AdvancedStats.Agility += 1; + horse.AdvancedStats.Endurance += 1; + horse.BasicStats.Experience += 1; + horse.TrainTimer = 720; + horsesTrained++; + message += Messages.FormatRanchTrain(horse.Name, 1, 1, 1, 1, 1, 1); + } + else + { + message += Messages.FormatRanchTrainFail(horse.Name, horse.TrainTimer); + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildTransportInfo(User user, Transport.TransportPoint transportPoint) + { + string message = ""; + // Build list of locations + for (int i = 0; i < transportPoint.Locations.Length; i++) + { + int transportLocationId = transportPoint.Locations[i]; + Transport.TransportLocation transportLocation = Transport.GetTransportLocation(transportLocationId); + string costFormat = Messages.FormatTransportCost(transportLocation.Cost); + if(transportLocation.Type == "WAGON") + { + if (user.OwnedRanch != null) + { + if (user.OwnedRanch.GetBuildingCount(7) > 0) // Wagon + { + costFormat = Messages.TransportWagonFree; + } + } + } + + + message += Messages.FormatTransportMessage(transportLocation.Type, transportLocation.LocationTitle, costFormat, transportLocation.Id, transportLocation.GotoX, transportLocation.GotoY); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + public static string BuildStatsMenu(User user, bool other=false) + { + string message = Messages.FormatStatsBar(user.Username); + + string areaString = buildAreaString(user.X, user.Y); + if (areaString != "") + message += Messages.FormatStatsArea(areaString); + if(!other) + message += Messages.FormatMoneyStat(user.Money); + if (!user.Subscribed) + message += Messages.FormatFreeTime(user.FreeMinutes); + message += Messages.FormatPlayerDescriptionForStatsMenu(user.ProfilePage); + message += Messages.FormatExperience(user.Experience); + message += Messages.FormatHungryStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Hunger), Messages.StatHunger)); + message += Messages.FormatThirstStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Thirst), Messages.StatThirst)); + message += Messages.FormatTiredStat(Messages.FormatPlayerStat(SelectPlayerStatFormat(user.Tiredness), Messages.StatTired)); + message += Messages.FormatGenderStat(user.Gender); + message += Messages.FormatJewelryStat(buildWornJewelery(user, other)); + message += Messages.FormatCompetitionGearStat(buildEquippedCompetitionGear(user, other)); + + if(!other) + { + message += Messages.StatsPrivateNotesButton; + message += Messages.StatsQuestsButton; + message += Messages.StatsMinigameRankingButton; + message += Messages.StatsAwardsButton; + message += Messages.StatsMiscButton; + } + else + { + // Insert LGBT Patch here + + string pronoun = ""; + if (other) + { + if (user.Gender == "FEMALE") + pronoun = Messages.PronounFemaleHer; + + if (user.Gender == "MALE") + pronoun = Messages.PronounMaleHis; + } + + message += Messages.FormatOtherHorsesMeta(pronoun); + + message += buildHorseList(user, false); + + message += Messages.FormatAwardHeaderOthers(user.Username); + foreach (Award.AwardEntry award in user.Awards.AwardsEarned) + message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); + + } + + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + public static string BuildWildHorseList(User user) + { + string message = ""; + WildHorse[] horses = WildHorse.GetHorsesAt(user.X, user.Y); + if (horses.Length > 0) + { + message = Messages.HorsesHere; + foreach (WildHorse horse in horses) + { + bool vowel = (horse.Instance.Breed.Name[0].ToString().ToLower() == "a" || horse.Instance.Breed.Name[0].ToString().ToLower() == "i" || horse.Instance.Breed.Name[0].ToString().ToLower() == "u" || horse.Instance.Breed.Name[0].ToString().ToLower() == "e" || horse.Instance.Breed.Name[0].ToString().ToLower() == "o"); + message += Messages.FormatWildHorse(horse.Instance.Name, horse.Instance.Breed.Name, horse.Instance.RandomId, vowel); + } + } + return message; + } + public static string BuildAwardList(User user) + { + string message = Messages.AwardHeader; + if (user.Awards.AwardsEarned.Length <= 0) + message += Messages.NoAwards; + else + foreach (Award.AwardEntry award in user.Awards.AwardsEarned) + message += Messages.FormatAwardEntry(award.IconId, award.Title, award.MoneyBonus); + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildQuestLog(User user) + { + string message = ""; + message += Messages.QuestLogHeader; + Quest.QuestEntry[] questList = Quest.GetPublicQuestList(); + foreach (Quest.QuestEntry quest in questList) + { + string fmsg = ""; + if (user.Quests.GetTrackedQuestAmount(quest.Id) > 0) + fmsg = Messages.QuestCompleted; + else + fmsg = Messages.QuestNotCompleted; + + foreach (int questId in quest.RequiresQuestIdCompleteStatsMenu) + { + if (user.Quests.GetTrackedQuestAmount(questId) > 0) + continue; + fmsg = Messages.QuestNotAvalible; + break; + } + + message += Messages.FormatQuestLogQuest(quest.Title, quest.QuestPointsEarned, quest.Difficulty, fmsg); + } + + int totalComplete = Quest.GetTotalQuestsComplete(user); + int totalQuestPoints = Quest.GetTotalQuestPoints(); + + message += Messages.FormatQuestFooter(totalComplete, questList.Length, user.QuestPoints, totalQuestPoints); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + + + public static string BuildNearbyList(User currentUser) + { + string message = ""; + message += Messages.NearbyPlayersListHeader; + User[] nearbyUsers = GameServer.GetNearbyUsers(currentUser.X, currentUser.Y, false, true); + foreach (User nearbyUser in nearbyUsers) + { + if (nearbyUser.Stealth) + continue; + + if (nearbyUser.Id == currentUser.Id) + continue; + + + bool isYou = (nearbyUser.Id == currentUser.Id); + + int icon = nearbyUser.GetPlayerListIcon(); + string iconFormat = ""; + if (icon != -1) + iconFormat = Messages.FormatIconFormat(icon); + + message += Messages.FormatPlayerEntry(iconFormat, nearbyUser.Username, nearbyUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - nearbyUser.LoginTime).TotalMinutes)), nearbyUser.X, nearbyUser.Y, nearbyUser.Idle, currentUser.MutePlayer.IsUserMuted(nearbyUser), isYou); + } + + message += Messages.PlayerListIconInformation; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + public static string BuildPlayerListAlphabetical(User currentUser) + { + string message = Messages.PlayerListAllAlphabeticalHeader; + GameClient[] clients = GameClient.ConnectedClients; + List onlineUsers = new List(); + + foreach (GameClient client in clients) + { + if (client.LoggedIn) + { + if (client.LoggedinUser.Stealth) + continue; + onlineUsers.Add(client.LoggedinUser); + } + } + + onlineUsers = onlineUsers.OrderBy(o => o.Username).ToList(); + + foreach (User onlineUser in onlineUsers) + { + + bool isYou = (onlineUser.Id == currentUser.Id); + int icon = onlineUser.GetPlayerListIcon(); + string iconFormat = ""; + if (icon != -1) + iconFormat = Messages.FormatIconFormat(icon); + + message += Messages.FormatPlayerEntry(iconFormat, onlineUser.Username, onlineUser.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - onlineUser.LoginTime).TotalMinutes)), onlineUser.X, onlineUser.Y, onlineUser.Idle, currentUser.MutePlayer.IsUserMuted(onlineUser), isYou); + } + + message += Messages.PlayerListIconInformation; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + public static string BuildPlayerList(User currentUser) + { + string message = Messages.PlayerListAllHeader; + GameClient[] clients = GameClient.ConnectedClients; + foreach (GameClient client in clients) + { + if (client.LoggedIn) + { + if (client.LoggedinUser.Stealth) + continue; + + bool isYou = (client.LoggedinUser.Id == currentUser.Id); + + int icon = client.LoggedinUser.GetPlayerListIcon(); + string iconFormat = ""; + if (icon != -1) + iconFormat = Messages.FormatIconFormat(icon); + + 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); + } + } + + message += Messages.PlayerListIconInformation; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + public static string BuildBuddyList(User user) + { + string message = Messages.BuddyListHeader; + foreach (int id in user.Friends.List.ToArray()) + { + try + { + User friend = GameServer.GetUserById(id); + if (friend.Stealth) + continue; + + int icon = friend.GetPlayerListIcon(); + string iconFormat = ""; + if (icon != -1) + iconFormat = Messages.FormatIconFormat(icon); + + message += Messages.FormatOnlineBuddyEntry(iconFormat, friend.Username, friend.Id, Convert.ToInt32(Math.Round((DateTime.UtcNow - friend.LoginTime).TotalMinutes)), friend.X, friend.Y); + + } + catch (KeyNotFoundException) { } + + } + message += Messages.BuddyListOfflineBuddys; + + + foreach (int id in user.Friends.List.ToArray()) + { + if (GameServer.IsUserOnline(id)) + continue; + + string username = Database.GetUsername(id); + int minutes = Convert.ToInt32(Math.Round(DateTime.UtcNow.Subtract(Util.UnixTimeStampToDateTime(Database.GetPlayerLastLogin(id))).TotalMinutes)); + + message += Messages.FormatOfflineBuddyEntry(username, id, minutes); + } + + message += Messages.PlayerListIconInformation; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + + public static string BuildBreedViewerLibary(HorseInfo.Breed breed) + { + string message = Messages.FormatHorseBreedPreview(breed.Name, breed.Description); + message += Messages.BreedViewerMaximumStats; + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Speed * 2, 0, 0, breed.BaseStats.Speed * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Strength * 2, 0, 0, breed.BaseStats.Strength * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Conformation * 2, 0, 0, breed.BaseStats.Conformation * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Agility * 2, 0, 0, breed.BaseStats.Agility * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Endurance * 2, 0, 0, breed.BaseStats.Endurance * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Inteligence * 2, 0, 0, breed.BaseStats.Inteligence * 2); + message += Messages.FormatHorseAdvancedStat(breed.BaseStats.Personality * 2, 0, 0, breed.BaseStats.Personality * 2); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildHorseBreedListLibary() + { + string message = ""; + foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) + { + if (breed.Swf == "") + continue; + if (breed.Type == "horse") + message += Messages.FormatHorseBreed(breed.Name, breed.Id); + else + message += Messages.FormatHorseRelative(breed.Name, breed.Id); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildNpcSearch(string search) + { + List foundNpcs = new List(); + foreach (Npc.NpcEntry npc in Npc.NpcList) + { + if (npc.Name.ToLower().Contains(search.ToLower())) + { + if (npc.LibarySearchable) + { + if (foundNpcs.Count >= 5) + break; + foundNpcs.Add(npc); + } + else + { + continue; + } + } + else + { + continue; + } + } + string message = Messages.LibaryFindNpcSearchNoResults; + if (foundNpcs.Count >= 1) + { + message = Messages.LibaryFindNpcSearchResultsHeader; + foreach (Npc.NpcEntry npc in foundNpcs) + { + string searchResult = Messages.FormatNpcSearchResult(npc.Name, npc.ShortDescription, npc.X, npc.Y); + Logger.DebugPrint(searchResult); + message += searchResult; + } + } + if (foundNpcs.Count >= 5) + { + message += Messages.LibaryFindNpcLimit5; + } + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + + } + + public static string BuildFindNpcMenu() + { + string message = Messages.LibaryFindNpc; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildWhisperSearchResults(WildHorse[] results) + { + string message = Messages.WhispererSearchingAmoungHorses; + if (results.Length <= 0) + { + message = Messages.WhispererNoneFound; + } + else + { + List locations = new List(); + foreach (WildHorse result in results) + { + Point location = new Point(); + location.X = result.X; + location.Y = result.Y; + locations.Add(location); + } + string mapxys = Messages.FormatMapLocations(locations.ToArray()); + message += Messages.FormatWhispererHorseFoundMeta(mapxys); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + private static string buildFountain() + { + return Messages.FountainMeta; + } + private static string buildPond(User user) + { + string message = Messages.PondHeader; + if (!user.Inventory.HasItemId(Item.FishingPole)) + { + message += Messages.PondNoFishingPole; + } + else if (!user.Inventory.HasItemId(Item.Earthworm)) + { + message += Messages.PondNoEarthWorms; + } + else + { + message += Messages.PondGoFishing; + } + message += Messages.PondDrinkHereIfSafe; + foreach (HorseInstance horse in user.HorseInventory.HorseList) + { + message += Messages.FormatPondDrinkHorseFormat(horse.Name, horse.BasicStats.Thirst, 1000, horse.RandomId); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildMudHole(User user) + { + string message = ""; + if (user.HorseInventory.HorseList.Length > 0) + { + int rngHorseIndex = GameServer.RandomNumberGenerator.Next(0, user.HorseInventory.HorseList.Length); + HorseInstance horse = user.HorseInventory.HorseList[rngHorseIndex]; + horse.BasicStats.Groom = 0; + message += Messages.FormatMudHoleGroomDestroyed(horse.Name); + } + else + { + message += Messages.MudHoleNoHorses; + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildPassword() + { + return Messages.PasswordEntry + Messages.ExitThisPlace + Messages.MetaTerminator; + } + + private static string buildHorseWhisperer() + { + string message = ""; + foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) + { + if (breed.Swf == "") + continue; + if (breed.SpawnInArea == "none") + continue; + message += Messages.FormatWhispererHorseBreedButton(breed.Name, breed.Id); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + + private static string buildBank(User user) + { + double moneyMade = 0; + if (user.BankInterest > user.BankMoney) + { + moneyMade = user.BankInterest - user.BankMoney; + if (moneyMade > 100000000) + moneyMade = 100000000; + user.BankMoney += moneyMade; + + } + + string message = ""; + moneyMade = Math.Floor(moneyMade); + if (moneyMade > 0) + message += Messages.FormatBankIntrestMadeMeta(Convert.ToUInt64(moneyMade)); + + message += Messages.FormatBankCarryingMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); + message += Messages.BankWhatToDo; + message += Messages.FormatBankOptionsMeta(user.Money, Convert.ToUInt64(Math.Floor(user.BankMoney))); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + + + return message; + } + public static string BuildMinigamePlayers() + { + string message = Messages.CityHallTop25MinigamePlayers; + int placing = 1; + foreach (int userId in Database.GetMinigamePlayers()) + { + string username = Database.GetUsername(userId); + int totalMinigames = Database.GetPlayerTotalMinigamesPlayed(userId); + + message += Messages.FormatCityHallTopMinigamePlayers(placing, totalMinigames, username); + placing++; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMostExperienedHoses() + { + string message = Messages.CityHallTop25ExperiencedHorses; + + int placing = 1; + foreach (HorseInstance horse in Database.GetMostExperiencedHorses()) + { + message += Messages.FormatCityHallTopExperiencedHorses(placing, horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name); + placing++; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildExperiencedPlayers() + { + string message = Messages.CityHallTop25ExperiencedPlayers; + int placing = 1; + foreach (int userId in Database.GetExperiencedPlayers()) + { + string username = Database.GetUsername(userId); + int exp = Database.GetExperience(userId); + + message += Messages.FormatCityHallTopExperiencedPlayersEntry(placing, exp, username); + placing++; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildAdventurousPlayers() + { + string message = Messages.CityHallTop25AdventurousPlayers; + int placing = 1; + foreach (int userId in Database.GetAdventurousPlayers()) + { + string username = Database.GetUsername(userId); + int questPoints = Database.GetPlayerQuestPoints(userId); + + message += Messages.FormatCityHallTopAdventurousPlayersEntry(placing, questPoints, username); + placing++; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMostSpoiledHorses() + { + string message = Messages.CityHallTop100SpoiledHorses; + foreach(HorseInstance horse in Database.GetMostSpoiledHorses()) + { + message += Messages.FormatCityHallTopSpoiledHorseEntry(horse.Spoiled, Database.GetUsername(horse.Owner), horse.Name); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildRichestPlayers() + { + string message = Messages.CityHallTop25Players; + int placing = 1; + foreach(int userId in Database.GetRichestPlayers()) + { + string username = Database.GetUsername(userId); + double totalMoney = Math.Floor(Database.GetPlayerMoney(userId) + Database.GetPlayerBankMoney(userId)); + + message += Messages.FormatCityHallTopPlayerEntry(placing, totalMoney, username); + placing++; + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + private static string buildMultiHorses(User user, string swf) + { + string message = Messages.OtherPlayersHere; + Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); + room.Join(user); + + foreach (User userOnTile in room.JoinedUsers) + { + if (userOnTile.Id == user.Id) + continue; + + message += Messages.FormatMultiroomParticipent(userOnTile.Username); + } + + message += Messages.R1; + + message += Messages.MultiHorseSelectOneToJoinWith; + int placing = 1; + foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray()) + { + if (horse.Leaser > 0) + continue; + + HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user); + HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user); + HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user); + HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user); + HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user); + HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user); + HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user); + + message += Messages.FormatMultiHorses(placing, horse.Name, horse.Breed.Name, swf + ".swf?ID=" + horse.RandomId + "&PL=" + user.Username + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&"); + } + + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + + } + private static string buildHorseGame(User user, string swf) + { + string message = Messages.HorseGamesSelectHorse; + int placing = 1; + foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToArray()) + { + if (horse.Leaser > 0) + continue; + + + HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED, user); + HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH, user); + HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION, user); + HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY, user); + HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE, user); + HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE, user); + HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY, user); + + + message += Messages.FormatHorseGamesEntry(placing, horse.Name, swf + ".swf?ID=" + horse.RandomId + "&SP=" + speedStat.Total + "&ST=" + strengthStat.Total + "&CO=" + conformationStat.Total + "&AG=" + agilityStat.Total + "&EN=" + enduranceStat.Total + "&IN=" + inteligenceStat.Total + "&PE=" + personalityStat.Total + "&"); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMostValuedRanches() + { + string message = Messages.CityHallTop25Ranches; + int total = 1; + + foreach(Ranch ranch in Ranch.Ranches.OrderByDescending(o => o.InvestedMoney).ToList()) + { + if (ranch.OwnerId == -1) + continue; + + + message += Messages.FormatCityHallTopRanchEntry(total, Database.GetUsername(ranch.OwnerId), ranch.InvestedMoney, Messages.FormatMapLocation(ranch.X, ranch.Y)); + + if (total > 26) + break; + + total++; + } + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildTopAutoSellHorses() + { + string message = Messages.CityHallCheapestAutoSells; + HorseInstance[] horses = Database.GetCheapestHorseAutoSell(); + foreach(HorseInstance horse in horses) + { + message += Messages.FormatCityHallCheapAutoSellEntry(horse.AutoSell, Database.GetUsername(horse.Owner), horse.Name, horse.Color, horse.Breed.Name, horse.BasicStats.Experience); + } + message += Messages.CityHallMostExpAutoSells; + HorseInstance[] horsesExp = Database.GetBiggestExpAutoSell(); + foreach (HorseInstance horse in horsesExp) + { + message += Messages.FormatCityHallBestExpAutoSellEntry(horse.BasicStats.Experience, Database.GetUsername(horse.Owner), horse.Name, horse.AutoSell, horse.Color, horse.Breed.Name); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildRanchEdit(Ranch ranch) + { + return Messages.FormatRanchEditDescriptonMeta(ranch.Title, ranch.Description) + Messages.BackToMap + Messages.MetaTerminator; + } + public static string BuildRanchSellConfirmation() + { + return Messages.RanchSellAreYouSure + Messages.BackToMap + Messages.MetaTerminator; + } + public static string BuildRanchUpgrade(Ranch ranch) + { + string message = ""; + Ranch.RanchUpgrade currentUpgrade = ranch.GetRanchUpgrade(); + bool canUpgrade = Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1); + + string upgrade = ""; + if(canUpgrade) + { + Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1); + upgrade = Messages.FormatNextUpgrade(nextUpgrade.Title, nextUpgrade.Cost); + } + message += Messages.FormatCurrentUpgrade(currentUpgrade.Title, currentUpgrade.Description, upgrade, ranch.GetSellPrice()); + message += Messages.BackToMap; + return message; + } + public static string BuildRanchBuildingsAvalible(Ranch ranch, int slot) + { + string message = ""; + if(ranch.GetBuilding(slot-1) != null) + { + Ranch.RanchBuilding building = ranch.GetBuilding(slot - 1); + message += Messages.FormatBuildingAlreadyPlaced(building.Title, building.Id, building.GetTeardownPrice()); + } + else + { + message += Messages.RanchCanBuildOneOfTheFollowingInThisSpot; + foreach (Ranch.RanchBuilding building in Ranch.RanchBuilding.RanchBuildings) + { + message += Messages.FormatBuildingEntry(building.Title, building.Cost, building.Id); + } + } + + message += Messages.BackToMap; + return message; + } + public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchUpgrade upgrade) + { + string message = ""; + message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description); + + message += Messages.BackToMap; + return message; + } + public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding building) + { + string message = ""; + message += Messages.FormatViewBuilding(building.Title, building.Description); + if(building.Id == 1 || building.Id == 10 || building.Id == 11) // Barn, Big Barn, Gold Barn + { + int ranchOwner = ranch.OwnerId; // TOCTOU BAD + + if (ranchOwner != -1) + { + string horsesList = buildHorseListIndependantlyOfUserInstance(ranchOwner); + message += Messages.FormatBarn(horsesList); + } + } + message += Messages.BackToMap; + return message; + } + private static string buildRanch(User user, int ranchId) + { + + string message = ""; + + if(!Ranch.RanchExists(ranchId)) // Ghost ranchs exist.. apparently? + { + user.MajorPriority = false; + return BuildMetaInfo(user, user.X, user.Y); + } + + Ranch ranch = Ranch.GetRanchById(ranchId); + bool mine = (ranch.OwnerId == user.Id); + string swfModule = ranch.GetSwf(mine); + + byte[] moduleSwf = PacketBuilder.CreateSwfModulePacket(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE); + user.LoggedinClient.SendPacket(moduleSwf); + + if (mine) // This is My DS. + { + GameServer.CheckMail(user); + user.DoRanchActions(); + + string title = ranch.Title; + if (title == "" || title == null) + title = Messages.RanchDefaultRanchTitle; + message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title); + message += Messages.BuildingRestHere; + + int numbBarns = ranch.GetBuildingCount(1); + int numbWaterWell = ranch.GetBuildingCount(2); + int numbGrainSilo = ranch.GetBuildingCount(3); + int numbTrainingPen = ranch.GetBuildingCount(6); + int numbWagon = ranch.GetBuildingCount(7); + int numbWindmill = ranch.GetBuildingCount(8); + int numbGarden = ranch.GetBuildingCount(9); + int numbBigBarn = ranch.GetBuildingCount(10); + int numbGoldBarn = ranch.GetBuildingCount(11); + + + if (numbBarns > 0) + message += Messages.FormatBuildingBarn(numbBarns, numbBarns * 4); + if (numbBigBarn > 0) + message += Messages.FormatBuildingBarn(numbBigBarn, numbBigBarn * 8); + if (numbGoldBarn > 0) + message += Messages.FormatBuildingBarn(numbGoldBarn, numbGoldBarn * 12); + if (numbBarns > 0 || numbBigBarn > 0 || numbGoldBarn > 0) + message += Messages.RanchHorsesFullyRested; + if (numbWaterWell > 0) + message += Messages.BuildingWaterWell; + if (numbGrainSilo > 0) + message += Messages.BuildingGrainSilo; + if (numbWindmill > 0) + message += Messages.FormatBuildingWindmill(numbWindmill, 5000 * numbWindmill); + if (numbGarden > 0) + message += Messages.BuildingVegatableGarden; + if (numbWagon > 0) + message += Messages.BuildingWagon; + if (numbTrainingPen > 0) + message += Messages.BuildingTrainingPen; + + message += Messages.FormatRanchYoursDescription(ranch.Description); + } + else if(ranch.OwnerId == -1) // No mans sky + { + + message += Messages.FormatRanchUnownedMeta(ranch.Value); + if (user.OwnedRanch == null) + { + if (user.Subscribed) + message += Messages.RanchYouCouldPurchaseThisRanch; + else + message += Messages.RanchSubscribersOnly; + } + else + { + message += Messages.RanchYouAllreadyOwnARanch; + } + } + else + { + string title = ranch.Title; + if (title == "" || title == null) + title = Messages.RanchDefaultRanchTitle; + + message += Messages.FormatRanchTitle(Database.GetUsername(ranch.OwnerId), title); + message += Messages.FormatRanchDescOthers(ranch.Description); + } + + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + + return message; + } + public static string BuildAuctionHorseList(User user) + { + string message = Messages.AuctionListHorse; + foreach(HorseInstance horse in user.HorseInventory.HorseList) + { + if (horse.Leaser > 0) + continue; + if (horse.Category != "TRADING") + continue; + + bool tacked = (horse.Equipment.Saddle != null || horse.Equipment.SaddlePad != null || horse.Equipment.Bridle != null || horse.Equipment.Companion != null); + + message += Messages.FormatAuctionHorseListEntry(horse.Name, tacked, horse.RandomId); + } + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + private static string buildAuction(User user, Auction auction) + { + Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); + room.Join(user); + + string message = ""; + message += Messages.AuctionsRunning; + foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray()) + { + message += Messages.FormatAuctionHorseEntry(Database.GetUsername(entry.OwnerId), entry.Horse.Color, entry.Horse.Breed.Name, entry.Horse.Gender, entry.Horse.BasicStats.Experience, entry.Completed ? "" : Messages.FormatAuctionViewHorseButton(entry.Horse.RandomId)); + if (!entry.Completed) + message += Messages.FormatAuctionGoingTo(entry.TimeRemaining, Database.GetUsername(entry.HighestBidder), entry.HighestBid, entry.RandomId); + else + { + if (entry.HighestBidder == entry.OwnerId) + message += Messages.AuctionNotSold; + else + message += Messages.FormatAuctionSoldTo(Database.GetUsername(entry.HighestBidder), entry.HighestBid); + } + } + User[] users = room.JoinedUsers.ToArray(); + List usernames = new List(); + foreach(User userInst in users) + { + usernames.Add(userInst.Username); + } + message += Messages.FormatAuctionPlayersHere(string.Join(", ", usernames.ToArray())); + message += Messages.AuctionAHorse; + + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildWorkshop(User user) + { + Workshop shop = Workshop.GetWorkshopAt(user.X, user.Y); + string message = ""; + foreach (Workshop.CraftableItem craft in shop.CraftableItems) + { + Item.ItemInformation itmInfo = Item.GetItemById(craft.GiveItemId); + message += Messages.FormatWorkshopCraftEntry(itmInfo.IconId, itmInfo.Name, craft.MoneyCost, itmInfo.Id, craft.Id); + // Get requirements + List Requirements = new List(); + foreach (Workshop.RequiredItem reqItem in craft.RequiredItems) + { + + Item.ItemInformation requiredItemInfo = Item.GetItemById(reqItem.RequiredItemId); + string requirementTxt; + if (reqItem.RequiredItemCount <= 1) + requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.Name); + else + requirementTxt = Messages.FormatWorkshopRequireEntry(reqItem.RequiredItemCount, requiredItemInfo.PluralName); + Requirements.Add(requirementTxt); + } + message += Messages.FormatWorkshopRequirements(string.Join(Messages.WorkshopAnd, Requirements.ToArray())); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildGroomer(User User, Groomer groomer) + { + string message = ""; + int totalPrice = 0; + int count = 0; + foreach(HorseInstance horse in User.HorseInventory.HorseList) + { + message += Messages.FormatHorseGroomCurrentlyAt(horse.Name, horse.BasicStats.Groom, 1000); + if(horse.BasicStats.Groom < groomer.Max) + { + int price = groomer.CalculatePrice(horse.BasicStats.Groom); + totalPrice += price; + count++; + message += Messages.FormatGroomerApplyService(price, horse.RandomId); + } + } + message += Messages.FormatGroomerApplyAllService(count, totalPrice); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildVet(User user, Vet vet) + { + string message = ""; + int totalPrice = 0; + + + foreach (HorseInstance horse in user.HorseInventory.HorseList) + { + message += Messages.FormatVetServiceHorseMeta(horse.Name, horse.BasicStats.Health, 1000); + + if (horse.BasicStats.Health >= 1000) + message += Messages.VetSerivcesNotNeeded; + else + { + int price = vet.CalculatePrice(horse.BasicStats.Health); + totalPrice += price; + + message += Messages.FormatVetApplyServiceMeta(price, horse.RandomId); + } + + } + if (user.HorseInventory.HorseList.Length > 0) + message += Messages.FormatVetApplyAllServiceMeta(totalPrice); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildBarn(User user, Barn barn) + { + string message = ""; + int totalPrice = 0; + foreach (HorseInstance horse in user.HorseInventory.HorseList) + { + message += Messages.FormatBarnHorseStatus(horse.Name, horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); + + int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); + if(price > 0) + { + totalPrice += price; + message += Messages.FormatBarnLetHorseRelax(price, horse.RandomId); + } + else + { + message += Messages.BarnHorseMaxed; + } + + } + message += Messages.FormatBarnLetAllHorsesReleax(totalPrice); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildFarrier(User user, Farrier farrier) + { + string message = ""; + int totalPrice = 0; + int maxShoes = 1000; + foreach (HorseInstance horse in user.HorseInventory.HorseList) + { + message += Messages.FormatFarrierCurrentShoes(horse.Name, horse.BasicStats.Shoes, maxShoes); + if (horse.BasicStats.Shoes < farrier.IronShoesAmount) + message += Messages.FormatFarrierApplyIron(farrier.IronCost, farrier.IronShoesAmount, horse.RandomId); + + if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) + { + totalPrice += farrier.SteelCost; + message += Messages.FormatFarrierApplySteel(farrier.SteelCost, farrier.SteelShoesAmount, horse.RandomId); + } + + } + if(totalPrice > 0) + message += Messages.FormatFarrierApplySteelToAll(totalPrice, farrier.SteelShoesAmount); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildRiddlerRiddle(User user) + { + string message = ""; + if (Riddler.HasCompletedAllRiddles(user)) { + message = Messages.RiddlerAnsweredAll; + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + else + { + Riddler riddle = Riddler.GetRandomRiddle(user); + user.LastRiddle = riddle; + + message += Messages.FormatRiddlerRiddle(riddle.Riddle); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + } + + + public static string BuildHorseEscapedMessage() + { + string message = Messages.HorseEvadedCapture; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildHorseEscapedAnyway() + { + string message = Messages.HorseEscapedAnyway; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildHorseCaughtMessage() + { + string message = Messages.YouCapturedTheHorse; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildAbuseReportPage() + { + string reportReasons = ""; + foreach(AbuseReport.ReportReason reason in AbuseReport.ReportReasons) + { + reportReasons += Messages.FormatAbuseReportReason(reason.Id, reason.Name); + } + return Messages.FormatAbuseReportMetaPage(reportReasons); + } + private static string buildHorseList(User user, bool youView=true) + { + string message = ""; + int i = 1; + foreach (HorseInfo.Category category in HorseInfo.HorseCategories) + { + HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category).OrderBy(o => o.Name).ToArray(); + if (horsesInCategory.Length > 0) + { + if (youView) + message += category.Meta; + else + message += category.MetaOthers; + foreach (HorseInstance instance in horsesInCategory) + { + message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0); + i++; + } + } + } + return message; + + } + public static string BuildHorseInventory(User user) + { + string message = Messages.FormatHorseHeader(user.MaxHorses, user.HorseInventory.HorseList.Length); + + message += buildHorseList(user); + message += Messages.ViewBaiscStats; + message += Messages.ViewAdvancedStats; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildPlayerListMenu(User user) + { + string message = ""; + + int friendsOnline = 0; + foreach(int friendId in user.Friends.List) + { + if (GameServer.IsUserOnline(friendId)) + friendsOnline++; + } + + message += Messages.PlayerListHeader; + message += Messages.PlayerListSelectFromFollowing; + message += Messages.FormatPlayerBuddyList(friendsOnline); + message += Messages.PlayerListOfNearby; + message += Messages.FormatPlayerList(GameServer.GetNumberOfPlayers() - 1); + message += Messages.PlayerListOfPlayersAlphabetically; + + message += Messages.FormatMapAllBuddiesList(Messages.FormatMapLocations(GameServer.GetAllBuddyLocations(user))); + message += Messages.FormatMapAllPlayersList(Messages.FormatMapLocations(GameServer.GetAllPlayerLocations(user))); + + message += Messages.PlayerListAbuseReport; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; + } + public static string BuildMailLetter(Mailbox.Mail mailMessage, int itemRandomId) + { + DateTime time = Util.UnixTimeStampToDateTime(mailMessage.Timestamp); + string amOrPm = "am"; + string[] months = new string[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + string minutes = time.Minute.ToString(); + if (minutes.Length <= 1) + minutes = "0" + minutes; + int hours = time.Hour; + if (hours == 0) + { + amOrPm = "am"; + hours = 12; + } + if (hours > 12) + { + hours -= 12; + amOrPm = "pm"; + } + + + string date = months[time.Month-1] + " " + time.Day + ", " + time.Year + " " + hours + ":" + minutes + amOrPm; + string message = Messages.FormatMailReadMessage(Database.GetUsername(mailMessage.FromUser), date, mailMessage.Subject, mailMessage.Message, itemRandomId); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildMailList(User user, InventoryItem mailMessageForPlayer) + { + string message = Messages.MailSelectFromFollowing; + foreach(ItemInstance inst in mailMessageForPlayer.ItemInstances) + { + Mailbox.Mail mail = user.MailBox.GetMessageByRandomId(inst.Data); + message += Messages.FormatMailEntry(mail.Subject, Database.GetUsername(mail.FromUser), inst.RandomId); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildInventoryInfo(PlayerInventory inv) + { + string message = ""; + message += Messages.FormatPlayerInventoryHeaderMeta(inv.Count, inv.BaseUser.MaxItems); + InventoryItem[] items = inv.GetItemList(); + foreach(InventoryItem item in items) + { + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); + string title = itemInfo.Name; + if (item.ItemInstances.Length > 1 && itemInfo.PluralName != "") + title = itemInfo.PluralName; + + + message += Messages.FormatPlayerInventoryItemMeta(itemInfo.IconId, item.ItemInstances.Length, title); + + int randomId = item.ItemInstances[0].RandomId; + if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && !(itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) && World.CanDropItems(inv.BaseUser.X, inv.BaseUser.Y)) + message += Messages.FormatItemDropButton(randomId); + + if (itemInfo.Id == Item.DorothyShoes || itemInfo.Id == Item.Telescope) + message += Messages.FormatItemUseButton(randomId); + + if (itemInfo.Id == Item.Present) + message += Messages.FormatItemOpenButton(randomId); + + if (itemInfo.Type == "CLOTHES" || itemInfo.Type == "JEWELRY") + message += Messages.FormatWearButton(randomId); + + if (itemInfo.Type == "TEXT") + message += Messages.FormatItemReadButton(item.ItemId); + + if (itemInfo.Type == "PLAYERFOOD") + message += Messages.FormatItemConsumeButton(randomId); + + if (Item.IsThrowable(itemInfo.Id)) + message += Messages.FormatItemThrowButton(itemInfo.Id); + + message += Messages.FormatItemInformationButton(randomId); + message += Messages.R1; + } + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildHorseFeedMenu(HorseInstance horse, User user) + { + string message = ""; + message += Messages.FormatHorseCurrentStatus(horse.Name); + message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); + message += Messages.HorseHoldingHorseFeed; + foreach(InventoryItem item in user.Inventory.GetItemList()) + { + Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); + bool isHorseFood = false; + if (itemInfo.Effects.Length >= 2) + isHorseFood = (itemInfo.Effects[1].EffectsWhat == "MOOD" && itemInfo.Effects[0].EffectsWhat == "HUNGER"); + if (itemInfo.Type == "HORSEFOOD" || isHorseFood) + { + message += Messages.FormatHorseFeedEntry(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, item.ItemInstances[0].RandomId); + } + + } + message += Messages.BackToHorse; + return message; + } + + public static string BuildAutoSellMenu(HorseInstance horse) + { + string message = ""; + message += Messages.FormatAutoSellMenu(horse.AutoSell); + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + + + public static string BuildHorseReleaseConfirmationMessage(HorseInstance horse) + { + string message = Messages.FormatHorseAreYouSureMessage(horse.RandomId); + message += Messages.BackToMapHorse; + message += Messages.MetaTerminator; + return message; + } + public static string BuildHorseCompanionEquipMenu(HorseInstance horse, User user) + { + string message = ""; + message += Messages.FormatHorseCompanionMenuHeader(horse.Name); + if (horse.Equipment.Companion != null) + message += Messages.FormatHorseCompanionSelected(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name); + message += Messages.HorseCompanionMenuCurrentlyAvalibleCompanions; + foreach (InventoryItem item in user.Inventory.GetItemList()) + { + Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); + if(itemInfo.Type == "COMPANION") + { + message += Messages.FormatHorseCompanionOption(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, item.ItemId); + } + } + message += Messages.BackToHorse; + return message; + } + + public static string BuildAllBasicStats(User user) + { + string message = Messages.HorseAllBasicStats; + foreach(HorseInstance horse in user.HorseInventory.HorseList) + { + message += Messages.FormaHorseAllBasicStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Gender, horse.BasicStats.Experience); + message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildHorseDescriptionEditMeta(HorseInstance horse) + { + string message = Messages.FormatDescriptionEditMeta(horse.Name, horse.Description); + message += Messages.BackToHorse; + return message; + } + public static string BuildHorseInformation(HorseInstance horse, User user) + { + bool isMyHorse = horse.Owner == user.Id; + user.HorseWindowOpen = true; + + string message = ""; + if (isMyHorse) + message += Messages.FormatHorseNameYours(horse.Name); + else + message += Messages.FormatHorseNameOthers(horse.Name, Database.GetUsername(horse.Owner)); + + message += Messages.FormatHorseDescription(horse.Description); + message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Gender, HorseInfo.CalculateHands(horse.AdvancedStats.Height, false)); + message += Messages.FormatHorseExperience(horse.BasicStats.Experience); + + + if (horse.TrainTimer > 0) + message += Messages.FormatTrainableIn(horse.TrainTimer); + else + message += Messages.HorseIsTrainable; + + if(horse.Leaser != 0) + { + message += Messages.FormatHorseIsLeased(horse.LeaseTime); + } + + if (isMyHorse) + { + if (user.CurrentlyRidingHorse == null) + message += Messages.FormatMountButton(horse.RandomId); + else + message += Messages.FormatDisMountButton(horse.RandomId); + + + message += Messages.FormatFeedButton(horse.RandomId); + if (horse.Leaser == 0) + { + message += Messages.FormatTackButton(horse.RandomId); + } + message += Messages.FormatPetButton(horse.RandomId); + if (horse.Leaser == 0) + { + message += Messages.FormatProfileButton(horse.RandomId); + + if (horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Bridle == null && horse.Equipment.Companion == null) + { + string autoSellMessage = Messages.HorseNoAutoSell; + if (horse.AutoSell > 0) + autoSellMessage = Messages.FormatAutoSellPrice(horse.AutoSell); + message += Messages.FormatAutoSell(autoSellMessage); + if (horse.AutoSell > 0) + message += Messages.HorseChangeAutoSell; + else + message += Messages.HorseSetAutoSell; + } + else + { + message += Messages.HorseCantAutoSellTacked; + } + } + else + { + message += Messages.R1; + } + } + else + { + if (horse.AutoSell > 0) + message += Messages.FormatAutoSellOthers(horse.AutoSell); + } + + + if (horse.Leaser == 0) + { + + if (isMyHorse) + message += Messages.FormatHorseCategory(horse.Category, Messages.HorseMarkAsCategory); + else + message += Messages.FormatHorseCategory(horse.Category, ""); + } + + message += Messages.HorseStats; + + // Energy == Tiredness + message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); + message += Messages.HorseTacked; + + if (horse.Equipment.Saddle != null) + message += Messages.FormatHorseTackEntry(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name, horse.Equipment.Saddle.Id); + + if (horse.Equipment.SaddlePad != null) + message += Messages.FormatHorseTackEntry(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name, horse.Equipment.SaddlePad.Id); + if (horse.Equipment.Bridle != null) + message += Messages.FormatHorseTackEntry(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name, horse.Equipment.Bridle.Id); + + if(horse.Leaser == 0) + { + message += Messages.HorseCompanion; + if (horse.Equipment.Companion != null) + if (isMyHorse) + message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, Messages.HorseCompanionChangeButton, horse.Equipment.Companion.Id); + else + message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, "", horse.Equipment.Companion.Id); + else + if (isMyHorse) + message += Messages.HorseNoCompanion; + } + + message += Messages.FormatHorseAdvancedStats(horse.Spoiled, horse.MagicUsed); + + HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); + HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); + HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); + HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); + HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); + HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE); + HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY); + + message += Messages.FormatHorseAdvancedStat(speedStat.BreedValue, speedStat.CompanionOffset, speedStat.TackOffset, speedStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(strengthStat.BreedValue, strengthStat.CompanionOffset, strengthStat.TackOffset, strengthStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(conformationStat.BreedValue, conformationStat.CompanionOffset, conformationStat.TackOffset, conformationStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(agilityStat.BreedValue, agilityStat.CompanionOffset, agilityStat.TackOffset, agilityStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(enduranceStat.BreedValue, enduranceStat.CompanionOffset, enduranceStat.TackOffset, enduranceStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(inteligenceStat.BreedValue, inteligenceStat.CompanionOffset, inteligenceStat.TackOffset, inteligenceStat.MaxValue); + message += Messages.FormatHorseAdvancedStat(personalityStat.BreedValue, personalityStat.CompanionOffset, personalityStat.TackOffset, personalityStat.MaxValue); + + message += Messages.FormatHorseBreedDetails(horse.Breed.Name, horse.Breed.Description); + message += Messages.FormatHorseHeight(HorseInfo.CalculateHands(horse.Breed.BaseStats.MinHeight, false), HorseInfo.CalculateHands(horse.Breed.BaseStats.MaxHeight, false)); + + message += Messages.FormatPossibleColors(horse.Breed.Colors); + if (horse.Leaser == 0) + { + if (isMyHorse) + { + bool canRelease = true; + if (World.InTown(user.X, user.Y)) + canRelease = false; + + + if (World.InSpecialTile(user.X, user.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(user.X, user.Y); + if (tile.Code != null) + canRelease = false; + } + + if (canRelease) + message += Messages.FormatHorseReleaseButton(horse.Breed.Type.ToUpper()); + } + } + + + message += Messages.HorseOthers; + if (isMyHorse) + message += buildHorseList(user); + else + message += buildHorseListIndependantlyOfUserInstance(horse.Owner); + + message += Messages.BackToMapHorse; + message += Messages.MetaTerminator; + + return message; + + } + + public static string BuildAllStats(User user) + { + string message = Messages.HorseAllStatsHeader; + foreach(HorseInstance horse in user.HorseInventory.HorseList) + { + HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); + HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); + HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); + HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); + HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); + HorseInfo.StatCalculator inteligenceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.INTELIGENCE); + HorseInfo.StatCalculator personalityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.PERSONALITY); + + message += Messages.FormatAllStatsEntry(horse.Name, horse.Color, horse.Breed.Name, horse.Gender, horse.BasicStats.Experience); + message += Messages.FormatCompactedBasicStats(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes); + message += Messages.FormatCompactedAdvancedStats(speedStat.Total, strengthStat.Total, conformationStat.Total, agilityStat.Total, enduranceStat.Total, inteligenceStat.Total, personalityStat.Total); + } + message += Messages.HorseAllStatsLegend; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + public static string BuildMiscStats(User user) + { + string message = Messages.StatMiscHeader; + if (user.TrackedItems.TrackingItems.Length <= 0) + message += Messages.StatMiscNoneRecorded; + foreach(Tracking.TrackedItem trackedItem in user.TrackedItems.TrackingItems.OrderBy(o => Tracking.GetTrackedItemsStatsMenuName(o.What))) + { + try + { + message += Messages.FormatMiscStatsEntry(Tracking.GetTrackedItemsStatsMenuName(trackedItem.What), trackedItem.Count); + } + catch(KeyNotFoundException) + { + Logger.ErrorPrint(user.Username + " Has tracked items in db that dont have a value associated."); + continue; + } + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + + + public static string BuildTackMenu(HorseInstance horse, User user) + { + string message = Messages.FormatTackedAsFollowedMessage(horse.Name); + if(horse.Equipment.Saddle != null) + message += Messages.FormatUnEquipSaddle(horse.Equipment.Saddle.IconId, horse.Equipment.Saddle.Name); + if (horse.Equipment.SaddlePad != null) + message += Messages.FormatUnEquipSaddlePad(horse.Equipment.SaddlePad.IconId, horse.Equipment.SaddlePad.Name); + if (horse.Equipment.Bridle != null) + message += Messages.FormatUnEquipBridle(horse.Equipment.Bridle.IconId, horse.Equipment.Bridle.Name); + if (horse.Breed.Type == "llama") + message += Messages.HorseLlamaTackInInventory; + else if (horse.Breed.Type == "camel") + message += Messages.HorseCamelTackInInventory; + else + message += Messages.HorseTackInInventory; + + foreach(InventoryItem item in user.Inventory.GetItemList()) + { + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); + if (itemInfo.Type == "TACK") + { + if (horse.Breed.Type == "camel" && itemInfo.GetMiscFlag(1) != 1) + continue; + else if (horse.Breed.Type == "llama" && itemInfo.GetMiscFlag(1) != 2) + continue; + else if (!(horse.Breed.Type == "llama" || horse.Breed.Type == "camel") && itemInfo.GetMiscFlag(1) != 0) + continue; + message += Messages.FormatHorseEquip(itemInfo.IconId, item.ItemInstances.Length, itemInfo.Name, itemInfo.Id); + } + } + + message += Messages.BackToHorse; + return message; + } + public static string BuildNpcChatpoint(User user, Npc.NpcEntry npc, Npc.NpcChat chatpoint) + { + bool hideReplys = false; + if (chatpoint.ActivateQuestId != 0) + { + Quest.QuestEntry quest = Quest.GetQuestById(chatpoint.ActivateQuestId); + user.MajorPriority = true; + + Quest.QuestResult result = Quest.ActivateQuest(user, quest, true); + if (result.QuestCompleted) + { + if (result.SetChatpoint != -1) + Npc.SetDefaultChatpoint(user, npc, result.SetChatpoint); + + if (result.GotoChatpoint != -1) + chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint); + + if (chatpoint.ChatText.Trim() == "") + if (result.NpcChat != null) + if(result.NpcChat.Trim() != "") + chatpoint.ChatText = result.NpcChat; + } + else + { + if (result.GotoChatpoint != -1) + chatpoint = Npc.GetNpcChatpoint(npc, result.GotoChatpoint); + + if (result.NpcChat != null) + chatpoint.ChatText = result.NpcChat; + + if (result.HideRepliesOnFail) + hideReplys = true; + } + } + + + string message = ""; + message += Messages.FormatNpcChatpoint(npc.Name, npc.ShortDescription, chatpoint.ChatText); + foreach(Npc.NpcReply reply in chatpoint.Replies) + { + if(reply.RequiresQuestIdCompleted != 0) + if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdCompleted) <= 0) + continue; + if (reply.RequiresQuestIdNotCompleted != 0) + if (user.Quests.GetTrackedQuestAmount(reply.RequiresQuestIdNotCompleted) >= 1) + continue; + if (hideReplys) + continue; + message += Messages.FormatNpcReply(reply.ReplyText, reply.Id); + } + message += Messages.BackToMap + Messages.MetaTerminator; + return message; + } + + public static string BuildMetaInfo(User user, int x, int y) + { + string message = ""; + message += buildLocationString(x, y); + message += BuildWildHorseList(user); + message += buildNpc(user, x, y); + + message += buildCommonInfo(user, x, y); + return message; + } + public static string BuildPawneerOrderFound(HorseInstance instance) + { + string message = Messages.FormatPawneerOrderHorseFound(instance.Breed.Name, instance.Color, instance.Gender, instance.AdvancedStats.Height, instance.AdvancedStats.Personality, instance.AdvancedStats.Inteligence); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildPawneerOrderGenderList(HorseInfo.Breed breed, string color) + { + string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name); + foreach (string gender in breed.GenderTypes()) + message += Messages.FormatPawneerOrderGenderEntry(Util.CapitalizeFirstLetter(gender), gender); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildPawneerOrderColorList(HorseInfo.Breed breed) + { + string message = Messages.FormatPawneerOrderSelectColor(breed.Name); + foreach (string color in breed.Colors) + message += Messages.FormatPawneerOrderColorEntry(color); + + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + + } + public static string BuildPawneerOrderBreedList() + { + string message = Messages.PawneerOrderSelectBreed; + foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) + { + if (breed.Swf == "") + continue; + if (breed.SpawnInArea == "none") + continue; + message += Messages.FormatPawneerOrderBreedEntry(breed.Name, breed.Id); + } + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + public static string BuildPawneerConfimation(HorseInstance horse) + { + string message = ""; + message += Messages.FormatPawneerConfirmPawn(horse.Breed.Name, horse.RandomId); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + private static string buildSanta(User user) + { + string message = Messages.SantaHiddenText; + InventoryItem[] items = user.Inventory.GetItemList(); + foreach (InventoryItem item in items) + { + Item.ItemInformation itemInfo = Item.GetItemById(item.ItemId); + int randomId = item.ItemInstances[0].RandomId; + if (itemInfo.Type != "QUEST" && itemInfo.Type != "TEXT" && itemInfo.Type != "COMPANION" && itemInfo.Id != Item.Present) + message += Messages.FormatSantaItemEntry(itemInfo.IconId, itemInfo.Name, randomId); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildTrainer(User user, Trainer trainer) + { + string message = ""; + message += Messages.FormatTrainerHeaderFormat(trainer.ImprovesStat, trainer.MoneyCost, trainer.ImprovesAmount, trainer.ExperienceGained); + + + foreach (HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList()) + { + HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED); + HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH); + HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION); + HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY); + HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE); + + HorseInfo.StatCalculator statCalculator; + switch (trainer.ImprovesStat.ToUpper()) + { + case "SPEED": + statCalculator = speedStat; + break; + case "STRENGTH": + statCalculator = strengthStat; + break; + case "AGILITY": + statCalculator = agilityStat; + break; + case "ENDURANCE": + statCalculator = enduranceStat; + break; + case "CONFORMATION": + statCalculator = conformationStat; + break; + default: + statCalculator = speedStat; + break; + } + + bool allowed = false; + + /* + * Pinto bug: If you try to train a horse, but doing so would go over the maximum amount + * Then it just says its maxed trained, and u have to use a ranch. + */ + + if (ConfigReader.FixOfficalBugs) + allowed = (statCalculator.BreedValue < statCalculator.MaxValue); + else + allowed = ((statCalculator.BreedValue + trainer.ImprovesAmount) < statCalculator.MaxValue); + + if(allowed) + message += Messages.FormatTrainerTrainInEntry(horse.Name, statCalculator.BreedValue, statCalculator.MaxValue, horse.RandomId); + else + message += Messages.FormatTrainerFullyTrained(horse.Name, statCalculator.BreedValue); + + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildPawneer(User user) + { + string message = ""; + if (user.Inventory.HasItemId(Item.PawneerOrder) && (user.HorseInventory.HorseList.Length < user.MaxHorses)) + message += Messages.PawneerOrderMeta; + message += Messages.PawneerUntackedHorsesICanBuy; + foreach(HorseInstance horse in user.HorseInventory.HorseList.OrderBy(o => o.Name).ToList()) + { + if(horse.Category == "TRADING" && horse.Equipment.Bridle == null && horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Companion == null) + { + message += Messages.FormatPawneerHorseEntry(horse.Name, Pawneer.CalculateTotalPrice(horse), horse.RandomId); + } + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + public static string BuildLeaserOnLeaseInfo(Leaser leaser) + { + string mesasge = ""; + mesasge += leaser.OnLeaseText; + mesasge += Messages.BackToMap; + mesasge += Messages.MetaTerminator; + return mesasge; + } + private static string buildLeaser(User user, Leaser[] leasers) + { + string message = ""; + foreach(Leaser leaser in leasers) + { + message += leaser.Info; + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + public static string build2PlayerGame(User user, string swf) + { + Multiroom room = Multiroom.GetMultiroom(user.X, user.Y); + room.Join(user); + + if (TwoPlayer.IsPlayerInGame(user)) + { + string username = ""; + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(user); + if (twoPlayerGame.Invitee.Id == user.Id) + username = twoPlayerGame.Invitee.Username; + else + username = twoPlayerGame.Inviting.Username; + overwrite = true; + + return Messages.Format2PlayerGameInProgress(username); + } + + string message = Messages.TwoPlayerOtherPlayer; + foreach(User userAt in room.JoinedUsers.ToArray()) + { + if (userAt.Id == user.Id) + continue; + + message += Messages.Format2PlayerPlayerName(userAt.Username); + + if(!TwoPlayer.IsPlayerInGame(userAt)) + { + if (TwoPlayer.IsPlayerInvitingPlayer(user, userAt)) + message += Messages.TwoPlayerSentInvite; + else + message += Messages.Format2PlayerInviteButton(userAt.Id); + if (TwoPlayer.IsPlayerInvitingPlayer(userAt, user)) + message += Messages.Format2PlayerAcceptButton(userAt.Id); + + } + else + { + string username = ""; + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(userAt); + if (twoPlayerGame.Invitee.Id == userAt.Id) + username = twoPlayerGame.Invitee.Username; + else + username = twoPlayerGame.Inviting.Username; + + message += Messages.Format2PlayerPlayingWith(username); + } + + message += Messages.R1; + } + message += Messages.ExitThisPlace; + return message; + } + public static string BuildComposeMailMenu() + { + string message = Messages.CityHallMailSendMeta; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } + private static string buildTownHall(User user) + { + GameServer.CheckMail(user); + + string message = Messages.CityHallMenu; + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + private static string buildArena(User user, Arena arena) + { + string message = Messages.FormatArenaEventName(arena.Type); + if(arena.Mode == "TAKINGENTRIES") + { + int minutes = World.ServerTime.Minutes % 60; + + int lastMinutes = minutes - (minutes % arena.RaceEvery); + int lastHours = (lastMinutes / 60); + + string amOrPm = "am"; + if (lastHours == 0) + { + amOrPm = "am"; + lastHours = 12; + } + if (lastHours > 12) + { + lastHours -= 12; + amOrPm = "pm"; + } + + message += Messages.FormatArenaCurrentlyTakingEntries(lastHours, lastMinutes, amOrPm, arena.RaceEvery - minutes); + if (arena.Entries.Length + 1 > arena.Slots) + { + message += Messages.ArenaCompetitionFull; + } + else if (!arena.UserHasHorseEntered(user)) + { + + foreach(HorseInstance horseInstance in user.HorseInventory.HorseList) + { + if (horseInstance.Leaser > 0) + continue; + + if(horseInstance.Equipment.Saddle != null && horseInstance.Equipment.SaddlePad != null && horseInstance.Equipment.Bridle != null) + message += Messages.FormatArenaEnterHorseButton(horseInstance.Name, arena.EntryCost, horseInstance.RandomId); + } + } + else + { + message += Messages.ArenaYouHaveHorseEntered; + } + + } + else if(arena.Mode == "COMPETING") + { + message += Messages.ArenaCompetitionInProgress; + } + + message += Messages.ArenaCurrentCompetitors; + foreach(Arena.ArenaEntry entries in arena.Entries) + { + message += Messages.FormatArenaCompetingHorseEntry(entries.EnteredUser.Username, entries.EnteredHorse.Name, entries.EnteredHorse.RandomId); + } + message += Messages.ExitThisPlace; + message += Messages.MetaTerminator; + return message; + } + public static string BuildSpecialTileInfo(User user, World.SpecialTile specialTile) + { + string message = ""; + + if (specialTile.Code == null) + message += buildLocationString(specialTile.X, specialTile.Y); + + + if (specialTile.Title != null && specialTile.Title != "") + message += Messages.FormatTileName(specialTile.Title); + + + if (specialTile.Description != null && specialTile.Description != "") + { + message += specialTile.Description; + message += Messages.Seperator; //
+ } + + + string npc = buildNpc(user, specialTile.X, specialTile.Y); + message += npc; + + if (specialTile.Code == null || specialTile.Code == "") + message += buildCommonInfo(user, specialTile.X, specialTile.Y); + else + { + + user.MinorPriority = true; + + string TileCode = specialTile.Code; + + string TileArg = ""; + if (TileCode.Contains("-")) + { + TileArg = TileCode.Split('-')[1]; + TileCode = TileCode.Split('-')[0]; + } + if (TileCode == "EXITABLE") + message += Messages.ExitThisPlace; + + if (TileCode == "TRANSPORT") + { + Transport.TransportPoint point = Transport.GetTransportPoint(specialTile.X, specialTile.Y); + message += Meta.BuildTransportInfo(user, point); + } + + if (TileCode == "STRAWPILE") + { + if (user.Inventory.HasItemId(Item.Pitchfork)) + message += Messages.HasPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator; + else + message += Messages.NoPitchforkMeta + Messages.ExitThisPlace + Messages.MetaTerminator; + } + + if (TileCode == "STORE") + { + int ShopID = int.Parse(TileArg); + Shop shop = Shop.GetShopById(ShopID); + user.LastShoppedAt = shop; + message += buildShopInfo(shop, user.Inventory); + + } + if(TileCode == "TOWNHALL") + { + message += buildTownHall(user); + } + if (TileCode == "VET") + { + message += buildVet(user, Vet.GetVetById(int.Parse(TileArg))); + } + if(TileCode == "GROOMER") + { + message += buildGroomer(user, Groomer.GetGroomerById(int.Parse(TileArg))); + } + if (TileCode == "FARRIER") + { + message += buildFarrier(user, Farrier.GetFarrierById(int.Parse(TileArg))); + } + if(TileCode == "BARN") + { + message += buildBarn(user, Barn.GetBarnById(int.Parse(TileArg))); + } + if (TileCode == "BANK") + { + message += buildBank(user); + } + if (TileCode == "WISHINGWELL") + { + message += buildWishingWell(user); + } + if(TileCode == "HORSEPAWNEER") + { + message += buildPawneer(user); + } + if (TileCode == "VENUSFLYTRAP") + { + message += buildVenusFlyTrap(user); + } + if (TileCode == "RIDDLER") + { + message += buildRiddlerRiddle(user); + } + if(TileCode == "ARENA") + { + message += buildArena(user, Arena.GetAreaById(int.Parse(TileArg))); + } + if(TileCode == "AUCTION") + { + message += buildAuction(user, Auction.GetAuctionRoomById(int.Parse(TileArg))); + } + if(TileCode == "TRAINER") + { + message += buildTrainer(user, Trainer.GetTrainerById(int.Parse(TileArg))); + } + if(TileCode == "HORSELEASER") + { + message += buildLeaser(user, Leaser.GetLeasersById(int.Parse(TileArg))); + } + if (TileCode == "LIBRARY") + { + message += buildLibary(); + } + if(TileCode == "MULTIHORSES") + { + message += buildMultiHorses(user, TileArg); + } + if (TileCode == "POND") + { + message += buildPond(user); + } + if(TileCode == "2PLAYER") + { + string msg = build2PlayerGame(user, TileArg); + if (!overwrite) + message += msg; + else + message = msg; + + overwrite = false; + } + if(TileCode == "HORSES") + { + message += buildHorseGame(user, TileArg); + } + if (TileCode == "WORKSHOP") + { + message += buildWorkshop(user); + } + if (TileCode == "MUDHOLE") + { + message += buildMudHole(user); + } + if (TileCode == "RANCH") + { + message += buildRanch(user, int.Parse(TileArg)); + } + if(TileCode == "SANTA") + { + message += buildSanta(user); + } + if (TileCode == "MULTIROOM") + { + message += buildMultiroom(TileArg != "" ? TileArg : null, user); + } + if (TileCode == "PASSWORD") + { + message += buildPassword(); + } + if (TileCode == "HORSEWHISPERER") + { + message += buildHorseWhisperer(); + } + if (TileCode == "INN") + { + int InnID = int.Parse(TileArg); + Inn inn = Inn.GetInnById(InnID); + user.LastVisitedInn = inn; + message += buildInn(inn); + } + if (TileCode == "FOUNTAIN") + { + message += buildFountain(); + + } + } + + + + return message; + } + + + } +} diff --git a/HorseIsleServer/LibHISP/Game/Multiroom.cs b/HorseIsleServer/LibHISP/Game/Multiroom.cs old mode 100755 new mode 100644 index 085138a..effc7b3 --- a/HorseIsleServer/LibHISP/Game/Multiroom.cs +++ b/HorseIsleServer/LibHISP/Game/Multiroom.cs @@ -1,6 +1,5 @@ using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; using System.Linq; @@ -9,7 +8,7 @@ namespace HISP.Game public class Multiroom { private static List multirooms = new List(); - private ThreadSafeList joinedUsers = new ThreadSafeList(); + private List joinedUsers = new List(); public int x; public int y; @@ -84,7 +83,7 @@ namespace HISP.Game if (joinedUser.Id != user.Id) if(!TwoPlayer.IsPlayerInGame(joinedUser)) if(!joinedUser.MajorPriority) - GameServer.UpdateArea(joinedUser.Client); + GameServer.UpdateArea(joinedUser.LoggedinClient); } } @@ -101,7 +100,7 @@ namespace HISP.Game foreach (User joinedUser in JoinedUsers) if (!TwoPlayer.IsPlayerInGame(joinedUser)) if (!joinedUser.MajorPriority) - GameServer.UpdateArea(joinedUser.Client); + GameServer.UpdateArea(joinedUser.LoggedinClient); } } diff --git a/HorseIsleServer/LibHISP/Game/Npc.cs b/HorseIsleServer/LibHISP/Game/Npc.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Quest.cs b/HorseIsleServer/LibHISP/Game/Quest.cs old mode 100755 new mode 100644 index 4d2ad55..66d8d7d --- a/HorseIsleServer/LibHISP/Game/Quest.cs +++ b/HorseIsleServer/LibHISP/Game/Quest.cs @@ -15,7 +15,7 @@ namespace HISP.Game public const string Binoculars = "BINOCS"; public const string Rake = "RAKE"; public const string MagnifyingGlass = "MAGNIFY"; - public const int CloudIslesQuest = 1373; + public struct QuestItemInfo { public int ItemId; @@ -219,7 +219,7 @@ namespace HISP.Game res.QuestCompleted = true; if (npcActivation) { - if (quest.SuccessNpcChat != null && quest.SuccessNpcChat.Trim() != "") + if (quest.SuccessNpcChat != null && quest.SuccessNpcChat != "") res.NpcChat = quest.SuccessNpcChat; if(quest.SetNpcChatpoint != -1) @@ -238,7 +238,7 @@ namespace HISP.Game if (quest.SuccessMessage != null) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(ChatPacket); + user.LoggedinClient.SendPacket(ChatPacket); } if (quest.SuccessNpcChat != null) @@ -246,7 +246,7 @@ namespace HISP.Game if (!npcActivation) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(ChatPacket); + user.LoggedinClient.SendPacket(ChatPacket); } } @@ -262,10 +262,10 @@ namespace HISP.Game user.Awards.AddAward(Award.GetAwardById(4)); // 100% Quest Completion Award. // Is cloud isles quest? - if (quest.Id == CloudIslesQuest) + if (quest.Id == 1373) { - byte[] swfLoadPacket = PacketBuilder.CreateSwfModule("ballooncutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - user.Client.SendPacket(swfLoadPacket); + byte[] swfLoadPacket = PacketBuilder.CreateSwfModulePacket("ballooncutscene", PacketBuilder.PACKET_SWF_CUTSCENE); + user.LoggedinClient.SendPacket(swfLoadPacket); } return res; @@ -290,7 +290,7 @@ namespace HISP.Game if (!npcActivation) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.FailNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(ChatPacket); + user.LoggedinClient.SendPacket(ChatPacket); } else { @@ -371,7 +371,7 @@ namespace HISP.Game if(result.NpcChat != null) { byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(ChatPacket); + user.LoggedinClient.SendPacket(ChatPacket); } return true; } @@ -383,7 +383,7 @@ namespace HISP.Game if (result.NpcChat != null) { byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(ChatPacket); + user.LoggedinClient.SendPacket(ChatPacket); } return true; } diff --git a/HorseIsleServer/LibHISP/Game/Ranch.cs b/HorseIsleServer/LibHISP/Game/Ranch.cs old mode 100755 new mode 100644 index 372acf7..2ae9177 --- a/HorseIsleServer/LibHISP/Game/Ranch.cs +++ b/HorseIsleServer/LibHISP/Game/Ranch.cs @@ -1,500 +1,488 @@ -using HISP.Game.Inventory; -using HISP.Game.Items; -using HISP.Player; -using HISP.Server; -using HISP.Util; -using System; -using System.Collections.Generic; - -namespace HISP.Game -{ - public class Ranch - { - public class RanchUpgrade - { - public static List RanchUpgrades = new List(); - public int Id; - public int Cost; - public string Title; - public string Description; - public int Limit; - - public static bool RanchUpgradeExists(int id) - { - foreach (RanchUpgrade rachUpgrade in RanchUpgrades) - { - if (rachUpgrade.Id == id) - return true; - } - return false; - } - public static RanchUpgrade GetRanchUpgradeById(int id) - { - foreach (RanchUpgrade ranchUpgrade in RanchUpgrades) - { - if (ranchUpgrade.Id == id) - return ranchUpgrade; - } - throw new KeyNotFoundException("No ranch found."); - } - } - public class RanchBuilding - { - public static List RanchBuildings = new List(); - public int Id; - public int Cost; - public string Title; - public string Description; - - public static bool RanchBuildingExists(int id) - { - foreach (RanchBuilding ranchBuilding in RanchBuildings) - { - if (ranchBuilding.Id == id) - return true; - } - return false; - } - public static RanchBuilding GetRanchBuildingById(int id) - { - foreach(RanchBuilding ranchBuilding in RanchBuildings) - { - if (ranchBuilding.Id == id) - return ranchBuilding; - } - throw new KeyNotFoundException("No ranch found."); - } - - public int GetTeardownPrice() - { - return Convert.ToInt32(Math.Round((float)this.Cost / (100 / 35.0))); - } - } - public static List Ranches = new List(); - - public int X; - public int Y; - public int Id; - public int Value; - - private int ownerId; - private int upgradedLevel; - private int investedMoney; - private string title; - private string description; - - public int GetSellPrice() - { - return Convert.ToInt32(Math.Round((double)this.InvestedMoney / (100 / 75.0))); - } - private void removeDorothyShoes(int Id) - { - if (Id == -1) - return; - - if(GameServer.IsUserOnline(Id)) - { - User user = GameServer.GetUserById(Id); - user.OwnedRanch = null; - InventoryItem items = user.Inventory.GetItemByItemId(Item.DorothyShoes); - foreach (ItemInstance itm in items.ItemInstances) - { - user.Inventory.Remove(itm); - } - } - else - { - Database.RemoveAllItemTypesFromPlayerInventory(this.Id, Item.DorothyShoes); - } - - } - - private void deleteRanch() - { - Database.DeleteRanchOwner(this.Id); - removeDorothyShoes(this.ownerId); - resetRanch(); - } - private void resetRanch() - { - title = ""; - description = ""; - investedMoney = 0; - upgradedLevel = 0; - ownerId = -1; - for (int i = 0; i < 16; i++) - buildings[i] = null; - } - public int OwnerId - { - get - { - if(ownerId != -1) - { - if (ConfigReader.AllUsersSubbed || Database.GetUserAdmin(ownerId)) - return ownerId; - - int subExp = Database.GetUserSubscriptionExpireDate(ownerId); - DateTime expTime = Helper.UnixTimeStampToDateTime(subExp); - if ((DateTime.UtcNow.Date - expTime.Date).Days >= 30) - { - int price = GetSellPrice(); - try - { - checked - { - Database.SetPlayerMoney(Database.GetPlayerMoney(ownerId) + price, ownerId); - } - } - catch (OverflowException) - { - Database.SetPlayerMoney(2147483647, ownerId);; - } - - Database.AddMessageToQueue(ownerId, Messages.FormatRanchForcefullySoldMessage(price)); - deleteRanch(); - return -1; - } - - } - return ownerId; - - } - set - { - if (value == -1) - { - deleteRanch(); - } - else - { - if (Database.IsRanchOwned(this.Id)) - { - Database.SetRanchOwner(this.Id, ownerId); - removeDorothyShoes(ownerId); - } - else - { - resetRanch(); - Database.AddRanch(this.Id, value, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); - } - } - - if (GameServer.IsUserOnline(value)) - { - User user = GameServer.GetUserById(value); - user.OwnedRanch = this; - user.Inventory.AddIgnoringFull(new ItemInstance(Item.DorothyShoes)); - } - else - { - Database.AddItemToInventory(value, new ItemInstance(Item.DorothyShoes)); - } - - ownerId = value; - } - } - - public int UpgradedLevel - { - get - { - return upgradedLevel; - } - set - { - upgradedLevel = value; - Database.SetRanchUpgradeLevel(Id, value); - } - } - public int InvestedMoney - { - get - { - return investedMoney; - } - set - { - investedMoney = value; - Database.SetRanchInvestment(Id, value); - } - } - public string Title - { - get - { - return title; - } - set - { - title = value.Trim(); - Database.SetRanchTitle(Id, title); - } - } - public string Description - { - get - { - return description; - } - set - { - description = value.Trim(); - Database.SetRanchDescription(Id, value); - } - } - - - private RanchBuilding[] buildings = new RanchBuilding[16]; - public int GetBuildingCount(int buildingId) - { - int count = 0; - foreach(RanchBuilding building in buildings) - { - if(building != null) - if (building.Id == buildingId) - count++; - } - return count; - } - private void updateBuildings() - { - if (buildings[0] != null) - Database.SetRanchBuilding1(this.Id, buildings[0].Id); - else - Database.SetRanchBuilding1(this.Id, 0); - if (buildings[1] != null) - Database.SetRanchBuilding2(this.Id, buildings[1].Id); - else - Database.SetRanchBuilding2(this.Id, 0); - if (buildings[2] != null) - Database.SetRanchBuilding3(this.Id, buildings[2].Id); - else - Database.SetRanchBuilding3(this.Id, 0); - if (buildings[3] != null) - Database.SetRanchBuilding4(this.Id, buildings[3].Id); - else - Database.SetRanchBuilding4(this.Id, 0); - if (buildings[4] != null) - Database.SetRanchBuilding5(this.Id, buildings[4].Id); - else - Database.SetRanchBuilding5(this.Id, 0); - if (buildings[5] != null) - Database.SetRanchBuilding6(this.Id, buildings[5].Id); - else - Database.SetRanchBuilding6(this.Id, 0); - if (buildings[6] != null) - Database.SetRanchBuilding7(this.Id, buildings[6].Id); - else - Database.SetRanchBuilding7(this.Id, 0); - if (buildings[7] != null) - Database.SetRanchBuilding8(this.Id, buildings[7].Id); - else - Database.SetRanchBuilding8(this.Id, 0); - if (buildings[8] != null) - Database.SetRanchBuilding9(this.Id, buildings[8].Id); - else - Database.SetRanchBuilding9(this.Id, 0); - if (buildings[9] != null) - Database.SetRanchBuilding10(this.Id, buildings[9].Id); - else - Database.SetRanchBuilding10(this.Id, 0); - if (buildings[10] != null) - Database.SetRanchBuilding11(this.Id, buildings[10].Id); - else - Database.SetRanchBuilding11(this.Id, 0); - if (buildings[11] != null) - Database.SetRanchBuilding12(this.Id, buildings[11].Id); - else - Database.SetRanchBuilding12(this.Id, 0); - if (buildings[12] != null) - Database.SetRanchBuilding13(this.Id, buildings[12].Id); - else - Database.SetRanchBuilding13(this.Id, 0); - if (buildings[13] != null) - Database.SetRanchBuilding14(this.Id, buildings[13].Id); - else - Database.SetRanchBuilding14(this.Id, 0); - if (buildings[14] != null) - Database.SetRanchBuilding15(this.Id, buildings[14].Id); - else - Database.SetRanchBuilding15(this.Id, 0); - if (buildings[15] != null) - Database.SetRanchBuilding16(this.Id, buildings[15].Id); - else - Database.SetRanchBuilding16(this.Id, 0); - } - public RanchBuilding GetBuilding(int buildingId) - { - if (buildingId < 0) - return null; - - if (buildingId >= buildings.Length) - return null; - - return buildings[buildingId]; - } - public void SetBuilding(int buildingId, RanchBuilding value) - { - buildings[buildingId] = value; - updateBuildings(); - } - - - public string GetSwf(bool mine) - { - string swf = "ranchviewer.swf?H=" + (upgradedLevel+1).ToString(); - for(int i = 0; i < buildings.Length; i++) - { - swf += "&B" + (i+1).ToString() + "="; - if (buildings[i] != null) - { - swf += buildings[i].Id.ToString(); - } - } - if (mine) - swf += "&MINE=1"; - return swf; - } - - - public Ranch(int x, int y, int id, int value) - { - X = x; - Y = y; - Id = id; - Value = value; - title = ""; - description = ""; - upgradedLevel = 0; - ownerId = -1; - investedMoney = 0; - for (int i = 0; i < 16; i++) - buildings[i] = null; - bool owned = Database.IsRanchOwned(id); - if (owned) - { - upgradedLevel = Database.GetRanchUpgradeLevel(id); - title = Database.GetRanchTitle(id); - description = Database.GetRanchDescription(id); - ownerId = Database.GetRanchOwner(id); - int b1 = Database.GetRanchBuilding1(id); - int b2 = Database.GetRanchBuilding2(id); - int b3 = Database.GetRanchBuilding3(id); - int b4 = Database.GetRanchBuilding4(id); - int b5 = Database.GetRanchBuilding5(id); - int b6 = Database.GetRanchBuilding6(id); - int b7 = Database.GetRanchBuilding7(id); - int b8 = Database.GetRanchBuilding8(id); - int b9 = Database.GetRanchBuilding9(id); - int b10 = Database.GetRanchBuilding10(id); - int b11 = Database.GetRanchBuilding11(id); - int b12 = Database.GetRanchBuilding12(id); - int b13 = Database.GetRanchBuilding13(id); - int b14 = Database.GetRanchBuilding14(id); - int b15 = Database.GetRanchBuilding15(id); - int b16 = Database.GetRanchBuilding16(id); - - if (RanchBuilding.RanchBuildingExists(b1)) - buildings[0] = RanchBuilding.GetRanchBuildingById(b1); - if (RanchBuilding.RanchBuildingExists(b2)) - buildings[1] = RanchBuilding.GetRanchBuildingById(b2); - if (RanchBuilding.RanchBuildingExists(b3)) - buildings[2] = RanchBuilding.GetRanchBuildingById(b3); - if (RanchBuilding.RanchBuildingExists(b4)) - buildings[3] = RanchBuilding.GetRanchBuildingById(b4); - if (RanchBuilding.RanchBuildingExists(b5)) - buildings[4] = RanchBuilding.GetRanchBuildingById(b5); - if (RanchBuilding.RanchBuildingExists(b6)) - buildings[5] = RanchBuilding.GetRanchBuildingById(b6); - if (RanchBuilding.RanchBuildingExists(b7)) - buildings[6] = RanchBuilding.GetRanchBuildingById(b7); - if (RanchBuilding.RanchBuildingExists(b8)) - buildings[7] = RanchBuilding.GetRanchBuildingById(b8); - if (RanchBuilding.RanchBuildingExists(b9)) - buildings[8] = RanchBuilding.GetRanchBuildingById(b9); - if (RanchBuilding.RanchBuildingExists(b10)) - buildings[9] = RanchBuilding.GetRanchBuildingById(b10); - if (RanchBuilding.RanchBuildingExists(b11)) - buildings[10] = RanchBuilding.GetRanchBuildingById(b11); - if (RanchBuilding.RanchBuildingExists(b12)) - buildings[11] = RanchBuilding.GetRanchBuildingById(b12); - if (RanchBuilding.RanchBuildingExists(b13)) - buildings[12] = RanchBuilding.GetRanchBuildingById(b13); - if (RanchBuilding.RanchBuildingExists(b14)) - buildings[13] = RanchBuilding.GetRanchBuildingById(b14); - if (RanchBuilding.RanchBuildingExists(b15)) - buildings[14] = RanchBuilding.GetRanchBuildingById(b15); - if (RanchBuilding.RanchBuildingExists(b16)) - buildings[15] = RanchBuilding.GetRanchBuildingById(b16); - - - InvestedMoney = Database.GetRanchInvestment(id); - } - } - - public RanchUpgrade GetRanchUpgrade() - { - return RanchUpgrade.GetRanchUpgradeById(this.upgradedLevel + 1); - } - public static bool IsRanchHere(int x, int y) - { - foreach (Ranch ranch in Ranches) - { - if (ranch.X == x && ranch.Y == y) - return true; - } - return false; - } - public static bool RanchExists(int ranchId) - { - foreach (Ranch ranch in Ranches) - { - if (ranch.Id == ranchId) - return true; - } - return false; - } - public static Ranch GetRanchById(int ranchId) - { - foreach (Ranch ranch in Ranches) - { - if (ranch.Id == ranchId) - return ranch; - } - throw new KeyNotFoundException("No Ranch with id " + ranchId); - } - public static Ranch GetRanchAt(int x, int y) - { - foreach(Ranch ranch in Ranches) - { - if (ranch.X == x && ranch.Y == y) - return ranch; - } - throw new KeyNotFoundException("No Ranch found at x" + x + " y" + y); - } - - public static bool GetOwnedRanch(int playerId) - { - foreach (Ranch ranch in Ranches) - { - if (ranch.OwnerId == playerId) - { - return true; - } - } - return false; - } - public static Ranch GetRanchOwnedBy(int playerId) - { - foreach(Ranch ranch in Ranches) - { - if(ranch.OwnerId == playerId) - { - return ranch; - } - } - throw new KeyNotFoundException("Player " + playerId + " does not own a ranch."); - } - } -} +using HISP.Game.Inventory; +using HISP.Game.Items; +using HISP.Player; +using HISP.Server; +using System; +using System.Collections.Generic; + +namespace HISP.Game +{ + public class Ranch + { + public class RanchUpgrade + { + public static List RanchUpgrades = new List(); + public int Id; + public int Cost; + public string Title; + public string Description; + public int Limit; + + public static bool RanchUpgradeExists(int id) + { + foreach (RanchUpgrade rachUpgrade in RanchUpgrades) + { + if (rachUpgrade.Id == id) + return true; + } + return false; + } + public static RanchUpgrade GetRanchUpgradeById(int id) + { + foreach (RanchUpgrade rachUpgrade in RanchUpgrades) + { + if (rachUpgrade.Id == id) + return rachUpgrade; + } + throw new KeyNotFoundException("No ranch found."); + } + } + public class RanchBuilding + { + public static List RanchBuildings = new List(); + public int Id; + public int Cost; + public string Title; + public string Description; + + public static bool RanchBuildingExists(int id) + { + foreach (RanchBuilding ranchBuilding in RanchBuildings) + { + if (ranchBuilding.Id == id) + return true; + } + return false; + } + public static RanchBuilding GetRanchBuildingById(int id) + { + foreach(RanchBuilding ranchBuilding in RanchBuildings) + { + if (ranchBuilding.Id == id) + return ranchBuilding; + } + throw new KeyNotFoundException("No ranch found."); + } + + public int GetTeardownPrice() + { + return Convert.ToInt32(Math.Round((float)this.Cost / (100 / 35.0))); + } + } + public static List Ranches = new List(); + + public int X; + public int Y; + public int Id; + public int Value; + + private int ownerId; + private int upgradedLevel; + private int investedMoney; + private string title; + private string description; + + public int GetSellPrice() + { + return Convert.ToInt32(Math.Round((double)this.InvestedMoney / (100 / 75.0))); + } + private void removeDorothyShoes(int Id) + { + if (Id == -1) + return; + + if(GameServer.IsUserOnline(Id)) + { + User user = GameServer.GetUserById(Id); + user.OwnedRanch = null; + InventoryItem items = user.Inventory.GetItemByItemId(Item.DorothyShoes); + foreach (ItemInstance itm in items.ItemInstances) + { + user.Inventory.Remove(itm); + } + } + else + { + Database.RemoveAllItemTypesFromPlayerInventory(this.Id, Item.DorothyShoes); + } + + } + + private void deleteRanch() + { + Database.DeleteRanchOwner(this.Id); + removeDorothyShoes(this.ownerId); + resetRanch(); + } + private void resetRanch() + { + title = ""; + description = ""; + investedMoney = 0; + upgradedLevel = 0; + ownerId = -1; + for (int i = 0; i < 16; i++) + buildings[i] = null; + } + public int OwnerId + { + get + { + if(ownerId != -1) + { + if (ConfigReader.AllUsersSubbed || Database.IsUserAdmin(ownerId)) + return ownerId; + + int subExp = Database.GetUserSubscriptionExpireDate(ownerId); + DateTime expTime = Util.UnixTimeStampToDateTime(subExp); + if ((DateTime.UtcNow.Date - expTime.Date).Days >= 30) + { + int price = GetSellPrice(); + try + { + checked + { + Database.SetPlayerMoney(Database.GetPlayerMoney(ownerId) + price, ownerId); + } + } + catch (OverflowException) + { + Database.SetPlayerMoney(2147483647, ownerId);; + } + + Database.AddMessageToQueue(ownerId, Messages.FormatRanchForcefullySoldMessage(price)); + deleteRanch(); + return -1; + } + + } + return ownerId; + + } + set + { + if (value == -1) + { + deleteRanch(); + } + else + { + if(Database.IsRanchOwned(this.Id)) + { + Database.SetRanchOwner(this.Id, ownerId); + removeDorothyShoes(ownerId); + } + else + { + resetRanch(); + Database.AddRanch(this.Id, value, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } + } + + ownerId = value; + } + } + + public int UpgradedLevel + { + get + { + return upgradedLevel; + } + set + { + upgradedLevel = value; + Database.SetRanchUpgradeLevel(Id, value); + } + } + public int InvestedMoney + { + get + { + return investedMoney; + } + set + { + investedMoney = value; + Database.SetRanchInvestment(Id, value); + } + } + public string Title + { + get + { + return title; + } + set + { + title = value.Trim(); + Database.SetRanchTitle(Id, title); + } + } + public string Description + { + get + { + return description; + } + set + { + description = value.Trim(); + Database.SetRanchDescription(Id, value); + } + } + + + private RanchBuilding[] buildings = new RanchBuilding[16]; + public int GetBuildingCount(int buildingId) + { + int count = 0; + foreach(RanchBuilding building in buildings) + { + if(building != null) + if (building.Id == buildingId) + count++; + } + return count; + } + private void updateBuildings() + { + if (buildings[0] != null) + Database.SetRanchBuilding1(this.Id, buildings[0].Id); + else + Database.SetRanchBuilding1(this.Id, 0); + if (buildings[1] != null) + Database.SetRanchBuilding2(this.Id, buildings[1].Id); + else + Database.SetRanchBuilding2(this.Id, 0); + if (buildings[2] != null) + Database.SetRanchBuilding3(this.Id, buildings[2].Id); + else + Database.SetRanchBuilding3(this.Id, 0); + if (buildings[3] != null) + Database.SetRanchBuilding4(this.Id, buildings[3].Id); + else + Database.SetRanchBuilding4(this.Id, 0); + if (buildings[4] != null) + Database.SetRanchBuilding5(this.Id, buildings[4].Id); + else + Database.SetRanchBuilding5(this.Id, 0); + if (buildings[5] != null) + Database.SetRanchBuilding6(this.Id, buildings[5].Id); + else + Database.SetRanchBuilding6(this.Id, 0); + if (buildings[6] != null) + Database.SetRanchBuilding7(this.Id, buildings[6].Id); + else + Database.SetRanchBuilding7(this.Id, 0); + if (buildings[7] != null) + Database.SetRanchBuilding8(this.Id, buildings[7].Id); + else + Database.SetRanchBuilding8(this.Id, 0); + if (buildings[8] != null) + Database.SetRanchBuilding9(this.Id, buildings[8].Id); + else + Database.SetRanchBuilding9(this.Id, 0); + if (buildings[9] != null) + Database.SetRanchBuilding10(this.Id, buildings[9].Id); + else + Database.SetRanchBuilding10(this.Id, 0); + if (buildings[10] != null) + Database.SetRanchBuilding11(this.Id, buildings[10].Id); + else + Database.SetRanchBuilding11(this.Id, 0); + if (buildings[11] != null) + Database.SetRanchBuilding12(this.Id, buildings[11].Id); + else + Database.SetRanchBuilding12(this.Id, 0); + if (buildings[12] != null) + Database.SetRanchBuilding13(this.Id, buildings[12].Id); + else + Database.SetRanchBuilding13(this.Id, 0); + if (buildings[13] != null) + Database.SetRanchBuilding14(this.Id, buildings[13].Id); + else + Database.SetRanchBuilding14(this.Id, 0); + if (buildings[14] != null) + Database.SetRanchBuilding15(this.Id, buildings[14].Id); + else + Database.SetRanchBuilding15(this.Id, 0); + if (buildings[15] != null) + Database.SetRanchBuilding16(this.Id, buildings[15].Id); + else + Database.SetRanchBuilding16(this.Id, 0); + } + public RanchBuilding GetBuilding(int buildingId) + { + if (buildingId < 0) + return null; + + if (buildingId >= buildings.Length) + return null; + + return buildings[buildingId]; + } + public void SetBuilding(int buildingId, RanchBuilding value) + { + buildings[buildingId] = value; + updateBuildings(); + } + + + public string GetSwf(bool mine) + { + string swf = "ranchviewer.swf?H=" + (upgradedLevel+1).ToString(); + for(int i = 0; i < buildings.Length; i++) + { + swf += "&B" + (i+1).ToString() + "="; + if (buildings[i] != null) + { + swf += buildings[i].Id.ToString(); + } + } + if (mine) + swf += "&MINE=1"; + return swf; + } + + + public Ranch(int x, int y, int id, int value) + { + X = x; + Y = y; + Id = id; + Value = value; + title = ""; + description = ""; + upgradedLevel = 0; + ownerId = -1; + investedMoney = 0; + for (int i = 0; i < 16; i++) + buildings[i] = null; + bool owned = Database.IsRanchOwned(id); + if (owned) + { + upgradedLevel = Database.GetRanchUpgradeLevel(id); + title = Database.GetRanchTitle(id); + description = Database.GetRanchDescription(id); + ownerId = Database.GetRanchOwner(id); + int b1 = Database.GetRanchBuilding1(id); + int b2 = Database.GetRanchBuilding2(id); + int b3 = Database.GetRanchBuilding3(id); + int b4 = Database.GetRanchBuilding4(id); + int b5 = Database.GetRanchBuilding5(id); + int b6 = Database.GetRanchBuilding6(id); + int b7 = Database.GetRanchBuilding7(id); + int b8 = Database.GetRanchBuilding8(id); + int b9 = Database.GetRanchBuilding9(id); + int b10 = Database.GetRanchBuilding10(id); + int b11 = Database.GetRanchBuilding11(id); + int b12 = Database.GetRanchBuilding12(id); + int b13 = Database.GetRanchBuilding13(id); + int b14 = Database.GetRanchBuilding14(id); + int b15 = Database.GetRanchBuilding15(id); + int b16 = Database.GetRanchBuilding16(id); + + if (RanchBuilding.RanchBuildingExists(b1)) + buildings[0] = RanchBuilding.GetRanchBuildingById(b1); + if (RanchBuilding.RanchBuildingExists(b2)) + buildings[1] = RanchBuilding.GetRanchBuildingById(b2); + if (RanchBuilding.RanchBuildingExists(b3)) + buildings[2] = RanchBuilding.GetRanchBuildingById(b3); + if (RanchBuilding.RanchBuildingExists(b4)) + buildings[3] = RanchBuilding.GetRanchBuildingById(b4); + if (RanchBuilding.RanchBuildingExists(b5)) + buildings[4] = RanchBuilding.GetRanchBuildingById(b5); + if (RanchBuilding.RanchBuildingExists(b6)) + buildings[5] = RanchBuilding.GetRanchBuildingById(b6); + if (RanchBuilding.RanchBuildingExists(b7)) + buildings[6] = RanchBuilding.GetRanchBuildingById(b7); + if (RanchBuilding.RanchBuildingExists(b8)) + buildings[7] = RanchBuilding.GetRanchBuildingById(b8); + if (RanchBuilding.RanchBuildingExists(b9)) + buildings[8] = RanchBuilding.GetRanchBuildingById(b9); + if (RanchBuilding.RanchBuildingExists(b10)) + buildings[9] = RanchBuilding.GetRanchBuildingById(b10); + if (RanchBuilding.RanchBuildingExists(b11)) + buildings[10] = RanchBuilding.GetRanchBuildingById(b11); + if (RanchBuilding.RanchBuildingExists(b12)) + buildings[11] = RanchBuilding.GetRanchBuildingById(b12); + if (RanchBuilding.RanchBuildingExists(b13)) + buildings[12] = RanchBuilding.GetRanchBuildingById(b13); + if (RanchBuilding.RanchBuildingExists(b14)) + buildings[13] = RanchBuilding.GetRanchBuildingById(b14); + if (RanchBuilding.RanchBuildingExists(b15)) + buildings[14] = RanchBuilding.GetRanchBuildingById(b15); + if (RanchBuilding.RanchBuildingExists(b16)) + buildings[15] = RanchBuilding.GetRanchBuildingById(b16); + + + InvestedMoney = Database.GetRanchInvestment(id); + } + } + + public RanchUpgrade GetRanchUpgrade() + { + return RanchUpgrade.GetRanchUpgradeById(this.upgradedLevel + 1); + } + public static bool IsRanchHere(int x, int y) + { + foreach (Ranch ranch in Ranches) + { + if (ranch.X == x && ranch.Y == y) + return true; + } + return false; + } + public static bool RanchExists(int ranchId) + { + foreach (Ranch ranch in Ranches) + { + if (ranch.Id == ranchId) + return true; + } + return false; + } + public static Ranch GetRanchById(int ranchId) + { + foreach (Ranch ranch in Ranches) + { + if (ranch.Id == ranchId) + return ranch; + } + throw new KeyNotFoundException("No Ranch with id " + ranchId); + } + public static Ranch GetRanchAt(int x, int y) + { + foreach(Ranch ranch in Ranches) + { + if (ranch.X == x && ranch.Y == y) + return ranch; + } + throw new KeyNotFoundException("No Ranch found at x" + x + " y" + y); + } + + public static bool IsRanchOwned(int playerId) + { + foreach (Ranch ranch in Ranches) + { + if (ranch.OwnerId == playerId) + { + return true; + } + } + return false; + } + public static Ranch GetRanchOwnedBy(int playerId) + { + foreach(Ranch ranch in Ranches) + { + if(ranch.OwnerId == playerId) + { + return ranch; + } + } + throw new KeyNotFoundException("Player " + playerId + " does not own a ranch."); + } + } +} diff --git a/HorseIsleServer/LibHISP/Game/Riddler.cs b/HorseIsleServer/LibHISP/Game/Riddler.cs old mode 100755 new mode 100644 index cc154ed..3bed926 --- a/HorseIsleServer/LibHISP/Game/Riddler.cs +++ b/HorseIsleServer/LibHISP/Game/Riddler.cs @@ -32,7 +32,7 @@ namespace HISP.Game Database.CompleteRiddle(this.Id, user.Id); byte[] riddleAnswerCorrectPacket = PacketBuilder.CreateChat(Messages.FormatRiddlerAnswerCorrect(this.Reason), PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(riddleAnswerCorrectPacket); + user.LoggedinClient.SendPacket(riddleAnswerCorrectPacket); user.AddMoney(10000); if(HasCompletedAllRiddles(user)) @@ -42,7 +42,7 @@ namespace HISP.Game public void AnswerFail(User user) { byte[] riddleIncorrect = PacketBuilder.CreateChat(Messages.RiddlerIncorrectAnswer, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(riddleIncorrect); + user.LoggedinClient.SendPacket(riddleIncorrect); } public bool CheckAnswer(User user, string txt) diff --git a/HorseIsleServer/LibHISP/Game/Services/Auction.cs b/HorseIsleServer/LibHISP/Game/Services/Auction.cs old mode 100755 new mode 100644 index a56f712..abbc066 --- a/HorseIsleServer/LibHISP/Game/Services/Auction.cs +++ b/HorseIsleServer/LibHISP/Game/Services/Auction.cs @@ -2,14 +2,13 @@ using HISP.Player; using HISP.Security; using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Game.Services { public class Auction { - private static ThreadSafeList auctionRooms = new ThreadSafeList(); + private static List auctionRooms = new List(); public static Auction[] AuctionRooms { get @@ -21,7 +20,7 @@ namespace HISP.Game.Services public Auction(int id) { RoomId = id; - auctionEntries = new ThreadSafeList(); + auctionEntries = new List(); Database.LoadAuctionRoom(this, RoomId); } @@ -38,7 +37,7 @@ namespace HISP.Game.Services if(BidUser.HorseInventory.HorseList.Length >= BidUser.MaxHorses) { byte[] tooManyHorses = PacketBuilder.CreateChat(Messages.AuctionYouHaveTooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(tooManyHorses); + BidUser.LoggedinClient.SendPacket(tooManyHorses); return; } @@ -47,7 +46,7 @@ namespace HISP.Game.Services if(BidAmount >= MAX_BID) { byte[] maxBidReached = PacketBuilder.CreateChat(Messages.AuctionBidMax, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(maxBidReached); + BidUser.LoggedinClient.SendPacket(maxBidReached); return; } @@ -56,7 +55,7 @@ namespace HISP.Game.Services { byte[] cantAffordBid = PacketBuilder.CreateChat(Messages.AuctionCantAffordBid, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(cantAffordBid); + BidUser.LoggedinClient.SendPacket(cantAffordBid); return; } @@ -78,7 +77,7 @@ namespace HISP.Game.Services if(entry.RandomId != AuctionItem.RandomId && entry.HighestBidder == BidUser.Id) { byte[] cantWinTooMuch = PacketBuilder.CreateChat(Messages.AuctionOnlyOneWinningBidAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(cantWinTooMuch); + BidUser.LoggedinClient.SendPacket(cantWinTooMuch); return; } } @@ -92,7 +91,7 @@ namespace HISP.Game.Services { User oldBidder = GameServer.GetUserById(AuctionItem.HighestBidder); byte[] outbidMessage = PacketBuilder.CreateChat(Messages.FormatAuctionYourOutbidBy(BidUser.Username, AuctionItem.HighestBid), PacketBuilder.CHAT_BOTTOM_RIGHT); - oldBidder.Client.SendPacket(outbidMessage); + oldBidder.LoggedinClient.SendPacket(outbidMessage); } } @@ -105,7 +104,7 @@ namespace HISP.Game.Services } 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 int OwnerId; - private ThreadSafeList bidders = new ThreadSafeList(); + private List bidders = new List(); public AuctionBid[] Bidders { get @@ -152,7 +151,7 @@ namespace HISP.Game.Services User auctionRunner = GameServer.GetUserById(highestBidder); auctionRunner.HorseInventory.UnHide(Horse.RandomId); byte[] notSold = PacketBuilder.CreateChat(Messages.AuctionNoHorseBrought, PacketBuilder.CHAT_BOTTOM_RIGHT); - auctionRunner.Client.SendPacket(notSold); + auctionRunner.LoggedinClient.SendPacket(notSold); } return; } @@ -162,7 +161,7 @@ namespace HISP.Game.Services { User userWon = GameServer.GetUserById(highestBidder); byte[] wonAuction = PacketBuilder.CreateChat(Messages.FormatAuctionBroughtHorse(highestBid), PacketBuilder.CHAT_BOTTOM_RIGHT); - userWon.Client.SendPacket(wonAuction); + userWon.LoggedinClient.SendPacket(wonAuction); userWon.TakeMoney(highestBid); userWon.HorseInventory.AddHorse(Horse, false); } @@ -175,7 +174,7 @@ namespace HISP.Game.Services { User userSold = GameServer.GetUserById(OwnerId); byte[] horseSold = PacketBuilder.CreateChat(Messages.FormatAuctionHorseSold(highestBid), PacketBuilder.CHAT_BOTTOM_RIGHT); - userSold.Client.SendPacket(horseSold); + userSold.LoggedinClient.SendPacket(horseSold); userSold.AddMoney(highestBid); userSold.HorseInventory.DeleteHorse(Horse, false); } @@ -298,7 +297,7 @@ namespace HISP.Game.Services auctionEntries.Add(entry); } - private ThreadSafeList auctionEntries; + private List auctionEntries; public int RoomId; public AuctionEntry[] AuctionEntries diff --git a/HorseIsleServer/LibHISP/Game/Services/Barn.cs b/HorseIsleServer/LibHISP/Game/Services/Barn.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Farrier.cs b/HorseIsleServer/LibHISP/Game/Services/Farrier.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Groomer.cs b/HorseIsleServer/LibHISP/Game/Services/Groomer.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Inn.cs b/HorseIsleServer/LibHISP/Game/Services/Inn.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Pawneer.cs b/HorseIsleServer/LibHISP/Game/Services/Pawneer.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Shop.cs b/HorseIsleServer/LibHISP/Game/Services/Shop.cs old mode 100755 new mode 100644 index a29485a..c8216cd --- a/HorseIsleServer/LibHISP/Game/Services/Shop.cs +++ b/HorseIsleServer/LibHISP/Game/Services/Shop.cs @@ -24,7 +24,7 @@ namespace HISP.Game.Services if (Item.ItemIdExist(stock)) this.Inventory.AddInfinity(Item.GetItemById(stock)); 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); diff --git a/HorseIsleServer/LibHISP/Game/Services/Trainer.cs b/HorseIsleServer/LibHISP/Game/Services/Trainer.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Transport.cs b/HorseIsleServer/LibHISP/Game/Services/Transport.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Vet.cs b/HorseIsleServer/LibHISP/Game/Services/Vet.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/Services/Workshop.cs b/HorseIsleServer/LibHISP/Game/Services/Workshop.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/SwfModules/Brickpoet.cs b/HorseIsleServer/LibHISP/Game/SwfModules/Brickpoet.cs old mode 100755 new mode 100644 index a207306..d95c123 --- a/HorseIsleServer/LibHISP/Game/SwfModules/Brickpoet.cs +++ b/HorseIsleServer/LibHISP/Game/SwfModules/Brickpoet.cs @@ -156,7 +156,7 @@ namespace HISP.Game.SwfModules foreach(int room in rooms) { - Logger.InfoPrint("Loading Poetry room: " + room.ToString()); + Logger.InfoPrint("Loading poetry room: " + room.ToString()); poetryRooms.Add(getPoetryRoom(room)); if (!Database.LastPlayerExist("P" + room)) Database.AddLastPlayer("P" + room, -1); diff --git a/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs b/HorseIsleServer/LibHISP/Game/SwfModules/Drawingroom.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Game/SwfModules/Dressup.cs b/HorseIsleServer/LibHISP/Game/SwfModules/Dressup.cs old mode 100755 new mode 100644 index 3713375..aa18b91 --- a/HorseIsleServer/LibHISP/Game/SwfModules/Dressup.cs +++ b/HorseIsleServer/LibHISP/Game/SwfModules/Dressup.cs @@ -1,5 +1,4 @@ using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Game.SwfModules @@ -18,7 +17,7 @@ namespace HISP.Game.SwfModules public class DressupRoom { public int RoomId; - private ThreadSafeList dressupPeices; + private List dressupPeices; public DressupPeice[] DressupPeices { get @@ -29,7 +28,7 @@ namespace HISP.Game.SwfModules public DressupRoom(int roomId) { RoomId = roomId; - dressupPeices = new ThreadSafeList(); + dressupPeices = new List(); DressupPeice[] peices = Database.LoadDressupRoom(this); foreach (DressupPeice peice in peices) diff --git a/HorseIsleServer/LibHISP/Game/Tracking.cs b/HorseIsleServer/LibHISP/Game/Tracking.cs old mode 100755 new mode 100644 index ff16f60..18e12ec --- a/HorseIsleServer/LibHISP/Game/Tracking.cs +++ b/HorseIsleServer/LibHISP/Game/Tracking.cs @@ -1,6 +1,5 @@ using HISP.Player; using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Game @@ -58,7 +57,7 @@ namespace HISP.Game private int count; private User baseUser; } - private ThreadSafeList trackingItems = new ThreadSafeList(); + private List trackingItems = new List(); private User baseUser; public TrackedItem[] TrackingItems { diff --git a/HorseIsleServer/LibHISP/Game/Treasure.cs b/HorseIsleServer/LibHISP/Game/Treasure.cs old mode 100755 new mode 100644 index 7035b9f..71ab958 --- a/HorseIsleServer/LibHISP/Game/Treasure.cs +++ b/HorseIsleServer/LibHISP/Game/Treasure.cs @@ -139,15 +139,15 @@ namespace HISP.Game Database.DeleteTreasure(this.RandomId); GenerateTreasure(); - byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); - user.Client.SendPacket(MovementPacket); + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + user.LoggedinClient.SendPacket(MovementPacket); user.AddMoney(Value); if(this.Type == "BURIED") { byte[] treasureReceivedPacket = PacketBuilder.CreateChat(Messages.FormatPirateTreasure(this.Value), PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(treasureReceivedPacket); + user.LoggedinClient.SendPacket(treasureReceivedPacket); user.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PirateTreasure).Count++; if(user.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PirateTreasure).Count >= 10) @@ -159,7 +159,7 @@ namespace HISP.Game else if(this.Type == "RAINBOW") { byte[] treasureReceivedPacket = PacketBuilder.CreateChat(Messages.FormatPotOfGold(this.Value), PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(treasureReceivedPacket); + user.LoggedinClient.SendPacket(treasureReceivedPacket); user.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PotOfGold).Count++; diff --git a/HorseIsleServer/LibHISP/Game/TwoPlayer.cs b/HorseIsleServer/LibHISP/Game/TwoPlayer.cs old mode 100755 new mode 100644 index 6b03254..7eb6afb --- a/HorseIsleServer/LibHISP/Game/TwoPlayer.cs +++ b/HorseIsleServer/LibHISP/Game/TwoPlayer.cs @@ -86,8 +86,8 @@ namespace HISP.Game byte[] youHaveInvited = PacketBuilder.CreateChat(Messages.Format2PlayerYouInvited(inviting.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] yourInvited = PacketBuilder.CreateChat(Messages.Format2PlayerYourInvited(invitee.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - Invitee.Client.SendPacket(youHaveInvited); - Inviting.Client.SendPacket(yourInvited); + Invitee.LoggedinClient.SendPacket(youHaveInvited); + Inviting.LoggedinClient.SendPacket(yourInvited); deleteTimer = new Timer(new TimerCallback(deleteTwoPlayer), null, 2 * 60 * 1000, 2 * 60 * 1000); @@ -119,15 +119,15 @@ namespace HISP.Game private void update() { - GameServer.UpdateArea(Invitee.Client); - GameServer.UpdateArea(Inviting.Client); + GameServer.UpdateArea(Invitee.LoggedinClient); + GameServer.UpdateArea(Inviting.LoggedinClient); } private void updateOthers() { foreach(User user in this.Multiroom.JoinedUsers) if (IsPlayerInGame(user)) if(user.Id != Invitee.Id && user.Id != Inviting.Id) - GameServer.UpdateArea(user.Client); + GameServer.UpdateArea(user.LoggedinClient); } public void UpdateAll() @@ -182,14 +182,14 @@ namespace HISP.Game byte[] startingUpGameInvitee = PacketBuilder.CreateChat(Messages.Format2PlayerStartingGame(Inviting.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] startingUpGameInvited = PacketBuilder.CreateChat(Messages.Format2PlayerStartingGame(Invitee.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - Invitee.Client.SendPacket(startingUpGameInvitee); - Inviting.Client.SendPacket(startingUpGameInvited); + Invitee.LoggedinClient.SendPacket(startingUpGameInvitee); + Inviting.LoggedinClient.SendPacket(startingUpGameInvited); - byte[] loadSwfInvitee = PacketBuilder.CreateSwfModule(buildSwf(2), PacketBuilder.PACKET_SWF_MODULE_FORCE); - byte[] loadSwfInvited = PacketBuilder.CreateSwfModule(buildSwf(1), PacketBuilder.PACKET_SWF_MODULE_FORCE); + byte[] loadSwfInvitee = PacketBuilder.CreateSwfModulePacket(buildSwf(2), PacketBuilder.PACKET_SWF_MODULE_FORCE); + byte[] loadSwfInvited = PacketBuilder.CreateSwfModulePacket(buildSwf(1), PacketBuilder.PACKET_SWF_MODULE_FORCE); - Invitee.Client.SendPacket(loadSwfInvitee); - Inviting.Client.SendPacket(loadSwfInvited); + Invitee.LoggedinClient.SendPacket(loadSwfInvitee); + Inviting.LoggedinClient.SendPacket(loadSwfInvited); } } @@ -207,13 +207,13 @@ namespace HISP.Game if (userWhoClosed.Id == Inviting.Id) { - Invitee.Client.SendPacket(gameClosedByOther); - Inviting.Client.SendPacket(gameClosed); + Invitee.LoggedinClient.SendPacket(gameClosedByOther); + Inviting.LoggedinClient.SendPacket(gameClosed); } else if (userWhoClosed.Id == Invitee.Id) { - Invitee.Client.SendPacket(gameClosed); - Inviting.Client.SendPacket(gameClosedByOther); + Invitee.LoggedinClient.SendPacket(gameClosed); + Inviting.LoggedinClient.SendPacket(gameClosedByOther); } } diff --git a/HorseIsleServer/LibHISP/Game/World.cs b/HorseIsleServer/LibHISP/Game/World.cs old mode 100755 new mode 100644 index 60190d3..a52a8d8 --- a/HorseIsleServer/LibHISP/Game/World.cs +++ b/HorseIsleServer/LibHISP/Game/World.cs @@ -74,7 +74,7 @@ namespace HISP.Game Database.SetWeather(Name, value); foreach(User user in GameServer.GetUsersInIsle(this,true,true)) { - GameServer.UpdateWorld(user.Client); + GameServer.UpdateWorld(user.LoggedinClient); } } } @@ -127,7 +127,7 @@ namespace HISP.Game Database.SetWeather(Name, value); foreach (User user in GameServer.GetUsersInTown(this, true, true)) { - GameServer.UpdateArea(user.Client); + GameServer.UpdateArea(user.LoggedinClient); } } @@ -158,7 +158,14 @@ namespace HISP.Game public class Time { - public int Minutes; + public double PreciseMinutes; + public int Minutes + { + get + { + return Convert.ToInt32(Math.Floor(PreciseMinutes)); + } + } public int Days; public int Years; } @@ -191,13 +198,13 @@ namespace HISP.Game public static void TickWorldClock() { - ServerTime.Minutes++; + ServerTime.PreciseMinutes += 0.1; if (ServerTime.Minutes > 1440) // 1 day { ServerTime.Days += 1; - ServerTime.Minutes = 0; + ServerTime.PreciseMinutes = 0.0; Database.DoIntrestPayments(ConfigReader.IntrestRate); } @@ -212,7 +219,7 @@ namespace HISP.Game public static void ReadWorldData() { Logger.DebugPrint("Reading time from database..."); - ServerTime.Minutes = Database.GetServerTime(); + ServerTime.PreciseMinutes = Database.GetServerTime(); ServerTime.Days = Database.GetServerDay(); ServerTime.Years = Database.GetServerYear(); StartDate = Database.GetServerStartTime(); diff --git a/HorseIsleServer/LibHISP/LibHISP.csproj b/HorseIsleServer/LibHISP/LibHISP.csproj old mode 100755 new mode 100644 index fec083e..177893d --- a/HorseIsleServer/LibHISP/LibHISP.csproj +++ b/HorseIsleServer/LibHISP/LibHISP.csproj @@ -1,283 +1,250 @@ - - - Library - HISP - 10.0 - x64;x86;ARM;ARM64;AnyCPU - Debug;Windows;Linux;MacOS;Android;iOS - - - - True - True - Resources.resx - - - - - PreserveNewest - PreserveNewest - gamedata\%(Filename)%(Extension) - - - - - PreserveNewest - PreserveNewest - HI1.MAP - - - - - - - - - - PublicResXFileCodeGenerator - - - - false - false - - - net8.0 - false - true - OnBuildSuccess - full - False - none - False - Public Domain, 2022 - https://islehorse.com - https://github.com/islehorse/HISP - git - 3 - 1701;1702;2026;IL2026 - - - - partial - false - true - - - - win-x86 - true - x86 - OS_WINDOWS;ARCH_X86 - none - - - win-x64 - true - x64 - OS_WINDOWS;ARCH_X86_64 - none - - - win-arm - true - ARM - OS_WINDOWS;ARCH_ARM - none - - - win-arm64 - true - ARM64 - OS_WINDOWS;ARCH_ARM64 - none - - - - ios-arm - true - ARM - OS_IOS;ARCH_ARM - none - - - ios-arm64 - none - ARM64 - OS_IOS;ARCH_ARM64 - none - - - - android-arm - true - ARM - OS_ANDROID;ARCH_ARM - none - - - android-arm64 - true - ARM64 - OS_ANDROID;ARCH_ARM64 - none - - - - - linux-x64 - true - x64 - OS_LINUX;ARCH_X86_64 - none - - - linux-arm - ARM - true - OS_LINUX;ARCH_ARM - none - - - linux-arm64 - ARM64 - true - OS_LINUX;ARCH_ARM64 - none - - - - osx-x64 - true - x64 - OS_MACOS;ARCH_X86_64 - none - - - - osx-arm64 - true - OS_MACOS;ARCH_ARM64 - none - - - - - win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 - True - OS_ALL;ARCH_ANYCPU - - - - - ARM - False - DEBUG;TRACE;OS_DEBUG;ARCH_ARM - full - - - - - ARM64 - False - DEBUG;TRACE;OS_DEBUG;ARCH_ARM64 - full - - - - - False - DEBUG;TRACE;OS_DEBUG;ARCH_X86_64 - full - - - - - False - DEBUG;TRACE;OS_DEBUG;ARCH_X86 - full - - - - - True - OS_MACOS;ARCH_X86 - none - - - - - True - OS_LINUX;ARCH_X86 - none - - - - - False - OS_LINUX;ARCH_ANYCPU - none - - - - - False - OS_WINDOWS;ARCH_ANYCPU - none - - - - - False - OS_MACOS;ARCH_ANYCPU - none - - - - - True - OS_MACOS;ARCH_ARM - none - - - - - False - none - - - - - none - - - - - none - - - - - none - - - - - none - - - - - none - - - - - none - - - - - - - + + + Library + HISP + 10.0 + x64;x86;ARM;ARM64;AnyCPU + Debug;Windows;Linux;MacOS;Android + + + + True + True + Resources.resx + + + + + PreserveNewest + gamedata.json + + + + + PreserveNewest + HI1.MAP + + + + + + + + + + PublicResXFileCodeGenerator + + + + false + false + + + net6.0 + false + true + OnBuildSuccess + embedded + False + none + False + Public Domain, 2022 + https://islehorse.com + https://github.com/islehorse/HISP + git + + + + win-x86 + true + x86 + OS_WINDOWS;ARCH_X86 + 3 + 1701;1702;2026 + + + win-x64 + true + x64 + OS_WINDOWS;ARCH_X86_64 + 3 + 1701;1702;2026 + + + win-arm + true + ARM + OS_WINDOWS;ARCH_ARM + 3 + 1701;1702;2026 + + + win-arm64 + true + ARM64 + OS_WINDOWS;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + android-arm + true + ARM + OS_ANDROID;ARCH_ARM + 3 + 1701;1702;2026 + + + android-arm64 + true + ARM64 + OS_ANDROID;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + linux-x64 + true + x64 + OS_LINUX;ARCH_X86_64 + 3 + 1701;1702;2026 + + + linux-arm + ARM + true + OS_LINUX;ARCH_ARM + 3 + 1701;1702;2026 + + + linux-arm64 + ARM64 + true + OS_LINUX;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + osx-x64 + true + x64 + OS_MACOS;ARCH_X86_64 + 3 + 1701;1702;2026 + + + osx-arm64 + true + OS_MACOS;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + net6.0 + win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 + True + OS_ALL;ARCH_ANYCPU + + + + + ARM + False + DEBUG;TRACE;OS_DEBUG;ARCH_ARM + 3 + 1701;1702;2026 + + + + + ARM64 + False + DEBUG;TRACE;OS_DEBUG;ARCH_ARM64 + 3 + 1701;1702;2026 + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86_64 + 3 + 1701;1702;2026 + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86 + 3 + 1701;1702;2026 + + + + + True + OS_MACOS;ARCH_X86 + 3 + 1701;1702;2026 + + + + + True + OS_LINUX;ARCH_X86 + 3 + 1701;1702;2026 + + + + + False + OS_LINUX;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + False + OS_WINDOWS;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + False + OS_MACOS;ARCH_ANYCPU + 3 + 1701;1702;2026 + + + + + True + OS_MACOS;ARCH_ARM + 3 + 1701;1702;2026 + + + + + 3 + 1701;1702;2026 + False + + + + + + + diff --git a/HorseIsleServer/LibHISP/Player/Award.cs b/HorseIsleServer/LibHISP/Player/Award.cs old mode 100755 new mode 100644 index be049de..d0ba64b --- a/HorseIsleServer/LibHISP/Player/Award.cs +++ b/HorseIsleServer/LibHISP/Player/Award.cs @@ -1,100 +1,99 @@ -using HISP.Server; -using HISP.Util; -using System; -using System.Collections.Generic; - -namespace HISP.Player -{ - public class Award - { - public struct AwardEntry - { - public int Id; - public int Sort; - public string Title; - public int IconId; - public int MoneyBonus; - public string CompletionText; - public string Description; - } - - public static AwardEntry[] GlobalAwardList; - - public static AwardEntry GetAwardById(int id) - { - //99% fo the time this will work - try - { - AwardEntry award = GlobalAwardList[id - 1]; - if (award.Id == id) - return award; - } - catch (Exception) { }; - - // Incase it doesnt... - foreach(AwardEntry award in GlobalAwardList) - { - if (award.Id == id) - return award; - } - - throw new KeyNotFoundException("Award ID " + id + " Does not exist."); - } - - - private ThreadSafeList awardsEarned; - private User baseUser; - public AwardEntry[] AwardsEarned - { - get - { - return awardsEarned.ToArray(); - } - } - - public bool HasAward(AwardEntry award) - { - foreach(AwardEntry awardEntry in AwardsEarned) - { - if (awardEntry.Id == award.Id) - return true; - } - return false; - } - - public void AddAward(AwardEntry award,bool addToDatabase=true) - { - if (HasAward(award)) - return; - - if (addToDatabase) - { - Database.AddAward(baseUser.Id, award.Id); - - baseUser.AddMoney(award.MoneyBonus); - - byte[] chatPacket = PacketBuilder.CreateChat(award.CompletionText, PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(chatPacket); - } - - - awardsEarned.Add(award); - } - - public Award(User user) - { - baseUser = user; - int[] awards = Database.GetAwards(user.Id); - awardsEarned = new ThreadSafeList(); - - foreach (int awardid in awards) - { - AddAward(GetAwardById(awardid), false); - } - - } - - - - } -} +using HISP.Server; +using System; +using System.Collections.Generic; + +namespace HISP.Player +{ + public class Award + { + public struct AwardEntry + { + public int Id; + public int Sort; + public string Title; + public int IconId; + public int MoneyBonus; + public string CompletionText; + public string Description; + } + + public static AwardEntry[] GlobalAwardList; + + public static AwardEntry GetAwardById(int id) + { + //99% fo the time this will work + try + { + AwardEntry award = GlobalAwardList[id - 1]; + if (award.Id == id) + return award; + } + catch (Exception) { }; + + // Incase it doesnt... + foreach(AwardEntry award in GlobalAwardList) + { + if (award.Id == id) + return award; + } + + throw new KeyNotFoundException("Award ID " + id + " Does not exist."); + } + + + private List awardsEarned; + private User baseUser; + public AwardEntry[] AwardsEarned + { + get + { + return awardsEarned.ToArray(); + } + } + + public bool HasAward(AwardEntry award) + { + foreach(AwardEntry awardEntry in AwardsEarned) + { + if (awardEntry.Id == award.Id) + return true; + } + return false; + } + + public void AddAward(AwardEntry award,bool addToDatabase=true) + { + if (HasAward(award)) + return; + + if (addToDatabase) + { + Database.AddAward(baseUser.Id, award.Id); + + baseUser.AddMoney(award.MoneyBonus); + + byte[] chatPacket = PacketBuilder.CreateChat(award.CompletionText, PacketBuilder.CHAT_BOTTOM_RIGHT); + baseUser.LoggedinClient.SendPacket(chatPacket); + } + + + awardsEarned.Add(award); + } + + public Award(User user) + { + baseUser = user; + int[] awards = Database.GetAwards(user.Id); + awardsEarned = new List(); + + foreach (int awardid in awards) + { + AddAward(GetAwardById(awardid), false); + } + + } + + + + } +} diff --git a/HorseIsleServer/LibHISP/Player/Dance.cs b/HorseIsleServer/LibHISP/Player/Dance.cs old mode 100755 new mode 100644 index e688ad4..9ce152c --- a/HorseIsleServer/LibHISP/Player/Dance.cs +++ b/HorseIsleServer/LibHISP/Player/Dance.cs @@ -62,8 +62,8 @@ namespace HISP.Player baseUser.Facing = direction + (onHorse * 5); - byte[] moveResponse = PacketBuilder.CreateMovement(baseUser.X, baseUser.Y, baseUser.CharacterId, baseUser.Facing, PacketBuilder.DIRECTION_NONE, false); - baseUser.Client.SendPacket(moveResponse); + byte[] moveResponse = PacketBuilder.CreateMovementPacket(baseUser.X, baseUser.Y, baseUser.CharacterId, baseUser.Facing, PacketBuilder.DIRECTION_NONE, false); + baseUser.LoggedinClient.SendPacket(moveResponse); GameServer.UpdateUserFacingAndLocation(baseUser); diff --git a/HorseIsleServer/LibHISP/Player/Equips/CompetitionGear.cs b/HorseIsleServer/LibHISP/Player/Equips/CompetitionGear.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Player/Equips/Jewelry.cs b/HorseIsleServer/LibHISP/Player/Equips/Jewelry.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Player/Friends.cs b/HorseIsleServer/LibHISP/Player/Friends.cs old mode 100755 new mode 100644 index bada4a4..7b77d5f --- a/HorseIsleServer/LibHISP/Player/Friends.cs +++ b/HorseIsleServer/LibHISP/Player/Friends.cs @@ -1,14 +1,13 @@ using System.Collections.Generic; using HISP.Game; using HISP.Server; -using HISP.Util; - + namespace HISP.Player { public class Friends { private User baseUser; - private ThreadSafeList list; + private List list; public int[] List { get @@ -37,7 +36,7 @@ namespace HISP.Player public Friends(User user) { baseUser = user; - list = new ThreadSafeList(); + list = new List(); int[] friends = Database.GetBuddyList(user.Id); foreach(int friendId in friends) @@ -77,19 +76,19 @@ namespace HISP.Player if(baseUser.MuteBuddy) { byte[] cantFriend = PacketBuilder.CreateChat(Messages.CantSendBuddyRequestWhileMuted, PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(cantFriend); + baseUser.LoggedinClient.SendPacket(cantFriend); return; } else if(userToFriend.MuteBuddyRequests) { byte[] cantFriend = PacketBuilder.CreateChat(Messages.PlayerIgnoringAllBuddyRequests, PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(cantFriend); + baseUser.LoggedinClient.SendPacket(cantFriend); return; } else if(userToFriend.MutePlayer.IsUserMuted(userToFriend)) { byte[] cantFriend = PacketBuilder.CreateChat(Messages.PlayerIgnoringYourBuddyRequests, PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(cantFriend); + baseUser.LoggedinClient.SendPacket(cantFriend); return; } @@ -102,23 +101,23 @@ namespace HISP.Player byte[] nowFriendsMsg = PacketBuilder.CreateChat(Messages.FormatAddBuddyConfirmed(userToFriend.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] nowFriendsOther = PacketBuilder.CreateChat(Messages.FormatAddBuddyConfirmed(baseUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - userToFriend.Client.SendPacket(nowFriendsOther); - baseUser.Client.SendPacket(nowFriendsMsg); + userToFriend.LoggedinClient.SendPacket(nowFriendsOther); + baseUser.LoggedinClient.SendPacket(nowFriendsMsg); if(!baseUser.MajorPriority) - GameServer.UpdateArea(baseUser.Client); + GameServer.UpdateArea(baseUser.LoggedinClient); if (!userToFriend.MajorPriority) - GameServer.UpdateArea(userToFriend.Client); + GameServer.UpdateArea(userToFriend.LoggedinClient); } else { baseUser.PendingBuddyRequestTo = userToFriend; byte[] pendingMsg = PacketBuilder.CreateChat(Messages.AddBuddyPending, PacketBuilder.CHAT_BOTTOM_RIGHT); byte[] pendingMsgOther = PacketBuilder.CreateChat(Messages.FormatAddBuddyPendingOther(baseUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(pendingMsg); + baseUser.LoggedinClient.SendPacket(pendingMsg); if(!userToFriend.MuteBuddyRequests && !userToFriend.MuteAll) - userToFriend.Client.SendPacket(pendingMsgOther); + userToFriend.LoggedinClient.SendPacket(pendingMsgOther); } } diff --git a/HorseIsleServer/LibHISP/Player/Highscore.cs b/HorseIsleServer/LibHISP/Player/Highscore.cs old mode 100755 new mode 100644 index 138154b..e26c752 --- a/HorseIsleServer/LibHISP/Player/Highscore.cs +++ b/HorseIsleServer/LibHISP/Player/Highscore.cs @@ -1,5 +1,4 @@ using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Player @@ -25,7 +24,7 @@ namespace HISP.Player } private User baseUser; - private ThreadSafeList highScoreList = new ThreadSafeList(); + private List highScoreList = new List(); public Highscore(User user) { diff --git a/HorseIsleServer/LibHISP/Player/Mailbox.cs b/HorseIsleServer/LibHISP/Player/Mailbox.cs old mode 100755 new mode 100644 index 8b6c726..195bf04 --- a/HorseIsleServer/LibHISP/Player/Mailbox.cs +++ b/HorseIsleServer/LibHISP/Player/Mailbox.cs @@ -2,7 +2,6 @@ using HISP.Game.Inventory; using HISP.Game.Items; using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Player @@ -10,7 +9,7 @@ namespace HISP.Player public class Mailbox { private User baseUser; - private ThreadSafeList mails = new ThreadSafeList(); + private List mails = new List(); public int MailCount { get @@ -68,8 +67,8 @@ namespace HISP.Player } byte[] rippedUpMessage = PacketBuilder.CreateChat(Messages.MailRippedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - baseUser.Client.SendPacket(rippedUpMessage); - GameServer.UpdateInventory(baseUser.Client); + baseUser.LoggedinClient.SendPacket(rippedUpMessage); + GameServer.UpdateInventory(baseUser.LoggedinClient); } public void ReadAllMail() @@ -87,7 +86,7 @@ namespace HISP.Player mails[i].Read = true; } - GameServer.UpdatePlayer(baseUser.Client); + GameServer.UpdatePlayer(baseUser.LoggedinClient); } public void AddMail(Mail mailMessage) { diff --git a/HorseIsleServer/LibHISP/Player/MutedPlayers.cs b/HorseIsleServer/LibHISP/Player/MutedPlayers.cs old mode 100755 new mode 100644 index 18f1f6b..3ed1cfb --- a/HorseIsleServer/LibHISP/Player/MutedPlayers.cs +++ b/HorseIsleServer/LibHISP/Player/MutedPlayers.cs @@ -1,5 +1,4 @@ using HISP.Server; -using HISP.Util; using System.Collections.Generic; namespace HISP.Player @@ -7,10 +6,10 @@ namespace HISP.Player public class MutedPlayers { private User baseUser; - private ThreadSafeList userIds; + private List userIds; public MutedPlayers(User BaseUser) { - userIds = new ThreadSafeList(); + userIds = new List(); baseUser = BaseUser; int[] userids = Database.GetMutedPlayers(BaseUser.Id); diff --git a/HorseIsleServer/LibHISP/Player/PlayerQuests.cs b/HorseIsleServer/LibHISP/Player/PlayerQuests.cs old mode 100755 new mode 100644 index 7882c3d..0238249 --- a/HorseIsleServer/LibHISP/Player/PlayerQuests.cs +++ b/HorseIsleServer/LibHISP/Player/PlayerQuests.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; using HISP.Server; -using HISP.Util; - + namespace HISP.Player { public class PlayerQuests { - private ThreadSafeList trackedQuests = new ThreadSafeList(); + private List trackedQuests = new List(); public User BaseUser; public TrackedQuest[] QuestList { diff --git a/HorseIsleServer/LibHISP/Player/TrackedQuest.cs b/HorseIsleServer/LibHISP/Player/TrackedQuest.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Player/Trade.cs b/HorseIsleServer/LibHISP/Player/Trade.cs old mode 100755 new mode 100644 index c978364..ec6790e --- a/HorseIsleServer/LibHISP/Player/Trade.cs +++ b/HorseIsleServer/LibHISP/Player/Trade.cs @@ -68,8 +68,8 @@ namespace HISP.Player OtherTrade.Trader.PendingTradeTo = 0; OtherTrade.Trader.TradingWith = null; - GameServer.UpdateArea(Trader.Client); - GameServer.UpdateArea(OtherTrade.Trader.Client); + GameServer.UpdateArea(Trader.LoggedinClient); + GameServer.UpdateArea(OtherTrade.Trader.LoggedinClient); } public bool Fail = false; @@ -84,7 +84,7 @@ namespace HISP.Player if (MoneyOffered > 0 && OtherTrade.Trader.Money < 0) { byte[] otherNegativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeOtherPlayerHasNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(otherNegativeMoneyNotAllowed); + Trader.LoggedinClient.SendPacket(otherNegativeMoneyNotAllowed); Fail = true; OtherTrade.Fail = true; } @@ -93,7 +93,7 @@ namespace HISP.Player if (OtherTrade.MoneyOffered > 0 && Trader.Money < 0) { byte[] negativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeYouHaveNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(negativeMoneyNotAllowed); + Trader.LoggedinClient.SendPacket(negativeMoneyNotAllowed); Fail = true; OtherTrade.Fail = true; } @@ -102,7 +102,7 @@ namespace HISP.Player if (OtherTrade.Trader.Bids.Length > 0) { byte[] tradeNotAllowedWhileOtherBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileOtherBidding, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeNotAllowedWhileOtherBidding); + Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileOtherBidding); Fail = true; OtherTrade.Fail = true; } @@ -111,7 +111,7 @@ namespace HISP.Player if (Trader.Bids.Length > 0) { byte[] tradeNotAllowedWhileBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileBidding, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeNotAllowedWhileBidding); + Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileBidding); Fail = true; OtherTrade.Fail = true; } @@ -120,7 +120,7 @@ namespace HISP.Player if (MoneyOffered > 0 && OtherTrade.Trader.Money + MoneyOffered > 2100000000) { byte[] tradeOtherHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveOtherTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeOtherHasTooMuchMoney); + Trader.LoggedinClient.SendPacket(tradeOtherHasTooMuchMoney); Fail = true; OtherTrade.Fail = true; } @@ -129,7 +129,7 @@ namespace HISP.Player if (OtherTrade.MoneyOffered > 0 && Trader.Money + OtherTrade.MoneyOffered > 2100000000) { byte[] tradeYouHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveYouTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeYouHasTooMuchMoney); + Trader.LoggedinClient.SendPacket(tradeYouHasTooMuchMoney); Fail = true; OtherTrade.Fail = true; } @@ -143,7 +143,7 @@ namespace HISP.Player if (HorsesOffered.Length > 0 && OtherTrade.Trader.HorseInventory.HorseList.Length + HorsesOffered.Length > OtherTrade.Trader.MaxHorses) { byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeYouHaveTooManyHorses); + Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses); Fail = true; OtherTrade.Fail = true; } @@ -152,7 +152,7 @@ namespace HISP.Player if (OtherTrade.HorsesOffered.Length > 0 && Trader.HorseInventory.HorseList.Length + OtherTrade.HorsesOffered.Length > Trader.MaxHorses) { byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeYouHaveTooManyHorses); + Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses); Fail = true; OtherTrade.Fail = true; } @@ -171,7 +171,7 @@ namespace HISP.Player if (items.ItemInstances.Length + inst.Length > Item.MAX_STACK) { byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeYouCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeTooManyItems); + Trader.LoggedinClient.SendPacket(tradeTooManyItems); Fail = true; OtherTrade.Fail = true; } @@ -189,7 +189,7 @@ namespace HISP.Player if (items.ItemInstances.Length + inst.Length > Item.MAX_STACK) { byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeOtherCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeTooManyItems); + Trader.LoggedinClient.SendPacket(tradeTooManyItems); Fail = true; OtherTrade.Fail = true; } @@ -206,7 +206,7 @@ namespace HISP.Player acceptTrade:; byte[] tradeAccepted = PacketBuilder.CreateChat(Messages.TradeAcceptedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeAccepted); + Trader.LoggedinClient.SendPacket(tradeAccepted); // Transfer Money @@ -214,14 +214,14 @@ namespace HISP.Player { Trader.TakeMoney(MoneyOffered); byte[] tradeSpentMoney = PacketBuilder.CreateChat(Messages.FormatTradeYouSpent(MoneyOffered), PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeSpentMoney); + Trader.LoggedinClient.SendPacket(tradeSpentMoney); } if(OtherTrade.MoneyOffered > 0) { Trader.AddMoney(OtherTrade.MoneyOffered); byte[] tradeReceivedMoney = PacketBuilder.CreateChat(Messages.FormatTradeYouReceived(OtherTrade.MoneyOffered), PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeReceivedMoney); + Trader.LoggedinClient.SendPacket(tradeReceivedMoney); } foreach (HorseInstance inst in HorsesOffered) // Transfer Horses @@ -236,7 +236,7 @@ namespace HISP.Player byte[] disMounted = PacketBuilder.CreateChat(Messages.TradeRiddenHorse, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.Facing %= 5; Trader.CurrentlyRidingHorse = null; - Trader.Client.SendPacket(disMounted); + Trader.LoggedinClient.SendPacket(disMounted); } } @@ -273,13 +273,13 @@ namespace HISP.Player public void InteruptTrade() { byte[] tradeCanceled = PacketBuilder.CreateChat(Messages.TradeCanceledInterupted, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeCanceled); + Trader.LoggedinClient.SendPacket(tradeCanceled); endTrade(); } public void AcceptTrade() { byte[] waitingForAccept = PacketBuilder.CreateChat(Messages.TradeWaitingForOthersToAcceptMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(waitingForAccept); + Trader.LoggedinClient.SendPacket(waitingForAccept); if (OtherTrade.Stage == "ACCEPTED") { @@ -292,18 +292,18 @@ namespace HISP.Player public void CancelTrade() { byte[] tradeCanceled = PacketBuilder.CreateChat(Messages.TradeCanceledByYouMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(tradeCanceled); + Trader.LoggedinClient.SendPacket(tradeCanceled); byte[] tradeCanceledOther = PacketBuilder.CreateChat(Messages.FormatTradeCanceledByPlayer(Trader.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - OtherTrade.Trader.Client.SendPacket(tradeCanceledOther); + OtherTrade.Trader.LoggedinClient.SendPacket(tradeCanceledOther); endTrade(); } public void CancelTradeMoved() { byte[] playerMoved = PacketBuilder.CreateChat(Messages.TradeCanceledBecuasePlayerMovedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - Trader.Client.SendPacket(playerMoved); - OtherTrade.Trader.Client.SendPacket(playerMoved); + Trader.LoggedinClient.SendPacket(playerMoved); + OtherTrade.Trader.LoggedinClient.SendPacket(playerMoved); endTrade(); } diff --git a/HorseIsleServer/LibHISP/Player/User.cs b/HorseIsleServer/LibHISP/Player/User.cs old mode 100755 new mode 100644 index 802f76f..74ccb2b --- a/HorseIsleServer/LibHISP/Player/User.cs +++ b/HorseIsleServer/LibHISP/Player/User.cs @@ -1,755 +1,699 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using HISP.Game; -using HISP.Server; -using HISP.Player.Equips; -using HISP.Game.Services; -using HISP.Game.Inventory; -using HISP.Game.Horse; -using HISP.Util; - - -namespace HISP.Player -{ - public class User - { - private ThreadSafeList bids = new ThreadSafeList(); - private ThreadSafeList beingSocializedBy = new ThreadSafeList(); - - private int chatViolations; - private int charId; - private int subscribedUntil; - private bool subscribed; - private string profilePage; - private string privateNotes; - private int x; - private bool stealth = false; - private int y; - private int questPoints; - private double bankMoney; - private int experience; - private int hunger; - private int thirst; - private int tired; - private bool noClip = false; - private bool administrator = false; - private bool moderator = false; - - public bool NoClip - { - get - { - if(CurrentlyRidingHorse != null) - { - if(CurrentlyRidingHorse.Breed != null) - { - if (CurrentlyRidingHorse.Breed.Type == "pegasus") - { - return true; - } - if (CurrentlyRidingHorse.Breed.Id == 170) - { - return true; - } - } - } - return this.noClip; - } - set - { - this.noClip = value; - } - } - - - public bool Administrator - { - get - { - return this.administrator; - } - set - { - this.administrator = value; - Database.SetUserAdmin(Id, this.administrator); - } - } - - public bool Moderator - { - get - { - if (administrator) - return true; - return moderator; - } - set - { - moderator = value; - Database.SetUserMod(Id, moderator); - } - } - - public Trade TradingWith = null; - public int AttemptingToOfferItem; - public bool TradeMenuPriority = false; - public byte[] SecCodeSeeds = new byte[3]; - public int SecCodeInc = 0; - public int SecCodeCount = 0; - public int Id; - public string Username; - public bool NewPlayer = false; - public GameClient Client; - public CompetitionGear EquipedCompetitionGear; - public Jewelry EquipedJewelry; - public bool MuteAds = false; - public bool MuteGlobal = false; - public bool MuteIsland = false; - public bool MuteNear = false; - public bool MuteHere = false; - public bool MuteBuddy = false; - public bool MutePrivateMessage = false; - public bool MuteBuddyRequests = false; - public bool MuteSocials = false; - public bool MuteAll = false; - public bool MuteLogins = false; - public string Gender; - public bool UserInfoSend = false; - public bool MajorPriority = false; - public bool MinorPriority = false; - public bool HorseWindowOpen = false; - public bool Idle; - public int Facing; - public HorseInfo.Breed PawneerOrderBreed = null; - public string PawneerOrderColor = ""; - public string PawneerOrderGender = ""; - public bool InRealTimeQuiz = false; - public int PendingTradeTo; - public Mailbox MailBox; - public Friends Friends; - - // For chat filter. - public string Password; - - public PlayerInventory Inventory; - public Npc.NpcEntry LastTalkedToNpc; - public Shop LastShoppedAt; - public Inn LastVisitedInn; - public HorseInventory HorseInventory; - public HorseInstance LastViewedHorse; - public HorseInstance LastViewedHorseOther; - public int LastRiddenHorse = 0; - public HorseInstance CurrentlyRidingHorse; - public Tracking TrackedItems; - public Ranch OwnedRanch = null; - public PlayerQuests Quests; - public Highscore Highscores; - public MutedPlayers MutePlayer; - public Riddler LastRiddle; - public Award Awards; - public User SocializingWith; - public User PendingBuddyRequestTo; - public Dance ActiveDance; - public bool CanUseAdsChat = true; - public int CapturingHorseId; - public DateTime LoginTime; - public string LastSeenWeather; - public string AutoReplyText = ""; - public int LastClickedRanchBuilding = 0; - public int TotalGlobalChatMessages = 1; - public User[] BeingSocializedBy - { - get - { - return beingSocializedBy.ToArray(); - } - } - public Auction.AuctionBid[] Bids - { - get - { - return bids.ToArray(); - } - } - public int MaxItems - { - get - { - int baseValue = 40; - if (Subscribed) - { - if (OwnedRanch != null) - { - baseValue += (20 * OwnedRanch.GetBuildingCount(4)); // Shed - if (baseValue > 80) // 2 sheds max! - baseValue = 80; - } - } - return baseValue; - } - } - public int MaxHorses - { - get - { - if (Subscribed) - { - int baseValue = 11; - if(OwnedRanch != null) - { - baseValue += OwnedRanch.GetBuildingCount(1) * 4; // Barn - baseValue += OwnedRanch.GetBuildingCount(10) * 8; // Big Barn - baseValue += OwnedRanch.GetBuildingCount(11) * 12; // Gold Barn - } - return baseValue; - } - - return 7; - } - } - - public void TakeMoney(int amount) - { - int money = Money; - money -= amount; - Database.SetPlayerMoney(money, Id); - GameServer.UpdatePlayer(Client); - } - - public void SetMoney(int amount) - { - Database.SetPlayerMoney(amount, Id); - GameServer.UpdatePlayer(Client); - } - - public void AddMoney(int amount) - { - int money = Money; - try - { - checked - { - money += amount; - } - } - catch(OverflowException) - { - money = Int32.MaxValue; - } - - Database.SetPlayerMoney(money, Id); - GameServer.UpdatePlayer(Client); - } - public string GetWeatherSeen() - { - string weather = "SUNNY"; - if (World.InTown(this.X, this.Y)) - weather = World.GetTown(this.X, this.Y).Weather; - if (World.InIsle(this.X, this.Y)) - weather = World.GetIsle(this.X, this.Y).Weather; - LastSeenWeather = weather; - return weather; - } - public void DoRanchActions() - { - if(OwnedRanch != null) - { - Tiredness = 1000; // All ranches fully rest you. - - if(OwnedRanch.GetBuildingCount(2) > 0) - { - Thirst = 1000; - foreach (HorseInstance horse in HorseInventory.HorseList) - horse.BasicStats.Thirst = 1000; - } - - if (OwnedRanch.GetBuildingCount(3) > 0) - { - foreach (HorseInstance horse in HorseInventory.HorseList) - horse.BasicStats.Hunger = 1000; - } - if(OwnedRanch.GetBuildingCount(9) > 0) - { - Hunger = 1000; - } - if( (OwnedRanch.GetBuildingCount(1) > 0)|| (OwnedRanch.GetBuildingCount(10) > 0) || (OwnedRanch.GetBuildingCount(11) > 0)) - { - - foreach (HorseInstance horse in HorseInventory.HorseList) - horse.BasicStats.Tiredness = 1000; - } - - } - } - public DateTime SubscribedUntil - { - get - { - return Helper.UnixTimeStampToDateTime(subscribedUntil); - } - set - { - subscribedUntil = Convert.ToInt32(((DateTimeOffset)value).ToUnixTimeSeconds()); - Database.SetUserSubscriptionStatus(Id, subscribedUntil); - } - } - public int FreeMinutes - { - get - { - int freeTime = Database.GetFreeTime(Id); - return freeTime; - } - set - { - Database.SetFreeTime(Id, value); - } - } - public bool Subscribed - { - get - { - if (ConfigReader.AllUsersSubbed) - return true; - - if (Administrator) - return true; - - int timestamp = Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()); - if(timestamp > subscribedUntil && subscribed) // sub expired. - { - Logger.InfoPrint(Username + "'s Subscription expired. (timestamp now: " + timestamp + " exp date: " + subscribedUntil+" )"); - Database.SetUserSubscriptionStatus(this.Id, false); - subscribed = false; - } - - return subscribed; - } - set - { - subscribed = value; - Database.SetUserSubscriptionStatus(this.Id, value); - } - } - public bool Stealth - { - get - { - return stealth; - } - set - { - if (value) - Database.RemoveOnlineUser(this.Id); - else - Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator, this.Subscribed, this.NewPlayer); - - stealth = value; - } - } - public int ChatViolations - { - get - { - return chatViolations; - } - set - { - Database.SetChatViolations(value,Id); - chatViolations = value; - } - } - - public string PrivateNotes - { - get - { - return privateNotes; - } - set - { - - privateNotes = value.Trim(); - Database.SetPlayerNotes(Id, privateNotes); - - } - } - public string ProfilePage { - get - { - return profilePage; - } - set - { - profilePage = value.TrimEnd(); - Database.SetPlayerProfile(profilePage, Id); - } - } - - public int Money - { - get - { - return Database.GetPlayerMoney(Id); - } - } - - - public int Experience - { - get - { - return experience; - } - set - { - Database.SetExperience(Id, value); - experience = value; - } - } - public int QuestPoints - { - get - { - return questPoints; - } - set - { - Database.SetPlayerQuestPoints(value, Id); - questPoints = value; - } - } - - public double BankInterest - { - get - { - return Database.GetPlayerBankInterest(Id); - } - set - { - if (value > 9999999999.9999) - value = 9999999999.9999; - - Database.SetPlayerBankInterest(value, Id); - } - } - public double BankMoney - { - get - { - return bankMoney; - } - set - { - if (value > 9999999999.9999) - value = 9999999999.9999; - - Database.SetPlayerBankMoney(value, Id); - bankMoney = value; - BankInterest = value; - } - } - - public int X - { - get - { - return x; - } - set - { - Database.SetPlayerX(value, Id); - x = value; - } - } - - public int Y - { - get - { - return y; - } - set - { - Database.SetPlayerY(value, Id); - y = value; - } - } - - public int CharacterId - { - get - { - return charId; - } - set - { - Database.SetPlayerCharId(value, Id); - charId = value; - } - } - - - public int Hunger - { - get - { - return hunger; - } - set - { - if (value >= 1000) - value = 1000; - if (value <= 0) - value = 0; - Database.SetPlayerHunger(Id, value); - hunger = value; - } - } - - public int Thirst - { - get - { - return thirst; - } - set - { - if (value >= 1000) - value = 1000; - if (value <= 0) - value = 0; - Database.SetPlayerThirst(Id, value); - thirst = value; - } - } - - public int Tiredness - { - get - { - return tired; - } - set - { - if (value >= 1000) - value = 1000; - if (value <= 0) - value = 0; - Database.SetPlayerTiredness(Id, value); - tired = value; - } - } - public void ClearSocailizedWith() - { - beingSocializedBy.Clear(); - } - public void RemoveSocailizedWith(User user) - { - beingSocializedBy.Remove(user); - } - public void AddSocailizedWith(User user) - { - beingSocializedBy.Add(user); - } - public void AddBid(Auction.AuctionBid bid) - { - bids.Add(bid); - } - - public void RemoveBid(Auction.AuctionBid bid) - { - bids.Remove(bid); - } - public int GetPlayerListIcon() - { - int icon = -1; - if (NewPlayer) - icon = Messages.NewUserIcon; - if (Subscribed) - { - int months = Helper.GetMonthsBetweenTwoDateTimes(DateTime.UtcNow, SubscribedUntil); - - if(months >= 12 + 3) - icon = Messages.YearSubscriptionIcon; - else if (months >= 3) - icon = Messages.ThreeMonthSubscripitionIcon; - else - icon = Messages.MonthSubscriptionIcon; - } - if (Moderator) - icon = Messages.ModeratorIcon; - if (Administrator) - icon = Messages.AdminIcon; - - return icon; - } - public void Teleport(int newX, int newY) - { - Logger.DebugPrint("Teleporting: " + Username + " to: " + newX.ToString() + "," + newY.ToString()); - - User[] onScreenBefore = GameServer.GetOnScreenUsers(X, Y, true, true); - User[] onScreenNow = GameServer.GetOnScreenUsers(newX, newY, true, true); - - X = newX; - Y = newY; - - byte[] MovementPacket = PacketBuilder.CreateMovement(X, Y, CharacterId, Facing, PacketBuilder.DIRECTION_TELEPORT, true); - Client.SendPacket(MovementPacket); - GameServer.UpdateWeather(Client); - - - User[] goneOffScreen = onScreenBefore.Except(onScreenNow).ToArray(); - User[] goneOnScreen = onScreenNow.Except(onScreenBefore).ToArray(); - - - // Players now offscreen tell the client is at 1000,1000. - foreach (User offScreenUsers in goneOffScreen) - { - if (offScreenUsers.Id == this.Id) - continue; - - byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, this.Facing, this.CharacterId, this.Username); - offScreenUsers.Client.SendPacket(playerInfoBytes); - } - - // Tell players now on screen there locations - foreach (User onScreenUsers in goneOnScreen) - { - if (onScreenUsers.Id == this.Id) - continue; - - byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(onScreenUsers.X, onScreenUsers.Y, onScreenUsers.Facing, onScreenUsers.CharacterId, onScreenUsers.Username); - Client.SendPacket(playerInfoBytes); - } - - - GameServer.Update(Client); - } - - // Insert LGBT Patch here - public string GetPronouns(bool possessive) - { - if (Gender == "FEMALE") - return possessive ? Messages.PronounFemaleHer : Messages.PronounFemaleShe; - else if (Gender == "MALE") - return possessive ? Messages.PronounMaleHis : Messages.PronounMaleHe; - else - return possessive ? Messages.PronounNeutralTheir : Messages.PronounNeutralThey; - } - - public byte[] GenerateSecCode() - { - SecCodeCount = ((SecCodeCount + 1) % 3); - - SecCodeSeeds[SecCodeCount] = (byte)(SecCodeSeeds[SecCodeCount] + SecCodeInc); - SecCodeSeeds[SecCodeCount] = (byte)(SecCodeSeeds[SecCodeCount] % '\\'); - - double i = SecCodeSeeds[0] + SecCodeSeeds[1] * SecCodeSeeds[2] - SecCodeSeeds[1]; - i = Math.Abs(i); - i %= '\\'; - - byte[] SecCode = new byte[4]; - - SecCode[0] = (byte)(SecCodeSeeds[0] + '!'); - SecCode[1] = (byte)(SecCodeSeeds[1] + '!'); - SecCode[2] = (byte)(SecCodeSeeds[2] + '!'); - SecCode[3] = (byte)(i + '!'); - - Logger.DebugPrint("Expecting "+Username+" To send Sec Code: "+BitConverter.ToString(SecCode).Replace("-", " ")); - return SecCode; - } - - - public User(GameClient baseClient, int UserId) - { - if (!Database.CheckUserExist(UserId)) - throw new KeyNotFoundException("User " + UserId + " not found in database!"); - - if (!Database.CheckUserExtExists(UserId)) - { - Database.CreateUserExt(UserId); - NewPlayer = true; - } - - EquipedCompetitionGear = new CompetitionGear(UserId); - EquipedJewelry = new Jewelry(UserId); - - Id = UserId; - Username = Database.GetUsername(UserId); - - administrator = Database.GetUserModerator(Id); - moderator = Database.GetUserAdmin(Id); - - chatViolations = Database.GetChatViolations(UserId); - x = Database.GetPlayerX(UserId); - y = Database.GetPlayerY(UserId); - charId = Database.GetPlayerCharId(UserId); - - Facing = PacketBuilder.DIRECTION_DOWN; - experience = Database.GetExperience(UserId); - - bankMoney = Database.GetPlayerBankMoney(UserId); - questPoints = Database.GetPlayerQuestPoints(UserId); - subscribed = Database.GetUserSubscribed(UserId); - subscribedUntil = Database.GetUserSubscriptionExpireDate(UserId); - profilePage = Database.GetPlayerProfile(UserId); - privateNotes = Database.GetPlayerNotes(UserId); - hunger = Database.GetPlayerHunger(UserId); - thirst = Database.GetPlayerThirst(UserId); - tired = Database.GetPlayerTiredness(UserId); - - if(Ranch.GetOwnedRanch(this.Id)) - OwnedRanch = Ranch.GetRanchOwnedBy(this.Id); - - Gender = Database.GetGender(UserId); - MailBox = new Mailbox(this); - Highscores = new Highscore(this); - Awards = new Award(this); - MutePlayer = new MutedPlayers(this); - TrackedItems = new Tracking(this); - HorseInventory = new HorseInventory(this); - - // Generate SecCodes - - - SecCodeSeeds[0] = (byte)GameServer.RandomNumberGenerator.Next('!', '\\'); - SecCodeSeeds[1] = (byte)GameServer.RandomNumberGenerator.Next('!', '\\'); - SecCodeSeeds[2] = (byte)GameServer.RandomNumberGenerator.Next('!', '\\'); - SecCodeInc = (byte)GameServer.RandomNumberGenerator.Next('!', '\\'); - - - Friends = new Friends(this); - LoginTime = DateTime.UtcNow; - Client = baseClient; - Inventory = new PlayerInventory(this); - Quests = new PlayerQuests(this); - - // Get auctions - foreach(Auction auction in Auction.AuctionRooms) - { - foreach(Auction.AuctionEntry auctionEntry in auction.AuctionEntries) - { - if(auctionEntry.HighestBidder == this.Id) - { - Auction.AuctionBid bid = new Auction.AuctionBid(); - bid.BidUser = this; - bid.BidAmount = auctionEntry.HighestBid; - bid.AuctionItem = auctionEntry; - - if(bid.BidAmount > 0) - { - bids.Add(bid); - auctionEntry.AddBid(bid); - } - - } - } - } - - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; + +using HISP.Game; +using HISP.Server; +using HISP.Player.Equips; +using HISP.Game.Services; +using HISP.Game.Inventory; +using HISP.Game.Horse; + + +namespace HISP.Player +{ + public class User + { + private List bids = new List(); + private List beingSocializedBy = new List(); + + + private int chatViolations; + private int charId; + private int subscribedUntil; + private bool subscribed; + private string profilePage; + private string privateNotes; + private int x; + private bool stealth = false; + private int y; + private int questPoints; + private double bankMoney; + private int experience; + private int hunger; + private int thirst; + private int tired; + private bool noClip = false; + + public bool NoClip + { + get + { + if(CurrentlyRidingHorse != null) + { + if(CurrentlyRidingHorse.Breed != null) + { + if (CurrentlyRidingHorse.Breed.Type == "pegasus") + { + return true; + } + if (CurrentlyRidingHorse.Breed.Id == 170) + { + return true; + } + } + } + return noClip; + } + set + { + noClip = true; + } + } + public Trade TradingWith = null; + public int AttemptingToOfferItem; + public bool TradeMenuPriority = false; + public byte[] SecCodeSeeds = new byte[3]; + public int SecCodeInc = 0; + public int SecCodeCount = 0; + public int Id; + public string Username; + public bool Administrator = false; + public bool Moderator = false; + public bool NewPlayer = false; + public GameClient LoggedinClient; + public CompetitionGear EquipedCompetitionGear; + public Jewelry EquipedJewelry; + public bool MuteAds = false; + public bool MuteGlobal = false; + public bool MuteIsland = false; + public bool MuteNear = false; + public bool MuteHere = false; + public bool MuteBuddy = false; + public bool MutePrivateMessage = false; + public bool MuteBuddyRequests = false; + public bool MuteSocials = false; + public bool MuteAll = false; + public bool MuteLogins = false; + public string Gender; + public bool UserInfoSend = false; + public bool MajorPriority = false; + public bool MinorPriority = false; + public bool HorseWindowOpen = false; + public bool Idle; + public int Facing; + public HorseInfo.Breed PawneerOrderBreed = null; + public string PawneerOrderColor = ""; + public string PawneerOrderGender = ""; + public bool InRealTimeQuiz = false; + public int PendingTradeTo; + public Mailbox MailBox; + public Friends Friends; + public string Password; // For chat filter. + public PlayerInventory Inventory; + public Npc.NpcEntry LastTalkedToNpc; + public Shop LastShoppedAt; + public Inn LastVisitedInn; + public HorseInventory HorseInventory; + public HorseInstance LastViewedHorse; + public HorseInstance LastViewedHorseOther; + public int LastRiddenHorse = 0; + public HorseInstance CurrentlyRidingHorse; + public Tracking TrackedItems; + public Ranch OwnedRanch = null; + public PlayerQuests Quests; + public Highscore Highscores; + public MutedPlayers MutePlayer; + public Riddler LastRiddle; + public Award Awards; + public User SocializingWith; + public User PendingBuddyRequestTo; + public Dance ActiveDance; + public bool CanUseAdsChat = true; + public int CapturingHorseId; + public DateTime LoginTime; + public string LastSeenWeather; + public string AutoReplyText = ""; + public int LastClickedRanchBuilding = 0; + public int TotalGlobalChatMessages = 1; + public User[] BeingSocializedBy + { + get + { + return beingSocializedBy.ToArray(); + } + } + public Auction.AuctionBid[] Bids + { + get + { + return bids.ToArray(); + } + } + public int MaxItems + { + get + { + int baseValue = 40; + if (Subscribed) + { + if (OwnedRanch != null) + { + baseValue += 20 * OwnedRanch.GetBuildingCount(4); // Shed + if (baseValue > 80) // 2 sheds max! + baseValue = 80; + } + } + return baseValue; + } + } + public int MaxHorses + { + get + { + if (Subscribed) + { + int baseValue = 11; + if(OwnedRanch != null) + { + baseValue += OwnedRanch.GetBuildingCount(1) * 4; // Barn + baseValue += OwnedRanch.GetBuildingCount(10) * 8; // Big Barn + baseValue += OwnedRanch.GetBuildingCount(11) * 12; // Gold Barn + } + return baseValue; + } + + return 7; // will change when ranches are implemented. + } + } + + public void TakeMoney(int amount) + { + int money = Money; + money -= amount; + Database.SetPlayerMoney(money, Id); + GameServer.UpdatePlayer(LoggedinClient); + } + + public void AddMoney(int amount) + { + int money = Money; + try + { + checked + { + money += amount; + } + } + catch(OverflowException) + { + money = 2147483647; + } + + Database.SetPlayerMoney(money, Id); + GameServer.UpdatePlayer(LoggedinClient); + } + public string GetWeatherSeen() + { + string weather = "SUNNY"; + if (World.InTown(this.X, this.Y)) + weather = World.GetTown(this.X, this.Y).Weather; + if (World.InIsle(this.X, this.Y)) + weather = World.GetIsle(this.X, this.Y).Weather; + LastSeenWeather = weather; + return weather; + } + public void DoRanchActions() + { + if(OwnedRanch != null) + { + Tiredness = 1000; // All ranches fully rest you. + + if(OwnedRanch.GetBuildingCount(2) > 0) + { + Thirst = 1000; + foreach (HorseInstance horse in HorseInventory.HorseList) + horse.BasicStats.Thirst = 1000; + } + + if (OwnedRanch.GetBuildingCount(3) > 0) + { + foreach (HorseInstance horse in HorseInventory.HorseList) + horse.BasicStats.Hunger = 1000; + } + if(OwnedRanch.GetBuildingCount(9) > 0) + { + Hunger = 1000; + } + if( (OwnedRanch.GetBuildingCount(1) > 0)|| (OwnedRanch.GetBuildingCount(10) > 0) || (OwnedRanch.GetBuildingCount(11) > 0)) + { + + foreach (HorseInstance horse in HorseInventory.HorseList) + horse.BasicStats.Tiredness = 1000; + } + + } + } + public DateTime SubscribedUntil + { + get + { + return Util.UnixTimeStampToDateTime(subscribedUntil); + } + } + public int FreeMinutes + { + get + { + int freeTime = Database.GetFreeTime(Id); + return freeTime; + } + set + { + Database.SetFreeTime(Id, value); + } + } + public bool Subscribed + { + get + { + if (ConfigReader.AllUsersSubbed) + return true; + + if (Administrator) + return true; + + int Timestamp = Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()); + if(Timestamp > subscribedUntil && subscribed) // sub expired. + { + Logger.InfoPrint(Username + "'s Subscription expired. (timestamp now: " + Timestamp + " exp date: " + subscribedUntil+" )"); + Database.SetUserSubscriptionStatus(this.Id, false); + subscribed = false; + } + + return subscribed; + } + set + { + Database.SetUserSubscriptionStatus(this.Id, value); + } + } + public bool Stealth + { + get + { + return stealth; + } + set + { + if (value) + Database.RemoveOnlineUser(this.Id); + else + Database.AddOnlineUser(this.Id, this.Administrator, this.Moderator, this.Subscribed, this.NewPlayer); + + stealth = value; + } + } + public int ChatViolations + { + get + { + return chatViolations; + } + set + { + Database.SetChatViolations(value,Id); + chatViolations = value; + } + } + + public string PrivateNotes + { + get + { + return privateNotes; + } + set + { + + privateNotes = value.Trim(); + Database.SetPlayerNotes(Id, privateNotes); + + } + } + public string ProfilePage { + get + { + return profilePage; + } + set + { + profilePage = value.TrimEnd(); + Database.SetPlayerProfile(profilePage, Id); + } + } + + public int Money + { + get + { + return Database.GetPlayerMoney(Id); + } + } + + + public int Experience + { + get + { + return experience; + } + set + { + Database.SetExperience(Id, value); + experience = value; + } + } + public int QuestPoints + { + get + { + return questPoints; + } + set + { + Database.SetPlayerQuestPoints(value, Id); + questPoints = value; + } + } + + public double BankInterest + { + get + { + return Database.GetPlayerBankInterest(Id); + } + set + { + if (value > 9999999999.9999) + value = 9999999999.9999; + + Database.SetPlayerBankInterest(value, Id); + } + } + public double BankMoney + { + get + { + return bankMoney; + } + set + { + if (value > 9999999999.9999) + value = 9999999999.9999; + + Database.SetPlayerBankMoney(value, Id); + bankMoney = value; + BankInterest = value; + } + } + + public int X + { + get + { + return x; + } + set + { + Database.SetPlayerX(value, Id); + x = value; + } + } + + public int Y + { + get + { + return y; + } + set + { + Database.SetPlayerY(value, Id); + y = value; + } + } + + public int CharacterId + { + get + { + return charId; + } + set + { + Database.SetPlayerCharId(value, Id); + charId = value; + } + } + + + public int Hunger + { + get + { + return hunger; + } + set + { + if (value >= 1000) + value = 1000; + if (value <= 0) + value = 0; + Database.SetPlayerHunger(Id, value); + hunger = value; + } + } + + public int Thirst + { + get + { + return thirst; + } + set + { + if (value >= 1000) + value = 1000; + if (value <= 0) + value = 0; + Database.SetPlayerThirst(Id, value); + thirst = value; + } + } + + public int Tiredness + { + get + { + return tired; + } + set + { + if (value >= 1000) + value = 1000; + if (value <= 0) + value = 0; + Database.SetPlayerTiredness(Id, value); + tired = value; + } + } + public void ClearSocailizedWith() + { + beingSocializedBy.Clear(); + } + public void RemoveSocailizedWith(User user) + { + beingSocializedBy.Remove(user); + } + public void AddSocailizedWith(User user) + { + beingSocializedBy.Add(user); + } + public void AddBid(Auction.AuctionBid bid) + { + bids.Add(bid); + } + + public void RemoveBid(Auction.AuctionBid bid) + { + bids.Remove(bid); + } + public int GetPlayerListIcon() + { + int icon = -1; + if (NewPlayer) + icon = Messages.NewUserIcon; + if (Subscribed) + { + int months = (SubscribedUntil.Month - DateTime.UtcNow.Month) + ((SubscribedUntil.Year - DateTime.UtcNow.Year) * 12); + if (months >= 3) + icon = Messages.ThreeMonthSubscripitionIcon; + else if(months >= (12+3)) + icon = Messages.YearSubscriptionIcon; + else + icon = Messages.MonthSubscriptionIcon; + } + if (Moderator) + icon = Messages.ModeratorIcon; + if (Administrator) + icon = Messages.AdminIcon; + + return icon; + } + public void Teleport(int newX, int newY) + { + Logger.DebugPrint("Teleporting: " + Username + " to: " + newX.ToString() + "," + newY.ToString()); + + User[] onScreenBefore = GameServer.GetOnScreenUsers(X, Y, true, true); + User[] onScreenNow = GameServer.GetOnScreenUsers(newX, newY, true, true); + + X = newX; + Y = newY; + + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(X, Y, CharacterId, Facing, PacketBuilder.DIRECTION_TELEPORT, true); + LoggedinClient.SendPacket(MovementPacket); + GameServer.UpdateWeather(LoggedinClient); + + + User[] goneOffScreen = onScreenBefore.Except(onScreenNow).ToArray(); + User[] goneOnScreen = onScreenNow.Except(onScreenBefore).ToArray(); + + + // Players now offscreen tell the client is at 1000,1000. + foreach (User offScreenUsers in goneOffScreen) + { + if (offScreenUsers.Id == this.Id) + continue; + + byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, this.Facing, this.CharacterId, this.Username); + offScreenUsers.LoggedinClient.SendPacket(playerInfoBytes); + } + + // Tell players now on screen there locations + foreach (User onScreenUsers in goneOnScreen) + { + if (onScreenUsers.Id == this.Id) + continue; + + byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(onScreenUsers.X, onScreenUsers.Y, onScreenUsers.Facing, onScreenUsers.CharacterId, onScreenUsers.Username); + LoggedinClient.SendPacket(playerInfoBytes); + } + + + GameServer.Update(LoggedinClient); + } + + public byte[] GenerateSecCode() + { + var i = 0; + SecCodeCount++; + SecCodeSeeds[SecCodeCount % 3] = (byte)(SecCodeSeeds[SecCodeCount % 3] + SecCodeInc); + SecCodeSeeds[SecCodeCount % 3] = (byte)(SecCodeSeeds[SecCodeCount % 3] % 92); + i = SecCodeSeeds[0] + SecCodeSeeds[1] * SecCodeSeeds[2] - SecCodeSeeds[1]; + i = Math.Abs(i); + i = i % 92; + + byte[] SecCode = new byte[4]; + SecCode[0] = (byte)(SecCodeSeeds[0] + 33); + SecCode[1] = (byte)(SecCodeSeeds[1] + 33); + SecCode[2] = (byte)(SecCodeSeeds[2] + 33); + SecCode[3] = (byte)(i + 33); + Logger.DebugPrint("Expecting "+Username+" To send Sec Code: "+BitConverter.ToString(SecCode).Replace("-", " ")); + return SecCode; + } + + + public User(GameClient baseClient, int UserId) + { + if (!Database.CheckUserExist(UserId)) + throw new KeyNotFoundException("User " + UserId + " not found in database!"); + + if (!Database.CheckUserExtExists(UserId)) + { + Database.CreateUserExt(UserId); + NewPlayer = true; + + } + + + EquipedCompetitionGear = new CompetitionGear(UserId); + EquipedJewelry = new Jewelry(UserId); + + Id = UserId; + Username = Database.GetUsername(UserId); + + Administrator = Database.CheckUserIsAdmin(Username); + Moderator = Database.CheckUserIsModerator(Username); + + chatViolations = Database.GetChatViolations(UserId); + x = Database.GetPlayerX(UserId); + y = Database.GetPlayerY(UserId); + charId = Database.GetPlayerCharId(UserId); + + Facing = PacketBuilder.DIRECTION_DOWN; + experience = Database.GetExperience(UserId); + //money = Database.GetPlayerMoney(UserId); + bankMoney = Database.GetPlayerBankMoney(UserId); + questPoints = Database.GetPlayerQuestPoints(UserId); + subscribed = Database.IsUserSubscribed(UserId); + subscribedUntil = Database.GetUserSubscriptionExpireDate(UserId); + profilePage = Database.GetPlayerProfile(UserId); + privateNotes = Database.GetPlayerNotes(UserId); + hunger = Database.GetPlayerHunger(UserId); + thirst = Database.GetPlayerThirst(UserId); + tired = Database.GetPlayerTiredness(UserId); + + if(Ranch.IsRanchOwned(this.Id)) + { + OwnedRanch = Ranch.GetRanchOwnedBy(this.Id); + } + + Gender = Database.GetGender(UserId); + MailBox = new Mailbox(this); + Highscores = new Highscore(this); + Awards = new Award(this); + MutePlayer = new MutedPlayers(this); + TrackedItems = new Tracking(this); + HorseInventory = new HorseInventory(this); + + // Generate SecCodes + + + SecCodeSeeds[0] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); + SecCodeSeeds[1] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); + SecCodeSeeds[2] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); + SecCodeInc = (byte)GameServer.RandomNumberGenerator.Next(40, 60); + + + Friends = new Friends(this); + LoginTime = DateTime.UtcNow; + LoggedinClient = baseClient; + Inventory = new PlayerInventory(this); + Quests = new PlayerQuests(this); + + // Get auctions + foreach(Auction auction in Auction.AuctionRooms) + { + foreach(Auction.AuctionEntry auctionEntry in auction.AuctionEntries) + { + if(auctionEntry.HighestBidder == this.Id) + { + Auction.AuctionBid bid = new Auction.AuctionBid(); + bid.BidUser = this; + bid.BidAmount = auctionEntry.HighestBid; + bid.AuctionItem = auctionEntry; + + if(bid.BidAmount > 0) + { + bids.Add(bid); + auctionEntry.AddBid(bid); + } + + } + } + } + + } + } +} diff --git a/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs b/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs old mode 100755 new mode 100644 index cb52358..313aac9 --- a/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs +++ b/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs @@ -1,43 +1,35 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("LibHISP")] -[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Li")] -[assembly: AssemblyProduct("HISP")] -[assembly: AssemblyCopyright("Public Domain © 2022")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("31f0bdf5-f6d1-4aeb-8905-80dbc223c836")] - -// 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.8.73.0")] -[assembly: AssemblyFileVersion("1.8.73.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("HISP")] +[assembly: AssemblyDescription("Server Emulator for \"Horse Isle\"")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("SilicaAndPina")] +[assembly: AssemblyProduct("HISP")] +[assembly: AssemblyCopyright("Public Domain © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("31f0bdf5-f6d1-4aeb-8905-80dbc223c836")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.3.0.0")] +[assembly: AssemblyFileVersion("1.3.0.0")] diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml old mode 100755 new mode 100644 index e757f4e..7e3b969 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Android ARM - bin\arm\Android\net8.0\android-arm\publish\ + bin\arm\Linux\net6.0\android-arm\publish\ FileSystem - net8.0 + net6.0 android-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml old mode 100755 new mode 100644 index a379f96..9f99d74 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml @@ -6,12 +6,12 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Android ARM64 - bin\arm64\Android\net8.0\android-arm64\publish\ + bin\arm\Linux\net6.0\android-arm64\publish\ FileSystem - net8.0 + net6.0 android-arm64 True - + True True OS_ANDROID;ARCH_ARM64 diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml old mode 100755 new mode 100644 index 0a28cea..1115827 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux x64 - bin\x64\Linux\net8.0\linux-x64\publish\ + bin\x64\Linux\net6.0\linux-x64\publish\ FileSystem - net8.0 + net6.0 linux-x64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml old mode 100755 new mode 100644 index 3be6fc1..cc21064 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux ARM - bin\ARM\Linux\net8.0\linux-arm\publish\ + bin\ARM\Linux\net6.0\linux-arm\publish\ FileSystem - net8.0 + net6.0 linux-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml old mode 100755 new mode 100644 index 2ebd582..7aef131 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux ARM64 - bin\ARM64\Linux\net8.0\linux-arm64\publish\ + bin\ARM64\Linux\net6.0\linux-arm64\publish\ FileSystem - net8.0 + net6.0 linux-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml old mode 100755 new mode 100644 index da4bed5..8d1be6f --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. MacOS x64 - bin\x64\MacOS\net8.0\osx-x64\publish\ + bin\x64\MacOS\net6.0\osx-x64\publish\ FileSystem - net8.0 + net6.0 osx-x64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml old mode 100755 new mode 100644 index 49b7a87..8b8328e --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. MacOS ARM64 - bin\arm64\MacOS\net8.0\osx-arm64\publish\ + bin\arm64\MacOS\net6.0\osx-arm64\publish\ FileSystem - net8.0 + net6.0 osx-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml old mode 100755 new mode 100644 index 400c86c..5eb1a87 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows x86 - bin\x86\Windows\net8.0\win-x86\publish\ + bin\x86\Windows\net6.0\win-x86\publish\ FileSystem - net8.0 + net6.0 win-x86 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml old mode 100755 new mode 100644 index b1a750a..6b056c9 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml @@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows x64 - bin\x64\Windows\net8.0\win-x64\publish\ + bin\x64\Windows\net6.0\win-x64\publish\ FileSystem - net8.0 + net6.0 win-x64 True - - + True + True OS_WINDOWS;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM.pubxml old mode 100755 new mode 100644 index 1960b28..03461a2 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows ARM - bin\arm\Windows\net8.0\win-arm\publish\ + bin\arm\Windows\net6.0\windows-arm\publish\ FileSystem - net8.0 + net6.0 win-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml old mode 100755 new mode 100644 index 8dca620..b843480 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows ARM64 - bin\arm64\Windows\net8.0\win-arm64\publish\ + bin\arm64\Windows\net6.0\windows-arm64\publish\ FileSystem - net8.0 + net6.0 win-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml deleted file mode 100755 index 0673054..0000000 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM - bin\arm\iOS\net8.0\ios-arm\publish\ - FileSystem - net8.0 - ios-arm - True - - True - True - OS_IOS;ARCH_ARM - - \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml deleted file mode 100755 index 83b9e1d..0000000 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - iOS - ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ - FileSystem - net8.0 - ios-arm64 - True - - True - True - OS_IOS;ARCH_ARM64 - - \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/Properties/Resources.Designer.cs b/HorseIsleServer/LibHISP/Properties/Resources.Designer.cs old mode 100755 new mode 100644 index e4e90e4..34853c1 --- a/HorseIsleServer/LibHISP/Properties/Resources.Designer.cs +++ b/HorseIsleServer/LibHISP/Properties/Resources.Designer.cs @@ -1,145 +1,147 @@ -//------------------------------------------------------------------------------ -// -// 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. -// -//------------------------------------------------------------------------------ - -namespace HISP.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // 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() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [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.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Fri 15/04/2022 - ///. - /// - public static string BuildDate { - get { - return ResourceManager.GetString("BuildDate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 12:19 am - ///. - /// - public static string BuildTime { - get { - return ResourceManager.GetString("BuildTime", resourceCulture); - } - } - - /// +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace HISP.Properties { + using System; + + + /// + /// A strongly-typed resource public class, for looking up localized strings, etc. + /// + // This public class was auto-generated by the StronglyTypedResourceBuilder + // public class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this public class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HISP.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource public class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// /// Looks up a localized string similar to <cross-domain-policy> /// <allow-access-from domain="*" to-ports="12321" secure="false"/> - ///</cross-domain-policy>. - /// - public static string DefaultCrossDomain { - get { - return ResourceManager.GetString("DefaultCrossDomain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to # ======================= - ///# Horse Isle Server Configuration - ///# ======================= - ///# - ///# Configuration Version 1.3.1 - ///# HISP was Created and Developed by SilicaAndPina - ///# However it is NOT COPYRIGHTED! This software is in the Public Domain! - ///# + ///</cross-domain-policy>. + /// + internal static string DefaultCrossDomain { + get { + return ResourceManager.GetString("DefaultCrossDomain", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to # HorseIsleServer Default Configuration File + /// ///# Ip address the server will bind to (default: 0.0.0.0 ALL INTERFACES) ///ip=0.0.0.0 + ///# Port the server will bind to (default: 12321) + ///port=12321 /// - ///# Port the server will bind to defaults: (on beta.horseisle.com: 12321, on pinto.horseisle.com: 443) - ///# Though, 443 is likely to interfere with TLS, if you happen to have a web server [rest of string was truncated]";. - /// - public static string DefaultServerProperties { - get { - return ResourceManager.GetString("DefaultServerProperties", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to master - ///. - /// - public static string GitBranch { - get { - return ResourceManager.GetString("GitBranch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to 03b55d148a1a109b501162095b1d04101c103cc3 - ///. - /// - public static string GitCommit { - get { - return ResourceManager.GetString("GitCommit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to v1.3 - ///. - /// - public static string GitTag { - get { - return ResourceManager.GetString("GitTag", resourceCulture); - } - } - } -} + ///# MariaDB Database + ///db_ip=127.0.0.1 + ///db_name=beta + ///db_username=root + ///db_password=test123 + ///db_port=3306 + /// + ///# Map Data + ///map=HI1.MAP + /// + ///# JSON Format Data + /// + ///gamedata=gamedata.json + /// + ///# Cross-Domain Policy File + ///crossdomain=CrossDomainPolicy.xml + /// + ///# Red Text Stating "Todays Note:" + ///motd=April 11, 2020. New breed, C [rest of string was truncated]";. + /// + internal static string DefaultServerProperties { + get { + return ResourceManager.GetString("DefaultServerProperties", resourceCulture); + } + } + + /// + /// UNKNOWN COMMIT HASH + /// + internal static string GitCommit { + get { + return ResourceManager.GetString("GitCommit", resourceCulture); + } + } + + internal static string GitTag + { + get + { + return ResourceManager.GetString("GitTag", resourceCulture); + } + } + internal static string GitBranch + { + get + { + return ResourceManager.GetString("GitBranch", resourceCulture); + } + } + internal static string BuildDate + { + get + { + return ResourceManager.GetString("BuildDate", resourceCulture); + } + } + internal static string BuildTime + { + get + { + return ResourceManager.GetString("BuildTime", resourceCulture); + } + } + + } +} diff --git a/HorseIsleServer/LibHISP/Properties/Resources.resx b/HorseIsleServer/LibHISP/Properties/Resources.resx old mode 100755 new mode 100644 index 341785f..16a3a68 --- a/HorseIsleServer/LibHISP/Properties/Resources.resx +++ b/HorseIsleServer/LibHISP/Properties/Resources.resx @@ -1,142 +1,143 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\default_cross_domain.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\server.properties;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\Versioning\GitCommit;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\Versioning\GitTag;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\Versioning\GitBranch;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\Versioning\BuildDate;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - ..\Resources\Versioning\BuildTime;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\default_cross_domain.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\server.properties;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Versioning\GitCommit;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Versioning\GitTag;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Versioning\GitBranch;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Versioning\BuildDate;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Versioning\BuildTime;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/Properties/launchSettings.json b/HorseIsleServer/LibHISP/Properties/launchSettings.json old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Resources/default_cross_domain.xml b/HorseIsleServer/LibHISP/Resources/default_cross_domain.xml old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Resources/server.properties b/HorseIsleServer/LibHISP/Resources/server.properties old mode 100755 new mode 100644 index 8797574..5e1a8cb --- a/HorseIsleServer/LibHISP/Resources/server.properties +++ b/HorseIsleServer/LibHISP/Resources/server.properties @@ -1,13 +1,5 @@ # ======================= -# Horse Isle Server Configuration -# ======================= -# -# HISP was Created and Developed by Li / SilicaAndPina -# However it is NOT COPYRIGHTED! This software is in the Public Domain! -# - -# ======================= -# Network +# Server Configuration # ======================= # Ip address the server will bind to (default: 0.0.0.0 ALL INTERFACES) @@ -18,15 +10,6 @@ ip=0.0.0.0 # running on the same port, so i prefer 12321. port=12321 -# Listen for WebSockets as well as raw Flash XMLSocket Connection -# If this feature is enabled, players can play Horse Isle -# on HTML5 and WebAssembly with a fork of the Ruffle Flash Player Emulator -enable_websocket=true - -# ======================= -# Database -# ======================= - # MariaDB Database Information # For best performance, the database should be hosted on the SAME MACHINE as the HISP server. # Or atleast, on a local network. @@ -39,6 +22,14 @@ db_port=3306 # Connect to a sqllite database instead of a sql server. sql_lite=false +# File that contains the map tile data +# the default was downloaded from the original server +map=HI1.MAP + +# This file contains all definitions in the game +# such as items, horses. and quest data. +gamedata=gamedata.json + # ======================= # Security # ======================= @@ -74,15 +65,6 @@ enable_spam_filter=true # Misc Settings. # ======================= -# File that contains the map tile data -# the default was downloaded from the original server -map=HI1.MAP - -# This folder contains all definitions in the game -# such as items, horses. and quest data. -# NOTE: This can be a folder or a file. -gamedata=gamedata - # Should the server consider all users "Subscribers" # (warning: makes ranches be in use forever.) all_users_subscribed=false diff --git a/HorseIsleServer/LibHISP/Security/Authentication.cs b/HorseIsleServer/LibHISP/Security/Authentication.cs old mode 100755 new mode 100644 index 0fb02bf..b74cce3 --- a/HorseIsleServer/LibHISP/Security/Authentication.cs +++ b/HorseIsleServer/LibHISP/Security/Authentication.cs @@ -1,141 +1,88 @@ - -using System.Security.Cryptography; -using System.Text; -using System.Linq; - -using HISP.Server; -using System; -using HISP.Util; - -namespace HISP.Security -{ - public class Authentication - { - - public const string ROTPOOL = "bl7Jgk61IZdnY mfDN5zjM2XLqTCty4WSEoKR3BFVQsaUhHOAx0rPwp9uc8iGve"; - public const string POSPOOL = "DQc3uxiGsKZatMmOS5qYveN71zoPTk8yU0H2w9VjprBXWn l4FJd6IRbhgACfEL"; - - public static string EncryptLogin(string plainpass) - { - string encrypt = ""; - - int i = 0; - while (i < plainpass.Length) - { - int rotation = GameServer.RandomNumberGenerator.Next(0, ROTPOOL.Length); - int position = ROTPOOL.IndexOf(plainpass[i]); - - position = position + (rotation + i); - while (position >= ROTPOOL.Length) - position -= ROTPOOL.Length; - encrypt += ROTPOOL[rotation]; - encrypt += POSPOOL[position]; - - i++; - } - return encrypt; - - } - public static string DecryptLogin(string encpass) - { - string decrypt = ""; - - int i = 0; - int rotationCycle = 0; - while (i < encpass.Length) - { - int rotation = ROTPOOL.IndexOf(encpass[i].ToString()); - int position = POSPOOL.IndexOf(encpass[i + 1].ToString()); - position -= (rotation + rotationCycle); - if (position < 0) - { - position = (position / -1) - 1; - - while (position >= ROTPOOL.Length) - position -= ROTPOOL.Length; - - decrypt += Helper.ReverseString(ROTPOOL)[position]; - } - else - { - while (position >= ROTPOOL.Length) - position -= ROTPOOL.Length; - - decrypt += ROTPOOL[position]; - } - - i += 2; - rotationCycle++; - } - return decrypt.Replace(" ", ""); - } - - public static byte[] Sha1Digest(byte[] message) - { - using (SHA1 sha1 = SHA1.Create()) - return sha1.ComputeHash(message); - } - - - public static byte[] Sha512Digest(byte[] message) - { - using (SHA512 sha512 = SHA512.Create()) - return sha512.ComputeHash(message); - } - - public static byte[] XorBytes(byte[] plaintext, byte[] key) - { - int length = Math.Min(plaintext.Length, key.Length); - - byte[] ciphertext = new byte[length]; - for(int i = 0; i < length; i++) - ciphertext[i] = Convert.ToByte(plaintext[i] ^ key[i]); - - return ciphertext; - } - - public static byte[] HashAndSalt(string plaintext, byte[] salt) - { - byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext); - - byte[] hash = Sha512Digest(plaintextBytes); - byte[] saltedHash = XorBytes(hash, salt); - byte[] finalHash = Sha512Digest(saltedHash); - - return finalHash; - } - - public static bool CheckPassword(string username, string password) - { - if(Database.CheckUserExist(username)) - { - byte[] expectedPassword = Database.GetPasswordHash(username); - byte[] salt = Database.GetPasswordSalt(username); - byte[] hashedPassword = HashAndSalt(password, salt); - - if (Enumerable.SequenceEqual(expectedPassword, hashedPassword)) - return true; - } - return false; - } - - public static int CreateAccount(string username, string password, string gender, bool admin, bool moderator) - { - // Get a free user id - int userId = Database.GetNextFreeUserId(); - - // Generate salt value - byte[] salt = new byte[64]; - GameServer.RandomNumberGenerator.NextBytes(salt); - string saltText = BitConverter.ToString(salt).Replace("-", ""); - string hashsalt = BitConverter.ToString(Authentication.HashAndSalt(password, salt)).Replace("-", ""); - - // Add user to database - Database.CreateUser(userId, username, hashsalt, saltText, gender, admin, moderator); - - return userId; - } - - - } -} + +using System.Security.Cryptography; +using System.Text; +using System.Linq; + +using HISP.Server; + +namespace HISP.Security +{ + public class Authentication + { + public static string DecryptLogin(string encpass) + { + string decrypt = ""; + string ROTPOOL = "bl7Jgk61IZdnY mfDN5zjM2XLqTCty4WSEoKR3BFVQsaUhHOAx0rPwp9uc8iGve"; + string POSPOOL = "DQc3uxiGsKZatMmOS5qYveN71zoPTk8yU0H2w9VjprBXWn l4FJd6IRbhgACfEL"; + string ROTPOOL2 = "evGi8cu9pwPr0xAOHhUasQVFB3RKoESW4ytCTqLX2Mjz5NDfm YndZI16kgJ7lb"; + + + int i = 0; + int ii = 0; + while (i < encpass.Length) + { + int ROT = ROTPOOL.IndexOf(encpass[i].ToString()); + int POS = POSPOOL.IndexOf(encpass[i + 1].ToString()); + POS -= (ROT + ii); + if (POS < 0) + { + POS = (POS / -1) - 1; + + while (POS >= ROTPOOL.Length) + { + POS -= ROTPOOL.Length; + } + + decrypt += ROTPOOL2[POS]; + } + else + { + while (POS >= ROTPOOL.Length) + { + POS -= ROTPOOL.Length; + } + + decrypt += ROTPOOL[POS]; + } + + i += 2; + ii += 1; + } + return decrypt.Replace(" ", ""); + } + + + + public static byte[] HashAndSalt(string plaintext, byte[] salt) + { + byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext); + + SHA512 sha512 = SHA512.Create(); + byte[] hash = sha512.ComputeHash(plaintextBytes); + + for (int i = 0; i < hash.Length; i++) + { + hash[i] ^= salt[i]; + } + + byte[] finalHash = sha512.ComputeHash(hash); + + return finalHash; + } + + public static bool CheckPassword(string username, string password) + { + if(Database.CheckUserExist(username)) + { + byte[] expectedPassword = Database.GetPasswordHash(username); + byte[] salt = Database.GetPasswordSalt(username); + byte[] hashedPassword = HashAndSalt(password, salt); + + if (Enumerable.SequenceEqual(expectedPassword, hashedPassword)) + return true; + } + return false; + } + + } +} diff --git a/HorseIsleServer/LibHISP/Security/BBCode.cs b/HorseIsleServer/LibHISP/Security/BBCode.cs old mode 100755 new mode 100644 diff --git a/HorseIsleServer/LibHISP/Security/CrossDomainPolicy.cs b/HorseIsleServer/LibHISP/Security/CrossDomainPolicy.cs old mode 100755 new mode 100644 index 75ab62a..ef84fe1 --- a/HorseIsleServer/LibHISP/Security/CrossDomainPolicy.cs +++ b/HorseIsleServer/LibHISP/Security/CrossDomainPolicy.cs @@ -5,14 +5,24 @@ namespace HISP.Security { public class CrossDomainPolicy { - public static byte[] GetPolicyFile() + public static byte[] GetPolicy() { if (!File.Exists(ConfigReader.CrossDomainPolicyFile)) { Logger.InfoPrint("Cross-Domain-Policy file not found, using default"); File.WriteAllText(ConfigReader.CrossDomainPolicyFile, Resources.DefaultCrossDomain); - } + } + + + MemoryStream ms = new MemoryStream(); byte[] policyFileBytes = File.ReadAllBytes(ConfigReader.CrossDomainPolicyFile); - return policyFileBytes; + ms.Write(policyFileBytes, 0x00, policyFileBytes.Length); + ms.WriteByte(0x00); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] policyFileData = ms.ToArray(); + ms.Close(); + + return policyFileData; } } } diff --git a/HorseIsleServer/LibHISP/Security/RandomID.cs b/HorseIsleServer/LibHISP/Security/RandomID.cs old mode 100755 new mode 100644 index d64d203..20ec693 --- a/HorseIsleServer/LibHISP/Security/RandomID.cs +++ b/HorseIsleServer/LibHISP/Security/RandomID.cs @@ -1,27 +1,21 @@ -using System.Threading; - -namespace HISP.Security -{ - public class RandomID - { - private static Mutex rndmIdMutex = new Mutex(); - private static int prevId = 0; - public static int NextRandomId(int randomId=-1) - { - int rndmId = 0; - rndmIdMutex.WaitOne(); - - if (randomId == -1) - rndmId = prevId+1; - else - rndmId = randomId; - - if (rndmId >= prevId) - prevId = rndmId; - - rndmIdMutex.ReleaseMutex(); - - return rndmId; - } - } -} +namespace HISP.Security +{ + public class RandomID + { + private static int prevId = 0; + public static int NextRandomId(int randomId=-1) + { + int rndmId = 0; + + if (randomId == -1) + rndmId = prevId+1; + else + rndmId = randomId; + + if (rndmId >= prevId) + prevId = rndmId; + + return rndmId; + } + } +} diff --git a/HorseIsleServer/LibHISP/Server/ConfigReader.cs b/HorseIsleServer/LibHISP/Server/ConfigReader.cs old mode 100755 new mode 100644 index e0cf3fc..4756a8a --- a/HorseIsleServer/LibHISP/Server/ConfigReader.cs +++ b/HorseIsleServer/LibHISP/Server/ConfigReader.cs @@ -1,142 +1,137 @@ -using HISP.Properties; -using System.IO; - -namespace HISP.Server -{ - - public class ConfigReader - { - public static int Port = 12321; - public static string BindIP = "0.0.0.0"; - - public static string DatabaseIP = "127.0.0.1"; - public static string DatabaseName = "game1"; - public static string DatabaseUsername = "root"; - public static string DatabasePassword = "test123"; - - public static int DatabasePort = 3306; - public static int IntrestRate = 3333; - public static string Motd = "April 11, 2020. New breed, Camarillo White Horse. Two new quests."; - public static string MapFile = "HI1.MAP"; - public static string GameData = "gamedata.json"; - public static string CrossDomainPolicyFile = "CrossDomainPolicy.xml"; - - public static int LogLevel = 4; - - public static bool SqlLite = false; - public static bool EnableSpamFilter = true; - public static bool AllUsersSubbed = false; - public static bool FixOfficalBugs = false; - public static bool EnableSwearFilter = true; - public static bool EnableCorrections = true; - public static bool EnableNonViolations = true; - - public static bool EnableWebSocket = true; - - public static string ConfigurationFileName = "server.properties"; - public static void OpenConfig() - { - if (!File.Exists(ConfigurationFileName)) - { - Logger.WarnPrint(ConfigurationFileName+" not found! writing default."); - File.WriteAllText(ConfigurationFileName, Resources.DefaultServerProperties); - Logger.WarnPrint("! Its very likely database connection will fail..."); - } - - string[] configFile = File.ReadAllLines(ConfigurationFileName); - foreach (string setting in configFile) - { - /* - * Avoid crashing. - */ - if (setting.Length < 1) - continue; - if (setting[0] == '#') - continue; - if (!setting.Contains("=")) - continue; - - string[] dataPair = setting.Split('='); - - string key = dataPair[0]; - string data = dataPair[1]; - /* - * Parse configuration file - */ - - switch (key) - { - case "port": - Port = int.Parse(data); - break; - case "ip": - BindIP = data; - break; - case "db_ip": - DatabaseIP = data; - break; - case "db_username": - DatabaseUsername = data; - break; - case "db_password": - DatabasePassword = data; - break; - case "db_name": - DatabaseName = data; - break; - case "db_port": - DatabasePort = int.Parse(data); - break; - case "map": - MapFile = data; - break; - case "motd": - Motd = data; - break; - case "gamedata": - GameData = data; - break; - case "crossdomain": - CrossDomainPolicyFile = data; - break; - case "all_users_subscribed": - AllUsersSubbed = (data == "true"); - break; - case "enable_corrections": - EnableCorrections = (data == "true"); - break; - case "sql_lite": - SqlLite = (data == "true"); - break; - case "enable_non_violation_check": - EnableNonViolations = (data == "true"); - break; - case "enable_spam_filter": - EnableSpamFilter = (data == "true"); - break; - case "enable_websocket": - EnableWebSocket = (data == "true"); - break; - case "fix_offical_bugs": - FixOfficalBugs = (data == "true"); - break; - case "enable_word_filter": - EnableSwearFilter = (data == "true"); - break; - case "intrest_rate": - IntrestRate = int.Parse(data); - break; - case "log_level": - LogLevel = int.Parse(data); - break; - } - - - - } - - - } - - } -} +using HISP.Properties; +using System.IO; + +namespace HISP.Server +{ + + public class ConfigReader + { + public static int Port = 12321; + public static string BindIP = "0.0.0.0"; + + public static string DatabaseIP = "127.0.0.1"; + public static string DatabaseName = "game1"; + public static string DatabaseUsername = "root"; + public static string DatabasePassword = "test123"; + + public static int DatabasePort = 3306; + public static int IntrestRate = 3333; + public static string Motd = "April 11, 2020. New breed, Camarillo White Horse. Two new quests."; + public static string MapFile = "HI1.MAP"; + public static string GameDataFile = "gamedata.json"; + public static string CrossDomainPolicyFile = "CrossDomainPolicy.xml"; + + public static int LogLevel = 4; + + public static bool SqlLite = false; + public static bool EnableSpamFilter = true; + public static bool AllUsersSubbed = false; + public static bool FixOfficalBugs = false; + public static bool BadWords = true; + public static bool DoCorrections = true; + public static bool DoNonViolations = true; + + public static string ConfigurationFileName = "server.properties"; + public static void OpenConfig() + { + if (!File.Exists(ConfigurationFileName)) + { + Logger.WarnPrint(ConfigurationFileName+" not found! writing default."); + File.WriteAllText(ConfigurationFileName, Resources.DefaultServerProperties); + Logger.WarnPrint("! Its very likely database connection will fail..."); + } + + string[] configFile = File.ReadAllLines(ConfigurationFileName); + foreach (string setting in configFile) + { + /* + * Avoid crashing. + */ + if (setting.Length < 1) + continue; + if (setting[0] == '#') + continue; + if (!setting.Contains("=")) + continue; + + string[] dataPair = setting.Split('='); + + string key = dataPair[0]; + string data = dataPair[1]; + /* + * Parse configuration file + */ + + switch (key) + { + case "port": + Port = int.Parse(data); + break; + case "ip": + BindIP = data; + break; + case "db_ip": + DatabaseIP = data; + break; + case "db_username": + DatabaseUsername = data; + break; + case "db_password": + DatabasePassword = data; + break; + case "db_name": + DatabaseName = data; + break; + case "db_port": + DatabasePort = int.Parse(data); + break; + case "map": + MapFile = data; + break; + case "motd": + Motd = data; + break; + case "gamedata": + GameDataFile = data; + break; + case "crossdomain": + CrossDomainPolicyFile = data; + break; + case "all_users_subscribed": + AllUsersSubbed = data == "true"; + break; + case "enable_corrections": + DoCorrections = data == "true"; + break; + case "sql_lite": + SqlLite = data == "true"; + break; + case "enable_non_violation_check": + DoNonViolations = data == "true"; + break; + case "enable_spam_filter": + EnableSpamFilter = data == "true"; + break; + case "fix_offical_bugs": + FixOfficalBugs = data == "true"; + break; + case "enable_word_filter": + BadWords = data == "true"; + break; + case "intrest_rate": + IntrestRate = int.Parse(data); + break; + case "log_level": + LogLevel = int.Parse(data); + break; + } + + + + } + + + } + + } +} diff --git a/HorseIsleServer/LibHISP/Server/DataFixerUpper.cs b/HorseIsleServer/LibHISP/Server/DataFixerUpper.cs deleted file mode 100755 index eae0151..0000000 --- a/HorseIsleServer/LibHISP/Server/DataFixerUpper.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; - -namespace HISP.Server -{ - static class DataFixerUpper - { - private static void fixupVersion1_0() - { - // Add total logins column to UserExt - Database.TryExecuteSqlQuery("ALTER TABLE UserExt ADD COLUMN TotalLogins INT;"); - Database.TryExecuteSqlQuery("UPDATE UserExt SET TotalLogins=0;"); - - // Add New column to OnlineUsers. - Database.TryExecuteSqlQuery("ALTER TABLE OnlineUsers ADD COLUMN New TEXT(3);"); - Database.TryExecuteSqlQuery("UPDATE OnlineUsers SET New=\"NO\";"); - - // Alter sizes - Database.TryExecuteSqlQuery("ALTER TABLE UserExt CHANGE COLUMN ProfilePage ProfilePage TEXT(4000);"); - Database.TryExecuteSqlQuery("ALTER TABLE UserExt CHANGE COLUMN PrivateNotes PrivateNotes TEXT(65535);"); - Database.TryExecuteSqlQuery("ALTER TABLE MailBox CHANGE COLUMN Subject Subject TEXT(100);"); - Database.TryExecuteSqlQuery("ALTER TABLE MailBox CHANGE COLUMN Message Message TEXT(65535);"); - Database.TryExecuteSqlQuery("ALTER TABLE Horses CHANGE COLUMN description description TEXT(4000);"); - Database.TryExecuteSqlQuery("ALTER TABLE WildHorse CHANGE COLUMN description description TEXT(4000);"); - Database.TryExecuteSqlQuery("ALTER TABLE Ranches CHANGE COLUMN title title TEXT(50);"); - Database.TryExecuteSqlQuery("ALTER TABLE Ranches CHANGE COLUMN description description TEXT(250);"); - } - - private static void fixupVersion1_1() - { - // Add data column to shop to ShopInventory - Database.TryExecuteSqlQuery("ALTER TABLE ShopInventory ADD COLUMN Data INT;"); - Database.TryExecuteSqlQuery("UPDATE ShopInventory SET Data=0;"); - } - - private static void fixupVersion1_7_20() - { - // Add LastLoadedInVersion column to World. - Database.TryExecuteSqlQuery("ALTER TABLE World ADD COLUMN LastLoadedInVersion TEXT(64)"); - Database.TryExecuteSqlQuery("UPDATE World SET LastLoadedInVersion=\"v1.7.20\";"); - } - - public static void FixUpDb() - { - string lastVersionStr = Database.GetLastLoadedVersion(); - string currentVersionStr = ServerVersion.GetVersionString(); - - int lastVersion = Convert.ToInt32(Int32.Parse(lastVersionStr.ToLower().Replace("v", "").Replace(".", ""))); - int currentVersion = Convert.ToInt32(Int32.Parse(currentVersionStr.ToLower().Replace("v", "").Replace(".", ""))); - - if(currentVersion > lastVersion) - { - Logger.WarnPrint("Migrating Database from " + lastVersionStr + " to " + currentVersionStr); - - if (lastVersion <= 10) fixupVersion1_0(); - if (lastVersion <= 11) fixupVersion1_1(); - if (lastVersion <= 1720) fixupVersion1_7_20(); - - Database.SetLastLoadedVersion(ServerVersion.GetVersionString()); - } - } - } -} diff --git a/HorseIsleServer/LibHISP/Server/Database.cs b/HorseIsleServer/LibHISP/Server/Database.cs old mode 100755 new mode 100644 index a90d761..f9c0edb --- a/HorseIsleServer/LibHISP/Server/Database.cs +++ b/HorseIsleServer/LibHISP/Server/Database.cs @@ -1,6359 +1,6193 @@ -using System; -using System.Collections.Generic; -using System.Data.Common; - -using HISP.Game; -using HISP.Player; -using HISP.Game.Horse; -using HISP.Game.Inventory; -using HISP.Game.Items; -using HISP.Security; -using HISP.Game.Services; -using HISP.Game.SwfModules; - -using MySqlConnector; -using Microsoft.Data.Sqlite; -using SQLitePCL; -using HISP.Util; - -namespace HISP.Server -{ - public class Database - { - public static string ConnectionString = ""; - private static int addWithValue(DbCommand cmd, string param, object value) - { - DbParameter parameter = cmd.CreateParameter(); - parameter.ParameterName = param; - - if (value == null) - parameter.Value = DBNull.Value; - else - parameter.Value = value; - - return cmd.Parameters.Add(parameter); - } - - private static DbConnection connectDb() - { +using System; +using System.Collections.Generic; +using System.Data.Common; + +using HISP.Game; +using HISP.Player; +using HISP.Game.Horse; +using HISP.Game.Inventory; +using HISP.Game.Items; +using HISP.Security; +using HISP.Game.Services; +using HISP.Game.SwfModules; + +using MySqlConnector; +using Microsoft.Data.Sqlite; + +namespace HISP.Server +{ + public class Database + { + public static string ConnectionString = ""; + private static int addWithValue(DbCommand cmd, string param, object value) + { + DbParameter parameter = cmd.CreateParameter(); + parameter.ParameterName = param; + + if (value == null) + parameter.Value = DBNull.Value; + else + parameter.Value = value; + + return cmd.Parameters.Add(parameter); + } + + private static DbConnection connectDb() + { + if (!ConfigReader.SqlLite) + return new MySqlConnection(ConnectionString); + else + return new SqliteConnection(ConnectionString); + } + + public static void OnShutdown() + { + MySqlConnection.ClearAllPools(); + SqliteConnection.ClearAllPools(); + } + + public static void OpenDatabase() + { if (!ConfigReader.SqlLite) - return new MySqlConnection(ConnectionString); + ConnectionString = "server=" + ConfigReader.DatabaseIP + ";user=" + ConfigReader.DatabaseUsername + ";password=" + ConfigReader.DatabasePassword + ";database=" + ConfigReader.DatabaseName; else - return new SqliteConnection(ConnectionString); - } - - public static void OnShutdown() - { - - if(!ConfigReader.SqlLite) - MySqlConnection.ClearAllPools(); - else - SqliteConnection.ClearAllPools(); - - } - - public static bool TryExecuteSqlQuery(string query) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = query; - try - { - sqlCommand.ExecuteNonQuery(); - return true; - } - catch (Exception) - { - return false; - }; - } - } - public static void OpenDatabase() - { - if (!ConfigReader.SqlLite) - { - ConnectionString = "server=" + ConfigReader.DatabaseIP + ";user=" + ConfigReader.DatabaseUsername + ";password=" + ConfigReader.DatabasePassword + ";database=" + ConfigReader.DatabaseName; - - } - else - { - ConnectionString = "Data Source=\"" + ConfigReader.DatabaseName + ".db\";"; - Batteries.Init(); - } - - - using (DbConnection db = connectDb()) - { - - try - { - db.Open(); - } - catch (DbException e) - { - Logger.ErrorPrint("Failed to connect to Database: "+e.Message); - Environment.Exit(1); - } - - string SqlPragma = "PRAGMA journal_mode=WAL;"; - - string UserTable = "CREATE TABLE IF NOT EXISTS Users(Id INT, Username TEXT(16), PassHash TEXT(128), Salt TEXT(128), Gender TEXT(16), Admin TEXT(3), Moderator TEXT(3))"; - string ExtTable = "CREATE TABLE IF NOT EXISTS UserExt(Id INT, X INT, Y INT, LastLogin INT, Money INT, QuestPoints INT, BankBalance DOUBLE, BankInterest DOUBLE, ProfilePage Text(4000),IpAddress TEXT(1028),PrivateNotes Text(65535), CharId INT, ChatViolations INT,Subscriber TEXT(3), SubscribedUntil INT, Experience INT, Tiredness INT, Hunger INT, Thirst INT, FreeMinutes INT, TotalLogins INT)"; - string MailTable = "CREATE TABLE IF NOT EXISTS Mailbox(RandomId INT, IdTo INT, IdFrom INT, Subject TEXT(100), Message Text(65535), TimeSent INT, BeenRead TEXT(3))"; - string BuddyTable = "CREATE TABLE IF NOT EXISTS BuddyList(Id INT, IdFriend INT)"; - string MessageQueue = "CREATE TABLE IF NOT EXISTS MessageQueue(Id INT, Message TEXT(1028))"; - string WorldTable = "CREATE TABLE IF NOT EXISTS World(Time INT, Day INT, Year INT, StartTime INT, LastLoadedInVersion TEXT(64))"; - string WeatherTable = "CREATE TABLE IF NOT EXISTS Weather(Area TEXT(1028), Weather TEXT(64))"; - string InventoryTable = "CREATE TABLE IF NOT EXISTS Inventory(PlayerID INT, RandomID INT, ItemID INT, Data INT)"; - string ShopInventory = "CREATE TABLE IF NOT EXISTS ShopInventory(ShopID INT, RandomID INT, ItemID INT, Data INT)"; - string DroppedItems = "CREATE TABLE IF NOT EXISTS DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT, Data INT)"; - string TrackedQuest = "CREATE TABLE IF NOT EXISTS TrackedQuest(playerId INT, questId INT, timesCompleted INT)"; - string CompetitionGear = "CREATE TABLE IF NOT EXISTS CompetitionGear(playerId INT, headItem INT, bodyItem INT, legItem INT, feetItem INT)"; - string Awards = "CREATE TABLE IF NOT EXISTS Awards(playerId INT, awardId INT)"; - string Jewelry = "CREATE TABLE IF NOT EXISTS Jewelry(playerId INT, slot1 INT, slot2 INT, slot3 INT, slot4 INT)"; - string AbuseReorts = "CREATE TABLE IF NOT EXISTS AbuseReports(ReportCreator TEXT(1028), Reporting TEXT(1028), ReportReason TEXT(1028))"; - string Leaderboards = "CREATE TABLE IF NOT EXISTS Leaderboards(playerId INT, minigame TEXT(128), wins INT, looses INT, timesplayed INT, score INT, type TEXT(128))"; - string NpcStartPoint = "CREATE TABLE IF NOT EXISTS NpcStartPoint(playerId INT, npcId INT, chatpointId INT)"; - string NpcPos = "CREATE TABLE IF NOT EXISTS NpcPos(npcId INT, X INT, Y INT, UdlrPointer INT)"; - string PoetryRooms = "CREATE TABLE IF NOT EXISTS PoetryRooms(poetId INT, X INT, Y INT, roomId INT)"; - string SavedDrawings = "CREATE TABLE IF NOT EXISTS SavedDrawings(playerId INT, Drawing1 TEXT(65535), Drawing2 TEXT(65535), Drawing3 TEXT(65535))"; - string DrawingRooms = "CREATE TABLE IF NOT EXISTS DrawingRooms(roomId INT, Drawing TEXT(65535))"; - string DressupRooms = "CREATE TABLE IF NOT EXISTS DressupRooms(roomId INT, peiceId INT, active TEXT(3), x INT, y INT)"; - string Horses = "CREATE TABLE IF NOT EXISTS Horses(randomId INT, ownerId INT, leaseTime INT, leaser INT, breed INT, name TEXT(128), description TEXT(4000), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, autoSell INT, trainTimer INT, category TEXT(128), spoiled INT, magicUsed INT, hidden TEXT(3))"; - string WildHorse = "CREATE TABLE IF NOT EXISTS WildHorse(randomId INT, originalOwner INT, breed INT, x INT, y INT, name TEXT(128), description TEXT(4000), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, timeout INT, autoSell INT, trainTimer INT, category TEXT(128), spoiled INT, magicUsed INT)"; - string LastPlayer = "CREATE TABLE IF NOT EXISTS LastPlayer(roomId TEXT(1028), playerId INT)"; - string SolvedRealTimeRiddles = "CREATE TABLE IF NOT EXISTS SolvedRealTimeRiddles(playerId INT, riddleId INT)"; - string TrackingStats = "CREATE TABLE IF NOT EXISTS Tracking(playerId INT, what TEXT(128), count INT)"; - string Treasure = "CREATE TABLE IF NOT EXISTS Treasure(randomId INT, x INT, y INT, value INT, type TEXT(128))"; - string Ranches = "CREATE TABLE IF NOT EXISTS Ranches(ranchId INT, playerId INT, title TEXT(50), description TEXT(250), upgradeLevel INT, building1 INT, building2 INT, building3 INT, building4 INT, building5 INT, building6 INT, building7 INT, building8 INT, building9 INT, building10 INT, building11 INT, building12 INT, building13 INT, building14 INT, building15 INT, building16 INT, investedMoney INT)"; - string BannedPlayers = "CREATE TABLE IF NOT EXISTS BannedPlayers(playerId INT, ipAddress TEXT(1028), reason TEXT(1028))"; - string RiddlesComplete = "CREATE TABLE IF NOT EXISTS RiddlesComplete(playerId INT, riddleId INT, solved TEXT(1028))"; - string AuctionTable = "CREATE TABLE IF NOT EXISTS Auctions(roomId INT, randomId INT, horseRandomId INT, ownerId INT, timeRemaining INT, highestBid INT, highestBidder INT, Done TEXT(3))"; - string SolvedRealTimeRiddle = "CREATE TABLE IF NOT EXISTS SolvedRealTimeRiddles(playerId INT, riddleId INT)"; - string MutedPlayers = "CREATE TABLE IF NOT EXISTS MutedPlayers(playerId INT, mutePlayerId INT)"; - string ItemQueue = "CREATE TABLE IF NOT EXISTS ItemPurchaseQueue(playerId INT, itemId INT, count INT)"; - string DeleteOnlineUsers = "DROP TABLE OnlineUsers"; - string OnlineUsers = "CREATE TABLE IF NOT EXISTS OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3), New TEXT(3))"; - - if (ConfigReader.SqlLite) - { - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = SqlPragma; - sqlCommand.ExecuteNonQuery(); - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - } - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = ItemQueue; - sqlCommand.ExecuteNonQuery(); - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = SolvedRealTimeRiddles; - sqlCommand.ExecuteNonQuery(); - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = MutedPlayers; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = MessageQueue; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = SolvedRealTimeRiddle; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = DressupRooms; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = AuctionTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = NpcPos; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = RiddlesComplete; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Ranches; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Treasure; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = SavedDrawings; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = DrawingRooms; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = TrackingStats; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Horses; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = UserTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = AbuseReorts; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = ExtTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = MailTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = BuddyTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Jewelry; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = WeatherTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Awards; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = DroppedItems; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = InventoryTable; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = ShopInventory; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = TrackedQuest; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = PoetryRooms; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = BannedPlayers; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = CompetitionGear; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = NpcStartPoint; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = LastPlayer; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = WildHorse; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = WorldTable; - sqlCommand.ExecuteNonQuery(); - - sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO World VALUES(0,0,0,@startDate,@version)"; - addWithValue(sqlCommand, "@startDate", (UInt32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); - addWithValue(sqlCommand, "@version", ServerVersion.GetVersionString()); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = Leaderboards; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = DeleteOnlineUsers; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - - try - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = OnlineUsers; - sqlCommand.ExecuteNonQuery(); - - } - catch (Exception e) - { - Logger.WarnPrint(e.Message); - }; - } - - DataFixerUpper.FixUpDb(); - } - - public static void DeleteRanchOwner(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int[] GetMutedPlayers(int playerId) - { - List MutedPlayerIds = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT mutePlayerId FROM MutedPlayers WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - MutedPlayerIds.Add(reader.GetInt32(0)); - - } - return MutedPlayerIds.ToArray(); - } - public static void AddMutedPlayer(int playerId, int playerToMute) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO MutedPlayers VALUES(@playerId, @mutedPlayerId)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@mutedPlayerId", playerToMute); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void DeleteMutedPlayer(int playerId, int playerToMute) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM MutedPlayers WHERE playerId=@playerId AND mutePlayerId=@mutedPlayerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@mutedPlayerId", playerToMute); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static bool IsRanchOwned(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - } - - public static void ClearItemPurchaseQueue(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM ItemPurchaseQueue WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static Item.ItemPurchaseQueueItem[] GetItemPurchaseQueue(int playerId) - { - List queueItems = new List(); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM ItemPurchaseQueue WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - Item.ItemPurchaseQueueItem itm = new Item.ItemPurchaseQueueItem(); - itm.ItemId = reader.GetInt32(1); - itm.ItemCount = reader.GetInt32(2); - queueItems.Add(itm); - } - - } - return queueItems.ToArray(); - } - - public static void CreateDressupRoomPeice(int roomId, int peiceId, bool active, int x, int y) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO DressupRooms VALUES(@roomId, @peiceId, @active, @x, @y)"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@peiceId", peiceId); - addWithValue(sqlCommand, "@active", active ? "YES" : "NO"); - addWithValue(sqlCommand, "@x", x); - addWithValue(sqlCommand, "@y", y); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void AddMessageToQueue(int userId, string message) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO MessageQueue VALUES(@id,@message)"; - addWithValue(sqlCommand, "@id", userId); - addWithValue(sqlCommand, "@message", message); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void ClearMessageQueue(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM MessageQueue WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static string[] GetMessageQueue(int userId) - { - List msgQueue = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT message FROM MessageQueue WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - msgQueue.Add(reader.GetString(0)); - } - - } - return msgQueue.ToArray(); - } - - public static void SetDressupRoomPeiceX(int roomId, int peiceId, int newX) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE DressupRooms SET x=@x WHERE roomId=@roomId AND peiceId=@peiceId"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@peiceId", peiceId); - addWithValue(sqlCommand, "@x", newX); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetDressupRoomPeiceY(int roomId, int peiceId, int newY) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE DressupRooms SET y=@y WHERE roomId=@roomId AND peiceId=@peiceId"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@peiceId", peiceId); - addWithValue(sqlCommand, "@y", newY); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetDressupRoomPeiceActive(int roomId, int peiceId, bool active) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE DressupRooms SET active=@active WHERE roomId=@roomId AND peiceId=@peiceId"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@peiceId", peiceId); - addWithValue(sqlCommand, "@active", active ? "YES" : "NO"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static Dressup.DressupPeice[] LoadDressupRoom(Dressup.DressupRoom room) - { - List peices = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM DressupRooms WHERE roomId=@roomId"; - addWithValue(sqlCommand, "@roomId", room.RoomId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - int peiceId = reader.GetInt32(1); - bool active = reader.GetString(2) == "YES"; - int x = reader.GetInt32(3); - int y = reader.GetInt32(4); - Dressup.DressupPeice peice = new Dressup.DressupPeice(room, peiceId, x, y, active, false); - peices.Add(peice); - } - - } - return peices.ToArray(); - } - - public static int[] GetSolvedRealTimeRiddles(int playerId) - { - List solvedRiddleId = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT riddleId FROM SolvedRealTimeRiddles WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - solvedRiddleId.Add(reader.GetInt32(0)); - } - - return solvedRiddleId.ToArray(); - } - } - - public static int GetRanchInvestment(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT investedMoney FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int invested = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return invested; - } - } - public static void SetRanchUpgradeLevel(int ranchId, int upgradeLevel) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET upgradeLevel=@upgradeLevel WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@upgradeLevel", upgradeLevel); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchInvestment(int ranchId, int investedMoney) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET investedMoney=@investedMoney WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@investedMoney", investedMoney); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchOwner(int ranchId, int ownerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET playerId=@ownerId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@ownerId", ownerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchDescription(int ranchId, string description) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET description=@description WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@description", description); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchTitle(int ranchId, string title) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET title=@title WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@title", title); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding16(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building16=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding15(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building15=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding14(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building14=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding13(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building13=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding12(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building12=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding11(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building11=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding10(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building10=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding9(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building9=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding8(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building8=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding7(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building7=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding6(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building6=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding5(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building5=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding4(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building4=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding3(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building3=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding2(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building2=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetRanchBuilding1(int ranchId, int buildingId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Ranches SET building1=@buildingId WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@buildingId", buildingId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetRanchBuilding16(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building16 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding15(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building15 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding14(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building14 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding13(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building13 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding12(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building12 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding11(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building11 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding10(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building10 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding9(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building9 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding8(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building8 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding7(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building7 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding6(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building6 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding5(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building5 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding4(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building4 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding3(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building3 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding2(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building2 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchBuilding1(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT building1 FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return building; - } - } - public static int GetRanchUpgradeLevel(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT upgradeLevel FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int upgradeLevel = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return upgradeLevel; - } - } - - public static string GetRanchDescription(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT description FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - string description = sqlCommand.ExecuteScalar().ToString(); - - return description; - } - } - public static string GetRanchTitle(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT title FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - string title = sqlCommand.ExecuteScalar().ToString(); - - return title; - } - } - public static int GetRanchOwner(int ranchId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT playerId FROM Ranches WHERE ranchId=@ranchId"; - addWithValue(sqlCommand, "@ranchId", ranchId); - sqlCommand.Prepare(); - int playerId = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return playerId; - } - } - - public static int TotalRiddlesCompletedByPlayer(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM RiddlesComplete WHERE playerId=@playerId AND solved=\"YES\""; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count; - } - } - public static bool HasPlayerCompletedRealTimeRiddle(int riddleId, int playerId) - { - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM SolvedRealTimeRiddles WHERE riddleId=@riddleId AND playerId=@playerId"; - addWithValue(sqlCommand, "@riddleId", riddleId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - - } - public static void CompleteRealTimeRiddle(int riddleId, int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO SolvedRealTimeRiddles VALUES(@playerId, @riddleId)"; - addWithValue(sqlCommand, "@riddleId", riddleId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static bool HasPlayerCompletedRiddle(int riddleId, int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM RiddlesComplete WHERE riddleId=@riddleId AND playerId=@playerId AND solved=\"YES\""; - addWithValue(sqlCommand, "@riddleId", riddleId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - } - public static void CompleteRiddle(int riddleId, int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO RiddlesComplete VALUES(@playerId, @riddleId, \"YES\")"; - addWithValue(sqlCommand, "@riddleId", riddleId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void AddRanch(int ranchId, int playerId, string title, string description, int upgradeLevel, int building1, int building2, int building3, int building4, int building5, int building6, int building7, int building8, int building9, int building10, int building11, int building12, int building13, int building14, int building15, int building16, int investedMoney) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Ranches VALUES(@ranchId, @playerId, @title, @description, @upgradeLevel, @building1, @building2, @building3, @building4, @building5, @building6, @building7, @building8, @building9, @building10, @building11, @building12, @building13, @building14, @building15, @building16, @investedMoney)"; - addWithValue(sqlCommand, "@ranchId", ranchId); - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@title", title); - addWithValue(sqlCommand, "@description", description); - addWithValue(sqlCommand, "@upgradeLevel", upgradeLevel); - addWithValue(sqlCommand, "@building1", building1); - addWithValue(sqlCommand, "@building2", building2); - addWithValue(sqlCommand, "@building3", building3); - addWithValue(sqlCommand, "@building4", building4); - addWithValue(sqlCommand, "@building5", building5); - addWithValue(sqlCommand, "@building6", building6); - addWithValue(sqlCommand, "@building7", building7); - addWithValue(sqlCommand, "@building8", building8); - addWithValue(sqlCommand, "@building9", building9); - addWithValue(sqlCommand, "@building10", building10); - addWithValue(sqlCommand, "@building11", building11); - addWithValue(sqlCommand, "@building12", building12); - addWithValue(sqlCommand, "@building13", building13); - addWithValue(sqlCommand, "@building14", building14); - addWithValue(sqlCommand, "@building15", building15); - addWithValue(sqlCommand, "@building16", building16); - addWithValue(sqlCommand, "@investedMoney", investedMoney); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static void SetTreasureValue(int randomId, int value) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Treasure SET value=@value WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@value", value); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void DeleteTreasure(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Treasure WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void AddTreasure(int randomId, int x, int y, int value, string type) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Treasure VALUES(@randomId, @x, @y, @value, @type)"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@x", x); - addWithValue(sqlCommand, "@y", y); - addWithValue(sqlCommand, "@value", value); - addWithValue(sqlCommand, "@type", type); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static Treasure[] GetTreasures() - { - List treasures = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Treasure"; - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - int randomId = reader.GetInt32(0); - int x = reader.GetInt32(1); - int y = reader.GetInt32(2); - int value = reader.GetInt32(3); - string type = reader.GetString(4); - Treasure treasure = new Treasure(x, y, type, randomId, value); - treasures.Add(treasure); - } - - return treasures.ToArray(); - } - } - - public static void AddTrackedItem(int playerId, Tracking.TrackableItem what, int count) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Tracking VALUES(@playerId, @what, @count)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@what", what.ToString()); - addWithValue(sqlCommand, "@count", count); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static bool HasTrackedItem(int playerId, Tracking.TrackableItem what) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM Tracking WHERE playerId=@playerId AND what=@what"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@what", what.ToString()); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count > 0; - } - } - public static int GetTrackedCount(int playerId, Tracking.TrackableItem what) - { - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT count FROM Tracking WHERE playerId=@playerId AND what=@what"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@what", what.ToString()); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count; - } - } - public static void DeleteAllDroppedItemsWithId(int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE itemId=@itemId"; - addWithValue(sqlCommand, "@itemId", itemId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void DeleteAllItemsFromUsers(int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Inventory WHERE itemId=@itemId"; - addWithValue(sqlCommand, "@itemId", itemId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - - public static void SetTrackedItemCount(int playerId, Tracking.TrackableItem what, int count) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Tracking SET count=@count WHERE playerId=@playerId AND what=@what"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@what", what.ToString()); - addWithValue(sqlCommand, "@count", count); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void AddLastPlayer(string roomId, int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO LastPlayer VALUES(@roomId,@playerId)"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SetWildHorseX(int randomId, int x) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE WildHorse SET x=@x WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@x", x); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetWildHorseTimeout(int randomId, int timeout) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE WildHorse SET timeout=@timeout WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@timeout", timeout); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void RemoveWildHorse(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM WildHorse WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetWildHorseY(int randomId, int x) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE WildHorse SET y=@y WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@y", x); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void RemoveHorse(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Horses WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void AddHorse(HorseInstance horse) - { - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Horses VALUES(@randomId,@originalOwner,@leaseTime,@leaser,@breed,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@autosell,@training,@category,@spoiled,@magicused,@hidden)"; - - addWithValue(sqlCommand, "@randomId", horse.RandomId); - addWithValue(sqlCommand, "@originalOwner", horse.Owner); - addWithValue(sqlCommand, "@leaseTime", horse.LeaseTime); - addWithValue(sqlCommand, "@leaser", horse.Leaser); - addWithValue(sqlCommand, "@breed", horse.Breed.Id); - addWithValue(sqlCommand, "@name", horse.Name); - addWithValue(sqlCommand, "@description", horse.Description); - addWithValue(sqlCommand, "@sex", horse.Gender); - addWithValue(sqlCommand, "@color", horse.Color); - - addWithValue(sqlCommand, "@health", horse.BasicStats.Health); - addWithValue(sqlCommand, "@shoes", horse.BasicStats.Shoes); - addWithValue(sqlCommand, "@hunger", horse.BasicStats.Hunger); - addWithValue(sqlCommand, "@thirst", horse.BasicStats.Thirst); - addWithValue(sqlCommand, "@mood", horse.BasicStats.Mood); - addWithValue(sqlCommand, "@groom", horse.BasicStats.Groom); - addWithValue(sqlCommand, "@tiredness", horse.BasicStats.Tiredness); - addWithValue(sqlCommand, "@experience", horse.BasicStats.Experience); - - addWithValue(sqlCommand, "@speed", horse.AdvancedStats.Speed); - addWithValue(sqlCommand, "@strength", horse.AdvancedStats.Strength); - addWithValue(sqlCommand, "@conformation", horse.AdvancedStats.Conformation); - addWithValue(sqlCommand, "@agility", horse.AdvancedStats.Agility); - addWithValue(sqlCommand, "@endurance", horse.AdvancedStats.Endurance); - addWithValue(sqlCommand, "@inteligence", horse.AdvancedStats.Inteligence); - addWithValue(sqlCommand, "@personality", horse.AdvancedStats.Personality); - addWithValue(sqlCommand, "@height", horse.AdvancedStats.Height); - - if (horse.Equipment.Saddle != null) - addWithValue(sqlCommand, "@saddle", horse.Equipment.Saddle.Id); - else - addWithValue(sqlCommand, "@saddle", null); - - if (horse.Equipment.SaddlePad != null) - addWithValue(sqlCommand, "@saddlepad", horse.Equipment.SaddlePad.Id); - else - addWithValue(sqlCommand, "@saddlepad", null); - - if (horse.Equipment.Bridle != null) - addWithValue(sqlCommand, "@bridle", horse.Equipment.Bridle.Id); - else - addWithValue(sqlCommand, "@bridle", null); - - if (horse.Equipment.Companion != null) - addWithValue(sqlCommand, "@companion", horse.Equipment.Companion.Id); - else - addWithValue(sqlCommand, "@companion", null); - - - - - - addWithValue(sqlCommand, "@autosell", horse.AutoSell); - addWithValue(sqlCommand, "@training", horse.TrainTimer); - addWithValue(sqlCommand, "@category", horse.Category); - addWithValue(sqlCommand, "@spoiled", horse.Spoiled); - addWithValue(sqlCommand, "@magicused", horse.MagicUsed); - - addWithValue(sqlCommand, "@hidden", horse.Hidden ? "YES" : "NO"); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - - } - - public static HorseInstance ReadHorseInstance(DbDataReader reader) - { - int randomId = reader.GetInt32(0); - int breedId = reader.GetInt32(4); - - HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); - string name = reader.GetString(5); - string description = reader.GetString(6); - int spoiled = reader.GetInt32(32); - string category = reader.GetString(31); - int magicUsed = reader.GetInt32(33); - int autosell = reader.GetInt32(29); - int leaseTime = reader.GetInt32(2); - bool hidden = reader.GetString(34) == "YES"; - int owner = reader.GetInt32(1); - string color = reader.GetString(8); - - HorseInstance inst = new HorseInstance(horseBreed, randomId, color, name, description, spoiled, category, magicUsed, autosell, leaseTime, hidden, owner); - - inst.Leaser = reader.GetInt32(3); - inst.Gender = reader.GetString(7); - - - - int health = reader.GetInt32(9); - int shoes = reader.GetInt32(10); - int hunger = reader.GetInt32(11); - int thirst = reader.GetInt32(12); - int mood = reader.GetInt32(13); - int groom = reader.GetInt32(14); - int tiredness = reader.GetInt32(15); - int experience = reader.GetInt32(16); - inst.BasicStats = new HorseInfo.BasicStats(inst, health, shoes, hunger, thirst, mood, groom, tiredness, experience); - - - int speed = reader.GetInt32(17); - int strength = reader.GetInt32(18); - int conformation = reader.GetInt32(19); - int agility = reader.GetInt32(20); - int endurance = reader.GetInt32(21); - int inteligence = reader.GetInt32(22); - int personality = reader.GetInt32(23); - int height = reader.GetInt32(24); - inst.AdvancedStats = new HorseInfo.AdvancedStats(inst, speed, strength, conformation, agility, inteligence, endurance, personality, height); - - if (!reader.IsDBNull(25)) - inst.Equipment.Saddle = Item.GetItemById(reader.GetInt32(25)); - if (!reader.IsDBNull(26)) - inst.Equipment.SaddlePad = Item.GetItemById(reader.GetInt32(26)); - if (!reader.IsDBNull(27)) - inst.Equipment.Bridle = Item.GetItemById(reader.GetInt32(27)); - if (!reader.IsDBNull(28)) - inst.Equipment.Companion = Item.GetItemById(reader.GetInt32(28)); - - - return inst; - } - - public static void LoadHorseInventory(HorseInventory inv, int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while (reader.Read()) - { - inv.AddHorse(ReadHorseInstance(reader), false, true); - } - - - } - } - - public static void LoadAuctionRoom(Auction auction, int roomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Auctions WHERE roomId=@roomId"; - addWithValue(sqlCommand, "@roomId", roomId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while (reader.Read()) - { - int randomId = reader.GetInt32(1); - int timeRemaining = reader.GetInt32(4); - int highestBid = reader.GetInt32(5); - int highestBidder = reader.GetInt32(6); - int horseId = reader.GetInt32(2); - - Auction.AuctionEntry auctionEntry = new Auction.AuctionEntry(timeRemaining, highestBid, highestBidder, randomId); - - auctionEntry.Horse = GetPlayerHorse(horseId); - auctionEntry.OwnerId = reader.GetInt32(3); - auctionEntry.Completed = reader.GetString(7) == "YES"; - auctionEntry.auctionRoomPlacedIn = auction; - auction.AddExistingEntry(auctionEntry); - - } - - - } - } - - public static void DeleteAuctionRoom(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Auctions WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void AddAuctionRoom(Auction.AuctionEntry entry, int roomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Auctions VALUES(@roomId, @randomId, @horseRandomId, @ownerId, @timeRemaining, @highestBid, @highestBidder, @done)"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@randomId", entry.RandomId); - addWithValue(sqlCommand, "@horseRandomId", entry.Horse.RandomId); - addWithValue(sqlCommand, "@ownerId", entry.OwnerId); - addWithValue(sqlCommand, "@timeRemaining", entry.TimeRemaining); - addWithValue(sqlCommand, "@highestBid", entry.HighestBid); - addWithValue(sqlCommand, "@highestBidder", entry.HighestBidder); - addWithValue(sqlCommand, "@done", entry.Completed ? "YES" : "NO"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void BanUser(int userId, string ip, string reason) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO BannedPlayers VALUES(@playerId,@ipAddress,@reason)"; - addWithValue(sqlCommand, "@playerId", userId); - addWithValue(sqlCommand, "@ipAddress", ip); - addWithValue(sqlCommand, "@reason", reason); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void UnBanUser(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM BannedPlayers WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", userId); - sqlCommand.ExecuteNonQuery(); - - } - } - - - public static bool IsIpBanned(string ip) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM BannedPlayers WHERE ipAddress=@ipAddr"; - addWithValue(sqlCommand, "@ipAddr", ip); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - } - public static bool IsUserBanned(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM BannedPlayers WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", userId); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - - } - - public static void AddWildHorse(WildHorse horse) - { - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO WildHorse VALUES(@randomId,@originalOwner,@breed,@x,@y,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@timeout,@autosell,@training,@category,@spoiled,@magicused)"; - - addWithValue(sqlCommand, "@randomId", horse.Instance.RandomId); - addWithValue(sqlCommand, "@originalOwner", horse.Instance.Owner); - addWithValue(sqlCommand, "@breed", horse.Instance.Breed.Id); - addWithValue(sqlCommand, "@x", horse.X); - addWithValue(sqlCommand, "@y", horse.Y); - addWithValue(sqlCommand, "@name", horse.Instance.Name); - addWithValue(sqlCommand, "@description", horse.Instance.Description); - addWithValue(sqlCommand, "@sex", horse.Instance.Gender); - addWithValue(sqlCommand, "@color", horse.Instance.Color); - - addWithValue(sqlCommand, "@health", horse.Instance.BasicStats.Health); - addWithValue(sqlCommand, "@shoes", horse.Instance.BasicStats.Shoes); - addWithValue(sqlCommand, "@hunger", horse.Instance.BasicStats.Hunger); - addWithValue(sqlCommand, "@thirst", horse.Instance.BasicStats.Thirst); - addWithValue(sqlCommand, "@mood", horse.Instance.BasicStats.Mood); - addWithValue(sqlCommand, "@groom", horse.Instance.BasicStats.Groom); - addWithValue(sqlCommand, "@tiredness", horse.Instance.BasicStats.Tiredness); - addWithValue(sqlCommand, "@experience", horse.Instance.BasicStats.Experience); - - addWithValue(sqlCommand, "@speed", horse.Instance.AdvancedStats.Speed); - addWithValue(sqlCommand, "@strength", horse.Instance.AdvancedStats.Strength); - addWithValue(sqlCommand, "@conformation", horse.Instance.AdvancedStats.Conformation); - addWithValue(sqlCommand, "@agility", horse.Instance.AdvancedStats.Agility); - addWithValue(sqlCommand, "@endurance", horse.Instance.AdvancedStats.Endurance); - addWithValue(sqlCommand, "@inteligence", horse.Instance.AdvancedStats.Inteligence); - addWithValue(sqlCommand, "@personality", horse.Instance.AdvancedStats.Personality); - addWithValue(sqlCommand, "@height", horse.Instance.AdvancedStats.Height); - - if (horse.Instance.Equipment.Saddle != null) - addWithValue(sqlCommand, "@saddle", horse.Instance.Equipment.Saddle.Id); - else - addWithValue(sqlCommand, "@saddle", null); - - if (horse.Instance.Equipment.SaddlePad != null) - addWithValue(sqlCommand, "@saddlepad", horse.Instance.Equipment.SaddlePad.Id); - else - addWithValue(sqlCommand, "@saddlepad", null); - - if (horse.Instance.Equipment.Bridle != null) - addWithValue(sqlCommand, "@bridle", horse.Instance.Equipment.Bridle.Id); - else - addWithValue(sqlCommand, "@bridle", null); - - if (horse.Instance.Equipment.Companion != null) - addWithValue(sqlCommand, "@companion", horse.Instance.Equipment.Companion.Id); - else - addWithValue(sqlCommand, "@companion", null); - - - - - - addWithValue(sqlCommand, "@timeout", horse.Timeout); - addWithValue(sqlCommand, "@autosell", horse.Instance.AutoSell); - addWithValue(sqlCommand, "@training", horse.Instance.TrainTimer); - addWithValue(sqlCommand, "@category", horse.Instance.Category); - addWithValue(sqlCommand, "@spoiled", horse.Instance.Spoiled); - addWithValue(sqlCommand, "@magicused", horse.Instance.MagicUsed); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - - } - - - public static void LoadWildHorses() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM WildHorse"; - - - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while (reader.Read()) - { - int randomId = reader.GetInt32(0); - int breedId = reader.GetInt32(2); - HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); - HorseInstance inst = new HorseInstance(horseBreed, randomId); - inst.Owner = reader.GetInt32(1); - inst.Name = reader.GetString(5); - inst.Description = reader.GetString(6); - inst.Gender = reader.GetString(7); - inst.Color = reader.GetString(8); - - inst.BasicStats.Health = reader.GetInt32(9); - inst.BasicStats.Shoes = reader.GetInt32(10); - inst.BasicStats.Hunger = reader.GetInt32(11); - inst.BasicStats.Thirst = reader.GetInt32(12); - inst.BasicStats.Mood = reader.GetInt32(13); - inst.BasicStats.Groom = reader.GetInt32(14); - inst.BasicStats.Tiredness = reader.GetInt32(15); - inst.BasicStats.Experience = reader.GetInt32(16); - - inst.AdvancedStats.Speed = reader.GetInt32(17); - inst.AdvancedStats.Strength = reader.GetInt32(18); - inst.AdvancedStats.Conformation = reader.GetInt32(19); - inst.AdvancedStats.Agility = reader.GetInt32(20); - inst.AdvancedStats.Endurance = reader.GetInt32(21); - inst.AdvancedStats.Inteligence = reader.GetInt32(22); - inst.AdvancedStats.Personality = reader.GetInt32(23); - inst.AdvancedStats.Height = reader.GetInt32(24); - - if (!reader.IsDBNull(25)) - inst.Equipment.Saddle = Item.GetItemById(reader.GetInt32(25)); - if (!reader.IsDBNull(26)) - inst.Equipment.SaddlePad = Item.GetItemById(reader.GetInt32(26)); - if (!reader.IsDBNull(27)) - inst.Equipment.Bridle = Item.GetItemById(reader.GetInt32(27)); - if (!reader.IsDBNull(28)) - inst.Equipment.Companion = Item.GetItemById(reader.GetInt32(28)); - - inst.AutoSell = reader.GetInt32(30); - inst.TrainTimer = reader.GetInt32(31); - inst.Category = reader.GetString(32); - inst.Spoiled = reader.GetInt32(33); - inst.MagicUsed = reader.GetInt32(34); - - int x = reader.GetInt32(3); - int y = reader.GetInt32(4); - int timeout = reader.GetInt32(29); - WildHorse WildHorse = new WildHorse(inst, x, y, timeout, false); - - } - - - } - } - - public static bool LastPlayerExist(string roomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM LastPlayer WHERE roomId=@roomId"; - addWithValue(sqlCommand, "@roomId", roomId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count > 0; - } - } - - public static int GetLastPlayer(string roomId) - { - if (!Database.LastPlayerExist(roomId)) - Database.AddLastPlayer(roomId, -1); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT playerId FROM LastPlayer WHERE roomId=@roomId"; - addWithValue(sqlCommand, "@roomId", roomId); - sqlCommand.Prepare(); - int playerId = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return playerId; - } - } - - - public static void SetLastPlayer(string roomId, int playerId) - { - if (!Database.LastPlayerExist(roomId)) - Database.AddLastPlayer(roomId, -1); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE LastPlayer SET playerId=@playerId WHERE roomId=@roomId"; - addWithValue(sqlCommand, "@roomId", roomId); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void AddPoetWord(int id, int x, int y, int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO PoetryRooms VALUES(@id,@x,@y,@room)"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@x", x); - addWithValue(sqlCommand, "@y", y); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SetPoetPosition(int id, int x, int y, int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE PoetryRooms SET X=@x, Y=@y WHERE poetId=@id AND roomId=@room"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@x", x); - addWithValue(sqlCommand, "@y", y); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static bool GetPoetExist(int id, int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count > 0; - } - } - public static int GetPoetPositionX(int id, int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT X FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - int xpos = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return xpos; - } - } - - public static int GetPoetPositionY(int id, int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Y FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - int ypos = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return ypos; - } - } - - public static bool SavedDrawingsExist(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM SavedDrawings WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count >= 1; - } - } - public static void CreateSavedDrawings(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO SavedDrawings VALUES(@playerId,'','','')"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static bool DrawingRoomExists(int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM DrawingRooms WHERE roomId=@room"; - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count >= 1; - } - } - - public static void CreateDrawingRoom(int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO DrawingRooms VALUES(@roomId,'')"; - addWithValue(sqlCommand, "@roomId", room); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SetDrawingRoomDrawing(int room, string Drawing) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE DrawingRooms SET Drawing=@drawing WHERE roomId=@room"; - addWithValue(sqlCommand, "@drawing", Drawing); - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static string GetDrawingRoomDrawing(int room) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Drawing FROM DrawingRooms WHERE roomId=@room"; - addWithValue(sqlCommand, "@room", room); - sqlCommand.Prepare(); - string drawing = sqlCommand.ExecuteScalar().ToString(); - - - return drawing; - } - } - public static string LoadDrawingSlot3(int playerId) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Drawing3 FROM SavedDrawings WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - string drawing = sqlCommand.ExecuteScalar().ToString(); - - - return drawing; - } - } - public static string LoadDrawingSlot2(int playerId) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Drawing2 FROM SavedDrawings WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - string drawing = sqlCommand.ExecuteScalar().ToString(); - - - return drawing; - } - } - public static string LoadDrawingSlot1(int playerId) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Drawing1 FROM SavedDrawings WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - string drawing = sqlCommand.ExecuteScalar().ToString(); - - - return drawing; - } - } - public static void SaveDrawingSlot1(int playerId, string drawing) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing1=@drawing WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@drawing", drawing); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SaveDrawingSlot2(int playerId, string drawing) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing2=@drawing WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@drawing", drawing); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SaveDrawingSlot3(int playerId, string drawing) - { - if (!SavedDrawingsExist(playerId)) - CreateSavedDrawings(playerId); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing3=@drawing WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@drawing", drawing); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static void SetLastLoadedVersion(string version) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE World SET LastLoadedInVersion=@version"; - addWithValue(sqlCommand, "@version", version); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - // Tests if the game was previously loaded in 1.0 - public static bool TestFor1_0() - { - try - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT TotalLogins FROM UserExt LIMIT 1;"; - sqlCommand.ExecuteNonQuery(); - } - return false; - } - catch (Exception) - { - return true; - }; - } - //Tests if game was previously loaded in v1.1 - public static bool TestFor1_1() - { - try - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Data FROM ShopInventory LIMIT 1;"; - sqlCommand.ExecuteNonQuery(); - } - return false; - } - catch (Exception) - { - return true; - } - } - - public static string GetLastLoadedVersion() - { - try - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT LastLoadedInVersion FROM World"; - string lastVersion = sqlCommand.ExecuteScalar().ToString(); - - return lastVersion; - } - } - catch (Exception) // table not found? must have been before v1.7.20. - { - if (TestFor1_0()) return "v1.0"; - if (TestFor1_1()) return "v1.1"; - return "v1.7.20"; - } - } - - public static void SetStartTime(int startTime) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE World SET StartTime=@startTimer"; - addWithValue(sqlCommand, "@startTimer", startTime); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetServerTime(int time, int day, int year) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE World SET Time=@time,Day=@day,Year=@year"; - addWithValue(sqlCommand, "@time", time); - addWithValue(sqlCommand, "@day", day); - addWithValue(sqlCommand, "@year", year); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static int GetServerTime() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Time FROM World"; - int serverTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return serverTime; - } - } - - public static int GetServerStartTime() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT StartTime FROM World"; - int startTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return startTime; - } - } - - public static int GetServerDay() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Day FROM World"; - int serverTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return serverTime; - } - } - - public static int GetServerYear() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Year FROM World"; - int creationTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return creationTime; - } - } - - - - - public static bool WeatherExists(string Area) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(*) FROM Weather WHERE Area=@area"; - addWithValue(sqlCommand, "@area", Area); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count > 0; - } - } - - public static void InsertWeather(string Area, string Weather) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Weather VALUES(@area,@weather)"; - addWithValue(sqlCommand, "@weather", Weather); - addWithValue(sqlCommand, "@area", Area); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetWeather(string Area, string Weather) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Weather SET Weather=@weather WHERE Area=@area"; - addWithValue(sqlCommand, "@weather", Weather); - addWithValue(sqlCommand, "@area", Area); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static string GetWeather(string Area) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Weather FROM Weather WHERE Area=@area"; - addWithValue(sqlCommand, "@area", Area); - string Weather = sqlCommand.ExecuteScalar().ToString(); - - return Weather; - } - } - - public static void DecHorseTrainTimeout() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET trainTimer=trainTimer-1 WHERE trainTimer-1 > -1"; - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - - public static HorseInstance[] GetPlayerHorsesInCategory(int playerId, string category) - { - - List instances = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId AND category=@category"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@category", category); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - instances.Add(ReadHorseInstance(reader)); - } - - return instances.ToArray(); - } - } - - public static HorseInstance GetPlayerHorse(int horseRandomId) - { - HorseInstance instance = null; - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses WHERE randomId=@horseRandomId"; - addWithValue(sqlCommand, "@horseRandomId", horseRandomId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - instance = ReadHorseInstance(reader); - break; - } - - - if (instance == null) - throw new KeyNotFoundException(); - return instance; - } - } - - public static int GetHorseTrainTimeout(int horseRandomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT trainTimer FROM Horses WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - int trainTimer = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return trainTimer; - } - } - - public static void SetAuctionDone(int randomId, bool done) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Auctions SET done=@done WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@done", done ? "YES" : "NO"); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetAuctionTimeout(int randomId, int timeRemaining) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Auctions SET timeRemaining=@timeRemaining WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@timeRemaining", timeRemaining); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetAuctionHighestBid(int randomId, int highestBid) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Auctions SET highestBid=@highestBid WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@highestBid", highestBid); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetAuctionHighestBidder(int randomId, int highestBidder) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Auctions SET highestBidder=@highestBidder WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@highestBidder", highestBidder); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - - public static void SetHorseOwner(int randomId, int owner) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET ownerId=@owner WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@owner", owner); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetHorseHidden(int randomId, bool hidden) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET hidden=@hidden WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@hidden", hidden ? "YES" : "NO"); - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseTrainTimeout(int horseRandomId, int trainTimeout) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET trainTimer=@trainTimer WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@trainTimer", trainTimeout); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseColor(int horseRandomId, string Color) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET color=@color WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@color", Color); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseCategory(int horseRandomId, string Category) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET category=@category WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@category", Category); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetHorseAutoSell(int horseRandomId, int AutoSell) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET autosell=@autosell WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@autosell", AutoSell); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseMagicUsed(int horseRandomId, int MagicUsed) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET magicused=@magicused WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@magicused", MagicUsed); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetLeaseTime(int horseRandomId, int leaseTime) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET leaseTime=@leaseTime WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@leaseTime", leaseTime); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetHorseName(int horseRandomId, string Name) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET name=@name WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@name", Name); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseDescription(int horseRandomId, string Description) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET description=@description WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@description", Description); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseTiredness(int horseRandomId, int Tiredness) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET tiredness=@tiredness WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@tiredness", Tiredness); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseSpeed(int horseRandomId, int Speed) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET speed=@speed WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@speed", Speed); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseStrength(int horseRandomId, int Strength) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET strength=@strength WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@strength", Strength); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseConformation(int horseRandomId, int Conformation) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET conformation=@conformation WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@conformation", Conformation); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseAgility(int horseRandomId, int Agility) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET agility=@agility WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@agility", Agility); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseEndurance(int horseRandomId, int Endurance) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET endurance=@endurance WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@endurance", Endurance); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorsePersonality(int horseRandomId, int Personality) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET personality=@personality WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@personality", Personality); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseInteligence(int horseRandomId, int Inteligence) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET inteligence=@inteligence WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@inteligence", Inteligence); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseSpoiled(int horseRandomId, int Spoiled) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET spoiled=@spoiled WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@spoiled", Spoiled); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseExperience(int horseRandomId, int Experience) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET experience=@experience WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@experience", Experience); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseShoes(int horseRandomId, int Shoes) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET shoes=@shoes WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@shoes", Shoes); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseHeight(int horseRandomId, int Height) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET height=@height WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@height", Height); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseMood(int horseRandomId, int Mood) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET mood=@mood WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@mood", Mood); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseGroom(int horseRandomId, int Groom) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET groom=@groom WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@groom", Groom); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetHorseHunger(int horseRandomId, int Hunger) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET hunger=@hunger WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@hunger", Hunger); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseThirst(int horseRandomId, int Thirst) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET thirst=@thirst WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@thirst", Thirst); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetHorseHealth(int horseRandomId, int Health) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET health=@health WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@health", Health); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetSaddle(int horseRandomId, int saddleItemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET saddle=@saddle WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@saddle", saddleItemId); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetSaddlePad(int horseRandomId, int saddlePadItemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET saddlepad=@saddlepad WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@saddlepad", saddlePadItemId); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetBridle(int horseRandomId, int bridleItemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET bridle=@bridle WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@bridle", bridleItemId); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetCompanion(int horseRandomId, int companionItemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET companion=@companion WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@companion", companionItemId); - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void ClearSaddle(int horseRandomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET saddle=NULL WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void ClearSaddlePad(int horseRandomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET saddlepad=NULL WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void ClearBridle(int horseRandomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET bridle=NULL WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void ClearCompanion(int horseRandomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET companion=NULL WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", horseRandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetWorldWeather(string Weather) - { - using (DbConnection db = connectDb()) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE World SET Weather=@weather"; - addWithValue(sqlCommand, "@weather", Weather); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static byte[] GetPasswordSalt(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Salt FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - string expectedHash = sqlCommand.ExecuteScalar().ToString(); - - return Helper.StringToByteArray(expectedHash); - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - - public static bool HasJewelry(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(1) FROM Jewelry WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete > 0; - } - } - - public static void InitJewelry(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO Jewelry VALUES(@playerId,0,0,0,0)"; - addWithValue(sqlCommand, "@playerId", playerId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetJewelrySlot1(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE Jewelry SET slot1=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetJewelrySlot1(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT slot1 FROM Jewelry WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static void SetJewelrySlot2(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE Jewelry SET slot2=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetJewelrySlot2(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT slot2 FROM Jewelry WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - - public static void SetJewelrySlot3(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE Jewelry SET slot3=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetJewelrySlot3(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT slot3 FROM Jewelry WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static void SetJewelrySlot4(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE Jewelry SET slot4=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetJewelrySlot4(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT slot4 FROM Jewelry WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - - - public static int[] GetAwards(int playerId) - { - List Awards = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT awardId FROM Awards WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - Awards.Add(reader.GetInt32(0)); - } - - return Awards.ToArray(); - } - } - public static void AddAward(int playerId, int awardId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO Awards VALUES(@playerId,@awardId)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@awardId", awardId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - return; - } - } - - - public static bool HasCompetitionGear(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(1) FROM CompetitionGear WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete > 0; - } - } - - public static void InitCompetitionGear(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO CompetitionGear VALUES(@playerId,0,0,0,0)"; - addWithValue(sqlCommand, "@playerId", playerId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void SetCompetitionGearHeadPeice(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE CompetitionGear SET headItem=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetCompetitionGearHeadPeice(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT headItem FROM CompetitionGear WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static void SetCompetitionGearBodyPeice(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE CompetitionGear SET bodyItem=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetCompetitionGearBodyPeice(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT bodyItem FROM CompetitionGear WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static void SetCompetitionGearLegPeice(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE CompetitionGear SET legItem=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetCompetitionGearLegPeice(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT legItem FROM CompetitionGear WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static void SetCompetitionGearFeetPeice(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE CompetitionGear SET feetItem=@itemId WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetCompetitionGearFeetPeice(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT feetItem FROM CompetitionGear WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - - public static int GetTrackedQuestCompletedCount(int playerId, int questId) - { - if(CheckTrackeQuestExists(playerId,questId)) - { - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT timesCompleted FROM TrackedQuest WHERE playerId=@playerId AND questId=@questId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@questId", questId); - sqlCommand.Prepare(); - int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return timesComplete; - } - } - else - { - return 0; - } - - } - public static bool CheckTrackeQuestExists(int playerId, int questId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(*) FROM TrackedQuest WHERE playerId=@playerId AND questId=@questId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@questId", questId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - if (count >= 1) - return true; - else - return false; - } - - } - - public static TrackedQuest[] GetTrackedQuests(int playerId) - { - List TrackedQuests = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT questId,timesCompleted FROM TrackedQuest WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - TrackedQuest TrackedQuest = new TrackedQuest(playerId, reader.GetInt32(0), reader.GetInt32(1)); - TrackedQuests.Add(TrackedQuest); - } - - } - return TrackedQuests.ToArray(); - } - public static void SetTrackedQuestCompletedCount(int playerId, int questId, int timesCompleted) - { - if(CheckTrackeQuestExists(playerId,questId)) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE TrackedQuest SET timesCompleted=@timesCompleted WHERE playerId=@playerId AND questId=@questId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@questId", questId); - addWithValue(sqlCommand, "@timesCompleted", timesCompleted); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - else - { - AddNewTrackedQuest(playerId, questId, timesCompleted); - } - - } - public static bool SetUserSubscriptionStatus(int playerId, bool subscribed) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET Subscriber=@subscribed WHERE Id=@playerId"; - addWithValue(sqlCommand, "@subscribed", subscribed ? "YES" : "NO"); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - - return subscribed; - } - } - public static string GetGender(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT Gender FROM Users WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - string gender = sqlCommand.ExecuteScalar().ToString(); - - - return gender; - } - } - public static int GetLoginCount(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT TotalLogins FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count; - } - } - public static void SetLoginCount(int playerId, int count) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET TotalLogins=@count WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@count", count); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetExperience(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT Experience FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int xp = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return xp; - } - } - public static void SetExperience(int playerId, int exp) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET Experience=@xp WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@xp", exp); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void IncAllUsersFreeTime(int minutes) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET FreeMinutes=FreeMinutes+@minutes"; - addWithValue(sqlCommand, "@minutes", minutes); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetFreeTime(int playerId, int minutes) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET FreeMinutes=@minutes WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@minutes", minutes); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetFreeTime(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT FreeMinutes FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int freeMinutes = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return freeMinutes; - } - } - public static int GetUserSubscriptionExpireDate(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT SubscribedUntil FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int subscribedUntil = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return subscribedUntil; - } - } - - public static void SetUserSubscriptionStatus(int playerId, int subscribedUntil) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE UserExt SET SubscribedUntil=@subscribedUntil WHERE Id=@playerId"; - addWithValue(sqlCommand, "@subscribedUntil", subscribedUntil); - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - - public static bool GetUserModerator(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT Moderator FROM Users WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - bool admin = sqlCommand.ExecuteScalar().ToString() == "YES"; - - - return admin; - } - } - public static bool GetUserAdmin(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT Admin FROM Users WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - bool admin = sqlCommand.ExecuteScalar().ToString() == "YES"; - - - return admin; - } - } - public static bool GetUserSubscribed(int playerId) - { - if (ConfigReader.AllUsersSubbed) - return true; - - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT Subscriber FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - bool subscribed = sqlCommand.ExecuteScalar().ToString() == "YES"; - - - return subscribed; - } - } - public static void AddNewTrackedQuest(int playerId, int questId, int timesCompleted) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO TrackedQuest VALUES(@playerId,@questId,@timesCompleted)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@questId", questId); - addWithValue(sqlCommand, "@timesCompleted", timesCompleted); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void AddOnlineUser(int playerId, bool Admin, bool Moderator, bool Subscribed, bool New) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator, @subscribed, @new)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@admin", Admin ? "YES" : "NO"); - addWithValue(sqlCommand, "@moderator", Moderator ? "YES" : "NO"); - addWithValue(sqlCommand, "@subscribed", Subscribed ? "YES" : "NO"); - addWithValue(sqlCommand, "@new", New ? "YES" : "NO"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void RemoveOnlineUser(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM OnlineUsers WHERE (playerId=@playerId)"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static ItemInstance[] GetShopInventory(int shopId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT ItemId,RandomId,Data FROM ShopInventory WHERE ShopID=@shopId"; - addWithValue(sqlCommand, "@shopId", shopId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - List instances = new List(); - - while (reader.Read()) - { - instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2))); - } - - return instances.ToArray(); - } - } - - public static void AddItemToShopInventory(int shopId, ItemInstance instance) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO ShopInventory VALUES(@shopId,@randomId,@itemId,@data)"; - addWithValue(sqlCommand, "@shopId", shopId); - addWithValue(sqlCommand, "@randomId", instance.RandomId); - addWithValue(sqlCommand, "@itemId", instance.ItemId); - addWithValue(sqlCommand, "@data", instance.Data); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void RemoveItemFromShopInventory(int shopId, ItemInstance instance) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM ShopInventory WHERE (ShopID=@shopId AND RandomId=@randomId)"; - addWithValue(sqlCommand, "@shopId", shopId); - addWithValue(sqlCommand, "@randomId", instance.RandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static ItemInstance[] GetPlayerInventory(int playerId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT ItemId,RandomId,Data FROM Inventory WHERE PlayerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - List instances = new List(); - - while (reader.Read()) - { - instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2))); - } - - return instances.ToArray(); - } - } - public static int[] GetModsAndAdmins() - { - List userList = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT id FROM Users WHERE Moderator=\"YES\" AND Admin=\"YES\""; - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userList.Add(reader.GetInt32(0)); - } - - } - return userList.ToArray(); - } - - public static int[] GetUsers() - { - List userList = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT id FROM Users"; - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - userList.Add(reader.GetInt32(0)); - } - - } - return userList.ToArray(); - } - public static int[] GetModeratorUsers() - { - List userList = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT id FROM Users WHERE Moderator=\"YES\" OR Admin=\"YES\""; - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userList.Add(reader.GetInt32(0)); - } - - } - return userList.ToArray(); - } - - public static void AddItemToInventory(int playerId, ItemInstance instance) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO Inventory VALUES(@playerId,@randomId,@itemId, @data)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@randomId", instance.RandomId); - addWithValue(sqlCommand, "@itemId", instance.ItemId); - addWithValue(sqlCommand, "@data", instance.Data); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void RemoveAllItemTypesFromPlayerInventory(int playerId, int itemId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM Inventory WHERE (PlayerId=@playerId AND ItemID=@itemId)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@itemId", itemId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void RemoveItemFromInventory(int playerId, ItemInstance instance) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM Inventory WHERE (PlayerId=@playerId AND RandomId=@randomId)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@randomId", instance.RandomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static bool HasNpcStartpointSet(int playerId, int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(1) FROM NpcStartPoint WHERE playerId=@playerId AND npcId=@npcId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int total = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return total >= 1; - } - } - public static bool HasNpcPos(int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(1) FROM NpcPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int total = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return total >= 1; - } - } - public static void SetNpcY(int npcId, int x) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE NpcPos SET Y=@yPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@yPos", x); - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetUserMod(int playerId, bool moderator) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - string yesno = (moderator ? "YES" : "NO"); - - sqlCommand.CommandText = "UPDATE Users SET Moderator=@moderator WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@moderator", yesno); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - } - } - - public static void SetUserAdmin(int playerId, bool admin) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - string yesno = (admin ? "YES" : "NO"); - - sqlCommand.CommandText = "UPDATE Users SET Admin=@admin WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@admin", yesno); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - } - } - - public static void SetNpcX(int npcId, int x) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE NpcPos SET X=@xPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@xPos", x); - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetNpcUdlrPointer(int npcId, int udlr) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE NpcPos SET UdlrPointer=@udlr WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@udlr", udlr); - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static int GetNpcUdlrPointer(int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT UdlrPointer FROM NpcPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int udlrPointer = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return udlrPointer; - } - } - public static int GetNpcPosY(int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT y FROM NpcPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int y = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return y; - } - } - public static int GetNpcPosX(int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT X FROM NpcPos WHERE npcId=@npcId"; - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int x = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return x; - } - } - public static void AddNpcPos(int npcId, int X, int Y, int udlrPointer) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO NpcPos VALUES(@npcId, @xPos, @yPos, @udlr)"; - addWithValue(sqlCommand, "@npcId", npcId); - addWithValue(sqlCommand, "@xPos", X); - addWithValue(sqlCommand, "@yPos", Y); - addWithValue(sqlCommand, "@udlr", udlrPointer); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void AddNpcStartPoint(int playerId, int npcId, int startChatpoint) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "INSERT INTO NpcStartPoint VALUES(@playerId, @npcId, @chatpointId)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@npcId", npcId); - addWithValue(sqlCommand, "@chatpointId", startChatpoint); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void SetNpcStartPoint(int playerId, int npcId, int startChatpoint) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "UPDATE NpcStartPoint SET chatpointId=@chatpointId WHERE playerId=@playerId AND npcId=@npcId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@npcId", npcId); - addWithValue(sqlCommand, "@chatpointId", startChatpoint); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static int GetDroppedItemsCount() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT COUNT(1) FROM DroppedItems"; - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count; - } - } - public static int GetNpcStartPoint(int playerId, int npcId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "SELECT chatpointId FROM NpcStartPoint WHERE playerId=@playerId AND npcId=@npcId"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@npcId", npcId); - sqlCommand.Prepare(); - int startPoint = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return startPoint; - } - } - - public static void RemoveDespawningItems() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE despawnTimer <=0"; - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - - public static void RemoveDroppedItem(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE (RandomId=@randomId)"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static DroppedItems.DroppedItem[] GetDroppedItems() - { - List itemList = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM DroppedItems"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - ItemInstance instance = new ItemInstance(reader.GetInt32(3), reader.GetInt32(2)); - DroppedItems.DroppedItem droppedItem = new DroppedItems.DroppedItem(instance); - droppedItem.X = reader.GetInt32(0); - droppedItem.Y = reader.GetInt32(1); - droppedItem.DespawnTimer = reader.GetInt32(4); - droppedItem.Data = reader.GetInt32(5); - itemList.Add(droppedItem); - } - - - } - return itemList.ToArray(); - } - public static void DecrementDroppedItemDespawnTimer() - { - using (DbConnection db = connectDb()) - { - db.Open(); - - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE DroppedItems SET DespawnTimer=DespawnTimer-1"; - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void AddDroppedItem(DroppedItems.DroppedItem item) - { - using (DbConnection db = connectDb()) - { - db.Open(); - - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer, @data)"; - addWithValue(sqlCommand, "@x", item.X); - addWithValue(sqlCommand, "@y", item.Y); - addWithValue(sqlCommand, "@randomId", item.Instance.RandomId); - addWithValue(sqlCommand, "@itemId", item.Instance.ItemId); - addWithValue(sqlCommand, "@despawnTimer", item.DespawnTimer); - addWithValue(sqlCommand, "@data", item.Data); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - - public static void AddReport(string reportCreator, string reporting, string reportReason) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - int epoch = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - - sqlCommand.CommandText = "INSERT INTO AbuseReports VALUES(@reportCreator,@reporting,@reportReason)"; - addWithValue(sqlCommand, "@reportCreator", reportCreator); - addWithValue(sqlCommand, "@reporting", reporting); - addWithValue(sqlCommand, "@reportReason", reportReason); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - - } - public static Mailbox.Mail[] LoadMailbox(int toId) - { - List mailList = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - - sqlCommand.CommandText = "SELECT * FROM Mailbox WHERE IdTo=@toId"; - addWithValue(sqlCommand, "@toId", toId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - Mailbox.Mail MailMessage = new Mailbox.Mail(); - MailMessage.RandomId = RandomID.NextRandomId(reader.GetInt32(0)); - MailMessage.ToUser = reader.GetInt32(1); - MailMessage.FromUser = reader.GetInt32(2); - MailMessage.Subject = reader.GetString(3); - MailMessage.Message = reader.GetString(4); - MailMessage.Timestamp = reader.GetInt32(5); - MailMessage.Read = reader.GetString(6) == "YES"; - mailList.Add(MailMessage); - } - - } - return mailList.ToArray(); - } - public static void ReadAllMail(int toId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - - sqlCommand.CommandText = "UPDATE Mailbox SET BeenRead='YES' WHERE IdTo=@toId"; - addWithValue(sqlCommand, "@toId", toId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void DeleteMail(int randomId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - - sqlCommand.CommandText = "DELETE FROM Mailbox WHERE randomId=@randomId"; - addWithValue(sqlCommand, "@randomId", randomId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - public static void AddMail(int randomId, int toId, int fromId, string subject, string message, int timestamp, bool read) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - - - sqlCommand.CommandText = "INSERT INTO Mailbox VALUES(@randomId, @toId,@from,@subject,@message,@time,@read)"; - addWithValue(sqlCommand, "@randomId", randomId); - addWithValue(sqlCommand, "@toId", toId); - addWithValue(sqlCommand, "@from", fromId); - addWithValue(sqlCommand, "@subject", subject); - addWithValue(sqlCommand, "@message", message); - addWithValue(sqlCommand, "@time", timestamp); - addWithValue(sqlCommand, "@read", read ? "YES" : "NO"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - - } - - public static bool CheckUserExist(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM Users WHERE Id=@id"; - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - - Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - return count >= 1; - } - } - public static bool CheckUserExist(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - - Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count >= 1; - } - } - public static bool CheckUserExtExists(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - - Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count >= 1; - } - } - - - public static bool CheckUsernameIsModerator(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Moderator FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - string modStr = sqlCommand.ExecuteScalar().ToString(); - - - return modStr == "YES"; - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - - - public static bool CheckUsernameIsAdmin(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Admin FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - string adminStr = sqlCommand.ExecuteScalar().ToString(); - - - return adminStr == "YES"; - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - - public static int GetBuddyCount(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT COUNT(1) FROM BuddyList WHERE Id=@id OR IdFriend=@id"; - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - - Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count; - } - } - - public static int[] GetBuddyList(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (GetBuddyCount(id) <= 0) - return new int[0]; // user is forever alone. - - List BuddyList = new List(); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Id,IdFriend FROM BuddyList WHERE Id=@id OR IdFriend=@id"; - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - DbDataReader dataReader = sqlCommand.ExecuteReader(); - - while (dataReader.Read()) - { - int adder = dataReader.GetInt32(0); - int friend = dataReader.GetInt32(1); - if (adder != id) - BuddyList.Add(adder); - else if (friend != id) - BuddyList.Add(friend); - } - - - return BuddyList.ToArray(); - } - } - - public static void RemoveBuddy(int id, int friendId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM BuddyList WHERE (Id=@id AND IdFriend=@friendId) OR (Id=@friendid AND IdFriend=@Id)"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@friendId", friendId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - } - } - - public static void AddBuddy(int id, int friendId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO BuddyList VALUES(@id,@friendId)"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@friendId", friendId); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - public static string GetIpAddress(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (!CheckUserExtExists(id)) // user allready exists! - throw new Exception("Userid " + id + " Does not exist in UserExt."); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT IpAddress FROM UserExt WHERE Id=@playerId"; - addWithValue(sqlCommand, "@playerId", id); - sqlCommand.Prepare(); - string IpAddress = sqlCommand.ExecuteScalar().ToString(); - - return IpAddress; - } - } - public static void SetIpAddress(int id, string ipAddress) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (!CheckUserExtExists(id)) // user allready exists! - throw new Exception("Userid " + id + " Does not exist in UserExt."); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET IpAddress=@ipAddr WHERE Id=@playerId"; - addWithValue(sqlCommand, "@ipAddr", ipAddress); - addWithValue(sqlCommand, "@playerId", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static int GetNextFreeUserId() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT MAX(Id)+1 FROM Users"; - sqlCommand.Prepare(); - - object res = sqlCommand.ExecuteScalar(); - if (res == DBNull.Value) - return 0; - - return Convert.ToInt32(res); - } - } - - public static void CreateUser(int id, string username, string passhash, string salt, string gender, bool admin, bool moderator) - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Users VALUES(@id,@username,@passhash,@salt,@gender,@admin,@moderator)"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@username", username); - addWithValue(sqlCommand, "@passhash", passhash); - addWithValue(sqlCommand, "@salt", salt); - addWithValue(sqlCommand, "@gender", gender); - addWithValue(sqlCommand, "@admin", admin ? "YES" : "NO"); - addWithValue(sqlCommand, "@moderator", moderator ? "YES" : "NO"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - - public static void CreateUserExt(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(id)) // user allready exists! - throw new Exception("Userid " + id + " Allready in UserExt."); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO UserExt VALUES(@id,@x,@y,@timestamp,0,0,0,0,'','','',0,0,'NO',0,0,1000,1000,1000, 180,1)"; - addWithValue(sqlCommand, "@id", id); - addWithValue(sqlCommand, "@timestamp", Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds())); - addWithValue(sqlCommand, "@x", Map.NewUserStartX); - addWithValue(sqlCommand, "@y", Map.NewUserStartY); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static int GetUserid(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Id FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - int userId = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return userId; - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - - public static string GetPlayerNotes(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT PrivateNotes FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - string privateNotes = sqlCommand.ExecuteScalar().ToString(); - - - return privateNotes; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerNotes(int id, string notes) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET PrivateNotes=@notes WHERE Id=@id"; - addWithValue(sqlCommand, "@notes", notes); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - - public static int GetPlayerCharId(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT CharId FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int CharId = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return CharId; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerCharId(int charid, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET CharId=@charId WHERE Id=@id"; - addWithValue(sqlCommand, "@charId", charid); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static int GetPlayerX(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT X FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int X = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return X; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerX(int x, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET X=@x WHERE Id=@id"; - addWithValue(sqlCommand, "@x", x); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static int GetPlayerY(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Y FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int Y = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return Y; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static int GetChatViolations(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT ChatViolations FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int violations = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return violations; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - - public static void SetChatViolations(int violations, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET ChatViolations=@violations WHERE Id=@id"; - addWithValue(sqlCommand, "@violations", violations); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - public static void SetPlayerY(int y, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET Y=@y WHERE Id=@id"; - addWithValue(sqlCommand, "@y", y); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static void SetPlayerQuestPoints(int qp, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET QuestPoints=@questPoints WHERE Id=@id"; - addWithValue(sqlCommand, "@questPoints", qp); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - public static int GetPlayerQuestPoints(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT QuestPoints FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int QuestPoints = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return QuestPoints; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - - public static void SetPlayerMoney(int money, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET Money=@money WHERE Id=@id"; - addWithValue(sqlCommand, "@money", money); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static HorseInstance[] GetMostExperiencedHorses() - { - List inst = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses ORDER BY experience DESC LIMIT 25"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - inst.Add(ReadHorseInstance(reader)); - } - - } - return inst.ToArray(); - } - public static int[] GetMinigamePlayers() - { - List userIds = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT DISTINCT playerId, SUM(timesplayed) OVER (PARTITION BY playerId) AS totalPlays FROM Leaderboards ORDER BY totalPlays DESC LIMIT 25"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userIds.Add(reader.GetInt32(0)); - } - - } - return userIds.ToArray(); - } - - - public static int[] GetExperiencedPlayers() - { - List userIds = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY Experience DESC LIMIT 25"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userIds.Add(reader.GetInt32(0)); - } - - } - return userIds.ToArray(); - - } - public static int[] GetAdventurousPlayers() - { - List userIds = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY QuestPoints DESC LIMIT 25"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userIds.Add(reader.GetInt32(0)); - } - - } - return userIds.ToArray(); - - } - public static int[] GetRichestPlayers() - { - List userIds = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY Money+BankBalance DESC LIMIT 25"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - userIds.Add(reader.GetInt32(0)); - } - - } - return userIds.ToArray(); - - } - public static HorseInstance[] GetMostSpoiledHorses() - { - List inst = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses ORDER BY spoiled DESC LIMIT 100"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - inst.Add(ReadHorseInstance(reader)); - } - - } - return inst.ToArray(); - } - public static HorseInstance[] GetBiggestExpAutoSell() - { - List inst = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses WHERE autoSell > 0 ORDER BY experience DESC LIMIT 50"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while (reader.Read()) - { - inst.Add(ReadHorseInstance(reader)); - } - - } - return inst.ToArray(); - } - public static HorseInstance[] GetCheapestHorseAutoSell() - { - List inst = new List(); - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Horses WHERE autoSell > 0 ORDER BY autoSell LIMIT 100"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - while(reader.Read()) - { - inst.Add(ReadHorseInstance(reader)); - } - - } - return inst.ToArray(); - } - public static int GetPlayerTotalMinigamesPlayed(int playerId) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT SUM(timesplayed) FROM Leaderboards WHERE playerId=@playerId"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return count; - } - } - - public static void AddNewWinner(int playerId, string gameTitle, int wins, int looses) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Leaderboards VALUES(@playerId,@gameTitle,@wins,@loose,1,0,@type)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@gameTitle", gameTitle); - addWithValue(sqlCommand, "@wins", wins); - addWithValue(sqlCommand, "@loose", looses); - addWithValue(sqlCommand, "@type", "WINLOSS"); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - public static void AddNewHighscore(int playerId, string gameTitle, int score, string type) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "INSERT INTO Leaderboards VALUES(@playerId,@gameTitle,0,0,1,@score,@type)"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@gameTitle", gameTitle); - addWithValue(sqlCommand, "@score", score); - addWithValue(sqlCommand, "@type", type); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - - public static Highscore.HighscoreTableEntry[] GetPlayerHighScores(int playerId) - { - List entires = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE playerId=@playerId ORDER BY score DESC"; - addWithValue(sqlCommand, "@playerId", playerId); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while (reader.Read()) - { - Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); - highscoreEntry.UserId = reader.GetInt32(0); - highscoreEntry.GameName = reader.GetString(1); - highscoreEntry.Wins = reader.GetInt32(2); - highscoreEntry.Looses = reader.GetInt32(3); - highscoreEntry.TimesPlayed = reader.GetInt32(4); - highscoreEntry.Score = reader.GetInt32(5); - highscoreEntry.Type = reader.GetString(6); - entires.Add(highscoreEntry); - } - - - - return entires.ToArray(); - } - } - - public static Highscore.HighscoreTableEntry[] GetTopWinners(string gameTitle, int limit) - { - List entires = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY wins DESC LIMIT @limit"; - addWithValue(sqlCommand, "@gameTitle", gameTitle); - addWithValue(sqlCommand, "@limit", limit); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while (reader.Read()) - { - Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); - highscoreEntry.UserId = reader.GetInt32(0); - highscoreEntry.GameName = gameTitle; - highscoreEntry.Wins = reader.GetInt32(2); - highscoreEntry.Looses = reader.GetInt32(3); - highscoreEntry.TimesPlayed = reader.GetInt32(4); - highscoreEntry.Score = reader.GetInt32(5); - highscoreEntry.Type = reader.GetString(6); - entires.Add(highscoreEntry); - } - - - - return entires.ToArray(); - } - } - - public static Highscore.HighscoreTableEntry[] GetTopScores(string gameTitle, int limit, bool scores=true) - { - List entires = new List(); - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - if(scores) - sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC LIMIT @limit"; - else - sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC LIMIT @limit"; - addWithValue(sqlCommand, "@gameTitle", gameTitle); - addWithValue(sqlCommand, "@limit", limit); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while(reader.Read()) - { - Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); - highscoreEntry.UserId = reader.GetInt32(0); - highscoreEntry.GameName = gameTitle; - highscoreEntry.Wins = reader.GetInt32(2); - highscoreEntry.Looses = reader.GetInt32(3); - highscoreEntry.TimesPlayed = reader.GetInt32(4); - highscoreEntry.Score = reader.GetInt32(5); - highscoreEntry.Type = reader.GetString(6); - entires.Add(highscoreEntry); - } - - - - return entires.ToArray(); - } - } - - public static int GetRanking(int score, string gameTitle, bool time=false) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - if(time) - sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC"; - else - sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC"; - addWithValue(sqlCommand, "@gameTitle", gameTitle); - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - int i = 1; - while(reader.Read()) - { - if (reader.GetInt32(0) == score) - break; - i++; - } - - - return i; - } - } - public static void UpdateHighscoreWinGame(int playerId, string gameTitle) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Leaderboards SET wins=wins+1, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@gameTitle", gameTitle); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - public static void UpdateHighscoreLooseGame(int playerId, string gameTitle) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Leaderboards SET looses=looses+1, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@gameTitle", gameTitle); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - public static void UpdateHighscore(int playerId, string gameTitle, int score) - { - using (DbConnection db = connectDb()) - { - - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Leaderboards SET score=@score, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; - addWithValue(sqlCommand, "@playerId", playerId); - addWithValue(sqlCommand, "@gameTitle", gameTitle); - addWithValue(sqlCommand, "@score", score); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - - public static void DeleteExpiredLeasedHorsesForOfflinePlayers() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "DELETE FROM Horses WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime <= 0 AND leaser > 0"; - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - public static void TpOfflinePlayersBackToUniterForOfflinePlayers() - { - using (DbConnection db = connectDb()) - { - db.Open(); - - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT ownerId, breed, leaser FROM Horses WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime <= 0 AND leaser > 0"; - sqlCommand.Prepare(); - DbDataReader reader = sqlCommand.ExecuteReader(); - - while(reader.Read()) - { - int playerId = reader.GetInt32(0); - string horseType = HorseInfo.GetBreedById(reader.GetInt32(1)).Type; - int leaserId = reader.GetInt32(2); - - if(horseType == "pegasus" || horseType == "unicorn") - { - foreach(World.SpecialTile tile in World.SpecialTiles) - { - if (tile.Code == null) - continue; - if(tile.Code.StartsWith("HORSELEASER-")) - { - int id = int.Parse(tile.Code.Split("-")[1]); - if(leaserId == id) - { - SetPlayerX(tile.X, playerId); - SetPlayerY(tile.Y, playerId); - } - } - } - } - - - } - - - return; - } - } - - public static void DecrementHorseLeaseTimeForOfflinePlayers() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Horses SET leaseTime = leaseTime - 1 WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime > 0 AND leaser > 0"; - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - - } - public static void IncPlayerTirednessForOfflineUsers() - { - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET tiredness = tiredness + 1 WHERE id NOT IN (SELECT playerId FROM OnlineUsers) AND NOT tiredness +1 > 1000"; - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - return; - } - } - - public static int GetPlayerTiredness(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Tiredness FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int tiredness = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return tiredness; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerTiredness(int id, int tiredness) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET Tiredness=@tiredness WHERE Id=@id"; - addWithValue(sqlCommand, "@tiredness", tiredness); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static void SetPlayerHunger(int id, int hunger) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET Hunger=@hunger WHERE Id=@id"; - addWithValue(sqlCommand, "@hunger", hunger); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - - - public static int GetPlayerHunger(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Hunger FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int hunger = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return hunger; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerThirst(int id, int thirst) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET Thirst=@thirst WHERE Id=@id"; - addWithValue(sqlCommand, "@thirst", thirst); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static int GetPlayerThirst(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Thirst FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int tiredness = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return tiredness; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static int GetPlayerLastLogin(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT LastLogin FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int lastLogin = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return lastLogin; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void SetPlayerLastLogin(int lastlogin, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET LastLogin=@lastlogin WHERE Id=@id"; - addWithValue(sqlCommand, "@lastlogin", lastlogin); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static int GetPlayerMoney(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Money FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - int Money = Convert.ToInt32(sqlCommand.ExecuteScalar()); - - - return Money; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static double GetPlayerBankMoney(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT BankBalance FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - double BankMoney = Convert.ToDouble(sqlCommand.ExecuteScalar()); - - - return BankMoney; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static double GetPlayerBankInterest(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExtExists(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT BankInterest FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - double BankInterest = Convert.ToDouble(sqlCommand.ExecuteScalar()); - - - return BankInterest; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - - public static void DoIntrestPayments(int intrestRate) - { - if (intrestRate == 0) - { - Logger.WarnPrint("Intrest rate is 0, as deviding by 0 causes the universe to implode, adding intrest has been skipped."); - return; - } - using (DbConnection db = connectDb()) - { - db.Open(); - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET BankInterest = BankInterest + (BankInterest * (1/@interestRate)) WHERE NOT BankInterest + (BankInterest * (1/@interestRate)) > 9999999999.9999"; - addWithValue(sqlCommand, "@interestRate", intrestRate); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - } - - public static void SetPlayerBankInterest(double interest, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET BankInterest=@interest WHERE Id=@id"; - addWithValue(sqlCommand, "@interest", interest); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - public static void SetPlayerBankMoney(double bankMoney, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET BankBalance=@bankMoney WHERE Id=@id"; - addWithValue(sqlCommand, "@bankMoney", bankMoney); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static void SetPlayerProfile(string profilePage, int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE UserExt SET ProfilePage=@profilePage WHERE Id=@id"; - addWithValue(sqlCommand, "@profilePage", profilePage); - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - - - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - public static string GetPlayerProfile(int id) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(id)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT ProfilePage FROM UserExt WHERE Id=@id"; - addWithValue(sqlCommand, "@id", id); - sqlCommand.Prepare(); - string profilePage = sqlCommand.ExecuteScalar().ToString(); - - - return profilePage; - } - else - { - throw new KeyNotFoundException("Id " + id + " not found in database."); - } - } - } - - - public static string GetUsername(int userId) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(userId)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT Username FROM Users WHERE Id=@id"; - addWithValue(sqlCommand, "@id", userId); - sqlCommand.Prepare(); - string username = sqlCommand.ExecuteScalar().ToString(); - - - return username; - } - else - { - throw new KeyNotFoundException("Id " + userId + " not found in database."); - } - } - } - public static void SetPasswordHash(string username, string passhash) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "UPDATE Users SET PassHash=@hash WHERE Username=@name"; - addWithValue(sqlCommand, "@hash", passhash); - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - sqlCommand.ExecuteNonQuery(); - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - public static byte[] GetPasswordHash(string username) - { - using (DbConnection db = connectDb()) - { - db.Open(); - if (CheckUserExist(username)) - { - DbCommand sqlCommand = db.CreateCommand(); - sqlCommand.CommandText = "SELECT PassHash FROM Users WHERE Username=@name"; - addWithValue(sqlCommand, "@name", username); - sqlCommand.Prepare(); - string expectedHash = sqlCommand.ExecuteScalar().ToString(); - - - return Helper.StringToByteArray(expectedHash); - } - else - { - throw new KeyNotFoundException("Username " + username + " not found in database."); - } - } - } - } - + ConnectionString = "Data Source=\"" + ConfigReader.DatabaseName + ".db\";"; + + Logger.InfoPrint(ConnectionString); + + using (DbConnection db = connectDb()) + { + + try + { + db.Open(); + } + catch (DbException e) + { + Logger.ErrorPrint("Failed to connect to Database: "+e.Message); + Environment.Exit(1); + } + + string SqlPragma = "PRAGMA journal_mode=WAL;"; + + string UserTable = "CREATE TABLE IF NOT EXISTS Users(Id INT, Username TEXT(16), PassHash TEXT(128), Salt TEXT(128), Gender TEXT(16), Admin TEXT(3), Moderator TEXT(3))"; + string ExtTable = "CREATE TABLE IF NOT EXISTS UserExt(Id INT, X INT, Y INT, LastLogin INT, Money INT, QuestPoints INT, BankBalance DOUBLE, BankInterest DOUBLE, ProfilePage Text(4000),IpAddress TEXT(1028),PrivateNotes Text(65535), CharId INT, ChatViolations INT,Subscriber TEXT(3), SubscribedUntil INT, Experience INT, Tiredness INT, Hunger INT, Thirst INT, FreeMinutes INT, TotalLogins INT)"; + string MailTable = "CREATE TABLE IF NOT EXISTS Mailbox(RandomId INT, IdTo INT, IdFrom INT, Subject TEXT(100), Message Text(65535), TimeSent INT, BeenRead TEXT(3))"; + string BuddyTable = "CREATE TABLE IF NOT EXISTS BuddyList(Id INT, IdFriend INT)"; + string MessageQueue = "CREATE TABLE IF NOT EXISTS MessageQueue(Id INT, Message TEXT(1028))"; + string WorldTable = "CREATE TABLE World(Time INT, Day INT, Year INT, StartTime INT)"; + string WeatherTable = "CREATE TABLE IF NOT EXISTS Weather(Area TEXT(1028), Weather TEXT(64))"; + string InventoryTable = "CREATE TABLE IF NOT EXISTS Inventory(PlayerID INT, RandomID INT, ItemID INT, Data INT)"; + string ShopInventory = "CREATE TABLE IF NOT EXISTS ShopInventory(ShopID INT, RandomID INT, ItemID INT, Data INT)"; + string DroppedItems = "CREATE TABLE IF NOT EXISTS DroppedItems(X INT, Y INT, RandomID INT, ItemID INT, DespawnTimer INT, Data INT)"; + string TrackedQuest = "CREATE TABLE IF NOT EXISTS TrackedQuest(playerId INT, questId INT, timesCompleted INT)"; + string CompetitionGear = "CREATE TABLE IF NOT EXISTS CompetitionGear(playerId INT, headItem INT, bodyItem INT, legItem INT, feetItem INT)"; + string Awards = "CREATE TABLE IF NOT EXISTS Awards(playerId INT, awardId INT)"; + string Jewelry = "CREATE TABLE IF NOT EXISTS Jewelry(playerId INT, slot1 INT, slot2 INT, slot3 INT, slot4 INT)"; + string AbuseReorts = "CREATE TABLE IF NOT EXISTS AbuseReports(ReportCreator TEXT(1028), Reporting TEXT(1028), ReportReason TEXT(1028))"; + string Leaderboards = "CREATE TABLE IF NOT EXISTS Leaderboards(playerId INT, minigame TEXT(128), wins INT, looses INT, timesplayed INT, score INT, type TEXT(128))"; + string NpcStartPoint = "CREATE TABLE IF NOT EXISTS NpcStartPoint(playerId INT, npcId INT, chatpointId INT)"; + string NpcPos = "CREATE TABLE IF NOT EXISTS NpcPos(npcId INT, X INT, Y INT, UdlrPointer INT)"; + string PoetryRooms = "CREATE TABLE IF NOT EXISTS PoetryRooms(poetId INT, X INT, Y INT, roomId INT)"; + string SavedDrawings = "CREATE TABLE IF NOT EXISTS SavedDrawings(playerId INT, Drawing1 TEXT(65535), Drawing2 TEXT(65535), Drawing3 TEXT(65535))"; + string DrawingRooms = "CREATE TABLE IF NOT EXISTS DrawingRooms(roomId INT, Drawing TEXT(65535))"; + string DressupRooms = "CREATE TABLE IF NOT EXISTS DressupRooms(roomId INT, peiceId INT, active TEXT(3), x INT, y INT)"; + string Horses = "CREATE TABLE IF NOT EXISTS Horses(randomId INT, ownerId INT, leaseTime INT, leaser INT, breed INT, name TEXT(128), description TEXT(4000), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, autoSell INT, trainTimer INT, category TEXT(128), spoiled INT, magicUsed INT, hidden TEXT(3))"; + string WildHorse = "CREATE TABLE IF NOT EXISTS WildHorse(randomId INT, originalOwner INT, breed INT, x INT, y INT, name TEXT(128), description TEXT(4000), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, timeout INT, autoSell INT, trainTimer INT, category TEXT(128), spoiled INT, magicUsed INT)"; + string LastPlayer = "CREATE TABLE IF NOT EXISTS LastPlayer(roomId TEXT(1028), playerId INT)"; + string SolvedRealTimeRiddles = "CREATE TABLE IF NOT EXISTS SolvedRealTimeRiddles(playerId INT, riddleId INT)"; + string TrackingStats = "CREATE TABLE IF NOT EXISTS Tracking(playerId INT, what TEXT(128), count INT)"; + string Treasure = "CREATE TABLE IF NOT EXISTS Treasure(randomId INT, x INT, y INT, value INT, type TEXT(128))"; + string Ranches = "CREATE TABLE IF NOT EXISTS Ranches(ranchId INT, playerId INT, title TEXT(50), description TEXT(250), upgradeLevel INT, building1 INT, building2 INT, building3 INT, building4 INT, building5 INT, building6 INT, building7 INT, building8 INT, building9 INT, building10 INT, building11 INT, building12 INT, building13 INT, building14 INT, building15 INT, building16 INT, investedMoney INT)"; + string BannedPlayers = "CREATE TABLE IF NOT EXISTS BannedPlayers(playerId INT, ipAddress TEXT(1028), reason TEXT(1028))"; + string RiddlesComplete = "CREATE TABLE IF NOT EXISTS RiddlesComplete(playerId INT, riddleId INT, solved TEXT(1028))"; + string AuctionTable = "CREATE TABLE IF NOT EXISTS Auctions(roomId INT, randomId INT, horseRandomId INT, ownerId INT, timeRemaining INT, highestBid INT, highestBidder INT, Done TEXT(3))"; + string SolvedRealTimeRiddle = "CREATE TABLE IF NOT EXISTS SolvedRealTimeRiddles(playerId INT, riddleId INT)"; + string MutedPlayers = "CREATE TABLE IF NOT EXISTS MutedPlayers(playerId INT, mutePlayerId INT)"; + string ItemQueue = "CREATE TABLE IF NOT EXISTS ItemPurchaseQueue(playerId INT, itemId INT, count INT)"; + string DeleteOnlineUsers = "DROP TABLE OnlineUsers"; + string OnlineUsers = "CREATE TABLE IF NOT EXISTS OnlineUsers(playerId INT, Admin TEXT(3), Moderator TEXT(3), Subscribed TEXT(3), New TEXT(3))"; + + if (ConfigReader.SqlLite) + { + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = SqlPragma; + sqlCommand.ExecuteNonQuery(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + } + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = ItemQueue; + sqlCommand.ExecuteNonQuery(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = SolvedRealTimeRiddles; + sqlCommand.ExecuteNonQuery(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = MutedPlayers; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = MessageQueue; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = SolvedRealTimeRiddle; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = DressupRooms; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = AuctionTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = NpcPos; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = RiddlesComplete; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Ranches; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Treasure; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = SavedDrawings; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = DrawingRooms; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = TrackingStats; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Horses; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = UserTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = AbuseReorts; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = ExtTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = MailTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = BuddyTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Jewelry; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = WeatherTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Awards; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = DroppedItems; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = InventoryTable; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = ShopInventory; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = TrackedQuest; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = PoetryRooms; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = BannedPlayers; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = CompetitionGear; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = NpcStartPoint; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = LastPlayer; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = WildHorse; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = WorldTable; + sqlCommand.ExecuteNonQuery(); + + sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO World VALUES(0,0,0,@startDate)"; + addWithValue(sqlCommand, "@startDate", (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = Leaderboards; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = DeleteOnlineUsers; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + try + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = OnlineUsers; + sqlCommand.ExecuteNonQuery(); + + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + } + + } + + public static void DeleteRanchOwner(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int[] GetMutedPlayers(int playerId) + { + List MutedPlayerIds = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT mutePlayerId FROM MutedPlayers WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + MutedPlayerIds.Add(reader.GetInt32(0)); + + } + return MutedPlayerIds.ToArray(); + } + public static void AddMutedPlayer(int playerId, int playerToMute) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO MutedPlayers VALUES(@playerId, @mutedPlayerId)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@mutedPlayerId", playerToMute); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void DeleteMutedPlayer(int playerId, int playerToMute) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM MutedPlayers WHERE playerId=@playerId AND mutePlayerId=@mutedPlayerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@mutedPlayerId", playerToMute); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static bool IsRanchOwned(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + } + + public static void ClearItemPurchaseQueue(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM ItemPurchaseQueue WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static Item.ItemPurchaseQueueItem[] GetItemPurchaseQueue(int playerId) + { + List queueItems = new List(); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM ItemPurchaseQueue WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + Item.ItemPurchaseQueueItem itm = new Item.ItemPurchaseQueueItem(); + itm.ItemId = reader.GetInt32(1); + itm.ItemCount = reader.GetInt32(2); + queueItems.Add(itm); + } + + } + return queueItems.ToArray(); + } + + public static void CreateDressupRoomPeice(int roomId, int peiceId, bool active, int x, int y) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO DressupRooms VALUES(@roomId, @peiceId, @active, @x, @y)"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@peiceId", peiceId); + addWithValue(sqlCommand, "@active", active ? "YES" : "NO"); + addWithValue(sqlCommand, "@x", x); + addWithValue(sqlCommand, "@y", y); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void AddMessageToQueue(int userId, string message) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO MessageQueue VALUES(@id,@message)"; + addWithValue(sqlCommand, "@id", userId); + addWithValue(sqlCommand, "@message", message); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void ClearMessageQueue(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM MessageQueue WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static string[] GetMessageQueue(int userId) + { + List msgQueue = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT message FROM MessageQueue WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + msgQueue.Add(reader.GetString(0)); + } + + } + return msgQueue.ToArray(); + } + + public static void SetDressupRoomPeiceX(int roomId, int peiceId, int newX) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE DressupRooms SET x=@x WHERE roomId=@roomId AND peiceId=@peiceId"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@peiceId", peiceId); + addWithValue(sqlCommand, "@x", newX); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetDressupRoomPeiceY(int roomId, int peiceId, int newY) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE DressupRooms SET y=@y WHERE roomId=@roomId AND peiceId=@peiceId"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@peiceId", peiceId); + addWithValue(sqlCommand, "@y", newY); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetDressupRoomPeiceActive(int roomId, int peiceId, bool active) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE DressupRooms SET active=@active WHERE roomId=@roomId AND peiceId=@peiceId"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@peiceId", peiceId); + addWithValue(sqlCommand, "@active", active ? "YES" : "NO"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static Dressup.DressupPeice[] LoadDressupRoom(Dressup.DressupRoom room) + { + List peices = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM DressupRooms WHERE roomId=@roomId"; + addWithValue(sqlCommand, "@roomId", room.RoomId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + int peiceId = reader.GetInt32(1); + bool active = reader.GetString(2) == "YES"; + int x = reader.GetInt32(3); + int y = reader.GetInt32(4); + Dressup.DressupPeice peice = new Dressup.DressupPeice(room, peiceId, x, y, active, false); + peices.Add(peice); + } + + } + return peices.ToArray(); + } + + public static int[] GetSolvedRealTimeRiddles(int playerId) + { + List solvedRiddleId = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT riddleId FROM SolvedRealTimeRiddles WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + solvedRiddleId.Add(reader.GetInt32(0)); + } + + return solvedRiddleId.ToArray(); + } + } + + public static int GetRanchInvestment(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT investedMoney FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int invested = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return invested; + } + } + public static void SetRanchUpgradeLevel(int ranchId, int upgradeLevel) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET upgradeLevel=@upgradeLevel WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@upgradeLevel", upgradeLevel); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchInvestment(int ranchId, int investedMoney) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET investedMoney=@investedMoney WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@investedMoney", investedMoney); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchOwner(int ranchId, int ownerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET playerId=@ownerId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@ownerId", ownerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchDescription(int ranchId, string description) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET description=@description WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@description", description); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchTitle(int ranchId, string title) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET title=@title WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@title", title); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding16(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building16=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding15(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building15=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding14(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building14=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding13(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building13=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding12(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building12=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding11(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building11=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding10(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building10=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding9(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building9=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding8(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building8=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding7(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building7=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding6(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building6=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding5(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building5=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding4(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building4=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding3(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building3=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding2(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building2=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetRanchBuilding1(int ranchId, int buildingId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Ranches SET building1=@buildingId WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@buildingId", buildingId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetRanchBuilding16(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building16 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding15(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building15 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding14(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building14 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding13(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building13 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding12(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building12 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding11(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building11 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding10(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building10 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding9(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building9 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding8(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building8 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding7(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building7 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding6(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building6 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding5(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building5 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding4(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building4 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding3(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building3 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding2(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building2 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchBuilding1(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT building1 FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int building = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return building; + } + } + public static int GetRanchUpgradeLevel(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT upgradeLevel FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int upgradeLevel = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return upgradeLevel; + } + } + + public static string GetRanchDescription(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT description FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + string description = sqlCommand.ExecuteScalar().ToString(); + + return description; + } + } + public static string GetRanchTitle(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT title FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + string title = sqlCommand.ExecuteScalar().ToString(); + + return title; + } + } + public static int GetRanchOwner(int ranchId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT playerId FROM Ranches WHERE ranchId=@ranchId"; + addWithValue(sqlCommand, "@ranchId", ranchId); + sqlCommand.Prepare(); + int playerId = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return playerId; + } + } + + public static int TotalRiddlesCompletedByPlayer(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM RiddlesComplete WHERE playerId=@playerId AND solved=\"YES\""; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count; + } + } + public static bool HasPlayerCompletedRealTimeRiddle(int riddleId, int playerId) + { + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM SolvedRealTimeRiddles WHERE riddleId=@riddleId AND playerId=@playerId"; + addWithValue(sqlCommand, "@riddleId", riddleId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + + } + public static void CompleteRealTimeRiddle(int riddleId, int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO SolvedRealTimeRiddles VALUES(@playerId, @riddleId)"; + addWithValue(sqlCommand, "@riddleId", riddleId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static bool HasPlayerCompletedRiddle(int riddleId, int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM RiddlesComplete WHERE riddleId=@riddleId AND playerId=@playerId AND solved=\"YES\""; + addWithValue(sqlCommand, "@riddleId", riddleId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + } + public static void CompleteRiddle(int riddleId, int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO RiddlesComplete VALUES(@playerId, @riddleId, \"YES\")"; + addWithValue(sqlCommand, "@riddleId", riddleId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void AddRanch(int ranchId, int playerId, string title, string description, int upgradeLevel, int building1, int building2, int building3, int building4, int building5, int building6, int building7, int building8, int building9, int building10, int building11, int building12, int building13, int building14, int building15, int building16, int investedMoney) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Ranches VALUES(@ranchId, @playerId, @title, @description, @upgradeLevel, @building1, @building2, @building3, @building4, @building5, @building6, @building7, @building8, @building9, @building10, @building11, @building12, @building13, @building14, @building15, @building16, @investedMoney)"; + addWithValue(sqlCommand, "@ranchId", ranchId); + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@title", title); + addWithValue(sqlCommand, "@description", description); + addWithValue(sqlCommand, "@upgradeLevel", upgradeLevel); + addWithValue(sqlCommand, "@building1", building1); + addWithValue(sqlCommand, "@building2", building2); + addWithValue(sqlCommand, "@building3", building3); + addWithValue(sqlCommand, "@building4", building4); + addWithValue(sqlCommand, "@building5", building5); + addWithValue(sqlCommand, "@building6", building6); + addWithValue(sqlCommand, "@building7", building7); + addWithValue(sqlCommand, "@building8", building8); + addWithValue(sqlCommand, "@building9", building9); + addWithValue(sqlCommand, "@building10", building10); + addWithValue(sqlCommand, "@building11", building11); + addWithValue(sqlCommand, "@building12", building12); + addWithValue(sqlCommand, "@building13", building13); + addWithValue(sqlCommand, "@building14", building14); + addWithValue(sqlCommand, "@building15", building15); + addWithValue(sqlCommand, "@building16", building16); + addWithValue(sqlCommand, "@investedMoney", investedMoney); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + public static void SetTreasureValue(int randomId, int value) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Treasure SET value=@value WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@value", value); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void DeleteTreasure(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Treasure WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void AddTreasure(int randomId, int x, int y, int value, string type) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Treasure VALUES(@randomId, @x, @y, @value, @type)"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@x", x); + addWithValue(sqlCommand, "@y", y); + addWithValue(sqlCommand, "@value", value); + addWithValue(sqlCommand, "@type", type); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + public static Treasure[] GetTreasures() + { + List treasures = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Treasure"; + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + int randomId = reader.GetInt32(0); + int x = reader.GetInt32(1); + int y = reader.GetInt32(2); + int value = reader.GetInt32(3); + string type = reader.GetString(4); + Treasure treasure = new Treasure(x, y, type, randomId, value); + treasures.Add(treasure); + } + + return treasures.ToArray(); + } + } + + public static void AddTrackedItem(int playerId, Tracking.TrackableItem what, int count) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Tracking VALUES(@playerId, @what, @count)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@what", what.ToString()); + addWithValue(sqlCommand, "@count", count); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static bool HasTrackedItem(int playerId, Tracking.TrackableItem what) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM Tracking WHERE playerId=@playerId AND what=@what"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@what", what.ToString()); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count > 0; + } + } + public static int GetTrackedCount(int playerId, Tracking.TrackableItem what) + { + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT count FROM Tracking WHERE playerId=@playerId AND what=@what"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@what", what.ToString()); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count; + } + } + public static void DeleteAllDroppedItemsWithId(int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE itemId=@itemId"; + addWithValue(sqlCommand, "@itemId", itemId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void DeleteAllItemsFromUsers(int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Inventory WHERE itemId=@itemId"; + addWithValue(sqlCommand, "@itemId", itemId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + + public static void SetTrackedItemCount(int playerId, Tracking.TrackableItem what, int count) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Tracking SET count=@count WHERE playerId=@playerId AND what=@what"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@what", what.ToString()); + addWithValue(sqlCommand, "@count", count); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void AddLastPlayer(string roomId, int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO LastPlayer VALUES(@roomId,@playerId)"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SetWildHorseX(int randomId, int x) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE WildHorse SET x=@x WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@x", x); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetWildHorseTimeout(int randomId, int timeout) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE WildHorse SET timeout=@timeout WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@timeout", timeout); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void RemoveWildHorse(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM WildHorse WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetWildHorseY(int randomId, int x) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE WildHorse SET y=@y WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@y", x); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void RemoveHorse(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Horses WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void AddHorse(HorseInstance horse) + { + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Horses VALUES(@randomId,@originalOwner,@leaseTime,@leaser,@breed,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@autosell,@training,@category,@spoiled,@magicused,@hidden)"; + + addWithValue(sqlCommand, "@randomId", horse.RandomId); + addWithValue(sqlCommand, "@originalOwner", horse.Owner); + addWithValue(sqlCommand, "@leaseTime", horse.LeaseTime); + addWithValue(sqlCommand, "@leaser", horse.Leaser); + addWithValue(sqlCommand, "@breed", horse.Breed.Id); + addWithValue(sqlCommand, "@name", horse.Name); + addWithValue(sqlCommand, "@description", horse.Description); + addWithValue(sqlCommand, "@sex", horse.Gender); + addWithValue(sqlCommand, "@color", horse.Color); + + addWithValue(sqlCommand, "@health", horse.BasicStats.Health); + addWithValue(sqlCommand, "@shoes", horse.BasicStats.Shoes); + addWithValue(sqlCommand, "@hunger", horse.BasicStats.Hunger); + addWithValue(sqlCommand, "@thirst", horse.BasicStats.Thirst); + addWithValue(sqlCommand, "@mood", horse.BasicStats.Mood); + addWithValue(sqlCommand, "@groom", horse.BasicStats.Groom); + addWithValue(sqlCommand, "@tiredness", horse.BasicStats.Tiredness); + addWithValue(sqlCommand, "@experience", horse.BasicStats.Experience); + + addWithValue(sqlCommand, "@speed", horse.AdvancedStats.Speed); + addWithValue(sqlCommand, "@strength", horse.AdvancedStats.Strength); + addWithValue(sqlCommand, "@conformation", horse.AdvancedStats.Conformation); + addWithValue(sqlCommand, "@agility", horse.AdvancedStats.Agility); + addWithValue(sqlCommand, "@endurance", horse.AdvancedStats.Endurance); + addWithValue(sqlCommand, "@inteligence", horse.AdvancedStats.Inteligence); + addWithValue(sqlCommand, "@personality", horse.AdvancedStats.Personality); + addWithValue(sqlCommand, "@height", horse.AdvancedStats.Height); + + if (horse.Equipment.Saddle != null) + addWithValue(sqlCommand, "@saddle", horse.Equipment.Saddle.Id); + else + addWithValue(sqlCommand, "@saddle", null); + + if (horse.Equipment.SaddlePad != null) + addWithValue(sqlCommand, "@saddlepad", horse.Equipment.SaddlePad.Id); + else + addWithValue(sqlCommand, "@saddlepad", null); + + if (horse.Equipment.Bridle != null) + addWithValue(sqlCommand, "@bridle", horse.Equipment.Bridle.Id); + else + addWithValue(sqlCommand, "@bridle", null); + + if (horse.Equipment.Companion != null) + addWithValue(sqlCommand, "@companion", horse.Equipment.Companion.Id); + else + addWithValue(sqlCommand, "@companion", null); + + + + + + addWithValue(sqlCommand, "@autosell", horse.AutoSell); + addWithValue(sqlCommand, "@training", horse.TrainTimer); + addWithValue(sqlCommand, "@category", horse.Category); + addWithValue(sqlCommand, "@spoiled", horse.Spoiled); + addWithValue(sqlCommand, "@magicused", horse.MagicUsed); + + addWithValue(sqlCommand, "@hidden", horse.Hidden ? "YES" : "NO"); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + + } + + public static HorseInstance ReadHorseInstance(DbDataReader reader) + { + int randomId = reader.GetInt32(0); + int breedId = reader.GetInt32(4); + + HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); + string name = reader.GetString(5); + string description = reader.GetString(6); + int spoiled = reader.GetInt32(32); + string category = reader.GetString(31); + int magicUsed = reader.GetInt32(33); + int autosell = reader.GetInt32(29); + int leaseTime = reader.GetInt32(2); + bool hidden = reader.GetString(34) == "YES"; + int owner = reader.GetInt32(1); + string color = reader.GetString(8); + + HorseInstance inst = new HorseInstance(horseBreed, randomId, color, name, description, spoiled, category, magicUsed, autosell, leaseTime, hidden, owner); + + inst.Leaser = reader.GetInt32(3); + inst.Gender = reader.GetString(7); + + + + int health = reader.GetInt32(9); + int shoes = reader.GetInt32(10); + int hunger = reader.GetInt32(11); + int thirst = reader.GetInt32(12); + int mood = reader.GetInt32(13); + int groom = reader.GetInt32(14); + int tiredness = reader.GetInt32(15); + int experience = reader.GetInt32(16); + inst.BasicStats = new HorseInfo.BasicStats(inst, health, shoes, hunger, thirst, mood, groom, tiredness, experience); + + + int speed = reader.GetInt32(17); + int strength = reader.GetInt32(18); + int conformation = reader.GetInt32(19); + int agility = reader.GetInt32(20); + int endurance = reader.GetInt32(21); + int inteligence = reader.GetInt32(22); + int personality = reader.GetInt32(23); + int height = reader.GetInt32(24); + inst.AdvancedStats = new HorseInfo.AdvancedStats(inst, speed, strength, conformation, agility, inteligence, endurance, personality, height); + + if (!reader.IsDBNull(25)) + inst.Equipment.Saddle = Item.GetItemById(reader.GetInt32(25)); + if (!reader.IsDBNull(26)) + inst.Equipment.SaddlePad = Item.GetItemById(reader.GetInt32(26)); + if (!reader.IsDBNull(27)) + inst.Equipment.Bridle = Item.GetItemById(reader.GetInt32(27)); + if (!reader.IsDBNull(28)) + inst.Equipment.Companion = Item.GetItemById(reader.GetInt32(28)); + + + return inst; + } + + public static void LoadHorseInventory(HorseInventory inv, int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + inv.AddHorse(ReadHorseInstance(reader), false, true); + } + + + } + } + + public static void LoadAuctionRoom(Auction auction, int roomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Auctions WHERE roomId=@roomId"; + addWithValue(sqlCommand, "@roomId", roomId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + int randomId = reader.GetInt32(1); + int timeRemaining = reader.GetInt32(4); + int highestBid = reader.GetInt32(5); + int highestBidder = reader.GetInt32(6); + int horseId = reader.GetInt32(2); + + Auction.AuctionEntry auctionEntry = new Auction.AuctionEntry(timeRemaining, highestBid, highestBidder, randomId); + + auctionEntry.Horse = GetPlayerHorse(horseId); + auctionEntry.OwnerId = reader.GetInt32(3); + auctionEntry.Completed = reader.GetString(7) == "YES"; + auctionEntry.auctionRoomPlacedIn = auction; + auction.AddExistingEntry(auctionEntry); + + } + + + } + } + + public static void DeleteAuctionRoom(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Auctions WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void AddAuctionRoom(Auction.AuctionEntry entry, int roomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Auctions VALUES(@roomId, @randomId, @horseRandomId, @ownerId, @timeRemaining, @highestBid, @highestBidder, @done)"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@randomId", entry.RandomId); + addWithValue(sqlCommand, "@horseRandomId", entry.Horse.RandomId); + addWithValue(sqlCommand, "@ownerId", entry.OwnerId); + addWithValue(sqlCommand, "@timeRemaining", entry.TimeRemaining); + addWithValue(sqlCommand, "@highestBid", entry.HighestBid); + addWithValue(sqlCommand, "@highestBidder", entry.HighestBidder); + addWithValue(sqlCommand, "@done", entry.Completed ? "YES" : "NO"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void BanUser(int userId, string ip, string reason) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO BannedPlayers VALUES(@playerId,@ipAddress,@reason)"; + addWithValue(sqlCommand, "@playerId", userId); + addWithValue(sqlCommand, "@ipAddress", ip); + addWithValue(sqlCommand, "@reason", reason); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void UnBanUser(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM BannedPlayers WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", userId); + sqlCommand.ExecuteNonQuery(); + + } + } + + + public static bool IsIpBanned(string ip) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM BannedPlayers WHERE ipAddress=@ipAddr"; + addWithValue(sqlCommand, "@ipAddr", ip); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + } + public static bool IsUserBanned(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM BannedPlayers WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", userId); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + + } + + public static void AddWildHorse(WildHorse horse) + { + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO WildHorse VALUES(@randomId,@originalOwner,@breed,@x,@y,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@timeout,@autosell,@training,@category,@spoiled,@magicused)"; + + addWithValue(sqlCommand, "@randomId", horse.Instance.RandomId); + addWithValue(sqlCommand, "@originalOwner", horse.Instance.Owner); + addWithValue(sqlCommand, "@breed", horse.Instance.Breed.Id); + addWithValue(sqlCommand, "@x", horse.X); + addWithValue(sqlCommand, "@y", horse.Y); + addWithValue(sqlCommand, "@name", horse.Instance.Name); + addWithValue(sqlCommand, "@description", horse.Instance.Description); + addWithValue(sqlCommand, "@sex", horse.Instance.Gender); + addWithValue(sqlCommand, "@color", horse.Instance.Color); + + addWithValue(sqlCommand, "@health", horse.Instance.BasicStats.Health); + addWithValue(sqlCommand, "@shoes", horse.Instance.BasicStats.Shoes); + addWithValue(sqlCommand, "@hunger", horse.Instance.BasicStats.Hunger); + addWithValue(sqlCommand, "@thirst", horse.Instance.BasicStats.Thirst); + addWithValue(sqlCommand, "@mood", horse.Instance.BasicStats.Mood); + addWithValue(sqlCommand, "@groom", horse.Instance.BasicStats.Groom); + addWithValue(sqlCommand, "@tiredness", horse.Instance.BasicStats.Tiredness); + addWithValue(sqlCommand, "@experience", horse.Instance.BasicStats.Experience); + + addWithValue(sqlCommand, "@speed", horse.Instance.AdvancedStats.Speed); + addWithValue(sqlCommand, "@strength", horse.Instance.AdvancedStats.Strength); + addWithValue(sqlCommand, "@conformation", horse.Instance.AdvancedStats.Conformation); + addWithValue(sqlCommand, "@agility", horse.Instance.AdvancedStats.Agility); + addWithValue(sqlCommand, "@endurance", horse.Instance.AdvancedStats.Endurance); + addWithValue(sqlCommand, "@inteligence", horse.Instance.AdvancedStats.Inteligence); + addWithValue(sqlCommand, "@personality", horse.Instance.AdvancedStats.Personality); + addWithValue(sqlCommand, "@height", horse.Instance.AdvancedStats.Height); + + if (horse.Instance.Equipment.Saddle != null) + addWithValue(sqlCommand, "@saddle", horse.Instance.Equipment.Saddle.Id); + else + addWithValue(sqlCommand, "@saddle", null); + + if (horse.Instance.Equipment.SaddlePad != null) + addWithValue(sqlCommand, "@saddlepad", horse.Instance.Equipment.SaddlePad.Id); + else + addWithValue(sqlCommand, "@saddlepad", null); + + if (horse.Instance.Equipment.Bridle != null) + addWithValue(sqlCommand, "@bridle", horse.Instance.Equipment.Bridle.Id); + else + addWithValue(sqlCommand, "@bridle", null); + + if (horse.Instance.Equipment.Companion != null) + addWithValue(sqlCommand, "@companion", horse.Instance.Equipment.Companion.Id); + else + addWithValue(sqlCommand, "@companion", null); + + + + + + addWithValue(sqlCommand, "@timeout", horse.Timeout); + addWithValue(sqlCommand, "@autosell", horse.Instance.AutoSell); + addWithValue(sqlCommand, "@training", horse.Instance.TrainTimer); + addWithValue(sqlCommand, "@category", horse.Instance.Category); + addWithValue(sqlCommand, "@spoiled", horse.Instance.Spoiled); + addWithValue(sqlCommand, "@magicused", horse.Instance.MagicUsed); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + + } + + + public static void LoadWildHorses() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM WildHorse"; + + + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + int randomId = reader.GetInt32(0); + int breedId = reader.GetInt32(2); + HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); + HorseInstance inst = new HorseInstance(horseBreed, randomId); + inst.Owner = reader.GetInt32(1); + inst.Name = reader.GetString(5); + inst.Description = reader.GetString(6); + inst.Gender = reader.GetString(7); + inst.Color = reader.GetString(8); + + inst.BasicStats.Health = reader.GetInt32(9); + inst.BasicStats.Shoes = reader.GetInt32(10); + inst.BasicStats.Hunger = reader.GetInt32(11); + inst.BasicStats.Thirst = reader.GetInt32(12); + inst.BasicStats.Mood = reader.GetInt32(13); + inst.BasicStats.Groom = reader.GetInt32(14); + inst.BasicStats.Tiredness = reader.GetInt32(15); + inst.BasicStats.Experience = reader.GetInt32(16); + + inst.AdvancedStats.Speed = reader.GetInt32(17); + inst.AdvancedStats.Strength = reader.GetInt32(18); + inst.AdvancedStats.Conformation = reader.GetInt32(19); + inst.AdvancedStats.Agility = reader.GetInt32(20); + inst.AdvancedStats.Endurance = reader.GetInt32(21); + inst.AdvancedStats.Inteligence = reader.GetInt32(22); + inst.AdvancedStats.Personality = reader.GetInt32(23); + inst.AdvancedStats.Height = reader.GetInt32(24); + + if (!reader.IsDBNull(25)) + inst.Equipment.Saddle = Item.GetItemById(reader.GetInt32(25)); + if (!reader.IsDBNull(26)) + inst.Equipment.SaddlePad = Item.GetItemById(reader.GetInt32(26)); + if (!reader.IsDBNull(27)) + inst.Equipment.Bridle = Item.GetItemById(reader.GetInt32(27)); + if (!reader.IsDBNull(28)) + inst.Equipment.Companion = Item.GetItemById(reader.GetInt32(28)); + + inst.AutoSell = reader.GetInt32(30); + inst.TrainTimer = reader.GetInt32(31); + inst.Category = reader.GetString(32); + inst.Spoiled = reader.GetInt32(33); + inst.MagicUsed = reader.GetInt32(34); + + int x = reader.GetInt32(3); + int y = reader.GetInt32(4); + int timeout = reader.GetInt32(29); + WildHorse WildHorse = new WildHorse(inst, x, y, timeout, false); + + } + + + } + } + + public static bool LastPlayerExist(string roomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM LastPlayer WHERE roomId=@roomId"; + addWithValue(sqlCommand, "@roomId", roomId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count > 0; + } + } + + public static int GetLastPlayer(string roomId) + { + if (!Database.LastPlayerExist(roomId)) + Database.AddLastPlayer(roomId, -1); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT playerId FROM LastPlayer WHERE roomId=@roomId"; + addWithValue(sqlCommand, "@roomId", roomId); + sqlCommand.Prepare(); + int playerId = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return playerId; + } + } + + + public static void SetLastPlayer(string roomId, int playerId) + { + if (!Database.LastPlayerExist(roomId)) + Database.AddLastPlayer(roomId, -1); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE LastPlayer SET playerId=@playerId WHERE roomId=@roomId"; + addWithValue(sqlCommand, "@roomId", roomId); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void AddPoetWord(int id, int x, int y, int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO PoetryRooms VALUES(@id,@x,@y,@room)"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@x", x); + addWithValue(sqlCommand, "@y", y); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SetPoetPosition(int id, int x, int y, int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE PoetryRooms SET X=@x, Y=@y WHERE poetId=@id AND roomId=@room"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@x", x); + addWithValue(sqlCommand, "@y", y); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static bool GetPoetExist(int id, int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count > 0; + } + } + public static int GetPoetPositionX(int id, int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT X FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + int xpos = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return xpos; + } + } + + public static int GetPoetPositionY(int id, int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Y FROM PoetryRooms WHERE poetId=@id AND roomId=@room"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + int ypos = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return ypos; + } + } + + public static bool SavedDrawingsExist(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM SavedDrawings WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count >= 1; + } + } + public static void CreateSavedDrawings(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO SavedDrawings VALUES(@playerId,'','','')"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static bool DrawingRoomExists(int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM DrawingRooms WHERE roomId=@room"; + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count >= 1; + } + } + + public static void CreateDrawingRoom(int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO DrawingRooms VALUES(@roomId,'')"; + addWithValue(sqlCommand, "@roomId", room); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SetDrawingRoomDrawing(int room, string Drawing) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE DrawingRooms SET Drawing=@drawing WHERE roomId=@room"; + addWithValue(sqlCommand, "@drawing", Drawing); + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + public static string GetDrawingRoomDrawing(int room) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Drawing FROM DrawingRooms WHERE roomId=@room"; + addWithValue(sqlCommand, "@room", room); + sqlCommand.Prepare(); + string drawing = sqlCommand.ExecuteScalar().ToString(); + + + return drawing; + } + } + public static string LoadDrawingSlot3(int playerId) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Drawing3 FROM SavedDrawings WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + string drawing = sqlCommand.ExecuteScalar().ToString(); + + + return drawing; + } + } + public static string LoadDrawingSlot2(int playerId) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Drawing2 FROM SavedDrawings WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + string drawing = sqlCommand.ExecuteScalar().ToString(); + + + return drawing; + } + } + public static string LoadDrawingSlot1(int playerId) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Drawing1 FROM SavedDrawings WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + string drawing = sqlCommand.ExecuteScalar().ToString(); + + + return drawing; + } + } + public static void SaveDrawingSlot1(int playerId, string drawing) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing1=@drawing WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@drawing", drawing); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SaveDrawingSlot2(int playerId, string drawing) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing2=@drawing WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@drawing", drawing); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SaveDrawingSlot3(int playerId, string drawing) + { + if (!SavedDrawingsExist(playerId)) + CreateSavedDrawings(playerId); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE SavedDrawings SET Drawing3=@drawing WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@drawing", drawing); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SetStartTime(int startTime) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE World SET StartTime=@startTimer"; + addWithValue(sqlCommand, "@startTimer", startTime); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetServerTime(int time, int day, int year) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE World SET Time=@time,Day=@day,Year=@year"; + addWithValue(sqlCommand, "@time", time); + addWithValue(sqlCommand, "@day", day); + addWithValue(sqlCommand, "@year", year); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static int GetServerTime() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Time FROM World"; + int serverTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return serverTime; + } + } + + public static int GetServerStartTime() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT StartTime FROM World"; + int startTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return startTime; + } + } + + public static int GetServerDay() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Day FROM World"; + int serverTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return serverTime; + } + } + + public static int GetServerYear() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Year FROM World"; + int creationTime = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return creationTime; + } + } + + + + + public static bool WeatherExists(string Area) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(*) FROM Weather WHERE Area=@area"; + addWithValue(sqlCommand, "@area", Area); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count > 0; + } + } + + public static void InsertWeather(string Area, string Weather) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Weather VALUES(@area,@weather)"; + addWithValue(sqlCommand, "@weather", Weather); + addWithValue(sqlCommand, "@area", Area); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetWeather(string Area, string Weather) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Weather SET Weather=@weather WHERE Area=@area"; + addWithValue(sqlCommand, "@weather", Weather); + addWithValue(sqlCommand, "@area", Area); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + public static string GetWeather(string Area) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Weather FROM Weather WHERE Area=@area"; + addWithValue(sqlCommand, "@area", Area); + string Weather = sqlCommand.ExecuteScalar().ToString(); + + return Weather; + } + } + + public static void DecHorseTrainTimeout() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET trainTimer=trainTimer-1 WHERE trainTimer-1 > -1"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + + public static HorseInstance[] GetPlayerHorsesInCategory(int playerId, string category) + { + + List instances = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId AND category=@category"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@category", category); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + instances.Add(ReadHorseInstance(reader)); + } + + return instances.ToArray(); + } + } + + public static HorseInstance GetPlayerHorse(int horseRandomId) + { + HorseInstance instance = null; + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE randomId=@horseRandomId"; + addWithValue(sqlCommand, "@horseRandomId", horseRandomId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + instance = ReadHorseInstance(reader); + break; + } + + + if (instance == null) + throw new KeyNotFoundException(); + return instance; + } + } + + public static int GetHorseTrainTimeout(int horseRandomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT trainTimer FROM Horses WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + int trainTimer = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return trainTimer; + } + } + + public static void SetAuctionDone(int randomId, bool done) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Auctions SET done=@done WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@done", done ? "YES" : "NO"); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetAuctionTimeout(int randomId, int timeRemaining) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Auctions SET timeRemaining=@timeRemaining WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@timeRemaining", timeRemaining); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetAuctionHighestBid(int randomId, int highestBid) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Auctions SET highestBid=@highestBid WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@highestBid", highestBid); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetAuctionHighestBidder(int randomId, int highestBidder) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Auctions SET highestBidder=@highestBidder WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@highestBidder", highestBidder); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + + public static void SetHorseOwner(int randomId, int owner) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET ownerId=@owner WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@owner", owner); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetHorseHidden(int randomId, bool hidden) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET hidden=@hidden WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@hidden", hidden ? "YES" : "NO"); + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseTrainTimeout(int horseRandomId, int trainTimeout) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET trainTimer=@trainTimer WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@trainTimer", trainTimeout); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseColor(int horseRandomId, string Color) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET color=@color WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@color", Color); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseCategory(int horseRandomId, string Category) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET category=@category WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@category", Category); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetHorseAutoSell(int horseRandomId, int AutoSell) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET autosell=@autosell WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@autosell", AutoSell); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseMagicUsed(int horseRandomId, int MagicUsed) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET magicused=@magicused WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@magicused", MagicUsed); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetLeaseTime(int horseRandomId, int leaseTime) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET leaseTime=@leaseTime WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@leaseTime", leaseTime); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetHorseName(int horseRandomId, string Name) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET name=@name WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@name", Name); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseDescription(int horseRandomId, string Description) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET description=@description WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@description", Description); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseTiredness(int horseRandomId, int Tiredness) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET tiredness=@tiredness WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@tiredness", Tiredness); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseSpeed(int horseRandomId, int Speed) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET speed=@speed WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@speed", Speed); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseStrength(int horseRandomId, int Strength) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET strength=@strength WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@strength", Strength); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseConformation(int horseRandomId, int Conformation) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET conformation=@conformation WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@conformation", Conformation); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseAgility(int horseRandomId, int Agility) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET agility=@agility WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@agility", Agility); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseEndurance(int horseRandomId, int Endurance) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET endurance=@endurance WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@endurance", Endurance); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorsePersonality(int horseRandomId, int Personality) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET personality=@personality WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@personality", Personality); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseInteligence(int horseRandomId, int Inteligence) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET inteligence=@inteligence WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@inteligence", Inteligence); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseSpoiled(int horseRandomId, int Spoiled) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET spoiled=@spoiled WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@spoiled", Spoiled); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseExperience(int horseRandomId, int Experience) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET experience=@experience WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@experience", Experience); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseShoes(int horseRandomId, int Shoes) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET shoes=@shoes WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@shoes", Shoes); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseHeight(int horseRandomId, int Height) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET height=@height WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@height", Height); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseMood(int horseRandomId, int Mood) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET mood=@mood WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@mood", Mood); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseGroom(int horseRandomId, int Groom) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET groom=@groom WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@groom", Groom); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetHorseHunger(int horseRandomId, int Hunger) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET hunger=@hunger WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@hunger", Hunger); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseThirst(int horseRandomId, int Thirst) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET thirst=@thirst WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@thirst", Thirst); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetHorseHealth(int horseRandomId, int Health) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET health=@health WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@health", Health); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetSaddle(int horseRandomId, int saddleItemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET saddle=@saddle WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@saddle", saddleItemId); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetSaddlePad(int horseRandomId, int saddlePadItemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET saddlepad=@saddlepad WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@saddlepad", saddlePadItemId); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetBridle(int horseRandomId, int bridleItemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET bridle=@bridle WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@bridle", bridleItemId); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetCompanion(int horseRandomId, int companionItemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET companion=@companion WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@companion", companionItemId); + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void ClearSaddle(int horseRandomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET saddle=NULL WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void ClearSaddlePad(int horseRandomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET saddlepad=NULL WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void ClearBridle(int horseRandomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET bridle=NULL WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void ClearCompanion(int horseRandomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET companion=NULL WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", horseRandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetWorldWeather(string Weather) + { + using (DbConnection db = connectDb()) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE World SET Weather=@weather"; + addWithValue(sqlCommand, "@weather", Weather); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static byte[] GetPasswordSalt(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Salt FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + string expectedHash = sqlCommand.ExecuteScalar().ToString(); + + return Util.StringToByteArray(expectedHash); + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + + public static bool HasJewelry(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM Jewelry WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete > 0; + } + } + + public static void InitJewelry(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO Jewelry VALUES(@playerId,0,0,0,0)"; + addWithValue(sqlCommand, "@playerId", playerId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + + + public static void SetJewelrySlot1(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE Jewelry SET slot1=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetJewelrySlot1(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT slot1 FROM Jewelry WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static void SetJewelrySlot2(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE Jewelry SET slot2=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetJewelrySlot2(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT slot2 FROM Jewelry WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + + public static void SetJewelrySlot3(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE Jewelry SET slot3=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetJewelrySlot3(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT slot3 FROM Jewelry WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static void SetJewelrySlot4(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE Jewelry SET slot4=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetJewelrySlot4(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT slot4 FROM Jewelry WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + + + public static int[] GetAwards(int playerId) + { + List Awards = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT awardId FROM Awards WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + Awards.Add(reader.GetInt32(0)); + } + + return Awards.ToArray(); + } + } + public static void AddAward(int playerId, int awardId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO Awards VALUES(@playerId,@awardId)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@awardId", awardId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + return; + } + } + + + public static bool HasCompetitionGear(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM CompetitionGear WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete > 0; + } + } + + public static void InitCompetitionGear(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO CompetitionGear VALUES(@playerId,0,0,0,0)"; + addWithValue(sqlCommand, "@playerId", playerId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void SetCompetitionGearHeadPeice(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE CompetitionGear SET headItem=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetCompetitionGearHeadPeice(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT headItem FROM CompetitionGear WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static void SetCompetitionGearBodyPeice(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE CompetitionGear SET bodyItem=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetCompetitionGearBodyPeice(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT bodyItem FROM CompetitionGear WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static void SetCompetitionGearLegPeice(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE CompetitionGear SET legItem=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetCompetitionGearLegPeice(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT legItem FROM CompetitionGear WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static void SetCompetitionGearFeetPeice(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE CompetitionGear SET feetItem=@itemId WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetCompetitionGearFeetPeice(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT feetItem FROM CompetitionGear WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + + public static int GetTrackedQuestCompletedCount(int playerId, int questId) + { + if(CheckTrackeQuestExists(playerId,questId)) + { + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT timesCompleted FROM TrackedQuest WHERE playerId=@playerId AND questId=@questId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@questId", questId); + sqlCommand.Prepare(); + int timesComplete = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return timesComplete; + } + } + else + { + return 0; + } + + } + public static bool CheckTrackeQuestExists(int playerId, int questId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(*) FROM TrackedQuest WHERE playerId=@playerId AND questId=@questId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@questId", questId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + if (count >= 1) + return true; + else + return false; + } + + } + + public static TrackedQuest[] GetTrackedQuests(int playerId) + { + List TrackedQuests = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT questId,timesCompleted FROM TrackedQuest WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + TrackedQuest TrackedQuest = new TrackedQuest(playerId, reader.GetInt32(0), reader.GetInt32(1)); + TrackedQuests.Add(TrackedQuest); + } + + } + return TrackedQuests.ToArray(); + } + public static void SetTrackedQuestCompletedCount(int playerId, int questId, int timesCompleted) + { + if(CheckTrackeQuestExists(playerId,questId)) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE TrackedQuest SET timesCompleted=@timesCompleted WHERE playerId=@playerId AND questId=@questId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@questId", questId); + addWithValue(sqlCommand, "@timesCompleted", timesCompleted); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + else + { + AddNewTrackedQuest(playerId, questId, timesCompleted); + } + + } + public static bool SetUserSubscriptionStatus(int playerId, bool subscribed) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE UserExt SET Subscriber=@subscribed WHERE Id=@playerId"; + addWithValue(sqlCommand, "@subscribed", subscribed ? "YES" : "NO"); + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + + return subscribed; + } + } + public static string GetGender(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT Gender FROM Users WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + string gender = sqlCommand.ExecuteScalar().ToString(); + + + return gender; + } + } + public static int GetLoginCount(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT TotalLogins FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count; + } + } + public static void SetLoginCount(int playerId, int count) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE UserExt SET TotalLogins=@count WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@count", count); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetExperience(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT Experience FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int xp = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return xp; + } + } + public static void SetExperience(int playerId, int exp) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE UserExt SET Experience=@xp WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@xp", exp); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void IncAllUsersFreeTime(int minutes) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE UserExt SET FreeMinutes=FreeMinutes+@minutes"; + addWithValue(sqlCommand, "@minutes", minutes); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetFreeTime(int playerId, int minutes) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE UserExt SET FreeMinutes=@minutes WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@minutes", minutes); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetFreeTime(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT FreeMinutes FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int freeMinutes = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return freeMinutes; + } + } + public static int GetUserSubscriptionExpireDate(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT SubscribedUntil FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int subscribedUntil = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return subscribedUntil; + } + } + public static bool IsUserAdmin(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT Admin FROM Users WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + bool admin = sqlCommand.ExecuteScalar().ToString() == "YES"; + + + return admin; + } + } + public static bool IsUserSubscribed(int playerId) + { + if (ConfigReader.AllUsersSubbed) + return true; + + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT Subscriber FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + bool subscribed = sqlCommand.ExecuteScalar().ToString() == "YES"; + + + return subscribed; + } + } + public static void AddNewTrackedQuest(int playerId, int questId, int timesCompleted) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO TrackedQuest VALUES(@playerId,@questId,@timesCompleted)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@questId", questId); + addWithValue(sqlCommand, "@timesCompleted", timesCompleted); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void AddOnlineUser(int playerId, bool Admin, bool Moderator, bool Subscribed, bool New) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO OnlineUsers VALUES(@playerId, @admin, @moderator, @subscribed, @new)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@admin", Admin ? "YES" : "NO"); + addWithValue(sqlCommand, "@moderator", Moderator ? "YES" : "NO"); + addWithValue(sqlCommand, "@subscribed", Subscribed ? "YES" : "NO"); + addWithValue(sqlCommand, "@new", New ? "YES" : "NO"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void RemoveOnlineUser(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM OnlineUsers WHERE (playerId=@playerId)"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static ItemInstance[] GetShopInventory(int shopId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT ItemId,RandomId,Data FROM ShopInventory WHERE ShopID=@shopId"; + addWithValue(sqlCommand, "@shopId", shopId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + List instances = new List(); + + while (reader.Read()) + { + instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2))); + } + + return instances.ToArray(); + } + } + + public static void AddItemToShopInventory(int shopId, ItemInstance instance) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO ShopInventory VALUES(@shopId,@randomId,@itemId,@data)"; + addWithValue(sqlCommand, "@shopId", shopId); + addWithValue(sqlCommand, "@randomId", instance.RandomId); + addWithValue(sqlCommand, "@itemId", instance.ItemId); + addWithValue(sqlCommand, "@data", instance.Data); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void RemoveItemFromShopInventory(int shopId, ItemInstance instance) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM ShopInventory WHERE (ShopID=@shopId AND RandomId=@randomId)"; + addWithValue(sqlCommand, "@shopId", shopId); + addWithValue(sqlCommand, "@randomId", instance.RandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static ItemInstance[] GetPlayerInventory(int playerId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT ItemId,RandomId,Data FROM Inventory WHERE PlayerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + List instances = new List(); + + while (reader.Read()) + { + instances.Add(new ItemInstance(reader.GetInt32(0), reader.GetInt32(1), reader.GetInt32(2))); + } + + return instances.ToArray(); + } + } + public static int[] GetModsAndAdmins() + { + List userList = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT id FROM Users WHERE Moderator=\"YES\" AND Admin=\"YES\""; + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userList.Add(reader.GetInt32(0)); + } + + } + return userList.ToArray(); + } + + public static int[] GetUsers() + { + List userList = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT id FROM Users"; + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + userList.Add(reader.GetInt32(0)); + } + + } + return userList.ToArray(); + } + public static int[] GetModeratorUsers() + { + List userList = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT id FROM Users WHERE Moderator=\"YES\" OR Admin=\"YES\""; + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userList.Add(reader.GetInt32(0)); + } + + } + return userList.ToArray(); + } + + public static void AddItemToInventory(int playerId, ItemInstance instance) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO Inventory VALUES(@playerId,@randomId,@itemId, @data)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@randomId", instance.RandomId); + addWithValue(sqlCommand, "@itemId", instance.ItemId); + addWithValue(sqlCommand, "@data", instance.Data); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void RemoveAllItemTypesFromPlayerInventory(int playerId, int itemId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM Inventory WHERE (PlayerId=@playerId AND ItemID=@itemId)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@itemId", itemId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void RemoveItemFromInventory(int playerId, ItemInstance instance) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM Inventory WHERE (PlayerId=@playerId AND RandomId=@randomId)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@randomId", instance.RandomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static bool HasNpcStartpointSet(int playerId, int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM NpcStartPoint WHERE playerId=@playerId AND npcId=@npcId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int total = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return total >= 1; + } + } + public static bool HasNpcPos(int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM NpcPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int total = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return total >= 1; + } + } + public static void SetNpcY(int npcId, int x) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE NpcPos SET Y=@yPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@yPos", x); + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetNpcX(int npcId, int x) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE NpcPos SET X=@xPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@xPos", x); + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetNpcUdlrPointer(int npcId, int udlr) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE NpcPos SET UdlrPointer=@udlr WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@udlr", udlr); + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static int GetNpcUdlrPointer(int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT UdlrPointer FROM NpcPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int udlrPointer = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return udlrPointer; + } + } + public static int GetNpcPosY(int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT y FROM NpcPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int y = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return y; + } + } + public static int GetNpcPosX(int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT X FROM NpcPos WHERE npcId=@npcId"; + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int x = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return x; + } + } + public static void AddNpcPos(int npcId, int X, int Y, int udlrPointer) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO NpcPos VALUES(@npcId, @xPos, @yPos, @udlr)"; + addWithValue(sqlCommand, "@npcId", npcId); + addWithValue(sqlCommand, "@xPos", X); + addWithValue(sqlCommand, "@yPos", Y); + addWithValue(sqlCommand, "@udlr", udlrPointer); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void AddNpcStartPoint(int playerId, int npcId, int startChatpoint) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "INSERT INTO NpcStartPoint VALUES(@playerId, @npcId, @chatpointId)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@npcId", npcId); + addWithValue(sqlCommand, "@chatpointId", startChatpoint); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void SetNpcStartPoint(int playerId, int npcId, int startChatpoint) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "UPDATE NpcStartPoint SET chatpointId=@chatpointId WHERE playerId=@playerId AND npcId=@npcId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@npcId", npcId); + addWithValue(sqlCommand, "@chatpointId", startChatpoint); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static int GetDroppedItemsCount() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT COUNT(1) FROM DroppedItems"; + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count; + } + } + public static int GetNpcStartPoint(int playerId, int npcId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "SELECT chatpointId FROM NpcStartPoint WHERE playerId=@playerId AND npcId=@npcId"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@npcId", npcId); + sqlCommand.Prepare(); + int startPoint = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return startPoint; + } + } + + public static void RemoveDespawningItems() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE despawnTimer <=0"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + + public static void RemoveDroppedItem(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + sqlCommand.CommandText = "DELETE FROM DroppedItems WHERE (RandomId=@randomId)"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static DroppedItems.DroppedItem[] GetDroppedItems() + { + List itemList = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM DroppedItems"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + ItemInstance instance = new ItemInstance(reader.GetInt32(3), reader.GetInt32(2)); + DroppedItems.DroppedItem droppedItem = new DroppedItems.DroppedItem(instance); + droppedItem.X = reader.GetInt32(0); + droppedItem.Y = reader.GetInt32(1); + droppedItem.DespawnTimer = reader.GetInt32(4); + droppedItem.Data = reader.GetInt32(5); + itemList.Add(droppedItem); + } + + + } + return itemList.ToArray(); + } + public static void DecrementDroppedItemDespawnTimer() + { + using (DbConnection db = connectDb()) + { + db.Open(); + + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE DroppedItems SET DespawnTimer=DespawnTimer-1"; + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void AddDroppedItem(DroppedItems.DroppedItem item) + { + using (DbConnection db = connectDb()) + { + db.Open(); + + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO DroppedItems VALUES(@x, @y, @randomId, @itemId, @despawnTimer, @data)"; + addWithValue(sqlCommand, "@x", item.X); + addWithValue(sqlCommand, "@y", item.Y); + addWithValue(sqlCommand, "@randomId", item.Instance.RandomId); + addWithValue(sqlCommand, "@itemId", item.Instance.ItemId); + addWithValue(sqlCommand, "@despawnTimer", item.DespawnTimer); + addWithValue(sqlCommand, "@data", item.Data); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + + public static void AddReport(string reportCreator, string reporting, string reportReason) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + int epoch = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; + + sqlCommand.CommandText = "INSERT INTO AbuseReports VALUES(@reportCreator,@reporting,@reportReason)"; + addWithValue(sqlCommand, "@reportCreator", reportCreator); + addWithValue(sqlCommand, "@reporting", reporting); + addWithValue(sqlCommand, "@reportReason", reportReason); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + + } + public static Mailbox.Mail[] LoadMailbox(int toId) + { + List mailList = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + + sqlCommand.CommandText = "SELECT * FROM Mailbox WHERE IdTo=@toId"; + addWithValue(sqlCommand, "@toId", toId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + Mailbox.Mail MailMessage = new Mailbox.Mail(); + MailMessage.RandomId = RandomID.NextRandomId(reader.GetInt32(0)); + MailMessage.ToUser = reader.GetInt32(1); + MailMessage.FromUser = reader.GetInt32(2); + MailMessage.Subject = reader.GetString(3); + MailMessage.Message = reader.GetString(4); + MailMessage.Timestamp = reader.GetInt32(5); + MailMessage.Read = reader.GetString(6) == "YES"; + mailList.Add(MailMessage); + } + + } + return mailList.ToArray(); + } + public static void ReadAllMail(int toId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + + sqlCommand.CommandText = "UPDATE Mailbox SET BeenRead='YES' WHERE IdTo=@toId"; + addWithValue(sqlCommand, "@toId", toId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void DeleteMail(int randomId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + + sqlCommand.CommandText = "DELETE FROM Mailbox WHERE randomId=@randomId"; + addWithValue(sqlCommand, "@randomId", randomId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + public static void AddMail(int randomId, int toId, int fromId, string subject, string message, int timestamp, bool read) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + + + sqlCommand.CommandText = "INSERT INTO Mailbox VALUES(@randomId, @toId,@from,@subject,@message,@time,@read)"; + addWithValue(sqlCommand, "@randomId", randomId); + addWithValue(sqlCommand, "@toId", toId); + addWithValue(sqlCommand, "@from", fromId); + addWithValue(sqlCommand, "@subject", subject); + addWithValue(sqlCommand, "@message", message); + addWithValue(sqlCommand, "@time", timestamp); + addWithValue(sqlCommand, "@read", read ? "YES" : "NO"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + + } + + public static bool CheckUserExist(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM Users WHERE Id=@id"; + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + + Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + return count >= 1; + } + } + public static bool CheckUserExist(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + + Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count >= 1; + } + } + public static bool CheckUserExtExists(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + + Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count >= 1; + } + } + + + public static bool CheckUserIsModerator(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Moderator FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + string modStr = sqlCommand.ExecuteScalar().ToString(); + + + return modStr == "YES"; + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + + + public static bool CheckUserIsAdmin(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Admin FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + string adminStr = sqlCommand.ExecuteScalar().ToString(); + + + return adminStr == "YES"; + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + + public static int GetBuddyCount(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT COUNT(1) FROM BuddyList WHERE Id=@id OR IdFriend=@id"; + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + + Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count; + } + } + + public static int[] GetBuddyList(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (GetBuddyCount(id) <= 0) + return new int[0]; // user is forever alone. + + List BuddyList = new List(); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Id,IdFriend FROM BuddyList WHERE Id=@id OR IdFriend=@id"; + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + DbDataReader dataReader = sqlCommand.ExecuteReader(); + + while (dataReader.Read()) + { + int adder = dataReader.GetInt32(0); + int friend = dataReader.GetInt32(1); + if (adder != id) + BuddyList.Add(adder); + else if (friend != id) + BuddyList.Add(friend); + } + + + return BuddyList.ToArray(); + } + } + + public static void RemoveBuddy(int id, int friendId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM BuddyList WHERE (Id=@id AND IdFriend=@friendId) OR (Id=@friendid AND IdFriend=@Id)"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@friendId", friendId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + } + } + + public static void AddBuddy(int id, int friendId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO BuddyList VALUES(@id,@friendId)"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@friendId", friendId); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + public static string GetIpAddress(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (!CheckUserExtExists(id)) // user allready exists! + throw new Exception("Userid " + id + " Does not exist in UserExt."); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT IpAddress FROM UserExt WHERE Id=@playerId"; + addWithValue(sqlCommand, "@playerId", id); + sqlCommand.Prepare(); + string IpAddress = sqlCommand.ExecuteScalar().ToString(); + + return IpAddress; + } + } + public static void SetIpAddress(int id, string ipAddress) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (!CheckUserExtExists(id)) // user allready exists! + throw new Exception("Userid " + id + " Does not exist in UserExt."); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET IpAddress=@ipAddr WHERE Id=@playerId"; + addWithValue(sqlCommand, "@ipAddr", ipAddress); + addWithValue(sqlCommand, "@playerId", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static int GetNextFreeUserId() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT MAX(Id)+1 FROM Users"; + sqlCommand.Prepare(); + + object res = sqlCommand.ExecuteScalar(); + if (res == DBNull.Value) + return 0; + + return Convert.ToInt32(res); + } + } + + public static void CreateUser(int id, string username, string passhash, string salt, string gender, bool admin, bool moderator) + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Users VALUES(@id,@username,@passhash,@salt,@gender,@admin,@moderator)"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@username", username); + addWithValue(sqlCommand, "@passhash", passhash); + addWithValue(sqlCommand, "@salt", salt); + addWithValue(sqlCommand, "@gender", gender); + addWithValue(sqlCommand, "@admin", admin ? "YES" : "NO"); + addWithValue(sqlCommand, "@moderator", moderator ? "YES" : "NO"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + + public static void CreateUserExt(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(id)) // user allready exists! + throw new Exception("Userid " + id + " Allready in UserExt."); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO UserExt VALUES(@id,@x,@y,@timestamp,0,0,0,0,'','','',0,0,'NO',0,0,1000,1000,1000, 180,1)"; + addWithValue(sqlCommand, "@id", id); + addWithValue(sqlCommand, "@timestamp", Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds())); + addWithValue(sqlCommand, "@x", Map.NewUserStartX); + addWithValue(sqlCommand, "@y", Map.NewUserStartY); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static int GetUserid(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Id FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + int userId = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return userId; + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + + public static string GetPlayerNotes(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT PrivateNotes FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + string privateNotes = sqlCommand.ExecuteScalar().ToString(); + + + return privateNotes; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerNotes(int id, string notes) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET PrivateNotes=@notes WHERE Id=@id"; + addWithValue(sqlCommand, "@notes", notes); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + + public static int GetPlayerCharId(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT CharId FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int CharId = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return CharId; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerCharId(int charid, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET CharId=@charId WHERE Id=@id"; + addWithValue(sqlCommand, "@charId", charid); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static int GetPlayerX(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT X FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int X = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return X; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerX(int x, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET X=@x WHERE Id=@id"; + addWithValue(sqlCommand, "@x", x); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static int GetPlayerY(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Y FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int Y = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return Y; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static int GetChatViolations(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT ChatViolations FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int violations = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return violations; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + + public static void SetChatViolations(int violations, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET ChatViolations=@violations WHERE Id=@id"; + addWithValue(sqlCommand, "@violations", violations); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + public static void SetPlayerY(int y, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET Y=@y WHERE Id=@id"; + addWithValue(sqlCommand, "@y", y); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static void SetPlayerQuestPoints(int qp, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET QuestPoints=@questPoints WHERE Id=@id"; + addWithValue(sqlCommand, "@questPoints", qp); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + public static int GetPlayerQuestPoints(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT QuestPoints FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int QuestPoints = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return QuestPoints; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + + public static void SetPlayerMoney(int money, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET Money=@money WHERE Id=@id"; + addWithValue(sqlCommand, "@money", money); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static HorseInstance[] GetMostExperiencedHorses() + { + List inst = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses ORDER BY experience DESC LIMIT 25"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + inst.Add(ReadHorseInstance(reader)); + } + + } + return inst.ToArray(); + } + public static int[] GetMinigamePlayers() + { + List userIds = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT DISTINCT playerId, SUM(timesplayed) OVER (PARTITION BY playerId) AS totalPlays FROM Leaderboards ORDER BY totalPlays DESC LIMIT 25"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userIds.Add(reader.GetInt32(0)); + } + + } + return userIds.ToArray(); + } + + + public static int[] GetExperiencedPlayers() + { + List userIds = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY Experience DESC LIMIT 25"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userIds.Add(reader.GetInt32(0)); + } + + } + return userIds.ToArray(); + + } + public static int[] GetAdventurousPlayers() + { + List userIds = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY QuestPoints DESC LIMIT 25"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userIds.Add(reader.GetInt32(0)); + } + + } + return userIds.ToArray(); + + } + public static int[] GetRichestPlayers() + { + List userIds = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT id FROM UserExt ORDER BY Money+BankBalance DESC LIMIT 25"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + userIds.Add(reader.GetInt32(0)); + } + + } + return userIds.ToArray(); + + } + public static HorseInstance[] GetMostSpoiledHorses() + { + List inst = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses ORDER BY spoiled DESC LIMIT 100"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + inst.Add(ReadHorseInstance(reader)); + } + + } + return inst.ToArray(); + } + public static HorseInstance[] GetBiggestExpAutoSell() + { + List inst = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE autoSell > 0 ORDER BY experience DESC LIMIT 50"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while (reader.Read()) + { + inst.Add(ReadHorseInstance(reader)); + } + + } + return inst.ToArray(); + } + public static HorseInstance[] GetCheapestHorseAutoSell() + { + List inst = new List(); + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE autoSell > 0 ORDER BY autoSell LIMIT 100"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + while(reader.Read()) + { + inst.Add(ReadHorseInstance(reader)); + } + + } + return inst.ToArray(); + } + public static int GetPlayerTotalMinigamesPlayed(int playerId) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT SUM(timesplayed) FROM Leaderboards WHERE playerId=@playerId"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + int count = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return count; + } + } + + public static void AddNewWinner(int playerId, string gameTitle, int wins, int looses) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Leaderboards VALUES(@playerId,@gameTitle,@wins,@loose,1,0,@type)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@gameTitle", gameTitle); + addWithValue(sqlCommand, "@wins", wins); + addWithValue(sqlCommand, "@loose", looses); + addWithValue(sqlCommand, "@type", "WINLOSS"); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + public static void AddNewHighscore(int playerId, string gameTitle, int score, string type) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Leaderboards VALUES(@playerId,@gameTitle,0,0,1,@score,@type)"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@gameTitle", gameTitle); + addWithValue(sqlCommand, "@score", score); + addWithValue(sqlCommand, "@type", type); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + + public static Highscore.HighscoreTableEntry[] GetPlayerHighScores(int playerId) + { + List entires = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE playerId=@playerId ORDER BY score DESC"; + addWithValue(sqlCommand, "@playerId", playerId); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); + highscoreEntry.UserId = reader.GetInt32(0); + highscoreEntry.GameName = reader.GetString(1); + highscoreEntry.Wins = reader.GetInt32(2); + highscoreEntry.Looses = reader.GetInt32(3); + highscoreEntry.TimesPlayed = reader.GetInt32(4); + highscoreEntry.Score = reader.GetInt32(5); + highscoreEntry.Type = reader.GetString(6); + entires.Add(highscoreEntry); + } + + + + return entires.ToArray(); + } + } + + public static Highscore.HighscoreTableEntry[] GetTopWinners(string gameTitle, int limit) + { + List entires = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY wins DESC LIMIT @limit"; + addWithValue(sqlCommand, "@gameTitle", gameTitle); + addWithValue(sqlCommand, "@limit", limit); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); + highscoreEntry.UserId = reader.GetInt32(0); + highscoreEntry.GameName = gameTitle; + highscoreEntry.Wins = reader.GetInt32(2); + highscoreEntry.Looses = reader.GetInt32(3); + highscoreEntry.TimesPlayed = reader.GetInt32(4); + highscoreEntry.Score = reader.GetInt32(5); + highscoreEntry.Type = reader.GetString(6); + entires.Add(highscoreEntry); + } + + + + return entires.ToArray(); + } + } + + public static Highscore.HighscoreTableEntry[] GetTopScores(string gameTitle, int limit, bool scores=true) + { + List entires = new List(); + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + if(scores) + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC LIMIT @limit"; + else + sqlCommand.CommandText = "SELECT * FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC LIMIT @limit"; + addWithValue(sqlCommand, "@gameTitle", gameTitle); + addWithValue(sqlCommand, "@limit", limit); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while(reader.Read()) + { + Highscore.HighscoreTableEntry highscoreEntry = new Highscore.HighscoreTableEntry(); + highscoreEntry.UserId = reader.GetInt32(0); + highscoreEntry.GameName = gameTitle; + highscoreEntry.Wins = reader.GetInt32(2); + highscoreEntry.Looses = reader.GetInt32(3); + highscoreEntry.TimesPlayed = reader.GetInt32(4); + highscoreEntry.Score = reader.GetInt32(5); + highscoreEntry.Type = reader.GetString(6); + entires.Add(highscoreEntry); + } + + + + return entires.ToArray(); + } + } + + public static int GetRanking(int score, string gameTitle, bool time=false) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + if(time) + sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score ASC"; + else + sqlCommand.CommandText = "SELECT DISTINCT score FROM Leaderboards WHERE minigame=@gameTitle ORDER BY score DESC"; + addWithValue(sqlCommand, "@gameTitle", gameTitle); + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + int i = 1; + while(reader.Read()) + { + if (reader.GetInt32(0) == score) + break; + i++; + } + + + return i; + } + } + public static void UpdateHighscoreWinGame(int playerId, string gameTitle) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Leaderboards SET wins=wins+1, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@gameTitle", gameTitle); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + public static void UpdateHighscoreLooseGame(int playerId, string gameTitle) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Leaderboards SET looses=looses+1, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@gameTitle", gameTitle); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + public static void UpdateHighscore(int playerId, string gameTitle, int score) + { + using (DbConnection db = connectDb()) + { + + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Leaderboards SET score=@score, timesplayed=timesplayed+1 WHERE playerId=@playerId AND minigame=@gameTitle"; + addWithValue(sqlCommand, "@playerId", playerId); + addWithValue(sqlCommand, "@gameTitle", gameTitle); + addWithValue(sqlCommand, "@score", score); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + + public static void DeleteExpiredLeasedHorsesForOfflinePlayers() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "DELETE FROM Horses WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime <= 0 AND leaser > 0"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + public static void TpOfflinePlayersBackToUniterForOfflinePlayers() + { + using (DbConnection db = connectDb()) + { + db.Open(); + + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT ownerId, breed, leaser FROM Horses WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime <= 0 AND leaser > 0"; + sqlCommand.Prepare(); + DbDataReader reader = sqlCommand.ExecuteReader(); + + while(reader.Read()) + { + int playerId = reader.GetInt32(0); + string horseType = HorseInfo.GetBreedById(reader.GetInt32(1)).Type; + int leaserId = reader.GetInt32(2); + + if(horseType == "pegasus" || horseType == "unicorn") + { + foreach(World.SpecialTile tile in World.SpecialTiles) + { + if (tile.Code == null) + continue; + if(tile.Code.StartsWith("HORSELEASER-")) + { + int id = int.Parse(tile.Code.Split("-")[1]); + if(leaserId == id) + { + SetPlayerX(tile.X, playerId); + SetPlayerY(tile.Y, playerId); + } + } + } + } + + + } + + + return; + } + } + + public static void DecrementHorseLeaseTimeForOfflinePlayers() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Horses SET leaseTime = leaseTime - 1 WHERE ownerId NOT IN (SELECT playerId FROM OnlineUsers) AND leaseTime > 0 AND leaser > 0"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + + } + public static void IncPlayerTirednessForOfflineUsers() + { + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET tiredness = tiredness + 1 WHERE id NOT IN (SELECT playerId FROM OnlineUsers) AND NOT tiredness +1 > 1000"; + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + return; + } + } + + public static int GetPlayerTiredness(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Tiredness FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int tiredness = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return tiredness; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerTiredness(int id, int tiredness) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET Tiredness=@tiredness WHERE Id=@id"; + addWithValue(sqlCommand, "@tiredness", tiredness); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static void SetPlayerHunger(int id, int hunger) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET Hunger=@hunger WHERE Id=@id"; + addWithValue(sqlCommand, "@hunger", hunger); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + + + public static int GetPlayerHunger(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Hunger FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int hunger = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return hunger; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerThirst(int id, int thirst) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET Thirst=@thirst WHERE Id=@id"; + addWithValue(sqlCommand, "@thirst", thirst); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static int GetPlayerThirst(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Thirst FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int tiredness = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return tiredness; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static int GetPlayerLastLogin(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT LastLogin FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int lastLogin = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return lastLogin; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void SetPlayerLastLogin(int lastlogin, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET LastLogin=@lastlogin WHERE Id=@id"; + addWithValue(sqlCommand, "@lastlogin", lastlogin); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static int GetPlayerMoney(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Money FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + int Money = Convert.ToInt32(sqlCommand.ExecuteScalar()); + + + return Money; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static double GetPlayerBankMoney(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT BankBalance FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + double BankMoney = Convert.ToDouble(sqlCommand.ExecuteScalar()); + + + return BankMoney; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static double GetPlayerBankInterest(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExtExists(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT BankInterest FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + double BankInterest = Convert.ToDouble(sqlCommand.ExecuteScalar()); + + + return BankInterest; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + + public static void DoIntrestPayments(int intrestRate) + { + if (intrestRate == 0) + { + Logger.WarnPrint("Intrest rate is 0, as deviding by 0 causes the universe to implode, adding intrest has been skipped."); + return; + } + using (DbConnection db = connectDb()) + { + db.Open(); + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET BankInterest = BankInterest + (BankInterest * (1/@interestRate)) WHERE NOT BankInterest + (BankInterest * (1/@interestRate)) > 9999999999.9999"; + addWithValue(sqlCommand, "@interestRate", intrestRate); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + } + + public static void SetPlayerBankInterest(double interest, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET BankInterest=@interest WHERE Id=@id"; + addWithValue(sqlCommand, "@interest", interest); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + public static void SetPlayerBankMoney(double bankMoney, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET BankBalance=@bankMoney WHERE Id=@id"; + addWithValue(sqlCommand, "@bankMoney", bankMoney); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static void SetPlayerProfile(string profilePage, int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE UserExt SET ProfilePage=@profilePage WHERE Id=@id"; + addWithValue(sqlCommand, "@profilePage", profilePage); + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + public static string GetPlayerProfile(int id) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(id)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT ProfilePage FROM UserExt WHERE Id=@id"; + addWithValue(sqlCommand, "@id", id); + sqlCommand.Prepare(); + string profilePage = sqlCommand.ExecuteScalar().ToString(); + + + return profilePage; + } + else + { + throw new KeyNotFoundException("Id " + id + " not found in database."); + } + } + } + + + public static string GetUsername(int userId) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(userId)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT Username FROM Users WHERE Id=@id"; + addWithValue(sqlCommand, "@id", userId); + sqlCommand.Prepare(); + string username = sqlCommand.ExecuteScalar().ToString(); + + + return username; + } + else + { + throw new KeyNotFoundException("Id " + userId + " not found in database."); + } + } + } + public static void SetPasswordHash(string username, string passhash) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "UPDATE Users SET PassHash=@hash WHERE Username=@name"; + addWithValue(sqlCommand, "@hash", passhash); + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + public static byte[] GetPasswordHash(string username) + { + using (DbConnection db = connectDb()) + { + db.Open(); + if (CheckUserExist(username)) + { + DbCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT PassHash FROM Users WHERE Username=@name"; + addWithValue(sqlCommand, "@name", username); + sqlCommand.Prepare(); + string expectedHash = sqlCommand.ExecuteScalar().ToString(); + + + return Util.StringToByteArray(expectedHash); + } + else + { + throw new KeyNotFoundException("Username " + username + " not found in database."); + } + } + } + } + } \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/Server/Entry.cs b/HorseIsleServer/LibHISP/Server/Entry.cs old mode 100755 new mode 100644 index 5f1e530..89bc993 --- a/HorseIsleServer/LibHISP/Server/Entry.cs +++ b/HorseIsleServer/LibHISP/Server/Entry.cs @@ -1,90 +1,72 @@ -using HISP.Game; -using HISP.Game.Horse; -using HISP.Game.Items; -using HISP.Game.Services; -using HISP.Game.SwfModules; -using HISP.Game.Chat; -using HISP.Security; - -using System; -using System.Diagnostics; - -namespace HISP.Server -{ - public static class Entry - { - // "Entry Point" - - private static void defaultOnShutdownCallback() - { - Process.GetCurrentProcess().Close(); - } - - public static Action OnShutdown = defaultOnShutdownCallback; - - public static void SetShutdownCallback(Action callback) - { - OnShutdown = callback; - } - - public static void RegisterCrashHandler() - { -#if (!OS_DEBUG) - AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(HispCrashHandler); -#endif - } - - public static void Start() - { - RegisterCrashHandler(); - Console.Title = ServerVersion.GetBuildString(); - ConfigReader.OpenConfig(); - CrossDomainPolicy.GetPolicyFile(); - Database.OpenDatabase(); - GameDataJson.ReadGamedata(); - - Map.OpenMap(); - World.ReadWorldData(); - Treasure.Init(); - - DroppedItems.Init(); - WildHorse.Init(); - - Drawingroom.LoadAllDrawingRooms(); - Brickpoet.LoadPoetryRooms(); - Multiroom.CreateMultirooms(); - - Auction.LoadAllAuctionRooms(); - - Item.DoSpecialCases(); - Command.RegisterCommands(); - - GameServer.StartServer(); - } - - private static void HispCrashHandler(object sender, UnhandledExceptionEventArgs e) - { - - string[] becauseRustWont = { - "It was from the artists and poets that the pertinent answers came, and I\r\nknow that panic would have broken loose had they been able to compare notes.\r\nAs it was, lacking their original letters, I half suspected the compiler of\r\nhaving asked leading questions, or of having edited the correspondence in\r\ncorroboration of what he had latently resolved to see.", - "There are not many persons who know what wonders are opened to them in the\r\nstories and visions of their youth; for when as children we listen and dream,\r\nwe think but half-formed thoughts, and when as men we try to remember, we are\r\ndulled and prosaic with the poison of life. But some of us awake in the night\r\nwith strange phantasms of enchanted hills and gardens, of fountains that sing\r\nin the sun, of golden cliffs overhanging murmuring seas, of plains that stretch\r\ndown to sleeping cities of bronze and stone, and of shadowy companies of heroes\r\nthat ride caparisoned white horses along the edges of thick forests; and then\r\nwe know that we have looked back through the ivory gates into that world of\r\nwonder which was ours before we were wise and unhappy.", - "Instead of the poems I had hoped for, there came only a shuddering blackness\r\nand ineffable loneliness; and I saw at last a fearful truth which no one had\r\never dared to breathe before — the unwhisperable secret of secrets — The fact\r\nthat this city of stone and stridor is not a sentient perpetuation of Old New\r\nYork as London is of Old London and Paris of Old Paris, but that it is in fact\r\nquite dead, its sprawling body imperfectly embalmed and infested with queer\r\nanimate things which have nothing to do with it as it was in life.", - "The ocean ate the last of the land and poured into the smoking gulf, thereby\r\ngiving up all it had ever conquered. From the new-flooded lands it flowed\r\nagain, uncovering death and decay; and from its ancient and immemorial bed it\r\ntrickled loathsomely, uncovering nighted secrets of the years when Time was\r\nyoung and the gods unborn. Above the waves rose weedy remembered spires. The\r\nmoon laid pale lilies of light on dead London, and Paris stood up from its damp\r\ngrave to be sanctified with star-dust. Then rose spires and monoliths that were\r\nweedy but not remembered; terrible spires and monoliths of lands that men never\r\nknew were lands...", - "There was a night when winds from unknown spaces whirled us irresistibly into\r\nlimitless vacuum beyond all thought and entity. Perceptions of the most\r\nmaddeningly untransmissible sort thronged upon us; perceptions of infinity\r\nwhich at the time convulsed us with joy, yet which are now partly lost to my\r\nmemory and partly incapable of presentation to others.", - "You've met with a terrible fate, haven't you?" - }; - - Exception execpt = (Exception)e.ExceptionObject; - - - string crashMsg = becauseRustWont[execpt.GetHashCode() % becauseRustWont.Length] + "\n"; - crashMsg += "HISP HAS CRASHED" + "\n"; - crashMsg += "Build: " + ServerVersion.GetBuildString() + "\n"; - crashMsg += "Unhandled Exception: " + execpt.Message + "\n"; - crashMsg += execpt.StackTrace + "\n"; - - Logger.CrashPrint(crashMsg); - - } - } -} +using HISP.Game; +using HISP.Game.Horse; +using HISP.Game.Items; +using HISP.Game.Services; +using HISP.Game.SwfModules; +using HISP.Security; +using System; +using System.Diagnostics; + +namespace HISP.Server +{ + public static class Entry + { + // "Entry Point" + + + private static void defaultOnShutdownCallback() + { + Process.GetCurrentProcess().Close(); + } + public static Action OnShutdown = defaultOnShutdownCallback; + + + public static void SetShutdownCallback(Action callback) + { + OnShutdown = callback; + } + + public static void Start() + { + #if (!DEBUG) + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + #endif + + Console.Title = ServerVersion.GetBuildString(); + ConfigReader.OpenConfig(); + CrossDomainPolicy.GetPolicy(); + Database.OpenDatabase(); + GameDataJson.ReadGamedata(); + + Map.OpenMap(); + World.ReadWorldData(); + Treasure.Init(); + + DroppedItems.Init(); + WildHorse.Init(); + + Drawingroom.LoadAllDrawingRooms(); + Brickpoet.LoadPoetryRooms(); + Multiroom.CreateMultirooms(); + + Auction.LoadAllAuctionRooms(); + + Item.DoSpecialCases(); + + GameServer.StartServer(); + } + + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Exception execpt = (Exception)e.ExceptionObject; + + Logger.ErrorPrint("HISP HAS CRASHED :("); + Logger.ErrorPrint("Unhandled Exception: " + execpt.ToString()); + Logger.ErrorPrint(execpt.Message); + Logger.ErrorPrint(""); + Logger.ErrorPrint(execpt.StackTrace); + + while (true) { /* Allow asyncronous operations to happen. */ }; + } + } +} diff --git a/HorseIsleServer/LibHISP/Server/GameClient.cs b/HorseIsleServer/LibHISP/Server/GameClient.cs old mode 100755 new mode 100644 index 749c1c3..758fb0d --- a/HorseIsleServer/LibHISP/Server/GameClient.cs +++ b/HorseIsleServer/LibHISP/Server/GameClient.cs @@ -1,566 +1,619 @@ -using System; -using System.Net.Sockets; -using System.Threading; -using HISP.Player; -using HISP.Game; -using HISP.Game.Horse; -using HISP.Game.Events; -using HISP.Game.Items; -using HISP.Util; -using HISP.Server.Network; - -namespace HISP.Server -{ - public class GameClient - { - private static ThreadSafeList connectedClients = new ThreadSafeList(); - public static GameClient[] ConnectedClients // Done to prevent Enumerator Changed errors. - { - get - { - return connectedClients.ToArray(); - } - } - - private ITransport networkTransport; - - private bool loggedIn = false; - - public string RemoteIp - { - get - { - return networkTransport.Ip; - } - } - public bool LoggedIn - { - get - { - bool login = loggedIn; - if (User == null) - return false; - if (User.Client == null) - return false; - return login; - } - set - { - loggedIn = value; - } - } - public User User; - - private Timer keepAliveTimer; - private Timer timeoutTimer; - - private Timer warnTimer; - private Timer kickTimer; - private Timer minuteTimer; - - - private int timeoutInterval = 95 * 1000; - - private int totalMinutesElapsed = 0; - private int oneMinute = 60 * 1000; - private int warnInterval = GameServer.IdleWarning * 60 * 1000; // Time before showing a idle warning - private int kickInterval = GameServer.IdleTimeout * 60 * 1000; // Time before kicking for inactivity - - - public GameClient(Socket clientSocket) - { - - kickTimer = new Timer(new TimerCallback(kickTimerTick), null, kickInterval, kickInterval); - warnTimer = new Timer(new TimerCallback(warnTimerTick), null, warnInterval, warnInterval); - minuteTimer = new Timer(new TimerCallback(minuteTimerTick), null, oneMinute, oneMinute); - - networkTransport = new Hybrid(); - networkTransport.Accept(clientSocket, parsePackets, disconnectHandler); - Logger.DebugPrint(networkTransport.Name + " : Client connected @ " + networkTransport.Ip); - - - } - - public static void OnShutdown(string reason) - { - try - { - foreach (GameClient client in ConnectedClients) - { - - if (client.LoggedIn) - { - for (int i = 0; i < 2; i++) - { - ItemInstance rubyItem = new ItemInstance(Item.Ruby); - client.User.Inventory.AddIgnoringFull(rubyItem); - } - - client.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; - Logger.DebugPrint("Kicking: " + client.User.Username); - } - client.Kick("Server shutdown: "+reason); - } - } - catch (Exception) { }; - } - - private static bool acceptConnections(SocketAsyncEventArgs e) - { - try - { - if (e == null) return false; - if (GameServer.ServerSocket == null) return false; - return !GameServer.ServerSocket.AcceptAsync(e); - } - catch (Exception) { return false; } - } - public static void CreateClient(object sender, SocketAsyncEventArgs e) - { - do - { - Socket clientSocket = e.AcceptSocket; - - if (clientSocket == null) - continue; - if (clientSocket.RemoteEndPoint == null) - continue; - - connectedClients.Add(new GameClient(clientSocket)); - e.AcceptSocket = null; - - } while (acceptConnections(e)); - } - private void timeoutTimerTick(object state) - { - if (this.LoggedIn) - { - Disconnect(); - } - } - - private void disconnectHandler() - { - - // Stop Timers - if (timeoutTimer != null) - { - timeoutTimer.Dispose(); - timeoutTimer = null; - } - if (keepAliveTimer != null) - { - keepAliveTimer.Dispose(); - keepAliveTimer = null; - } - if (warnTimer != null) - { - warnTimer.Dispose(); - warnTimer = null; - } - if (kickTimer != null) - { - kickTimer.Dispose(); - kickTimer = null; - } - - // Call OnDisconnect - - connectedClients.Remove(this); - GameServer.OnDisconnect(this); - LoggedIn = false; - } - public void Disconnect() - { - if(!networkTransport.Disconnected) - networkTransport.Disconnect(); - } - - private void keepAliveTick(object state) - { - Logger.DebugPrint("Sending keep-alive packet to " + User.Username); - byte[] updatePacket = PacketBuilder.CreateKeepAlive(); - SendPacket(updatePacket); - keepAliveTimer.Change(oneMinute, oneMinute); - } - private void minuteTimerTick(object state) - { - totalMinutesElapsed++; - if (LoggedIn) - { - - GameServer.UpdatePlayer(this); - - User.CanUseAdsChat = true; - User.FreeMinutes -= 1; - - GameServer.DoItemPurchases(this); - - if (totalMinutesElapsed % 2 == 0) - { - User.TotalGlobalChatMessages++; - } - - if (User.FreeMinutes <= 0) - { - User.FreeMinutes = 0; - if (!User.Subscribed && !User.Moderator && !User.Administrator) - { - Kick(Messages.KickReasonNoTime); - return; - } - - } - - // Those fun messages when u have been playing for awhile. - if (totalMinutesElapsed % (2 * 60) == 0) - { - string ptMessage = Messages.RngMessages[GameServer.RandomNumberGenerator.Next(0, Messages.RngMessages.Length)]; - byte[] playTimeMessage = PacketBuilder.CreateChat(Messages.FormatPlaytimeMessage(totalMinutesElapsed / 60) + ptMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - SendPacket(playTimeMessage); - } - - - if (GameServer.RandomNumberGenerator.Next(0, 100) == 59) // RANDOM EVENT HAS OCCURED! - { - RandomEvent.ExecuteRandomEvent(User); - } - - bool gotoPrision = false; - foreach(HorseInstance horse in User.HorseInventory.HorseList) - { - if (totalMinutesElapsed % 2 == 0) - { - horse.BasicStats.Thirst--; - horse.BasicStats.Hunger--; - - if (horse.BasicStats.Thirst <= 0 && horse.BasicStats.Hunger <= 0) - { - horse.BasicStats.Health -= 5; - if(horse.BasicStats.Hunger <= 0) - { - gotoPrision = true; // Goto jail, go directly to jail, do not pass go, do not collect 200$ - - horse.BasicStats.Health = 10; - horse.BasicStats.Hunger = 500; - horse.BasicStats.Thirst = 500; - } - } - } - - - if(horse.Leaser > 0) - { - horse.LeaseTime--; - - if (horse.LeaseTime <= 0) - { - int tpX = 0; - int tpY = 0; - if(horse.Breed.Type == "unicorn" || horse.Breed.Type == "pegasus") - { - foreach (World.SpecialTile tile in World.SpecialTiles) - { - if (tile.Code == null) - continue; - - if (tile.Code.StartsWith("HORSELEASER-")) - { - int id = int.Parse(tile.Code.Split("-")[1]); - if (horse.Leaser == id) - { - string msg = Messages.FormatHorseReturnedToUniter(horse.Breed.Name); - if (horse.Breed.Type == "pegasus") - msg = Messages.HorseLeaserReturnedToUniterPegasus; - - byte[] youWereTeleportedToUniter = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); - SendPacket(youWereTeleportedToUniter); - - tpX = tile.X; - tpY = tile.Y; - - if(tile.ExitX != 0 && tile.ExitY != 0) - { - tpX = tile.ExitX; - tpY = tile.ExitY; - } - else - { - tpY++; - } - - } - } - } - - } - - byte[] horseReturned = PacketBuilder.CreateChat(Messages.FormatHorseReturnedToOwner(horse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - SendPacket(horseReturned); - - if(tpX != 0 && tpY != 0) - User.Teleport(tpX, tpY); - - - if (User.CurrentlyRidingHorse != null) - { - if(User.CurrentlyRidingHorse.RandomId == horse.RandomId) - { - GameServer.StopRidingHorse(this); - } - - } - - if(User.LastViewedHorse != null) - { - if(User.LastViewedHorse.RandomId == horse.RandomId) - { - User.LastViewedHorse = null; - } - } - - - User.HorseInventory.DeleteHorse(horse); - } - - - } - - } - if(gotoPrision) - { - byte[] sendToPrision = PacketBuilder.CreateChat(Messages.YouWereSentToPrisionIsle, PacketBuilder.CHAT_BOTTOM_RIGHT); - SendPacket(sendToPrision); - User.Teleport(45, 35); - } - - - if (totalMinutesElapsed % 5 == 0) - User.Thirst--; - - if (totalMinutesElapsed % 15 == 0) - User.Hunger--; - - if (totalMinutesElapsed % 15 == 0) - User.Tiredness--; - } - - minuteTimer.Change(oneMinute, oneMinute); - } - - private void warnTimerTick(object state) - { - Logger.DebugPrint("Sending inactivity warning to: " + RemoteIp); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatIdleWarningMessage(), PacketBuilder.CHAT_BOTTOM_RIGHT); - SendPacket(chatPacket); - if (LoggedIn) - User.Idle = true; - } - - private void kickTimerTick(object state) - { - Kick(Messages.FormatIdleKickMessage()); - } - - public void Login(int id) - { - /* - * Check for duplicate user - * and disconnect them. - */ - foreach (GameClient Client in GameClient.ConnectedClients) - { - if (Client.LoggedIn) - { - if (Client.User.Id == id) - Client.Kick(Messages.KickReasonDuplicateLogin); - } - } - - User = new User(this, id); - LoggedIn = true; - - Database.SetIpAddress(id, RemoteIp); - Database.SetLoginCount(id, Database.GetLoginCount(id) + 1); - - keepAliveTimer = new Timer(new TimerCallback(keepAliveTick), null, oneMinute, oneMinute); - timeoutTimer = new Timer(new TimerCallback(timeoutTimerTick), null, timeoutInterval, timeoutInterval); - } - - private void parsePackets(byte[] packet) - { - if (packet.Length < 1) - { - Logger.ErrorPrint("Received an invalid packet (size: "+packet.Length+")"); - return; - } - byte identifier = packet[0]; - - /* - * Every time ive tried to fix this properly by just checking if its null or something - * it keeps happening, so now im just going to catch the exception - * and hope it works. - */ - try - { - if (LoggedIn) - { - if (timeoutTimer != null) - timeoutTimer.Change(timeoutInterval, timeoutInterval); // Reset time before timing out - else - return; - - if (keepAliveTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) - { - if (LoggedIn) - User.Idle = false; - keepAliveTimer.Change(oneMinute, oneMinute); - } - else - { - return; - } - } - - if (kickTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) - kickTimer.Change(kickInterval, kickInterval); - else - return; - - if (warnTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) - warnTimer.Change(warnInterval, warnInterval); - else - return; - - } - catch (ObjectDisposedException) - { - return; - } - - - /* - * Put packet handling in a try/catch - * this prevents the entire server from crashing - * if theres an error in handling a particular packet. - */ - try - { - if (!LoggedIn) // Must be either login or policy-file-request - { - switch (identifier) - { - case PacketBuilder.PACKET_LOGIN: - GameServer.OnUserLogin(this, packet); - break; - } - } - else - { - switch (identifier) - { - case PacketBuilder.PACKET_LOGIN: - GameServer.OnUserInfoRequest(this, packet); - break; - case PacketBuilder.PACKET_MOVE: - GameServer.OnMovementPacket(this, packet); - break; - case PacketBuilder.PACKET_PLAYERINFO: - GameServer.OnPlayerInfoPacket(this, packet); - break; - case PacketBuilder.PACKET_PLAYER: - GameServer.OnProfilePacket(this, packet); - break; - case PacketBuilder.PACKET_CHAT: - GameServer.OnChatPacket(this, packet); - break; - case PacketBuilder.PACKET_CLICK: - GameServer.OnClickPacket(this, packet); - break; - case PacketBuilder.PACKET_KEEP_ALIVE: - GameServer.OnKeepAlive(this, packet); - break; - case PacketBuilder.PACKET_TRANSPORT: - GameServer.OnTransportUsed(this, packet); - break; - case PacketBuilder.PACKET_INVENTORY: - GameServer.OnInventoryRequested(this, packet); - break; - case PacketBuilder.PACKET_DYNAMIC_BUTTON: - GameServer.OnDynamicButtonPressed(this, packet); - break; - case PacketBuilder.PACKET_DYNAMIC_INPUT: - GameServer.OnDynamicInputReceived(this, packet); - break; - case PacketBuilder.PACKET_ITEM_INTERACTION: - GameServer.OnItemInteraction(this, packet); - break; - case PacketBuilder.PACKET_ARENA_SCORE: - GameServer.OnArenaScored(this, packet); - break; - case PacketBuilder.PACKET_QUIT: - GameServer.OnQuitPacket(this, packet); - break; - case PacketBuilder.PACKET_NPC: - GameServer.OnNpcInteraction(this, packet); - break; - case PacketBuilder.PACKET_BIRDMAP: - GameServer.OnBirdMapRequested(this, packet); - break; - case PacketBuilder.PACKET_SWFMODULE: - GameServer.OnSwfModuleCommunication(this, packet); - break; - case PacketBuilder.PACKET_HORSE: - GameServer.OnHorseInteraction(this, packet); - break; - case PacketBuilder.PACKET_WISH: - GameServer.OnWish(this, packet); - break; - case PacketBuilder.PACKET_RANCH: - GameServer.OnRanchPacket(this, packet); - break; - case PacketBuilder.PACKET_AUCTION: - GameServer.OnAuctionPacket(this, packet); - break; - case PacketBuilder.PACKET_PLAYER_INTERACTION: - GameServer.OnPlayerInteration(this, packet); - break; - case PacketBuilder.PACKET_SOCIALS: - GameServer.OnSocialPacket(this, packet); - break; - default: - Logger.ErrorPrint("Unimplemented packet: " + BitConverter.ToString(packet).Replace('-', ' ')); - break; - } - } - } - catch(Exception e) - { -#if OS_DEBUG - throw e; -#else - Logger.ErrorPrint("Unhandled Exception: " + e.Message + "\n" + e.StackTrace); - Kick("Unhandled Exception: " + e.Message + "\n" + e.StackTrace); -#endif - } - } - - public void Kick(string Reason) - { - byte[] kickPacket = PacketBuilder.CreateKickMessage(Reason); - SendPacket(kickPacket); - Disconnect(); - - Logger.InfoPrint("CLIENT: "+RemoteIp+" KICKED for: "+Reason); - } - - public void SendPacket(byte[] packetData) - { - if(!networkTransport.Disconnected) - networkTransport.Send(packetData); - } - - } - - -} +using System; +using System.Net.Sockets; +using System.Threading; +using System.Collections.Generic; +using HISP.Player; +using HISP.Game; +using HISP.Game.Horse; +using HISP.Game.Events; +using HISP.Game.Items; +using HISP.Game.Inventory; + +namespace HISP.Server +{ + public class GameClient + { + private static List connectedClients = new List(); + public static GameClient[] ConnectedClients // Done to prevent Enumerator Changed errors. + { + get + { + return connectedClients.ToArray(); + } + } + + public Socket ClientSocket; + public string RemoteIp; + private bool loggedIn = false; + public bool LoggedIn + { + get + { + bool login = loggedIn; + if (LoggedinUser == null) + return false; + if (LoggedinUser.LoggedinClient == null) + return false; + return login; + } + set + { + loggedIn = value; + } + } + public User LoggedinUser; + + private Timer keepAliveTimer; + private Timer timeoutTimer; + + private Timer warnTimer; + private Timer kickTimer; + private Timer minuteTimer; + + private bool isDisconnecting = false; + + private int timeoutInterval = 95 * 1000; + + private int totalMinutesElapsed = 0; + private int oneMinute = 60 * 1000; + private int warnInterval = GameServer.IdleWarning * 60 * 1000; // Time before showing a idle warning + private int kickInterval = GameServer.IdleTimeout * 60 * 1000; // Time before kicking for inactivity + + private List currentPacket = new List(); + private byte[] workBuffer = new byte[0x8000]; + + public GameClient(Socket clientSocket) + { + clientSocket.SendTimeout = 10 * 1000; // 10sec + clientSocket.ReceiveTimeout = 10 * 1000; // 10sec + + ClientSocket = clientSocket; + RemoteIp = clientSocket.RemoteEndPoint.ToString(); + + if (RemoteIp.Contains(":")) + RemoteIp = RemoteIp.Substring(0, RemoteIp.IndexOf(":")); + + Logger.DebugPrint("Client connected @ " + RemoteIp); + + kickTimer = new Timer(new TimerCallback(kickTimerTick), null, kickInterval, kickInterval); + warnTimer = new Timer(new TimerCallback(warnTimerTick), null, warnInterval, warnInterval); + minuteTimer = new Timer(new TimerCallback(minuteTimerTick), null, oneMinute, oneMinute); + + connectedClients.Add(this); + + SocketAsyncEventArgs evt = new SocketAsyncEventArgs(); + evt.Completed += receivePackets; + evt.SetBuffer(workBuffer, 0, workBuffer.Length); + if (!clientSocket.ReceiveAsync(evt)) + receivePackets(null, evt); + } + + public static void OnShutdown() + { + try + { + foreach (GameClient client in ConnectedClients) + { + + if (client.LoggedIn) + { + for (int i = 0; i < 2; i++) + { + ItemInstance rubyItem = new ItemInstance(Item.Ruby); + client.LoggedinUser.Inventory.AddIgnoringFull(rubyItem); + } + + client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; + } + + client.Kick("Server shutdown."); + + } + } + catch (Exception) { }; + } + public static void CreateClient(object sender, SocketAsyncEventArgs e) + { + do + { + Socket eSocket = e.AcceptSocket; + if(eSocket != null) + new GameClient(eSocket); + e.AcceptSocket = null; + } while (!GameServer.ServerSocket.AcceptAsync(e)); + } + private void timeoutTimerTick(object state) + { + if (this.LoggedIn) + { + Disconnect(); + } + } + + public void Disconnect() + { + if (this.isDisconnecting) + return; + this.isDisconnecting = true; + + // Close Socket + if (ClientSocket != null) + { + ClientSocket.Disconnect(false); + ClientSocket.Dispose(); + ClientSocket = null; + } + + + // Stop Timers + if (timeoutTimer != null) + { + timeoutTimer.Dispose(); + timeoutTimer = null; + } + if (keepAliveTimer != null) + { + keepAliveTimer.Dispose(); + keepAliveTimer = null; + } + if (warnTimer != null) + { + warnTimer.Dispose(); + warnTimer = null; + } + if (kickTimer != null) + { + kickTimer.Dispose(); + kickTimer = null; + } + + // Call OnDisconnect + + connectedClients.Remove(this); + GameServer.OnDisconnect(this); + LoggedIn = false; + + } + + + private void receivePackets(object sender, SocketAsyncEventArgs e) + { + do + { + // HI1 Packets are terminates by 0x00 so we have to read until we receive that terminator + + if (isDisconnecting || + ClientSocket == null || + e.BytesTransferred <= 0 || + !ClientSocket.Connected || + e.SocketError != SocketError.Success) + { + Disconnect(); + return; + } + + int availble = e.BytesTransferred; + if (availble >= 1) // More than 1 byte transfered.. + { + + for (int i = 0; i < availble; i++) + { + currentPacket.Add(e.Buffer[i]); + if (e.Buffer[i] == PacketBuilder.PACKET_TERMINATOR) // Read until \0... + { + parsePackets(currentPacket.ToArray()); + currentPacket.Clear(); + } + } + } + + if (availble == 0) + Disconnect(); + + if (isDisconnecting || ClientSocket == null) + return; + + + } while (!ClientSocket.ReceiveAsync(e)); + + } + + private void keepAliveTick(object state) + { + Logger.DebugPrint("Sending keep-alive packet to " + LoggedinUser.Username); + byte[] updatePacket = PacketBuilder.CreateKeepAlive(); + SendPacket(updatePacket); + if(!isDisconnecting && keepAliveTimer != null) // wtf how is this still a problem? + keepAliveTimer.Change(oneMinute, oneMinute); + } + private void minuteTimerTick(object state) + { + totalMinutesElapsed++; + if (LoggedIn) + { + + GameServer.UpdatePlayer(this); + + LoggedinUser.CanUseAdsChat = true; + LoggedinUser.FreeMinutes -= 1; + + GameServer.DoItemPurchases(this); + + if (totalMinutesElapsed % 2 == 0) + { + LoggedinUser.TotalGlobalChatMessages++; + } + + if (LoggedinUser.FreeMinutes <= 0) + { + LoggedinUser.FreeMinutes = 0; + if (!LoggedinUser.Subscribed && !LoggedinUser.Moderator && !LoggedinUser.Administrator) + { + Kick(Messages.KickReasonNoTime); + return; + } + + } + + // Those fun messages when u have been playing for awhile. + if (totalMinutesElapsed % (2 * 60) == 0) + { + string ptMessage = Messages.RngMessages[GameServer.RandomNumberGenerator.Next(0, Messages.RngMessages.Length)]; + byte[] playTimeMessage = PacketBuilder.CreateChat(Messages.FormatPlaytimeMessage(totalMinutesElapsed / 60) + ptMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + SendPacket(playTimeMessage); + } + + + if (GameServer.RandomNumberGenerator.Next(0, 100) == 59) // RANDOM EVENT HAS OCCURED! + { + RandomEvent.ExecuteRandomEvent(LoggedinUser); + } + + bool gotoPrision = false; + foreach(HorseInstance horse in LoggedinUser.HorseInventory.HorseList) + { + if (totalMinutesElapsed % 2 == 0) + { + horse.BasicStats.Thirst--; + horse.BasicStats.Hunger--; + + if (horse.BasicStats.Thirst <= 0 && horse.BasicStats.Hunger <= 0) + { + horse.BasicStats.Health -= 5; + if(horse.BasicStats.Hunger <= 0) + { + gotoPrision = true; // Goto jail, go directly to jail, do not pass go, do not collect 200$ + + horse.BasicStats.Health = 10; + horse.BasicStats.Hunger = 500; + horse.BasicStats.Thirst = 500; + } + } + } + + + if(horse.Leaser > 0) + { + horse.LeaseTime--; + + if (horse.LeaseTime <= 0) + { + int tpX = 0; + int tpY = 0; + if(horse.Breed.Type == "unicorn" || horse.Breed.Type == "pegasus") + { + foreach (World.SpecialTile tile in World.SpecialTiles) + { + if (tile.Code == null) + continue; + + if (tile.Code.StartsWith("HORSELEASER-")) + { + int id = int.Parse(tile.Code.Split("-")[1]); + if (horse.Leaser == id) + { + string msg = Messages.FormatHorseReturnedToUniter(horse.Breed.Name); + if (horse.Breed.Type == "pegasus") + msg = Messages.HorseLeaserReturnedToUniterPegasus; + + byte[] youWereTeleportedToUniter = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); + SendPacket(youWereTeleportedToUniter); + + tpX = tile.X; + tpY = tile.Y; + + if(tile.ExitX != 0 && tile.ExitY != 0) + { + tpX = tile.ExitX; + tpY = tile.ExitY; + } + else + { + tpY++; + } + + } + } + } + + } + + byte[] horseReturned = PacketBuilder.CreateChat(Messages.FormatHorseReturnedToOwner(horse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + SendPacket(horseReturned); + + if(tpX != 0 && tpY != 0) + LoggedinUser.Teleport(tpX, tpY); + + + if (LoggedinUser.CurrentlyRidingHorse != null) + { + if(LoggedinUser.CurrentlyRidingHorse.RandomId == horse.RandomId) + { + GameServer.StopRidingHorse(this); + } + + } + + if(LoggedinUser.LastViewedHorse != null) + { + if(LoggedinUser.LastViewedHorse.RandomId == horse.RandomId) + { + LoggedinUser.LastViewedHorse = null; + } + } + + + LoggedinUser.HorseInventory.DeleteHorse(horse); + } + + + } + + } + if(gotoPrision) + { + byte[] sendToPrision = PacketBuilder.CreateChat(Messages.YouWereSentToPrisionIsle, PacketBuilder.CHAT_BOTTOM_RIGHT); + SendPacket(sendToPrision); + LoggedinUser.Teleport(45, 35); + } + + + if (totalMinutesElapsed % 5 == 0) + LoggedinUser.Thirst--; + + if (totalMinutesElapsed % 15 == 0) + LoggedinUser.Hunger--; + + if (totalMinutesElapsed % 15 == 0) + LoggedinUser.Tiredness--; + } + + + + + if (!isDisconnecting) + minuteTimer.Change(oneMinute, oneMinute); + + } + + private void warnTimerTick(object state) + { + Logger.DebugPrint("Sending inactivity warning to: " + RemoteIp); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatIdleWarningMessage(), PacketBuilder.CHAT_BOTTOM_RIGHT); + SendPacket(chatPacket); + if (LoggedIn) + LoggedinUser.Idle = true; + } + + private void kickTimerTick(object state) + { + Kick(Messages.FormatIdleKickMessage()); + } + + public void Login(int id) + { + /* + * Check for duplicate user + * and disconnect them. + */ + foreach (GameClient Client in GameClient.ConnectedClients) + { + if (Client.LoggedIn) + { + if (Client.LoggedinUser.Id == id) + Client.Kick(Messages.KickReasonDuplicateLogin); + } + } + + LoggedinUser = new User(this, id); + LoggedIn = true; + + Database.SetIpAddress(id, RemoteIp); + Database.SetLoginCount(id, Database.GetLoginCount(id) + 1); + + keepAliveTimer = new Timer(new TimerCallback(keepAliveTick), null, oneMinute, oneMinute); + timeoutTimer = new Timer(new TimerCallback(timeoutTimerTick), null, timeoutInterval, timeoutInterval); + } + + private void parsePackets(byte[] Packet) + { + if (Packet.Length < 1) + { + Logger.ErrorPrint("Received an invalid packet (size: "+Packet.Length+")"); + } + byte identifier = Packet[0]; + + /* + * Every time ive tried to fix this properly by just checking if its null or something + * it keeps happening, so now im just going to catch the exception + * and hope it works. + */ + try + { + if (LoggedIn) + { + if (timeoutTimer != null) + timeoutTimer.Change(timeoutInterval, timeoutInterval); // Reset time before timing out + else + return; + + if (keepAliveTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) + { + if (LoggedIn) + LoggedinUser.Idle = false; + keepAliveTimer.Change(oneMinute, oneMinute); + } + else + { + return; + } + } + + if (kickTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) + kickTimer.Change(kickInterval, kickInterval); + else + return; + + if (warnTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) + warnTimer.Change(warnInterval, warnInterval); + else + return; + } + catch (ObjectDisposedException) + { + return; + } + + + /* + * Put packet handling in a try/catch + * this prevents the entire server from crashing + * if theres an error in handling a particular packet. + */ + try + { + if (!LoggedIn) // Must be either login or policy-file-request + { + switch (identifier) + { + case PacketBuilder.PACKET_FLASH_XML_CROSSDOMAIN: + GameServer.OnCrossdomainPolicyRequest(this, Packet); + break; + case PacketBuilder.PACKET_LOGIN: + GameServer.OnLoginRequest(this, Packet); + break; + } + } + else + { + switch (identifier) + { + case PacketBuilder.PACKET_LOGIN: + GameServer.OnUserInfoRequest(this, Packet); + break; + case PacketBuilder.PACKET_MOVE: + GameServer.OnMovementPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYERINFO: + GameServer.OnPlayerInfoPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYER: + GameServer.OnProfilePacket(this, Packet); + break; + case PacketBuilder.PACKET_CHAT: + GameServer.OnChatPacket(this, Packet); + break; + case PacketBuilder.PACKET_CLICK: + GameServer.OnClickPacket(this, Packet); + break; + case PacketBuilder.PACKET_KEEP_ALIVE: + GameServer.OnKeepAlive(this, Packet); + break; + case PacketBuilder.PACKET_TRANSPORT: + GameServer.OnTransportUsed(this, Packet); + break; + case PacketBuilder.PACKET_INVENTORY: + GameServer.OnInventoryRequested(this, Packet); + break; + case PacketBuilder.PACKET_DYNAMIC_BUTTON: + GameServer.OnDynamicButtonPressed(this, Packet); + break; + case PacketBuilder.PACKET_DYNAMIC_INPUT: + GameServer.OnDynamicInputReceived(this, Packet); + break; + case PacketBuilder.PACKET_ITEM_INTERACTION: + GameServer.OnItemInteraction(this, Packet); + break; + case PacketBuilder.PACKET_ARENA_SCORE: + GameServer.OnArenaScored(this, Packet); + break; + case PacketBuilder.PACKET_QUIT: + GameServer.OnQuitPacket(this, Packet); + break; + case PacketBuilder.PACKET_NPC: + GameServer.OnNpcInteraction(this, Packet); + break; + case PacketBuilder.PACKET_BIRDMAP: + GameServer.OnBirdMapRequested(this, Packet); + break; + case PacketBuilder.PACKET_SWFMODULE: + GameServer.OnSwfModuleCommunication(this, Packet); + break; + case PacketBuilder.PACKET_HORSE: + GameServer.OnHorseInteraction(this, Packet); + break; + case PacketBuilder.PACKET_WISH: + GameServer.OnWish(this, Packet); + break; + case PacketBuilder.PACKET_RANCH: + GameServer.OnRanchPacket(this, Packet); + break; + case PacketBuilder.PACKET_AUCTION: + GameServer.OnAuctionPacket(this, Packet); + break; + case PacketBuilder.PACKET_PLAYER_INTERACTION: + GameServer.OnPlayerInteration(this, Packet); + break; + case PacketBuilder.PACKET_SOCIALS: + GameServer.OnSocialPacket(this, Packet); + break; + default: + Logger.ErrorPrint("Unimplemented Packet: " + BitConverter.ToString(Packet).Replace('-', ' ')); + break; + } + } + + } + catch(Exception e) + { + Logger.ErrorPrint("Unhandled Exception: " + e.ToString() + "\n" + e.Message + "\n" + e.StackTrace); + + Kick("Unhandled Exception: " + e.ToString()); + } + } + + public void Kick(string Reason) + { + byte[] kickPacket = PacketBuilder.CreateKickMessage(Reason); + SendPacket(kickPacket); + Disconnect(); + + Logger.InfoPrint("CLIENT: "+RemoteIp+" KICKED for: "+Reason); + } + + public void SendPacket(byte[] PacketData) + { + try + { + ClientSocket.Send(PacketData); + } + catch (Exception) + { + Disconnect(); + } + } + + } + + +} diff --git a/HorseIsleServer/LibHISP/Server/GameDataJson.cs b/HorseIsleServer/LibHISP/Server/GameDataJson.cs old mode 100755 new mode 100644 index c03f576..261515a --- a/HorseIsleServer/LibHISP/Server/GameDataJson.cs +++ b/HorseIsleServer/LibHISP/Server/GameDataJson.cs @@ -1,2325 +1,2142 @@ -using System.Collections.Generic; -using System.IO; -using System.Globalization; -using System; -using System.Dynamic; - -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - - -using HISP.Game; -using HISP.Game.Chat; -using HISP.Player; -using HISP.Game.Services; -using HISP.Game.SwfModules; -using HISP.Game.Horse; -using HISP.Game.Items; -using HISP.Security; -using HISP.Game.Events; - -namespace HISP.Server -{ - public class GameDataJson - { - private static dynamic gameData; - - private static void readGamedataFiles() - { - Logger.DebugPrint("Reading GAMEDATA"); - if (Directory.Exists(ConfigReader.GameData)) - { - Logger.DebugPrint("Found GAMEDATA DIR ... "); - gameData = new JObject(); - string[] files = Directory.GetFiles(ConfigReader.GameData); - foreach (string file in files) - { - Logger.DebugPrint("Reading: " + file); - string jsonData = File.ReadAllText(file); - JObject thisData = (JObject)JsonConvert.DeserializeObject(jsonData); - JObject jData = (JObject)gameData; - jData.Merge(thisData); - - } - } - else if (File.Exists(ConfigReader.GameData)) - { - - Logger.DebugPrint("Found GAMEDATA FILE ... "); - string jsonData = File.ReadAllText(ConfigReader.GameData); - gameData = JsonConvert.DeserializeObject(jsonData); - } - else - { - Logger.ErrorPrint("Could not find GAMEDATA, configured as; " + ConfigReader.GameData + " But no file or directory exists!"); - GameServer.ShutdownServer("Unable to find GAMEDATA"); - return; - } - } - - private static void registerTowns() - { - int totalTowns = gameData.places.towns.Count; - for (int i = 0; i < totalTowns; i++) - { - - World.Town town = new World.Town(); - town.StartX = gameData.places.towns[i].start_x; - town.StartY = gameData.places.towns[i].start_y; - town.EndX = gameData.places.towns[i].end_x; - town.EndY = gameData.places.towns[i].end_y; - town.Name = gameData.places.towns[i].name; - - Logger.DebugPrint("Registered Town: " + town.Name + " X " + town.StartX + "-" + town.EndX + " Y " + town.StartY + "-" + town.EndY); - World.Towns.Add(town); - } - } - - private static void registerZones() - { - int totalZones = gameData.places.zones.Count; - for (int i = 0; i < totalZones; i++) - { - - World.Zone zone = new World.Zone(); - zone.StartX = gameData.places.zones[i].start_x; - zone.StartY = gameData.places.zones[i].start_y; - zone.EndX = gameData.places.zones[i].end_x; - zone.EndY = gameData.places.zones[i].end_y; - zone.Name = gameData.places.zones[i].name; - - Logger.DebugPrint("Registered Zone: " + zone.Name + " X " + zone.StartX + "-" + zone.EndX + " Y " + zone.StartY + "-" + zone.EndY); - World.Zones.Add(zone); - } - - } - private static void registerAreas() - { - int totalAreas = gameData.places.areas.Count; - for (int i = 0; i < totalAreas; i++) - { - - World.Area area = new World.Area(); - area.StartX = gameData.places.areas[i].start_x; - area.StartY = gameData.places.areas[i].start_y; - area.EndX = gameData.places.areas[i].end_x; - area.EndY = gameData.places.areas[i].end_y; - area.Name = gameData.places.areas[i].name; - - Logger.DebugPrint("Registered Area: " + area.Name + " X " + area.StartX + "-" + area.EndX + " Y " + area.StartY + "-" + area.EndY); - World.Areas.Add(area); - } - } - private static void registerIsles() - { - - int totalIsles = gameData.places.isles.Count; - for (int i = 0; i < totalIsles; i++) - { - - World.Isle isle = new World.Isle(); - isle.StartX = gameData.places.isles[i].start_x; - isle.StartY = gameData.places.isles[i].start_y; - isle.EndX = gameData.places.isles[i].end_x; - isle.EndY = gameData.places.isles[i].end_y; - isle.Tileset = gameData.places.isles[i].tileset; - isle.Name = gameData.places.isles[i].name; - - Logger.DebugPrint("Registered Isle: " + isle.Name + " X " + isle.StartX + "-" + isle.EndX + " Y " + isle.StartY + "-" + isle.EndY + " tileset: " + isle.Tileset); - World.Isles.Add(isle); - } - } - - private static void registerWaypoints() - { - int totalWaypoints = gameData.places.waypoints.Count; - for (int i = 0; i < totalWaypoints; i++) - { - World.Waypoint waypoint = new World.Waypoint(); - waypoint.Name = gameData.places.waypoints[i].name; - waypoint.PosX = gameData.places.waypoints[i].pos_x; - waypoint.PosY = gameData.places.waypoints[i].pos_y; - waypoint.Type = gameData.places.waypoints[i].type; - waypoint.Description = gameData.places.waypoints[i].description; - waypoint.WeatherTypesAvalible = gameData.places.waypoints[i].weather_avalible.ToObject(); - Logger.DebugPrint("Registered Waypoint: " + waypoint.PosX.ToString() + ", " + waypoint.PosY.ToString() + " TYPE: " + waypoint.Type); - World.Waypoints.Add(waypoint); - } - } - private static void registerSpecialTiles() - { - int totalSpecialTiles = gameData.places.special_tiles.Count; - for (int i = 0; i < totalSpecialTiles; i++) - { - - World.SpecialTile specialTile = new World.SpecialTile(); - specialTile.X = gameData.places.special_tiles[i].x; - specialTile.Y = gameData.places.special_tiles[i].y; - specialTile.Title = gameData.places.special_tiles[i].title; - specialTile.Description = gameData.places.special_tiles[i].description; - specialTile.Code = gameData.places.special_tiles[i].code; - if (gameData.places.special_tiles[i].exit_x != null) - specialTile.ExitX = gameData.places.special_tiles[i].exit_x; - if (gameData.places.special_tiles[i].exit_x != null) - specialTile.ExitY = gameData.places.special_tiles[i].exit_y; - specialTile.AutoplaySwf = gameData.places.special_tiles[i].autoplay_swf; - specialTile.TypeFlag = gameData.places.special_tiles[i].type_flag; - - Logger.DebugPrint("Registered Special Tile: " + specialTile.Title + " X " + specialTile.X + " Y: " + specialTile.Y); - World.SpecialTiles.Add(specialTile); - } - } - private static void registerChatWarningReasons() - { - int totalReasons = gameData.messages.chat.reason_messages.Count; - for (int i = 0; i < totalReasons; i++) - { - ChatMsg.Reason reason = new ChatMsg.Reason(); - reason.Name = gameData.messages.chat.reason_messages[i].name; - reason.Message = gameData.messages.chat.reason_messages[i].message; - ChatMsg.AddReason(reason); - - Logger.DebugPrint("Registered Chat Warning Reason: " + reason.Name + " (Message: " + reason.Message + ")"); - } - - } - private static void registerFilteredWords() - { - int totalFilters = gameData.messages.chat.filter.Count; - for (int i = 0; i < totalFilters; i++) - { - ChatMsg.Filter filter = new ChatMsg.Filter(); - filter.FilteredWord = gameData.messages.chat.filter[i].word; - filter.MatchAll = gameData.messages.chat.filter[i].match_all; - filter.Reason = ChatMsg.GetReason((string)gameData.messages.chat.filter[i].reason_type); - ChatMsg.AddFilter(filter); - - Logger.DebugPrint("Registered Filtered Word: " + filter.FilteredWord + " With reason: " + filter.Reason.Name + " (Matching all: " + filter.MatchAll + ")"); - } - } - private static void registerWordCorrections() - { - int totalCorrections = gameData.messages.chat.correct.Count; - for (int i = 0; i < totalCorrections; i++) - { - ChatMsg.Correction correction = new ChatMsg.Correction(); - correction.FilteredWord = gameData.messages.chat.correct[i].word; - correction.ReplacedWord = gameData.messages.chat.correct[i].new_word; - ChatMsg.AddCorrection(correction); - - Logger.DebugPrint("Registered Word Correction: " + correction.FilteredWord + " to " + correction.ReplacedWord); - } - } - private static void registerTransportPoints() - { - int totalTransportPoints = gameData.transport.transport_points.Count; - for (int i = 0; i < totalTransportPoints; i++) - { - Transport.TransportPoint transportPoint = new Transport.TransportPoint(); - transportPoint.X = gameData.transport.transport_points[i].x; - transportPoint.Y = gameData.transport.transport_points[i].y; - transportPoint.Locations = gameData.transport.transport_points[i].places.ToObject(); - Transport.TransportPoints.Add(transportPoint); - - Logger.DebugPrint("Registered Transport Point: At X: " + transportPoint.X + " Y: " + transportPoint.Y); - } - } - - private static void registerTransportLocations() - { - int totalTransportPlaces = gameData.transport.transport_places.Count; - for (int i = 0; i < totalTransportPlaces; i++) - { - Transport.TransportLocation transportPlace = new Transport.TransportLocation(); - transportPlace.Id = gameData.transport.transport_places[i].id; - transportPlace.Cost = gameData.transport.transport_places[i].cost; - transportPlace.GotoX = gameData.transport.transport_places[i].goto_x; - transportPlace.GotoY = gameData.transport.transport_places[i].goto_y; - transportPlace.Type = gameData.transport.transport_places[i].type; - transportPlace.LocationTitle = gameData.transport.transport_places[i].place_title; - Transport.TransportLocations.Add(transportPlace); - - Logger.DebugPrint("Registered Transport Location: " + transportPlace.LocationTitle + " To Goto X: " + transportPlace.GotoX + " Y: " + transportPlace.GotoY); - } - } - private static void registerItems() - { - int totalItems = gameData.item.item_list.Count; - for (int i = 0; i < totalItems; i++) - { - Item.ItemInformation item = new Item.ItemInformation(); - item.Id = gameData.item.item_list[i].id; - item.Name = gameData.item.item_list[i].name; - item.PluralName = gameData.item.item_list[i].plural_name; - item.Description = gameData.item.item_list[i].description; - item.IconId = gameData.item.item_list[i].icon_id; - item.SortBy = gameData.item.item_list[i].sort_by; - item.SellPrice = gameData.item.item_list[i].sell_price; - item.EmbedSwf = gameData.item.item_list[i].embed_swf; - item.WishingWell = gameData.item.item_list[i].wishing_well; - item.Type = gameData.item.item_list[i].type; - item.MiscFlags = gameData.item.item_list[i].misc_flags.ToObject(); - int effectsCount = gameData.item.item_list[i].effects.Count; - - Item.Effects[] effectsList = new Item.Effects[effectsCount]; - for (int ii = 0; ii < effectsCount; ii++) - { - effectsList[ii] = new Item.Effects(); - effectsList[ii].EffectsWhat = gameData.item.item_list[i].effects[ii].effect_what; - effectsList[ii].EffectAmount = gameData.item.item_list[i].effects[ii].effect_amount; - } - - item.Effects = effectsList; - item.SpawnParamaters = new Item.SpawnRules(); - item.SpawnParamaters.SpawnCap = gameData.item.item_list[i].spawn_parameters.spawn_cap; - item.SpawnParamaters.SpawnInZone = gameData.item.item_list[i].spawn_parameters.spawn_in_area; - item.SpawnParamaters.SpawnOnTileType = gameData.item.item_list[i].spawn_parameters.spawn_on_tile_type; - item.SpawnParamaters.SpawnOnSpecialTile = gameData.item.item_list[i].spawn_parameters.spawn_on_special_tile; - item.SpawnParamaters.SpawnNearSpecialTile = gameData.item.item_list[i].spawn_parameters.spawn_near_special_tile; - - Logger.DebugPrint("Registered Item ID: " + item.Id + " Name: " + item.Name + " spawns on: " + item.SpawnParamaters.SpawnOnTileType); - Item.AddItemInfo(item); - } - } - private static void registerThrowables() - { - int totalThrowable = gameData.item.throwable.Count; - for (int i = 0; i < totalThrowable; i++) - { - Item.ThrowableItem throwableItem = new Item.ThrowableItem(); - throwableItem.Id = gameData.item.throwable[i].id; - throwableItem.HitMessage = gameData.item.throwable[i].message_hit; - throwableItem.ThrowMessage = gameData.item.throwable[i].message_throw; - throwableItem.HitYourselfMessage = gameData.item.throwable[i].message_hit_yourself; - Item.AddThrowableItem(throwableItem); - } - } - - private static void registerNpcs() - { - Logger.DebugPrint("Registering NPCS: "); - int totalNpcs = gameData.npc_list.Count; - for (int i = 0; i < totalNpcs; i++) - { - int id = gameData.npc_list[i].id; - int x = gameData.npc_list[i].x; - int y = gameData.npc_list[i].y; - bool moves = gameData.npc_list[i].moves; - - int udlrStartX = 0; - int udlrStartY = 0; - - if (gameData.npc_list[i].udlr_start_x != null) - udlrStartX = gameData.npc_list[i].udlr_start_x; - if (gameData.npc_list[i].udlr_start_y != null) - udlrStartY = gameData.npc_list[i].udlr_start_y; - - Npc.NpcEntry npcEntry = new Npc.NpcEntry(id, x, y, moves, udlrStartX, udlrStartY); - - npcEntry.Name = gameData.npc_list[i].name; - npcEntry.AdminDescription = gameData.npc_list[i].admin_description; - npcEntry.ShortDescription = gameData.npc_list[i].short_description; - npcEntry.LongDescription = gameData.npc_list[i].long_description; - - - if (gameData.npc_list[i].stay_on != null) - npcEntry.StayOn = gameData.npc_list[i].stay_on; - if (gameData.npc_list[i].requires_questid_completed != null) - npcEntry.RequiresQuestIdCompleted = gameData.npc_list[i].requires_questid_completed; - if (gameData.npc_list[i].requires_questid_not_completed != null) - npcEntry.RequiresQuestIdNotCompleted = gameData.npc_list[i].requires_questid_not_completed; - if (gameData.npc_list[i].udlr_script != null) - npcEntry.UDLRScript = gameData.npc_list[i].udlr_script; - - npcEntry.AdminOnly = gameData.npc_list[i].admin_only; - npcEntry.LibarySearchable = gameData.npc_list[i].libary_searchable; - npcEntry.IconId = gameData.npc_list[i].icon_id; - - Logger.DebugPrint("NPC ID:" + npcEntry.Id.ToString() + " NAME: " + npcEntry.Name); - List chats = new List(); - int totalNpcChat = gameData.npc_list[i].chatpoints.Count; - for (int ii = 0; ii < totalNpcChat; ii++) - { - Npc.NpcChat npcChat = new Npc.NpcChat(); - npcChat.Id = gameData.npc_list[i].chatpoints[ii].chatpoint_id; - npcChat.ChatText = gameData.npc_list[i].chatpoints[ii].chat_text; - npcChat.ActivateQuestId = gameData.npc_list[i].chatpoints[ii].activate_questid; - - Logger.DebugPrint("CHATPOINT ID: " + npcChat.Id.ToString() + " TEXT: " + npcChat.ChatText); - int totalNpcReply = gameData.npc_list[i].chatpoints[ii].replies.Count; - List replys = new List(); - for (int iii = 0; iii < totalNpcReply; iii++) - { - Npc.NpcReply npcReply = new Npc.NpcReply(); - npcReply.Id = gameData.npc_list[i].chatpoints[ii].replies[iii].reply_id; - npcReply.ReplyText = gameData.npc_list[i].chatpoints[ii].replies[iii].reply_text; - npcReply.GotoChatpoint = gameData.npc_list[i].chatpoints[ii].replies[iii].goto_chatpoint; - - if (gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_completed != null) - npcReply.RequiresQuestIdCompleted = gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_completed; - - if (gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_not_completed != null) - npcReply.RequiresQuestIdNotCompleted = gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_not_completed; - - Logger.DebugPrint("REPLY ID: " + npcReply.Id.ToString() + " TEXT: " + npcReply.ReplyText); - replys.Add(npcReply); - - } - npcChat.Replies = replys.ToArray(); - chats.Add(npcChat); - } - npcEntry.Chatpoints = chats.ToArray(); - Npc.AddNpc(npcEntry); - } - } - - private static void registerQuests() - { - Logger.DebugPrint("Registering Quests: "); - int totalQuests = gameData.quest_list.Count; - for (int i = 0; i < totalQuests; i++) - { - Quest.QuestEntry quest = new Quest.QuestEntry(); - quest.Id = gameData.quest_list[i].id; - quest.Notes = gameData.quest_list[i].notes; - if (gameData.quest_list[i].title != null) - quest.Title = gameData.quest_list[i].title; - quest.RequiresQuestIdCompleteStatsMenu = gameData.quest_list[i].requires_questid_statsmenu.ToObject(); - if (gameData.quest_list[i].alt_activation != null) - { - quest.AltActivation = new Quest.QuestAltActivation(); - quest.AltActivation.Type = gameData.quest_list[i].alt_activation.type; - quest.AltActivation.ActivateX = gameData.quest_list[i].alt_activation.x; - quest.AltActivation.ActivateY = gameData.quest_list[i].alt_activation.y; - } - quest.Tracked = gameData.quest_list[i].tracked; - quest.MaxRepeats = gameData.quest_list[i].max_repeats; - quest.MoneyCost = gameData.quest_list[i].money_cost; - int itemsRequiredCount = gameData.quest_list[i].items_required.Count; - - List itmInfo = new List(); - for (int ii = 0; ii < itemsRequiredCount; ii++) - { - Quest.QuestItemInfo itemInfo = new Quest.QuestItemInfo(); - itemInfo.ItemId = gameData.quest_list[i].items_required[ii].item_id; - itemInfo.Quantity = gameData.quest_list[i].items_required[ii].quantity; - itmInfo.Add(itemInfo); - } - quest.ItemsRequired = itmInfo.ToArray(); - if (gameData.quest_list[i].fail_npc_chat != null) - quest.FailNpcChat = gameData.quest_list[i].fail_npc_chat; - quest.MoneyEarned = gameData.quest_list[i].money_gained; - - int itemsGainedCount = gameData.quest_list[i].items_gained.Count; - itmInfo = new List(); - for (int ii = 0; ii < itemsGainedCount; ii++) - { - Quest.QuestItemInfo itemInfo = new Quest.QuestItemInfo(); - itemInfo.ItemId = gameData.quest_list[i].items_gained[ii].item_id; - itemInfo.Quantity = gameData.quest_list[i].items_gained[ii].quantity; - itmInfo.Add(itemInfo); - } - quest.ItemsEarned = itmInfo.ToArray(); - - quest.QuestPointsEarned = gameData.quest_list[i].quest_points; - quest.SetNpcChatpoint = gameData.quest_list[i].set_npc_chatpoint; - quest.GotoNpcChatpoint = gameData.quest_list[i].goto_npc_chatpoint; - if (gameData.quest_list[i].warp_x != null) - quest.WarpX = gameData.quest_list[i].warp_x; - if (gameData.quest_list[i].warp_y != null) - quest.WarpY = gameData.quest_list[i].warp_y; - if (gameData.quest_list[i].success_message != null) - quest.SuccessMessage = gameData.quest_list[i].success_message; - if (gameData.quest_list[i].success_npc_chat != null) - quest.SuccessNpcChat = gameData.quest_list[i].success_npc_chat; - if (gameData.quest_list[i].requires_awardid != null) - quest.AwardRequired = gameData.quest_list[i].requires_awardid; - quest.RequiresQuestIdCompleted = gameData.quest_list[i].requires_questid_completed.ToObject(); - quest.RequiresQuestIdNotCompleted = gameData.quest_list[i].requires_questid_not_completed.ToObject(); - quest.HideReplyOnFail = gameData.quest_list[i].hide_reply_on_fail; - if (gameData.quest_list[i].difficulty != null) - quest.Difficulty = gameData.quest_list[i].difficulty; - if (gameData.quest_list[i].author != null) - quest.Author = gameData.quest_list[i].author; - if (gameData.quest_list[i].chained_questid != null) - quest.ChainedQuestId = gameData.quest_list[i].chained_questid; - quest.Minigame = gameData.quest_list[i].minigame; - - Logger.DebugPrint("Registered Quest: " + quest.Id); - Quest.AddQuestEntry(quest); - } - } - - private static void registerShops() - { - - int totalShops = gameData.shop_list.Count; - for (int i = 0; i < totalShops; i++) - { - int id = gameData.shop_list[i].id; - int[] item_list = gameData.shop_list[i].stocks_itemids.ToObject(); - Shop shop = new Shop(item_list, id); - shop.BuyPricePercentage = gameData.shop_list[i].buy_percent; - shop.SellPricePercentage = gameData.shop_list[i].sell_percent; - shop.BuysItemTypes = gameData.shop_list[i].buys_item_types.ToObject(); - - Logger.DebugPrint("Registered Shop ID: " + shop.Id + " Selling items at " + shop.SellPricePercentage + "% and buying at " + shop.BuyPricePercentage); - } - } - - private static void registerAwards() - { - int totalAwards = gameData.award_list.Count; - Award.GlobalAwardList = new Award.AwardEntry[totalAwards]; - for (int i = 0; i < totalAwards; i++) - { - - Award.AwardEntry award = new Award.AwardEntry(); - award.Id = gameData.award_list[i].id; - award.Sort = gameData.award_list[i].sort_by; - award.Title = gameData.award_list[i].title; - award.IconId = gameData.award_list[i].icon_id; - award.MoneyBonus = gameData.award_list[i].earn_money; - award.CompletionText = gameData.award_list[i].on_complete_text; - award.Description = gameData.award_list[i].description; - - Award.GlobalAwardList[i] = award; - - Logger.DebugPrint("Registered Award ID: " + award.Id + " - " + award.Title); - } - } - private static void registerAbuseReportReasons() - { - int totalAbuseReportReasons = gameData.messages.meta.abuse_report.reasons.Count; - for (int i = 0; i < totalAbuseReportReasons; i++) - { - AbuseReport.ReportReason reason = new AbuseReport.ReportReason(); - reason.Id = gameData.messages.meta.abuse_report.reasons[i].id; - reason.Name = gameData.messages.meta.abuse_report.reasons[i].name; - reason.Meta = gameData.messages.meta.abuse_report.reasons[i].meta; - AbuseReport.AddReason(reason); - Logger.DebugPrint("Registered Abuse Report Reason: " + reason.Name); - } - } - private static void registerOverlayTileDepth() - { - List overlayTilesDepth = new List(); - int totalOverlayTileDepth = gameData.tile_paramaters.overlay_tiles.Count; - for (int i = 0; i < totalOverlayTileDepth; i++) - { - Map.TileDepth tileDepth = new Map.TileDepth(); - tileDepth.Passable = gameData.tile_paramaters.overlay_tiles[i].passable; - tileDepth.ShowPlayer = gameData.tile_paramaters.overlay_tiles[i].show_player; - Logger.DebugPrint("Registered Overlay Tile: " + i + " Depth; Passable: " + tileDepth.Passable + " ShowPlayer: " + tileDepth.ShowPlayer); - overlayTilesDepth.Add(tileDepth); - } - Map.OverlayTileDepth = overlayTilesDepth.ToArray(); - } - private static void registerTerrianTileTypes() - { - List terrainTiles = new List(); - int totalTerrainTiles = gameData.tile_paramaters.terrain_tiles.Count; - for (int i = 0; i < totalTerrainTiles; i++) - { - Map.TerrainTile tile = new Map.TerrainTile(); - tile.Passable = gameData.tile_paramaters.terrain_tiles[i].passable; - tile.Type = gameData.tile_paramaters.terrain_tiles[i].tile_type; - Logger.DebugPrint("Registered Tile Information: " + i + " Passable: " + tile.Passable + " Type: " + tile.Type); - terrainTiles.Add(tile); - } - Map.TerrainTiles = terrainTiles.ToArray(); - } - private static void registerInns() - { - int totalInns = gameData.inns.Count; - for (int i = 0; i < totalInns; i++) - { - int id = gameData.inns[i].id; - int[] restsOffered = gameData.inns[i].rests_offered.ToObject(); - int[] mealsOffered = gameData.inns[i].meals_offered.ToObject(); - int buyPercent = gameData.inns[i].buy_percent; - Inn inn = new Inn(id, restsOffered, mealsOffered, buyPercent); - - Logger.DebugPrint("Registered Inn: " + inn.Id + " Buying at: " + inn.BuyPercentage.ToString() + "%!"); - } - } - - private static void registerPoets() - { - int totalPoets = gameData.poetry.Count; - for (int i = 0; i < totalPoets; i++) - { - Brickpoet.PoetryEntry entry = new Brickpoet.PoetryEntry(); - entry.Id = gameData.poetry[i].id; - entry.Word = gameData.poetry[i].word; - entry.Room = gameData.poetry[i].room_id; - Brickpoet.AddPoetEntry(entry); - - Logger.DebugPrint("Registered poet: " + entry.Id.ToString() + " word: " + entry.Word + " in room " + entry.Room.ToString()); - } - } - - private static void registerBreeds() - { - int totalBreeds = gameData.horses.breeds.Count; - for (int i = 0; i < totalBreeds; i++) - { - HorseInfo.Breed horseBreed = new HorseInfo.Breed(); - - horseBreed.Id = gameData.horses.breeds[i].id; - horseBreed.Name = gameData.horses.breeds[i].name; - horseBreed.Description = gameData.horses.breeds[i].description; - - int speed = gameData.horses.breeds[i].base_stats.speed; - int strength = gameData.horses.breeds[i].base_stats.strength; - int conformation = gameData.horses.breeds[i].base_stats.conformation; - int agility = gameData.horses.breeds[i].base_stats.agility; - int inteligence = gameData.horses.breeds[i].base_stats.inteligence; - int endurance = gameData.horses.breeds[i].base_stats.endurance; - int personality = gameData.horses.breeds[i].base_stats.personality; - int height = gameData.horses.breeds[i].base_stats.height; - horseBreed.BaseStats = new HorseInfo.AdvancedStats(null, speed, strength, conformation, agility, inteligence, endurance, personality, height); - horseBreed.BaseStats.MinHeight = gameData.horses.breeds[i].base_stats.min_height; - horseBreed.BaseStats.MaxHeight = gameData.horses.breeds[i].base_stats.max_height; - - horseBreed.Colors = gameData.horses.breeds[i].colors.ToObject(); - horseBreed.SpawnOn = gameData.horses.breeds[i].spawn_on; - horseBreed.SpawnInArea = gameData.horses.breeds[i].spawn_area; - horseBreed.Swf = gameData.horses.breeds[i].swf; - horseBreed.Type = gameData.horses.breeds[i].type; - - HorseInfo.AddBreed(horseBreed); - Logger.DebugPrint("Registered Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name); - } - } - - private static void registerBreedPricesPawneerOrder() - { - int totalBreedPrices = gameData.horses.pawneer_base_price.Count; - for (int i = 0; i < totalBreedPrices; i++) - { - int id = gameData.horses.pawneer_base_price[i].breed_id; - int price = gameData.horses.pawneer_base_price[i].price; - Pawneer pawneerPricing = new Pawneer(id, price); - Pawneer.AddPawneerPriceModel(pawneerPricing); - Logger.DebugPrint("Registered Pawneer Base Price " + pawneerPricing.BreedId + " for $" + pawneerPricing.BasePrice.ToString("N0", CultureInfo.InvariantCulture)); - } - } - - private static void registerHorseCategorys() - { - int totalCategories = gameData.horses.categorys.Count; - for (int i = 0; i < totalCategories; i++) - { - HorseInfo.Category category = new HorseInfo.Category(); - category.Name = gameData.horses.categorys[i].name; - category.MetaOthers = gameData.horses.categorys[i].message_others; - category.Meta = gameData.horses.categorys[i].message; - HorseInfo.AddHorseCategory(category); - Logger.DebugPrint("Registered horse category type: " + category.Name); - } - } - - private static void registerTrackedItems() - { - - int totalTrackedItems = gameData.messages.meta.misc_stats.tracked_items.Count; - for (int i = 0; i < totalTrackedItems; i++) - { - Tracking.TrackedItemStatsMenu trackedItem = new Tracking.TrackedItemStatsMenu(); - trackedItem.What = gameData.messages.meta.misc_stats.tracked_items[i].id; - trackedItem.Value = gameData.messages.meta.misc_stats.tracked_items[i].value; - Tracking.TrackedItemsStatsMenu.Add(trackedItem); - Logger.DebugPrint("Registered Tracked Item: " + trackedItem.What + " value: " + trackedItem.Value); - } - } - private static void registerVets() - { - int totalVets = gameData.services.vet.price_multipliers.Count; - for (int i = 0; i < totalVets; i++) - { - double cost = gameData.services.vet.price_multipliers[i].cost; - int id = gameData.services.vet.price_multipliers[i].id; - Vet vet = new Vet(id, cost); - Logger.DebugPrint("Registered Vet: " + vet.Id + " selling at: " + vet.PriceMultiplier.ToString(CultureInfo.InvariantCulture)); - } - } - - private static void registerGroomers() - { - int totalGroomers = gameData.services.groomer.price_multipliers.Count; - for (int i = 0; i < totalGroomers; i++) - { - double cost = gameData.services.groomer.price_multipliers[i].cost; - int id = gameData.services.groomer.price_multipliers[i].id; - int max = gameData.services.groomer.price_multipliers[i].max; - Groomer groomer = new Groomer(id, cost, max); - Logger.DebugPrint("Registered Groomer: " + groomer.Id + " selling at: " + groomer.PriceMultiplier.ToString(CultureInfo.InvariantCulture)); - } - - } - - private static void registerFarriers() - { - int totalFarriers = gameData.services.farrier.price_multipliers.Count; - for (int i = 0; i < totalFarriers; i++) - { - int id = gameData.services.farrier.price_multipliers[i].id; - int steel = gameData.services.farrier.price_multipliers[i].steel; - int steelcost = gameData.services.farrier.price_multipliers[i].steel_cost; - int iron = gameData.services.farrier.price_multipliers[i].iron; - int ironcost = gameData.services.farrier.price_multipliers[i].iron_cost; - - Farrier farrier = new Farrier(id, steel, steelcost, iron, ironcost); - Logger.DebugPrint("Registered Farrier: " + farrier.Id); - } - } - - private static void registerBarns() - { - int totalBarns = gameData.services.barn.price_multipliers.Count; - for (int i = 0; i < totalBarns; i++) - { - int id = gameData.services.barn.price_multipliers[i].id; - double tired_cost = gameData.services.barn.price_multipliers[i].tired_cost; - double hunger_cost = gameData.services.barn.price_multipliers[i].hunger_cost; - double thirst_cost = gameData.services.barn.price_multipliers[i].thirst_cost; - - - Barn barn = new Barn(id, tired_cost, hunger_cost, thirst_cost); - Logger.DebugPrint("Registered Barn: " + barn.Id); - } - } - - private static void registerLibaryBooks() - { - int totalBooks = gameData.books.Count; - for (int i = 0; i < totalBooks; i++) - { - int id = gameData.books[i].id; - string author = gameData.books[i].author; - string title = gameData.books[i].title; - string text = gameData.books[i].text; - Book book = new Book(id, title, author, text); - Logger.DebugPrint("Registered Library Book: " + book.Id + " " + book.Title + " by " + book.Author); - } - } - - private static void registerCrafts() - { - int totalWorkshops = gameData.workshop.Count; - for (int i = 0; i < totalWorkshops; i++) - { - Workshop wkShop = new Workshop(); - wkShop.X = gameData.workshop[i].pos_x; - wkShop.Y = gameData.workshop[i].pos_y; - int totalCraftableItems = gameData.workshop[i].craftable_items.Count; - for (int ii = 0; ii < totalCraftableItems; ii++) - { - Workshop.CraftableItem craftableItem = new Workshop.CraftableItem(); - craftableItem.Id = gameData.workshop[i].craftable_items[ii].id; - craftableItem.GiveItemId = gameData.workshop[i].craftable_items[ii].give_item; - craftableItem.MoneyCost = gameData.workshop[i].craftable_items[ii].money_cost; - int totalItemsRequired = gameData.workshop[i].craftable_items[ii].required_items.Count; - for (int iii = 0; iii < totalItemsRequired; iii++) - { - Workshop.RequiredItem requiredItem = new Workshop.RequiredItem(); - requiredItem.RequiredItemId = gameData.workshop[i].craftable_items[ii].required_items[iii].req_item; - requiredItem.RequiredItemCount = gameData.workshop[i].craftable_items[ii].required_items[iii].req_quantity; - craftableItem.AddRequiredItem(requiredItem); - } - wkShop.AddCraftableItem(craftableItem); - } - - Workshop.AddWorkshop(wkShop); - Logger.DebugPrint("Registered Workshop at X: " + wkShop.X + " Y: " + wkShop.Y); - - } - } - - private static void registerRanchBuildings() - { - int totalRanchBuildings = gameData.ranch.ranch_buildings.buildings.Count; - for (int i = 0; i < totalRanchBuildings; i++) - { - int id = gameData.ranch.ranch_buildings.buildings[i].id; - int cost = gameData.ranch.ranch_buildings.buildings[i].cost; - string title = gameData.ranch.ranch_buildings.buildings[i].title; - string description = gameData.ranch.ranch_buildings.buildings[i].description; - - Ranch.RanchBuilding building = new Ranch.RanchBuilding(); - - building.Id = id; - building.Cost = cost; - building.Title = title; - building.Description = description; - - Ranch.RanchBuilding.RanchBuildings.Add(building); - Logger.DebugPrint("Registered Ranch Building: " + building.Title); - - } - } - - private static void registerRanchUpgrades() - { - int totalRanchUpgrades = gameData.ranch.ranch_buildings.upgrades.Count; - for (int i = 0; i < totalRanchUpgrades; i++) - { - int id = gameData.ranch.ranch_buildings.upgrades[i].id; - int cost = gameData.ranch.ranch_buildings.upgrades[i].cost; - string title = gameData.ranch.ranch_buildings.upgrades[i].title; - string description = gameData.ranch.ranch_buildings.upgrades[i].description; - - Ranch.RanchUpgrade upgrade = new Ranch.RanchUpgrade(); - - if (gameData.ranch.ranch_buildings.upgrades[i].limit != null) - upgrade.Limit = gameData.ranch.ranch_buildings.upgrades[i].limit; - upgrade.Id = id; - upgrade.Cost = cost; - upgrade.Title = title; - upgrade.Description = description; - - Ranch.RanchUpgrade.RanchUpgrades.Add(upgrade); - Logger.DebugPrint("Registered Ranch Upgrade: " + upgrade.Title); - - } - } - - private static void registerRanchs() - { - int totalRanchLocations = gameData.ranch.ranch_locations.Count; - for (int i = 0; i < totalRanchLocations; i++) - { - int x = gameData.ranch.ranch_locations[i].x; - int y = gameData.ranch.ranch_locations[i].y; - int id = gameData.ranch.ranch_locations[i].id; - int value = gameData.ranch.ranch_locations[i].value; - Ranch ranch = new Ranch(x, y, id, value); - Ranch.Ranches.Add(ranch); - Logger.DebugPrint("Registered Ranch id " + id + " at X: " + ranch.X + " Y: " + ranch.Y); - - } - } - - private static void registerRiddlerRiddles() - { - int totalRiddles = gameData.riddle_room.Count; - for (int i = 0; i < totalRiddles; i++) - { - int id = gameData.riddle_room[i].id; - string riddle = gameData.riddle_room[i].riddle; - string[] answers = gameData.riddle_room[i].answers.ToObject(); - string reason = gameData.riddle_room[i].reason; - Riddler riddlerRiddle = new Riddler(id, riddle, answers, reason); - Logger.DebugPrint("Registered Riddler Riddle: " + riddlerRiddle.Riddle); - - } - } - private static void registerBBCodes() - { - int totalBBocdes = gameData.bbcode.Count; - for (int i = 0; i < totalBBocdes; i++) - { - string tag = gameData.bbcode[i].tag; - string meta = gameData.bbcode[i].meta; - BBCode code = new BBCode(tag, meta); - Logger.DebugPrint("Registered BBCODE: " + code.Tag + " to " + code.MetaTranslation); - } - } - private static void registerTrainingPens() - { - int totalTrainingPens = gameData.training_pens.Count; - for (int i = 0; i < totalTrainingPens; i++) - { - Trainer trainer = new Trainer(); - trainer.Id = gameData.training_pens[i].trainer_id; - trainer.ImprovesStat = gameData.training_pens[i].improves_stat; - trainer.ImprovesAmount = gameData.training_pens[i].improves_amount; - trainer.ThirstCost = gameData.training_pens[i].thirst_cost; - trainer.MoodCost = gameData.training_pens[i].mood_cost; - trainer.HungerCost = gameData.training_pens[i].hunger_cost; - trainer.MoneyCost = gameData.training_pens[i].money_cost; - trainer.ExperienceGained = gameData.training_pens[i].experience; - Trainer.Trainers.Add(trainer); - Logger.DebugPrint("Registered Training Pen: " + trainer.Id + " for " + trainer.ImprovesStat); - } - - } - - private static void registerArenas() - { - int totalArenas = gameData.arena.arena_list.Count; - for (int i = 0; i < totalArenas; i++) - { - int arenaId = gameData.arena.arena_list[i].arena_id; - string arenaType = gameData.arena.arena_list[i].arena_type; - int arenaEntryCost = gameData.arena.arena_list[i].entry_cost; - int raceEvery = gameData.arena.arena_list[i].race_every; - int slots = gameData.arena.arena_list[i].slots; - int timeout = gameData.arena.arena_list[i].timeout; - - Arena arena = new Arena(arenaId, arenaType, arenaEntryCost, raceEvery, slots, timeout); - Logger.DebugPrint("Registered Arena: " + arena.Id.ToString() + " as " + arena.Type); - } - Arena.ExpRewards = gameData.arena.arena_exp.ToObject(); - } - - private static void registerLeasers() - { - int totalLeasers = gameData.leaser.Count; - for (int i = 0; i < totalLeasers; i++) - { - int breedId = gameData.leaser[i].horse.breed; - - int saddle = -1; - int saddlePad = -1; - int bridle = -1; - - if (gameData.leaser[i].horse.tack.saddle != null) - saddle = gameData.leaser[i].horse.tack.saddle; - - if (gameData.leaser[i].horse.tack.saddle_pad != null) - saddlePad = gameData.leaser[i].horse.tack.saddle_pad; - - if (gameData.leaser[i].horse.tack.bridle != null) - bridle = gameData.leaser[i].horse.tack.bridle; - - Leaser leaser = new Leaser(breedId, saddle, saddlePad, bridle); - leaser.LeaseId = gameData.leaser[i].lease_id; - leaser.ButtonId = gameData.leaser[i].button_id; - leaser.Info = gameData.leaser[i].info; - leaser.OnLeaseText = gameData.leaser[i].on_lease; - leaser.Price = gameData.leaser[i].price; - leaser.Minutes = gameData.leaser[i].minutes; - - leaser.Color = gameData.leaser[i].horse.color; - leaser.Gender = gameData.leaser[i].horse.gender; - leaser.Height = gameData.leaser[i].horse.hands; - leaser.Experience = gameData.leaser[i].horse.exp; - leaser.HorseName = gameData.leaser[i].horse.name; - - leaser.Health = gameData.leaser[i].horse.basic_stats.health; - leaser.Hunger = gameData.leaser[i].horse.basic_stats.hunger; - leaser.Thirst = gameData.leaser[i].horse.basic_stats.thirst; - leaser.Mood = gameData.leaser[i].horse.basic_stats.mood; - leaser.Tiredness = gameData.leaser[i].horse.basic_stats.energy; - leaser.Groom = gameData.leaser[i].horse.basic_stats.groom; - leaser.Shoes = gameData.leaser[i].horse.basic_stats.shoes; - - leaser.Speed = gameData.leaser[i].horse.advanced_stats.speed; - leaser.Strength = gameData.leaser[i].horse.advanced_stats.strength; - leaser.Conformation = gameData.leaser[i].horse.advanced_stats.conformation; - leaser.Agility = gameData.leaser[i].horse.advanced_stats.agility; - leaser.Endurance = gameData.leaser[i].horse.advanced_stats.endurance; - leaser.Inteligence = gameData.leaser[i].horse.advanced_stats.inteligence; - leaser.Personality = gameData.leaser[i].horse.advanced_stats.personality; - - Leaser.AddHorseLeaser(leaser); - Logger.DebugPrint("Registered Leaser: " + leaser.LeaseId.ToString() + " For a " + leaser.HorseName); - } - } - - private static void registerSocials() - { - int totalSocials = gameData.social_types.Count; - for (int i = 0; i < totalSocials; i++) - { - string socialType = gameData.social_types[i].type; - int totalSocialsOfType = gameData.social_types[i].socials.Count; - for (int ii = 0; ii < totalSocialsOfType; ii++) - { - SocialType.Social social = new SocialType.Social(); - - social.Id = gameData.social_types[i].socials[ii].social_id; - social.ButtonName = gameData.social_types[i].socials[ii].button_name; - social.ForSender = gameData.social_types[i].socials[ii].for_sender; - social.ForTarget = gameData.social_types[i].socials[ii].for_target; - social.ForEveryone = gameData.social_types[i].socials[ii].for_everyone; - social.SoundEffect = gameData.social_types[i].socials[ii].sound_effect; - - SocialType.AddNewSocial(socialType, social); - Logger.DebugPrint("Registered Social: " + social.ButtonName); - } - } - } - - private static void registerRealTimeRiddleEvents() - { - int totalRealTimeRiddles = gameData.events.real_time_riddle.Count; - for (int i = 0; i < totalRealTimeRiddles; i++) - { - int id = gameData.events.real_time_riddle[i].id; - string riddleText = gameData.events.real_time_riddle[i].text; - string[] riddleAnswers = gameData.events.real_time_riddle[i].answers.ToObject(); - int reward = gameData.events.real_time_riddle[i].money_reward; - - RealTimeRiddle riddle = new RealTimeRiddle(id, riddleText, riddleAnswers, reward); - - Logger.DebugPrint("Registered Riddle #" + riddle.RiddleId.ToString()); - } - } - - private static void registerRealTimeQuizEvents() - { - int totalRealTimeQuizCategories = gameData.events.real_time_quiz.Count; - RealTimeQuiz.Categories = new RealTimeQuiz.QuizCategory[totalRealTimeQuizCategories]; // initalize array - for (int i = 0; i < totalRealTimeQuizCategories; i++) - { - string name = gameData.events.real_time_quiz[i].name; - int totalQuestions = gameData.events.real_time_quiz[i].questons.Count; - - RealTimeQuiz.QuizCategory quizCategory = new RealTimeQuiz.QuizCategory(); - quizCategory.Name = name; - quizCategory.Questions = new RealTimeQuiz.QuizQuestion[totalQuestions]; - - for (int ii = 0; ii < totalQuestions; ii++) - { - quizCategory.Questions[ii] = new RealTimeQuiz.QuizQuestion(quizCategory); - quizCategory.Questions[ii].Question = gameData.events.real_time_quiz[i].questons[ii].question; - quizCategory.Questions[ii].Answers = gameData.events.real_time_quiz[i].questons[ii].answers.ToObject(); - Logger.DebugPrint("Registered Real Time Quiz Question: " + quizCategory.Questions[ii].Question); - } - - RealTimeQuiz.Categories[i] = quizCategory; - - Logger.DebugPrint("Registered Real Time Quiz Category: " + name); - } - } - private static void registerRandomEvents() - { - int totalRandomEvent = gameData.events.random_events.Count; - for (int i = 0; i < totalRandomEvent; i++) - { - int minmoney = 0; - int maxmoney = 0; - int lowerHorseHealth = 0; - int giveObj = 0; - - int id = gameData.events.random_events[i].id; - string txt = gameData.events.random_events[i].text; - - if (gameData.events.random_events[i].min_money != null) - minmoney = gameData.events.random_events[i].min_money; - if (gameData.events.random_events[i].max_money != null) - maxmoney = gameData.events.random_events[i].max_money; - if (gameData.events.random_events[i].lower_horse_health != null) - lowerHorseHealth = gameData.events.random_events[i].lower_horse_health; - if (gameData.events.random_events[i].give_object != null) - giveObj = gameData.events.random_events[i].give_object; - - new RandomEvent(id, txt, minmoney, maxmoney, lowerHorseHealth, giveObj); - - Logger.DebugPrint("Registered Random Event: " + txt); - } - } - public static void ReadGamedata() - { - readGamedataFiles(); - registerTowns(); - registerZones(); - registerAreas(); - registerIsles(); - registerWaypoints(); - registerSpecialTiles(); - registerChatWarningReasons(); - registerFilteredWords(); - registerWordCorrections(); - registerTransportPoints(); - registerTransportLocations(); - registerItems(); - registerThrowables(); - registerNpcs(); - registerQuests(); - registerShops(); - registerAwards(); - registerAbuseReportReasons(); - registerOverlayTileDepth(); - registerTerrianTileTypes(); - registerInns(); - registerPoets(); - registerBreeds(); - registerBreedPricesPawneerOrder(); - registerHorseCategorys(); - registerTrackedItems(); - registerVets(); - registerGroomers(); - registerFarriers(); - registerBarns(); - registerLibaryBooks(); - registerCrafts(); - registerRanchBuildings(); - registerRanchUpgrades(); - registerRanchs(); - registerRiddlerRiddles(); - registerBBCodes(); - registerTrainingPens(); - registerArenas(); - registerLeasers(); - registerSocials(); - registerRealTimeRiddleEvents(); - registerRealTimeQuizEvents(); - registerRandomEvents(); - - // the rest is easier; - - HorseInfo.HorseNames = gameData.horses.names.ToObject(); - - Item.Present = gameData.item.special.present; - Item.MailMessage = gameData.item.special.mail_message; - Item.DorothyShoes = gameData.item.special.dorothy_shoes; - Item.PawneerOrder = gameData.item.special.pawneer_order; - Item.Telescope = gameData.item.special.telescope; - Item.Pitchfork = gameData.item.special.pitchfork; - Item.WishingCoin = gameData.item.special.wishing_coin; - Item.FishingPole = gameData.item.special.fishing_poll; - Item.Earthworm = gameData.item.special.earthworm; - Item.BirthdayToken = gameData.item.special.birthday_token; - Item.WaterBalloon = gameData.item.special.water_balloon; - Item.ModSplatterball = gameData.item.special.mod_splatterball; - Item.MagicBean = gameData.item.special.magic_bean; - Item.MagicDroplet = gameData.item.special.magic_droplet; - Item.Ruby = gameData.item.special.ruby; - - Item.StallionTradingCard = gameData.item.special.stallion_trading_card; - Item.MareTradingCard = gameData.item.special.mare_trading_card; - Item.ColtTradingCard = gameData.item.special.colt_trading_card; - Item.FillyTradingCard = gameData.item.special.filly_trading_card; - - GameServer.IdleWarning = Convert.ToInt32(gameData.messages.disconnect.client_timeout.warn_after); - GameServer.IdleTimeout = Convert.ToInt32(gameData.messages.disconnect.client_timeout.kick_after); - - ChatMsg.PrivateMessageSound = gameData.messages.chat.pm_sound; - - // HISP Specific ... - Messages.HISPHelpCommandUsageFormat = gameData.hisp_specific.HISP_help_command_usage_format; - - // New Users - - Messages.NewUserMessage = gameData.messages.new_user.starting_message; - Map.NewUserStartX = gameData.messages.new_user.starting_x; - Map.NewUserStartY = gameData.messages.new_user.starting_y; - - // Timed Messages - - Messages.PlaytimeMessageFormat = gameData.messages.timed_messages.playtime_message; - Messages.RngMessages = gameData.messages.timed_messages.rng_message.ToObject(); - - // Auto Sell - Messages.AutoSellNotStandingInSamePlace = gameData.messages.meta.auto_sell.not_standing_sameplace; - Messages.AutoSellSuccessFormat = gameData.messages.meta.auto_sell.success; - Messages.AutoSellInsufficentFunds = gameData.messages.meta.auto_sell.insufficent_money; - Messages.AutoSellTooManyHorses = gameData.messages.meta.auto_sell.toomany_horses; - Messages.AutoSellYouSoldHorseFormat = gameData.messages.meta.auto_sell.you_sold; - Messages.AutoSellYouSoldHorseOfflineFormat = gameData.messages.meta.auto_sell.sold_offline; - - // Mute Command - Messages.NowMutingPlayerFormat = gameData.messages.meta.mute_command.now_ignoring_player; - Messages.StoppedMutingPlayerFormat = gameData.messages.meta.mute_command.stop_ignoring_player; - - Messages.PlayerIgnoringYourPrivateMessagesFormat = gameData.messages.meta.mute_command.player_ignoring_your_pm; - Messages.PlayerIgnoringYourBuddyRequests = gameData.messages.meta.mute_command.player_ignoring_your_br; - Messages.PlayerIgnoringYourSocials = gameData.messages.meta.mute_command.player_ignoring_your_socials; - - Messages.PlayerIgnoringAllPrivateMessagesFormat = gameData.messages.meta.mute_command.player_ignoring_all_pm; - Messages.PlayerIgnoringAllBuddyRequests = gameData.messages.meta.mute_command.player_ignoring_all_br; - Messages.PlayerIgnoringAllSocials = gameData.messages.meta.mute_command.player_ignoring_all_socials; - - Messages.CantSendInMutedChannel = gameData.messages.meta.mute_command.cant_send_in_muted_channel; - Messages.CantSendBuddyRequestWhileMuted = gameData.messages.meta.mute_command.cant_send_br_muted; - Messages.CantSendPrivateMessageWhileMuted = gameData.messages.meta.mute_command.cant_send_pm_muted; - - Messages.CantSendPrivateMessagePlayerMutedFormat = gameData.messages.meta.mute_command.cant_send_pm_player_muted; - - // Chat Errors - Messages.CantFindPlayerToPrivateMessage = gameData.messages.chat_errors.cant_find_player; - Messages.AdsOnlyOncePerMinute = gameData.messages.chat_errors.ads_once_per_minute; - Messages.GlobalChatLimited = gameData.messages.chat_errors.global_chats_limited; - Messages.GlobalChatTooLong = gameData.messages.chat_errors.global_too_long; - Messages.AdsChatTooLong = gameData.messages.chat_errors.ads_too_long; - - // Warp Command - - Messages.SuccessfullyWarpedToPlayer = gameData.messages.commands.warp.player; - Messages.SuccessfullyWarpedToLocation = gameData.messages.commands.warp.location; - Messages.OnlyUnicornCanWarp = gameData.messages.commands.warp.only_unicorn; - Messages.FailedToUnderstandLocation = gameData.messages.commands.warp.location_unknown; - - // Mod Isle - Messages.ModSplatterballEarnedYouFormat = gameData.messages.mods_revenge.awarded_you; - Messages.ModSplatterballEarnedOtherFormat = gameData.messages.mods_revenge.awareded_others; - Messages.ModIsleMessage = gameData.messages.commands.mod_isle.message; - Map.ModIsleX = gameData.messages.commands.mod_isle.x; - Map.ModIsleY = gameData.messages.commands.mod_isle.y; - - // Rules Isle - Map.RulesIsleX = gameData.messages.commands.rules_isle.x; - Map.RulesIsleY = gameData.messages.commands.rules_isle.y; - Messages.RulesIsleSentMessage = gameData.messages.commands.rules_isle.message; - Messages.RulesIsleCommandMessageFormat = gameData.messages.commands.rules_isle.command_msg; - - // Prison Isle - Map.PrisonIsleX = gameData.messages.commands.prison_isle.x; - Map.PrisonIsleY = gameData.messages.commands.prison_isle.y; - Messages.PrisonIsleSentMessage = gameData.messages.commands.prison_isle.message; - Messages.PrisonIsleCommandMessageFormat = gameData.messages.commands.prison_isle.command_msg; - - - // Tag - - Messages.TagYourItFormat = gameData.messages.meta.player_interaction.tag.tag_player; - Messages.TagOtherBuddiesOnlineFormat = gameData.messages.meta.player_interaction.tag.total_buddies; - - // Add Buddy - - Messages.AddBuddyPending = gameData.messages.meta.player_interaction.add_buddy.add_pending; - Messages.AddBuddyOtherPendingFormat = gameData.messages.meta.player_interaction.add_buddy.other_pending; - Messages.AddBuddyYourNowBuddiesFormat = gameData.messages.meta.player_interaction.add_buddy.add_confirmed; - Messages.AddBuddyDeleteBuddyFormat = gameData.messages.meta.player_interaction.add_buddy.deleted; - - // Socials - - Messages.SocialButton = gameData.messages.meta.player_interaction.socials.socials_button; - Messages.SocialMessageFormat = gameData.messages.meta.player_interaction.socials.socials_message; - Messages.SocialTypeFormat = gameData.messages.meta.player_interaction.socials.socials_menu_type; - Messages.SocialPlayerNoLongerNearby = gameData.messages.meta.player_interaction.socials.no_longer_nearby; - - // Message Queue - Messages.MessageQueueHeader = gameData.messages.message_queue; - - // Random Event - Messages.RandomEventPrefix = gameData.messages.random_event_prefix; - - // Events : Mods Revenge - Messages.EventStartModsRevenge = gameData.messages.events.mods_revenge.event_start; - Messages.EventEndModsRevenge = gameData.messages.events.mods_revenge.event_end; - - // Events : Isle Trading Game - Messages.EventStartIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_start; - Messages.EventDisqualifiedIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_disqualified; - Messages.EventOnlyOneTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_one_type; - Messages.EventOnlyTwoTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_two_type; - Messages.EventOnlyThreeTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_three_type; - Messages.EventNoneIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_no_cards; - Messages.EventWonIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_win; - - // Events : Water Ballon Game - Messages.EventStartWaterBallonGame = gameData.messages.events.water_balloon_game.event_start; - Messages.EventWonWaterBallonGame = gameData.messages.events.water_balloon_game.event_won; - Messages.EventEndWaterBalloonGame = gameData.messages.events.water_balloon_game.event_end; - Messages.EventWinnerWaterBalloonGameFormat = gameData.messages.events.water_balloon_game.event_winner; - - // Events : Real Time Quiz - - Messages.EventMetaRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_meta; - Messages.EventStartRealTimeQuiz = gameData.messages.events.real_time_quiz.event_start; - Messages.EventEndRealTimeQuiz = gameData.messages.events.real_time_quiz.event_end; - Messages.EventBonusRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_bonus; - Messages.EventWinBonusRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_win_bonus; - Messages.EventWinRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_win; - Messages.EventUnavailableRealTimeQuiz = gameData.messages.events.real_time_quiz.event_unavailable; - Messages.EventEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered; - Messages.EventAlreadyEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered_already; - Messages.EventQuitRealTimeQuiz = gameData.messages.events.real_time_quiz.event_quit; - - // Events : Real Time Riddle - - Messages.EventStartRealTimeRiddleFormat = gameData.messages.events.real_time_riddle.event_start; - Messages.EventEndRealTimeRiddle = gameData.messages.events.real_time_riddle.event_end; - Messages.EventWonRealTimeRiddleForOthersFormat = gameData.messages.events.real_time_riddle.event_won_others; - Messages.EventWonRealTimeRiddleForYouFormat = gameData.messages.events.real_time_riddle.event_won_you; - Messages.EventAlreadySovledRealTimeRiddle = gameData.messages.events.real_time_riddle.event_solved_already; - - // Events : Tack Shop Giveaway - - Messages.EventStartTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_start; - Messages.Event1MinTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_1min; - Messages.EventWonTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_won; - Messages.EventEndTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_end; - - - // MultiHorses - Messages.OtherPlayersHere = gameData.messages.meta.multihorses.other_players_here; - Messages.MultiHorseSelectOneToJoinWith = gameData.messages.meta.multihorses.select_a_horse; - Messages.MultiHorseFormat = gameData.messages.meta.multihorses.horse_format; - - // 2Player - Messages.TwoPlayerOtherPlayer = gameData.messages.meta.two_player.other_player; - Messages.TwoPlayerPlayerFormat = gameData.messages.meta.two_player.player_name; - Messages.TwoPlayerInviteButton = gameData.messages.meta.two_player.invite_button; - Messages.TwoPlayerAcceptButton = gameData.messages.meta.two_player.accept_button; - Messages.TwoPlayerSentInvite = gameData.messages.meta.two_player.sent_invite; - Messages.TwoPlayerPlayingWithFormat = gameData.messages.meta.two_player.playing_with; - - Messages.TwoPlayerGameInProgressFormat = gameData.messages.meta.two_player.game_in_progress; - - Messages.TwoPlayerYourInvitedFormat = gameData.messages.meta.two_player.your_invited; - Messages.TwoPlayerInvitedFormat = gameData.messages.meta.two_player.you_invited; - Messages.TwoPlayerStartingUpGameFormat = gameData.messages.meta.two_player.starting_game; - - Messages.TwoPlayerGameClosed = gameData.messages.meta.two_player.game_closed; - Messages.TwoPlayerGameClosedOther = gameData.messages.meta.two_player.game_closed_other; - - Messages.TwoPlayerRecordedWinFormat = gameData.messages.meta.two_player.recorded_win; - Messages.TwoPlayerRecordedLossFormat = gameData.messages.meta.two_player.recorded_loss; - - // Trade - - Messages.TradeWithPlayerFormat = gameData.messages.meta.player_interaction.trade.trading_with; - - Messages.TradeWaitingForOtherDone = gameData.messages.meta.player_interaction.trade.trade_wait_for_done; - Messages.TradeOtherPlayerIsDone = gameData.messages.meta.player_interaction.trade.other_player_is_done; - Messages.TradeFinalReview = gameData.messages.meta.player_interaction.trade.final_review; - - Messages.TradeYourOfferingFormat = gameData.messages.meta.player_interaction.trade.you_offering; - - Messages.TradeAddItems = gameData.messages.meta.player_interaction.trade.add_items; - Messages.TradeOtherOfferingFormat = gameData.messages.meta.player_interaction.trade.other_offering; - - Messages.TradeWhenDoneClick = gameData.messages.meta.player_interaction.trade.when_done_click; - Messages.TradeCancelAnytime = gameData.messages.meta.player_interaction.trade.cancel_anytime; - Messages.TradeAcceptTrade = gameData.messages.meta.player_interaction.trade.accept_trade; - - Messages.TradeOfferingNothing = gameData.messages.meta.player_interaction.trade.offering_nothing; - Messages.TradeOfferingMoneyFormat = gameData.messages.meta.player_interaction.trade.offering_money; - Messages.TradeOfferingItemFormat = gameData.messages.meta.player_interaction.trade.offering_item; - Messages.TradeOfferingHorseFormat = gameData.messages.meta.player_interaction.trade.offering_horse; - - // Trading : What to offer - - Messages.TradeWhatToOfferFormat = gameData.messages.meta.player_interaction.trade.what_to_offer; - Messages.TradeOfferMoney = gameData.messages.meta.player_interaction.trade.offer_money; - - Messages.TradeOfferHorse = gameData.messages.meta.player_interaction.trade.offer_horse; - Messages.TradeOfferHorseFormat = gameData.messages.meta.player_interaction.trade.offer_horse_format; - Messages.TradeOfferHorseTacked = gameData.messages.meta.player_interaction.trade.horse_tacked; - - Messages.TradeOfferItem = gameData.messages.meta.player_interaction.trade.offer_object; - Messages.TradeOfferItemFormat = gameData.messages.meta.player_interaction.trade.offer_object_format; - Messages.TradeOfferItemOtherPlayerInvFull = gameData.messages.meta.player_interaction.trade.offer_object_inv_full; - - // Trading : Offer Submenu - - Messages.TradeMoneyOfferSubmenuFormat = gameData.messages.meta.player_interaction.trade.money_offer_submenu; - Messages.TradeItemOfferSubmenuFormat = gameData.messages.meta.player_interaction.trade.object_offer_submenu; - - // Trading : Messges - - Messages.TradeWaitingForOthersToAcceptMessage = gameData.messages.meta.player_interaction.trade.waiting_for_other_to_accept; - Messages.TradeRequiresBothPlayersMessage = gameData.messages.meta.player_interaction.trade.requires_both_players; - - Messages.TradeItemOfferAtleast1 = gameData.messages.meta.player_interaction.trade.object_offer_atleast_1; - Messages.TradeItemOfferTooMuchFormat = gameData.messages.meta.player_interaction.trade.object_offer_too_much; - Messages.TradeMoneyOfferTooMuch = gameData.messages.meta.player_interaction.trade.money_offer_too_much; - - Messages.TradeOtherPlayerHasNegativeMoney = gameData.messages.meta.player_interaction.trade.other_player_has_negative_money; - Messages.TradeYouHaveNegativeMoney = gameData.messages.meta.player_interaction.trade.you_have_negative_money; - - - Messages.TradeAcceptedMessage = gameData.messages.meta.player_interaction.trade.trade_accepted; - Messages.TradeCanceledByYouMessage = gameData.messages.meta.player_interaction.trade.you_canceled; - Messages.TradeCanceledByOtherPlayerFormat = gameData.messages.meta.player_interaction.trade.other_canceled; - Messages.TradeCanceledBecuasePlayerMovedMessage = gameData.messages.meta.player_interaction.trade.trade_canceled_moved; - Messages.TradeCanceledInterupted = gameData.messages.meta.player_interaction.trade.trade_interupted; - - Messages.TradeRiddenHorse = gameData.messages.meta.player_interaction.trade.trade_ridden_horse; - - Messages.TradeYouCantHandleMoreHorses = gameData.messages.meta.player_interaction.trade.cant_handle_more_horses; - Messages.TradeOtherPlayerCantHandleMoreHorsesFormat = gameData.messages.meta.player_interaction.trade.other_player_cant_handle_more_horses; - - Messages.TradeOtherCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.other_carry_more; - Messages.TradeYouCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.you_cant_carry_more; - - Messages.TradeYouSpentMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_spent; - Messages.TradeYouReceivedMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_received; - - Messages.TradeNotAllowedWhileBidding = gameData.messages.meta.player_interaction.trade.trade_not_allowed_while_bidding; - Messages.TradeNotAllowedWhileOtherBidding = gameData.messages.meta.player_interaction.trade.trade_not_allowed_while_other_is_bidding; - - Messages.TradeWillGiveYouTooMuchMoney = gameData.messages.meta.player_interaction.trade.trade_other_cannot_carry_that_much; - Messages.TradeWillGiveOtherTooMuchMoney = gameData.messages.meta.player_interaction.trade.trade_you_cannot_carry_that_much; - - // Player Interation - - Messages.PlayerHereMenuFormat = gameData.messages.meta.player_interaction.menu; - - Messages.PlayerHereProfileButton = gameData.messages.meta.player_interaction.profiile_button; - Messages.PlayerHereSocialButton = gameData.messages.meta.player_interaction.social_button; - Messages.PlayerHereTradeButton = gameData.messages.meta.player_interaction.trade_button; - Messages.PlayerHereAddBuddyButton = gameData.messages.meta.player_interaction.buddy_button; - Messages.PlayerHereTagButton = gameData.messages.meta.player_interaction.tag_button; - Messages.PmButton = gameData.messages.meta.player_interaction.pm_button; - - - // Auction - Messages.AuctionsRunning = gameData.messages.meta.auction.auctions_running; - Messages.AuctionPlayersHereFormat = gameData.messages.meta.auction.players_here; - Messages.AuctionHorseEntryFormat = gameData.messages.meta.auction.auction_horse_entry; - Messages.AuctionAHorse = gameData.messages.meta.auction.auction_horse; - - Messages.AuctionListHorse = gameData.messages.meta.auction.list_horse; - Messages.AuctionHorseListEntryFormat = gameData.messages.meta.auction.horse_list_entry; - Messages.AuctionHorseViewButton = gameData.messages.meta.auction.view_button; - Messages.AuctionHorseIsTacked = gameData.messages.meta.auction.tacked; - - Messages.AuctionBidMax = gameData.messages.meta.auction.max_bid; - Messages.AuctionBidRaisedFormat = gameData.messages.meta.auction.bid_raised; - Messages.AuctionTopBid = gameData.messages.meta.auction.top_bid; - Messages.AuctionExistingBidHigher = gameData.messages.meta.auction.existing_higher; - - Messages.AuctionYouHaveTooManyHorses = gameData.messages.meta.auction.you_have_too_many_horses; - Messages.AuctionOnlyOneWinningBidAllowed = gameData.messages.meta.auction.only_one_winning_bid_allowed; - - Messages.AuctionOneHorsePerPlayer = gameData.messages.meta.auction.one_horse_at_a_time; - Messages.AuctionYouveBeenOutbidFormat = gameData.messages.meta.auction.outbid_by; - Messages.AuctionCantAffordBid = gameData.messages.meta.auction.cant_afford_bid; - Messages.AuctionCantAffordAuctionFee = gameData.messages.meta.auction.cant_afford_listing; - Messages.AuctionNoOtherTransactionAllowed = gameData.messages.meta.auction.no_other_transaction_allowed; - - Messages.AuctionYouBroughtAHorseFormat = gameData.messages.meta.auction.brought_horse; - Messages.AuctionNoHorseBrought = gameData.messages.meta.auction.no_one_brought; - Messages.AuctionHorseSoldFormat = gameData.messages.meta.auction.horse_sold; - - Messages.AuctionSoldToFormat = gameData.messages.meta.auction.sold_to; - Messages.AuctionNotSold = gameData.messages.meta.auction.not_sold; - Messages.AuctionGoingToFormat = gameData.messages.meta.auction.going_to; - - // Hammock Text - Messages.HammockText = gameData.messages.meta.hammock; - - // Horse Leaser - Messages.HorseLeaserCantAffordMessage = gameData.messages.horse_leaser.cant_afford; - Messages.HorseLeaserTemporaryHorseAdded = gameData.messages.horse_leaser.temporary_horse_added; - Messages.HorseLeaserHorsesFull = gameData.messages.horse_leaser.horses_full; - - Messages.HorseLeaserReturnedToUniterPegasus = gameData.messages.horse_leaser.returned_to_uniter_pegasus; - - Messages.HorseLeaserReturnedToUniterFormat = gameData.messages.horse_leaser.returned_to_uniter; - Messages.HorseLeaserReturnedToOwnerFormat = gameData.messages.horse_leaser.returned_to_owner; - - // Competitions - Messages.ArenaResultsMessage = gameData.messages.meta.arena.results; - Messages.ArenaPlacingFormat = gameData.messages.meta.arena.placing; - Messages.ArenaAlreadyEntered = gameData.messages.meta.arena.already_entered; - - Messages.ArenaFirstPlace = gameData.messages.meta.arena.first_place; - Messages.ArenaSecondPlace = gameData.messages.meta.arena.second_place; - Messages.ArenaThirdPlace = gameData.messages.meta.arena.third_place; - Messages.ArenaFourthPlace = gameData.messages.meta.arena.fourth_place; - Messages.ArenaFifthPlace = gameData.messages.meta.arena.fifth_place; - Messages.ArenaSixthPlace = gameData.messages.meta.arena.sixth_place; - - Messages.ArenaEnteredInto = gameData.messages.meta.arena.enter_into; - Messages.ArenaCantAfford = gameData.messages.meta.arena.cant_afford; - - Messages.ArenaYourScoreFormat = gameData.messages.meta.arena.your_score; - - Messages.ArenaJumpingStartup = gameData.messages.meta.arena.jumping_start_up; - Messages.ArenaDraftStartup = gameData.messages.meta.arena.draft_start_up; - Messages.ArenaRacingStartup = gameData.messages.meta.arena.racing_start_up; - Messages.ArenaConformationStartup = gameData.messages.meta.arena.conformation_start_up; - - Messages.ArenaYouWinFormat = gameData.messages.meta.arena.winner; - Messages.ArenaOnlyWinnerWins = gameData.messages.meta.arena.only_winner_wins; - - Messages.ArenaTooHungry = gameData.messages.meta.arena.too_hungry; - Messages.ArenaTooThirsty = gameData.messages.meta.arena.too_thisty; - Messages.ArenaNeedsFarrier = gameData.messages.meta.arena.farrier; - Messages.ArenaTooTired = gameData.messages.meta.arena.too_tired; - Messages.ArenaNeedsVet = gameData.messages.meta.arena.needs_vet; - - Messages.ArenaEventNameFormat = gameData.messages.meta.arena.event_name; - Messages.ArenaCurrentlyTakingEntriesFormat = gameData.messages.meta.arena.currently_taking_entries; - Messages.ArenaCompetitionInProgress = gameData.messages.meta.arena.competition_in_progress; - Messages.ArenaYouHaveHorseEntered = gameData.messages.meta.arena.horse_entered; - Messages.ArenaCompetitionFull = gameData.messages.meta.arena.competiton_full; - - Messages.ArenaFullErrorMessage = gameData.messages.meta.arena.arena_join_fail_full; - - Messages.ArenaEnterHorseFormat = gameData.messages.meta.arena.enter_horse; - Messages.ArenaCurrentCompetitors = gameData.messages.meta.arena.current_competitors; - Messages.ArenaCompetingHorseFormat = gameData.messages.meta.arena.competing_horses; - - // Horse Games - Messages.HorseGamesSelectHorse = gameData.messages.meta.horse_games.select_a_horse; - Messages.HorseGamesHorseEntryFormat = gameData.messages.meta.horse_games.horse_entry; - - // City Hall - Messages.CityHallMenu = gameData.messages.meta.city_hall.menu; - Messages.CityHallMailSendMeta = gameData.messages.meta.city_hall.mail_send_meta; - - Messages.CityHallSentMessageFormat = gameData.messages.meta.city_hall.sent_mail; - Messages.CityHallCantAffordPostageMessage = gameData.messages.meta.city_hall.cant_afford_postage; - Messages.CityHallCantFindPlayerMessageFormat = gameData.messages.meta.city_hall.cant_find_player; - - Messages.CityHallCheapestAutoSells = gameData.messages.meta.city_hall.auto_sell.top_100_cheapest; - Messages.CityHallCheapestAutoSellHorseEntryFormat = gameData.messages.meta.city_hall.auto_sell.cheap_horse_entry; - - Messages.CityHallMostExpAutoSells = gameData.messages.meta.city_hall.auto_sell.top_50_most_exp; - Messages.CityHallMostExpAutoSellHorseEntryFormat = gameData.messages.meta.city_hall.auto_sell.exp_horse_entry; - - Messages.CityHallTop25Ranches = gameData.messages.meta.city_hall.ranch_investment.top_25; - Messages.CityHallRanchEntryFormat = gameData.messages.meta.city_hall.ranch_investment.ranch_entry; - - Messages.CityHallTop25Players = gameData.messages.meta.city_hall.richest_players.top_25; - Messages.CityHallRichPlayerFormat = gameData.messages.meta.city_hall.richest_players.rich_player_format; - - Messages.CityHallTop100SpoiledHorses = gameData.messages.meta.city_hall.spoiled_horses.top_100; - Messages.CityHallSpoiledHorseEntryFormat = gameData.messages.meta.city_hall.spoiled_horses.spoiled_horse_entry; - - Messages.CityHallTop25AdventurousPlayers = gameData.messages.meta.city_hall.most_adventurous_players.top_25; - Messages.CityHallAdventurousPlayerEntryFormat = gameData.messages.meta.city_hall.most_adventurous_players.adventurous_player_entry; - - Messages.CityHallTop25ExperiencedPlayers = gameData.messages.meta.city_hall.most_experinced_players.top_25; - Messages.CityHallExperiencePlayerEntryFormat = gameData.messages.meta.city_hall.most_experinced_players.experienced_player_entry; - - Messages.CityHallTop25MinigamePlayers = gameData.messages.meta.city_hall.most_active_minigame_players.top_25; - Messages.CityHallMinigamePlayerEntryFormat = gameData.messages.meta.city_hall.most_active_minigame_players.minigame_player_entry; - - Messages.CityHallTop25ExperiencedHorses = gameData.messages.meta.city_hall.most_experienced_horses.top_25; - Messages.CityHallExperiencedHorseEntryFormat = gameData.messages.meta.city_hall.most_experienced_horses.experienced_horse_entry; - - // Mail Messages - Messages.MailReceivedMessage = gameData.messages.meta.mail.mail_received; - Messages.MailSelectFromFollowing = gameData.messages.meta.mail.mail_select; - Messages.MailSe = gameData.messages.meta.mail.mail_se; - - Messages.MailReadMetaFormat = gameData.messages.meta.mail.mail_read; - Messages.MailEntryFormat = gameData.messages.meta.mail.mail_entry; - Messages.MailRippedMessage = gameData.messages.meta.mail.mail_ripped; - - // Click - Messages.ClickPlayerHereFormat = gameData.messages.player_here; - - - // Ranch - Messages.RanchUnownedRanchFormat = gameData.messages.meta.ranch.unowned_ranch; - Messages.RanchYouCouldPurchaseThisRanch = gameData.messages.meta.ranch.you_could_purchase_this; - Messages.RanchYouAllreadyOwnARanch = gameData.messages.meta.ranch.ranch_already_owned; - Messages.RanchSubscribersOnly = gameData.messages.meta.ranch.sub_only; - Messages.RanchDescriptionOthersFormat = gameData.messages.meta.ranch.ranch_desc_others; - Messages.RanchUnownedRanchClicked = gameData.messages.meta.ranch.unowned_ranch_click; - Messages.RanchClickMessageFormat = gameData.messages.meta.ranch.click_message; - - Messages.RanchNoDorothyShoesMessage = gameData.messages.meta.ranch.no_dorothy_shoes; - Messages.RanchDorothyShoesMessage = gameData.messages.meta.ranch.dorothy_message; - Messages.RanchDorothyShoesPrisonIsleMessage = gameData.messages.meta.ranch.dorothy_prison_isle; - Messages.RanchForcefullySoldFormat = gameData.messages.meta.ranch.forcefully_sold; - - Messages.RanchCantAffordRanch = gameData.messages.meta.ranch.ranch_buy_cannot_afford; - Messages.RanchRanchBroughtMessageFormat = gameData.messages.meta.ranch.ranch_brought; - - Messages.RanchSavedRanchDescripton = gameData.messages.meta.ranch.ranch_info.saved; - Messages.RanchSavedTitleTooLongError = gameData.messages.meta.ranch.ranch_info.title_too_long; - Messages.RanchSavedDescrptionTooLongError = gameData.messages.meta.ranch.ranch_info.description_too_long; - Messages.RanchSavedTitleViolationsError = gameData.messages.meta.ranch.ranch_info.title_contains_violations; - Messages.RanchSavedDescrptionViolationsErrorFormat = gameData.messages.meta.ranch.ranch_info.desc_contains_violations; - - - Messages.RanchDefaultRanchTitle = gameData.messages.meta.ranch.default_title; - Messages.RanchEditDescriptionMetaFormat = gameData.messages.meta.ranch.edit_description; - Messages.RanchTitleFormat = gameData.messages.meta.ranch.your_ranch_meta; - Messages.RanchYourDescriptionFormat = gameData.messages.meta.ranch.view_desc; - - Messages.RanchSellAreYouSure = gameData.messages.meta.ranch.sell_confirm; - Messages.RanchSoldFormat = gameData.messages.meta.ranch.sell_done; - - // Ranch : Breed - - Messages.RanchCanBuildOneOfTheFollowingInThisSpot = gameData.messages.meta.ranch.build.build_on_this_spot; - Messages.RanchBuildingEntryFormat = gameData.messages.meta.ranch.build.build_format; - Messages.RanchCantAffordThisBuilding = gameData.messages.meta.ranch.build.cannot_afford; - Messages.RanchBuildingInformationFormat = gameData.messages.meta.ranch.build.information; - Messages.RanchBuildingComplete = gameData.messages.meta.ranch.build.build_complete; - Messages.RanchBuildingAlreadyHere = gameData.messages.meta.ranch.build.building_allready_placed; - Messages.RanchTornDownRanchBuildingFormat = gameData.messages.meta.ranch.build.torn_down; - Messages.RanchViewBuildingFormat = gameData.messages.meta.ranch.build.view_building; - Messages.RanchBarnHorsesFormat = gameData.messages.meta.ranch.build.barn; - - // Ranch : Upgrades - - Messages.UpgradedMessage = gameData.messages.meta.ranch.upgrade.upgrade_message; - Messages.UpgradeCannotAfford = gameData.messages.meta.ranch.upgrade.cannot_afford; - Messages.UpgradeCurrentUpgradeFormat = gameData.messages.meta.ranch.upgrade.upgrade_meta; - Messages.UpgradeNextUpgradeFormat = gameData.messages.meta.ranch.upgrade.you_could_upgrade; - - // Ranch : Special - - Messages.BuildingRestHere = gameData.messages.meta.ranch.special.rest_here; - Messages.BuildingGrainSilo = gameData.messages.meta.ranch.special.grain_silo; - Messages.BuildingBarnFormat = gameData.messages.meta.ranch.special.barn; - Messages.BuildingBigBarnFormat = gameData.messages.meta.ranch.special.big_barn; - Messages.BuildingGoldBarnFormat = gameData.messages.meta.ranch.special.gold_barn; - Messages.BuildingWaterWell = gameData.messages.meta.ranch.special.water_well; - Messages.BuildingWindmillFormat = gameData.messages.meta.ranch.special.windmills; - Messages.BuildingWagon = gameData.messages.meta.ranch.special.wagon; - Messages.BuildingTrainingPen = gameData.messages.meta.ranch.special.training_pen; - Messages.BuildingVegatableGarden = gameData.messages.meta.ranch.special.vegatable_garden; - - Messages.RanchTrainAllAttempt = gameData.messages.meta.ranch.special.train_all; - Messages.RanchTrainSuccessFormat = gameData.messages.meta.ranch.special.train_success; - Messages.RanchTrainCantTrainFormat = gameData.messages.meta.ranch.special.train_cant_train; - Messages.RanchTrainBadMoodFormat = gameData.messages.meta.ranch.special.train_bad_mood; - Messages.RanchHorsesFullyRested = gameData.messages.meta.ranch.special.fully_rested; - Messages.RanchWagonDroppedYouOff = gameData.messages.meta.ranch.special.wagon_used; - - // Treasure - Messages.PirateTreasureFormat = gameData.messages.treasure.pirate_treasure; - Messages.PotOfGoldFormat = gameData.messages.treasure.pot_of_gold; - - // Records - Messages.PrivateNotesSavedMessage = gameData.messages.private_notes_save; - Messages.PrivateNotesMetaFormat = gameData.messages.meta.private_notes_format; - - // Profile - Messages.ProfileSavedMessage = gameData.messages.profile.save; - Messages.ProfileTooLongMessage = gameData.messages.profile.too_long; - Messages.ProfileViolationFormat = gameData.messages.profile.blocked; - - // Announcements - - Messages.WelcomeFormat = gameData.messages.welcome_format; - Messages.MotdFormat = gameData.messages.motd_format; - Messages.LoginMessageFormat = gameData.messages.login_format; - Messages.LogoutMessageFormat = gameData.messages.logout_format; - - // Pronoun - Messages.PronounFemaleShe = gameData.messages.meta.stats_page.pronouns.female_she; - Messages.PronounFemaleHer = gameData.messages.meta.stats_page.pronouns.female_her; - - Messages.PronounMaleHe = gameData.messages.meta.stats_page.pronouns.male_he; - Messages.PronounMaleHis = gameData.messages.meta.stats_page.pronouns.male_his; - - Messages.PronounNeutralYour = gameData.messages.meta.stats_page.pronouns.neutral_your; - - Messages.PronounNeutralThey = gameData.messages.meta.stats_page.pronouns.neutral_they; - Messages.PronounNeutralTheir = gameData.messages.meta.stats_page.pronouns.neutral_their; - - // Stats - Messages.StatsBarFormat = gameData.messages.meta.stats_page.stats_bar_format; - Messages.StatsAreaFormat = gameData.messages.meta.stats_page.stats_area_format; - Messages.StatsMoneyFormat = gameData.messages.meta.stats_page.stats_money_format; - Messages.StatsFreeTimeFormat = gameData.messages.meta.stats_page.stats_freetime_format; - Messages.StatsDescriptionFormat = gameData.messages.meta.stats_page.stats_description_format; - Messages.StatsExpFormat = gameData.messages.meta.stats_page.stats_experience; - Messages.StatsQuestpointsFormat = gameData.messages.meta.stats_page.stats_questpoints; - Messages.StatsHungerFormat = gameData.messages.meta.stats_page.stats_hunger; - Messages.StatsThirstFormat = gameData.messages.meta.stats_page.stats_thisrt; - Messages.StatsTiredFormat = gameData.messages.meta.stats_page.stats_tiredness; - Messages.StatsGenderFormat = gameData.messages.meta.stats_page.stats_gender; - Messages.StatsJewelFormat = gameData.messages.meta.stats_page.stats_equipped; - Messages.StatsCompetitionGearFormat = gameData.messages.meta.stats_page.stats_competion_gear; - - Messages.JewelrySlot1Format = gameData.messages.meta.stats_page.jewelry.slot_1; - Messages.JewelrySlot2Format = gameData.messages.meta.stats_page.jewelry.slot_2; - Messages.JewelrySlot3Format = gameData.messages.meta.stats_page.jewelry.slot_3; - Messages.JewelrySlot4Format = gameData.messages.meta.stats_page.jewelry.slot_4; - - Messages.JewelryRemoveSlot1Button = gameData.messages.meta.stats_page.jewelry.remove_slot_1; - Messages.JewelryRemoveSlot2Button = gameData.messages.meta.stats_page.jewelry.remove_slot_2; - Messages.JewelryRemoveSlot3Button = gameData.messages.meta.stats_page.jewelry.remove_slot_3; - Messages.JewelryRemoveSlot4Button = gameData.messages.meta.stats_page.jewelry.remove_slot_4; - - Messages.CompetitionGearHeadFormat = gameData.messages.meta.stats_page.competition_gear.head_format; - Messages.CompetitionGearBodyFormat = gameData.messages.meta.stats_page.competition_gear.body_format; - Messages.CompetitionGearLegsFormat = gameData.messages.meta.stats_page.competition_gear.legs_format; - Messages.CompetitionGearFeetFormat = gameData.messages.meta.stats_page.competition_gear.feet_format; - - Messages.CompetitionGearRemoveHeadButton = gameData.messages.meta.stats_page.competition_gear.remove_head; - Messages.CompetitionGearRemoveBodyButton = gameData.messages.meta.stats_page.competition_gear.remove_body; - Messages.CompetitionGearRemoveLegsButton = gameData.messages.meta.stats_page.competition_gear.remove_legs; - Messages.CompetitionGearRemoveFeetButton = gameData.messages.meta.stats_page.competition_gear.remove_feet; - - Messages.StatsPrivateNotesButton = gameData.messages.meta.stats_page.stats_private_notes; - Messages.StatsQuestsButton = gameData.messages.meta.stats_page.stats_quests; - Messages.StatsMinigameRankingButton = gameData.messages.meta.stats_page.stats_minigame_ranking; - Messages.StatsAwardsButton = gameData.messages.meta.stats_page.stats_awards; - Messages.StatsMiscButton = gameData.messages.meta.stats_page.stats_misc; - - Messages.JewelrySelected = gameData.messages.meta.stats_page.msg.jewelry_selected; - Messages.JewelrySelectedOther = gameData.messages.meta.stats_page.msg.jewelry_other; - - Messages.NoJewerlyEquipped = gameData.messages.meta.stats_page.msg.no_jewelry_equipped; - Messages.NoJewerlyEquippedOther = gameData.messages.meta.stats_page.msg.no_jewelry_other; - - Messages.NoCompetitionGear = gameData.messages.meta.stats_page.msg.no_competition_gear; - Messages.NoCompetitionGearOther = gameData.messages.meta.stats_page.msg.no_competition_gear_other; - - Messages.CompetitionGearSelected = gameData.messages.meta.stats_page.msg.competition_gear_selected; - Messages.CompetitionGearSelectedOther = gameData.messages.meta.stats_page.msg.competition_gear_other_selected; - - Messages.StatHunger = gameData.messages.meta.stats_page.hunger_stat_name; - Messages.StatThirst = gameData.messages.meta.stats_page.thirst_stat_name; - Messages.StatTired = gameData.messages.meta.stats_page.tired_stat_name; - - Messages.StatsOtherHorses = gameData.messages.meta.stats_page.msg.other_horses; - Messages.StatPlayerFormats = gameData.messages.meta.stats_page.player_stats.ToObject(); - - Messages.StatThirstDizzy = gameData.messages.movement_key.thirsty; - Messages.StatHungerStumble = gameData.messages.movement_key.hungery; - - // Misc Stats - Messages.StatMiscHeader = gameData.messages.meta.misc_stats.header; - Messages.StatMiscNoneRecorded = gameData.messages.meta.misc_stats.no_stats_recorded; - Messages.StatMiscEntryFormat = gameData.messages.meta.misc_stats.stat_format; - - // Books (Libary) - Messages.BooksOfHorseIsle = gameData.messages.meta.libary.books.books_of_horseisle; - Messages.BookEntryFormat = gameData.messages.meta.libary.books.book_entry; - Messages.BookReadFormat = gameData.messages.meta.libary.books.book_read; - - // Awards (Libary) - Messages.AwardsAvalible = gameData.messages.meta.libary.awards.all_earnable_awards; - Messages.AwardEntryFormat = gameData.messages.meta.libary.awards.award_entry; - - // Locations (Libary) - Messages.LocationKnownIslands = gameData.messages.meta.libary.locations.known_islands; - Messages.LocationKnownTowns = gameData.messages.meta.libary.locations.known_towns; - Messages.LocationIslandFormat = gameData.messages.meta.libary.locations.isle_entry; - Messages.LocationTownFormat = gameData.messages.meta.libary.locations.town_entry; - Messages.LocationDescriptionFormat = gameData.messages.meta.libary.locations.location_description; - - // Minigame (Libary) - Messages.MinigameSingleplayer = gameData.messages.meta.libary.minigames.singleplayer; - Messages.MinigameTwoplayer = gameData.messages.meta.libary.minigames.twoplayer; - Messages.MinigameMultiplayer = gameData.messages.meta.libary.minigames.multiplayer; - Messages.MinigameCompetitions = gameData.messages.meta.libary.minigames.competitions; - Messages.MinigameEntryFormat = gameData.messages.meta.libary.minigames.minigame_entry; - - // Companion (Libary) - Messages.CompanionViewFormat = gameData.messages.meta.libary.companion.view_button; - Messages.CompanionEntryFormat = gameData.messages.meta.libary.companion.entry_format; - - // Tack (Libary) - Messages.TackViewSetFormat = gameData.messages.meta.libary.tack.view_tack_set; - Messages.TackSetPeiceFormat = gameData.messages.meta.libary.tack.set_peice_format; - - // Groomer - Messages.GroomerBestToHisAbilitiesFormat = gameData.messages.meta.groomer.groomed_best_it_can; - Messages.GroomerCannotAffordMessage = gameData.messages.meta.groomer.cannot_afford_service; - Messages.GroomerCannotImprove = gameData.messages.meta.groomer.cannot_improve; - Messages.GroomerBestToHisAbilitiesALL = gameData.messages.meta.groomer.groomed_best_all; - Messages.GroomerDontNeed = gameData.messages.meta.groomer.dont_need; - - Messages.GroomerHorseCurrentlyAtFormat = gameData.messages.meta.groomer.currently_at; - Messages.GroomerApplyServiceFormat = gameData.messages.meta.groomer.apply_service; - Messages.GroomerApplyServiceForAllFormat = gameData.messages.meta.groomer.apply_all; - - // Barn - Messages.BarnHorseFullyFedFormat = gameData.messages.meta.barn.fully_fed; - Messages.BarnCantAffordService = gameData.messages.meta.barn.cant_afford; - Messages.BarnAllHorsesFullyFed = gameData.messages.meta.barn.rested_all; - Messages.BarnServiceNotNeeded = gameData.messages.meta.barn.not_needed; - - Messages.BarnHorseStatusFormat = gameData.messages.meta.barn.horse_status; - Messages.BarnHorseMaxed = gameData.messages.meta.barn.horse_maxed; - Messages.BarnLetHorseRelaxFormat = gameData.messages.meta.barn.let_relax; - Messages.BarnLetAllHorsesReleaxFormat = gameData.messages.meta.barn.relax_all; - - // Farrier - Messages.FarrierCurrentShoesFormat = gameData.messages.meta.farrier.current_shoes; - Messages.FarrierApplyIronShoesFormat = gameData.messages.meta.farrier.apply_iron; - Messages.FarrierApplySteelShoesFormat = gameData.messages.meta.farrier.apply_steel; - Messages.FarrierShoeAllFormat = gameData.messages.meta.farrier.shoe_all; - - Messages.FarrierPutOnSteelShoesMessageFormat = gameData.messages.meta.farrier.put_on_steel_shoes; - Messages.FarrierPutOnIronShoesMessageFormat = gameData.messages.meta.farrier.put_on_iron_shoes; - Messages.FarrierPutOnSteelShoesAllMesssageFormat = gameData.messages.meta.farrier.put_on_steel_all; - Messages.FarrierShoesCantAffordMessage = gameData.messages.meta.farrier.cant_afford_farrier; - - // Trainng Pen - Messages.TrainedInStatFormat = gameData.messages.meta.trainer_pen.train_success; - Messages.TrainerHeaderFormat = gameData.messages.meta.trainer_pen.train_header; - Messages.TrainerHorseEntryFormat = gameData.messages.meta.trainer_pen.train_format; - Messages.TrainerHorseFullyTrainedFormat = gameData.messages.meta.trainer_pen.fully_trained; - Messages.TrainerCantTrainAgainInFormat = gameData.messages.meta.trainer_pen.train_again_in; - Messages.TrainerCantAfford = gameData.messages.meta.trainer_pen.cant_afford; - - // Santa - Messages.SantaHiddenText = gameData.messages.meta.santa.hidden_text; - Messages.SantaWrapItemFormat = gameData.messages.meta.santa.wrap_format; - Messages.SantaWrappedObjectMessage = gameData.messages.meta.santa.wrapped_object; - Messages.SantaCantWrapInvFull = gameData.messages.meta.santa.wrap_fail_inv_full; - Messages.SantaCantOpenNothingInside = gameData.messages.meta.santa.open_fail_empty; - Messages.SantaItemOpenedFormat = gameData.messages.meta.santa.open_format; - Messages.SantaItemCantOpenInvFull = gameData.messages.meta.santa.open_fail_inv_full; - - // Pawneer - Messages.PawneerUntackedHorsesICanBuy = gameData.messages.meta.pawneer.untacked_i_can_buy; - Messages.PawneerHorseFormat = gameData.messages.meta.pawneer.pawn_horse; - Messages.PawneerOrderMeta = gameData.messages.meta.pawneer.pawneer_order; - Messages.PawneerHorseConfirmationFormat = gameData.messages.meta.pawneer.are_you_sure; - Messages.PawneerHorseSoldMessagesFormat = gameData.messages.meta.pawneer.horse_sold; - Messages.PawneerHorseNotFound = gameData.messages.meta.pawneer.horse_not_found; - - Messages.PawneerOrderSelectBreed = gameData.messages.meta.pawneer.order.select_breed; - Messages.PawneerOrderBreedEntryFormat = gameData.messages.meta.pawneer.order.breed_entry; - - Messages.PawneerOrderSelectColorFormat = gameData.messages.meta.pawneer.order.select_color; - Messages.PawneerOrderColorEntryFormat = gameData.messages.meta.pawneer.order.color_entry; - - Messages.PawneerOrderSelectGenderFormat = gameData.messages.meta.pawneer.order.select_gender; - Messages.PawneerOrderGenderEntryFormat = gameData.messages.meta.pawneer.order.gender_entry; - - Messages.PawneerOrderHorseFoundFormat = gameData.messages.meta.pawneer.order.found; - - // Vet - Messages.VetServiceHorseFormat = gameData.messages.meta.vet.service_horse; - Messages.VetSerivcesNotNeeded = gameData.messages.meta.vet.not_needed; - Messages.VetApplyServicesFormat = gameData.messages.meta.vet.apply; - - Messages.VetApplyServicesForAllFormat = gameData.messages.meta.vet.apply_all; - Messages.VetFullHealthRecoveredMessageFormat = gameData.messages.meta.vet.now_full_health; - Messages.VetServicesNotNeededAll = gameData.messages.meta.vet.not_needed_all; - Messages.VetAllFullHealthRecoveredMessage = gameData.messages.meta.vet.all_full; - Messages.VetCannotAffordMessage = gameData.messages.meta.vet.cant_afford; - - // Pond - Messages.PondHeader = gameData.messages.meta.pond.header; - Messages.PondGoFishing = gameData.messages.meta.pond.go_fishing; - Messages.PondNoFishingPole = gameData.messages.meta.pond.no_fishing_pole; - Messages.PondDrinkHereIfSafe = gameData.messages.meta.pond.drink_here; - Messages.PondHorseDrinkFormat = gameData.messages.meta.pond.horse_drink_format; - Messages.PondNoEarthWorms = gameData.messages.meta.pond.no_earth_worms; - - Messages.PondDrinkFullFormat = gameData.messages.meta.pond.drank_full; - Messages.PondCantDrinkHpLowFormat = gameData.messages.meta.pond.cant_drink_hp_low; - Messages.PondDrinkOhNoesFormat = gameData.messages.meta.pond.drank_something_bad; - Messages.PondNotThirstyFormat = gameData.messages.meta.pond.not_thirsty; - - // Horse Whisperer - Messages.WhispererHorseLocateButtonFormat = gameData.messages.meta.whisperer.horse_locate_meta; - Messages.WhispererServiceCostYouFormat = gameData.messages.meta.whisperer.service_cost; - Messages.WhispererServiceCannotAfford = gameData.messages.meta.whisperer.cant_afford; - Messages.WhispererSearchingAmoungHorses = gameData.messages.meta.whisperer.searching_amoung_horses; - Messages.WhispererNoneFound = gameData.messages.meta.whisperer.none_found_meta; - Messages.WhispererHorsesFoundFormat = gameData.messages.meta.whisperer.horse_found_meta; - - // Mud Hole - Messages.MudHoleNoHorses = gameData.messages.meta.mud_hole.no_horses; - Messages.MudHoleRuinedGroomFormat = gameData.messages.meta.mud_hole.ruined_groom; - - // Movement - Messages.RandomMovement = gameData.messages.random_movement; - - // Quests Log - Messages.QuestLogHeader = gameData.messages.meta.quest_log.header_meta; - Messages.QuestFormat = gameData.messages.meta.quest_log.quest_format; - - Messages.QuestNotCompleted = gameData.messages.meta.quest_log.not_complete; - Messages.QuestNotAvalible = gameData.messages.meta.quest_log.not_avalible; - Messages.QuestCompleted = gameData.messages.meta.quest_log.completed; - - Messages.QuestFooterFormat = gameData.messages.meta.quest_log.footer_format; - // Transport - - Messages.CantAffordTransport = gameData.messages.transport.not_enough_money; - Messages.WelcomeToAreaFormat = gameData.messages.transport.welcome_to_format; - Messages.TransportFormat = gameData.messages.meta.transport_format; - Messages.TransportCostFormat = gameData.messages.meta.transport_cost; - Messages.TransportWagonFree = gameData.messages.meta.transport_free; - - // Abuse Reports - Messages.AbuseReportMetaFormat = gameData.messages.meta.abuse_report.options_format; - Messages.AbuseReportReasonFormat = gameData.messages.meta.abuse_report.report_reason_format; - - Messages.AbuseReportPlayerNotFoundFormat = gameData.messages.abuse_report.player_not_found_format; - Messages.AbuseReportFiled = gameData.messages.abuse_report.report_filed; - Messages.AbuseReportProvideValidReason = gameData.messages.abuse_report.valid_reason; - - // Bank - Messages.BankMadeInIntrestFormat = gameData.messages.meta.bank.made_interest; - Messages.BankCarryingFormat = gameData.messages.meta.bank.carrying_message; - Messages.BankWhatToDo = gameData.messages.meta.bank.what_to_do; - Messages.BankOptionsFormat = gameData.messages.meta.bank.options; - - - Messages.BankDepositedMoneyFormat = gameData.messages.bank.deposit_format; - Messages.BankWithdrewMoneyFormat = gameData.messages.bank.withdraw_format; - - Messages.BankCantHoldThisMuch = gameData.messages.bank.cant_hold_that_much; - Messages.BankYouCantHoldThisMuch = gameData.messages.bank.cant_withdraw_that_much; - - // Riddler - Messages.RiddlerAnsweredAll = gameData.messages.meta.riddler.riddle_all_complete; - Messages.RiddlerIncorrectAnswer = gameData.messages.meta.riddler.riddle_incorrect; - Messages.RiddlerCorrectAnswerFormat = gameData.messages.meta.riddler.riddle_correct; - Messages.RiddlerEnterAnswerFormat = gameData.messages.meta.riddler.riddle_format; - - // Workshop - Messages.WorkshopCraftEntryFormat = gameData.messages.meta.workshop.craft_entry; - Messages.WorkshopRequiresFormat = gameData.messages.meta.workshop.requires; - Messages.WorkshopRequireEntryFormat = gameData.messages.meta.workshop.require; - Messages.WorkshopAnd = gameData.messages.meta.workshop.and; - - Messages.WorkshopNoRoomInInventory = gameData.messages.meta.workshop.no_room; - Messages.WorkshopMissingRequiredItem = gameData.messages.meta.workshop.missing_item; - Messages.WorkshopCraftingSuccess = gameData.messages.meta.workshop.craft_success; - Messages.WorkshopCannotAfford = gameData.messages.meta.workshop.no_money; - - // Horses - Messages.AdvancedStatFormat = gameData.messages.meta.horse.stat_format; - Messages.BasicStatFormat = gameData.messages.meta.horse.basic_stat_format; - Messages.HorsesHere = gameData.messages.meta.horse.horses_here; - Messages.WildHorseFormat = gameData.messages.meta.horse.wild_horse; - Messages.HorseCaptureTimer = gameData.messages.meta.horse.horse_timer; - - Messages.YouCapturedTheHorse = gameData.messages.meta.horse.horse_caught; - Messages.HorseEvadedCapture = gameData.messages.meta.horse.horse_escaped; - Messages.HorseEscapedAnyway = gameData.messages.meta.horse.horse_escaped_anyway; - - Messages.HorsesMenuHeader = gameData.messages.meta.horse.horses_menu; - Messages.TooManyHorses = gameData.messages.meta.horse.too_many_horses; - Messages.UpdateHorseCategory = gameData.messages.meta.horse.update_category; - Messages.HorseEntryFormat = gameData.messages.meta.horse.horse_format; - Messages.ViewBaiscStats = gameData.messages.meta.horse.view_basic_stats; - Messages.ViewAdvancedStats = gameData.messages.meta.horse.view_advanced_stats; - Messages.HorseBuckedYou = gameData.messages.meta.horse.horse_bucked; - Messages.HorseLlamaBuckedYou = gameData.messages.meta.horse.llama_bucked; - Messages.HorseCamelBuckedYou = gameData.messages.meta.horse.camel_bucked; - - Messages.HorseRidingMessageFormat = gameData.messages.meta.horse.riding_message; - Messages.HorseNameYoursFormat = gameData.messages.meta.horse.horse_inventory.your_horse_format; - Messages.HorseNameOthersFormat = gameData.messages.meta.horse.horse_inventory.horse_others_format; - Messages.HorseDescriptionFormat = gameData.messages.meta.horse.horse_inventory.description_format; - Messages.HorseHandsHeightFormat = gameData.messages.meta.horse.horse_inventory.hands_high; - Messages.HorseExperienceEarnedFormat = gameData.messages.meta.horse.horse_inventory.experience; - - Messages.HorseTrainableInFormat = gameData.messages.meta.horse.horse_inventory.trainable_in; - Messages.HorseIsTrainable = gameData.messages.meta.horse.horse_inventory.currently_trainable; - Messages.HorseLeasedRemainingTimeFormat = gameData.messages.meta.horse.horse_inventory.leased_horse; - - Messages.HorseCannotMountUntilTackedMessage = gameData.messages.meta.horse.cannot_mount_tacked; - Messages.HorseDismountedBecauseNotTackedMessageFormat = gameData.messages.meta.horse.dismount_because_tack; - Messages.HorseMountButtonFormat = gameData.messages.meta.horse.horse_inventory.mount_button; - Messages.HorseDisMountButtonFormat = gameData.messages.meta.horse.horse_inventory.dismount_button; - Messages.HorseFeedButtonFormat = gameData.messages.meta.horse.horse_inventory.feed_button; - Messages.HorseTackButtonFormat = gameData.messages.meta.horse.horse_inventory.tack_button; - Messages.HorsePetButtonFormat = gameData.messages.meta.horse.horse_inventory.pet_button; - Messages.HorseProfileButtonFormat = gameData.messages.meta.horse.horse_inventory.profile_button; - - Messages.HorseSavedProfileMessageFormat = gameData.messages.meta.horse.profile.saved; - Messages.HorseProfileMessageTooLongError = gameData.messages.meta.horse.profile.desc_too_long; - Messages.HorseNameTooLongError = gameData.messages.meta.horse.profile.name_too_long; - Messages.HorseNameViolationsError = gameData.messages.meta.horse.profile.name_profanity_detected; - Messages.HorseProfileMessageProfileError = gameData.messages.meta.horse.profile.profile_profanity_detected; - - Messages.HorseCatchTooManyHorsesMessage = gameData.messages.meta.horse.horse_inventory.horse_cannot_catch_max; - Messages.HorseNoAutoSell = gameData.messages.meta.horse.horse_inventory.no_auto_sell; - Messages.HorseAutoSellPriceFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_format; - Messages.HorseAutoSellOthersFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_others; - Messages.HorseAutoSellFormat = gameData.messages.meta.horse.horse_inventory.auto_sell; - Messages.HorseCantAutoSellTacked = gameData.messages.meta.horse.horse_inventory.cannot_auto_sell_tacked; - - Messages.HorseCurrentlyCategoryFormat = gameData.messages.meta.horse.horse_inventory.marked_as; - Messages.HorseMarkAsCategory = gameData.messages.meta.horse.horse_inventory.marking_options; - Messages.HorseStats = gameData.messages.meta.horse.horse_inventory.horse_stats; - Messages.HorseTacked = gameData.messages.meta.horse.horse_inventory.wearing_tacked; - Messages.HorseTackFormat = gameData.messages.meta.horse.horse_inventory.tacked_format; - - Messages.HorseCompanion = gameData.messages.meta.horse.horse_inventory.companion; - Messages.HorseCompanionFormat = gameData.messages.meta.horse.horse_inventory.companion_selected; - Messages.HorseCompanionChangeButton = gameData.messages.meta.horse.horse_inventory.companion_change_button; - Messages.HorseNoCompanion = gameData.messages.meta.horse.horse_inventory.no_companion; - - Messages.HorseAdvancedStatsFormat = gameData.messages.meta.horse.horse_inventory.advanced_stats; - Messages.HorseBreedDetailsFormat = gameData.messages.meta.horse.horse_inventory.breed_details; - Messages.HorseHeightRangeFormat = gameData.messages.meta.horse.horse_inventory.height_range; - Messages.HorsePossibleColorsFormat = gameData.messages.meta.horse.horse_inventory.possible_colors; - Messages.HorseReleaseButton = gameData.messages.meta.horse.horse_inventory.release_horse; - Messages.HorseOthers = gameData.messages.meta.horse.horse_inventory.other_horses; - - Messages.HorseDescriptionEditFormat = gameData.messages.meta.horse.description_edit; - Messages.HorseEquipTackMessageFormat = gameData.messages.meta.horse.equip_tack_message; - Messages.HorseUnEquipTackMessageFormat = gameData.messages.meta.horse.unequip_tack_message; - Messages.HorseStopRidingMessage = gameData.messages.meta.horse.stop_riding_message; - - Messages.HorsePetMessageFormat = gameData.messages.meta.horse.pet_horse; - Messages.HorsePetTooHappy = gameData.messages.meta.horse.pet_horse_too_happy; - Messages.HorsePetTooTired = gameData.messages.meta.horse.pet_horse_too_sleepy; - Messages.HorseSetNewCategoryMessageFormat = gameData.messages.meta.horse.horse_set_new_category; - - Messages.HorseAutoSellMenuFormat = gameData.messages.meta.horse.auto_sell.auto_sell_meta; - Messages.HorseIsAutoSell = gameData.messages.meta.horse.auto_sell.is_auto_sell; - Messages.HorseAutoSellConfirmedFormat = gameData.messages.meta.horse.auto_sell.auto_sell_confirmed; - Messages.HorseAutoSellValueTooHigh = gameData.messages.meta.horse.auto_sell.auto_sell_to_high; - Messages.HorseAutoSellRemoved = gameData.messages.meta.horse.auto_sell.auto_sell_remove; - - Messages.HorseSetAutoSell = gameData.messages.meta.horse.horse_inventory.set_auto_sell; - Messages.HorseChangeAutoSell = gameData.messages.meta.horse.horse_inventory.change_auto_sell; - Messages.HorseTackFailAutoSell = gameData.messages.meta.horse.tack_fail_autosell; - - Messages.HorseAreYouSureYouWantToReleaseFormat = gameData.messages.meta.horse.horse_release; - Messages.HorseCantReleaseTheHorseYourRidingOn = gameData.messages.meta.horse.cant_release_currently_riding; - Messages.HorseReleasedMeta = gameData.messages.meta.horse.released_horse; - Messages.HorseReleasedBy = gameData.messages.meta.horse.released_by_message; - - // All Stats (basic) - - Messages.HorseAllBasicStats = gameData.messages.meta.horse.allstats_basic.all_baisc_stats; - Messages.HorseBasicStatEntryFormat = gameData.messages.meta.horse.allstats_basic.horse_entry; - - // All Stats (all) - Messages.HorseAllStatsHeader = gameData.messages.meta.horse.allstats.all_stats_header; - Messages.HorseNameEntryFormat = gameData.messages.meta.horse.allstats.horse_name_entry; - Messages.HorseBasicStatsCompactedFormat = gameData.messages.meta.horse.allstats.basic_stats_compact; - Messages.HorseAdvancedStatsCompactedFormat = gameData.messages.meta.horse.allstats.advanced_stats_compact; - Messages.HorseAllStatsLegend = gameData.messages.meta.horse.allstats.legend; - - - // Horse companion menu - Messages.HorseCompanionMenuHeaderFormat = gameData.messages.meta.horse.companion_menu.menu_header; - Messages.HorseCompnaionMenuCurrentCompanionFormat = gameData.messages.meta.horse.companion_menu.selected_companion; - Messages.HorseCompanionEntryFormat = gameData.messages.meta.horse.companion_menu.companion_entry; - Messages.HorseCompanionEquipMessageFormat = gameData.messages.meta.horse.companion_menu.companion_equip_message; - Messages.HorseCompanionRemoveMessageFormat = gameData.messages.meta.horse.companion_menu.companion_remove_message; - Messages.HorseCompanionMenuCurrentlyAvalibleCompanions = gameData.messages.meta.horse.companion_menu.companions_avalible; - - // Horse Feed Menu - Messages.HorseCurrentStatusFormat = gameData.messages.meta.horse.feed_horse.current_status; - Messages.HorseHoldingHorseFeed = gameData.messages.meta.horse.feed_horse.holding_horse_feed; - Messages.HorsefeedFormat = gameData.messages.meta.horse.feed_horse.horsefeed_format; - Messages.HorseNeighsThanks = gameData.messages.meta.horse.feed_horse.horse_neigh; - Messages.HorseCouldNotFinish = gameData.messages.meta.horse.feed_horse.horse_could_not_finish; - - Messages.HorseFeedPersonalityIncreased = gameData.messages.meta.horse.feed_horse.feed_special_personality; - Messages.HorseFeedInteligenceIncreased = gameData.messages.meta.horse.feed_horse.feed_special_inteligence; - Messages.HorseFeedMagicBeanFormat = gameData.messages.meta.horse.feed_horse.feed_special_magic_bean; - Messages.HorseFeedMagicDropletFormat = gameData.messages.meta.horse.feed_horse.feed_special_magic_droplet; - - // Tack menu (horses) - Messages.HorseTackedAsFollowsFormat = gameData.messages.meta.horse.tack_menu.tacked_as_follows; - Messages.HorseUnEquipSaddleFormat = gameData.messages.meta.horse.tack_menu.dequip_saddle; - Messages.HorseUnEquipSaddlePadFormat = gameData.messages.meta.horse.tack_menu.dequip_saddle_pad; - Messages.HorseUnEquipBridleFormat = gameData.messages.meta.horse.tack_menu.dequip_bridle; - Messages.HorseTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_tack; - Messages.HorseLlamaTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_llama_tack; - Messages.HorseCamelTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_camel_tack; - Messages.HorseEquipFormat = gameData.messages.meta.horse.tack_menu.equip_tack; - Messages.BackToHorse = gameData.messages.meta.horse.back_to_horse; - - - // Libary - Messages.LibaryMainMenu = gameData.messages.meta.libary.main_menu; - Messages.LibaryFindNpc = gameData.messages.meta.libary.find_npc; - Messages.LibaryFindNpcSearchResultsHeader = gameData.messages.meta.libary.find_npc_results_header; - Messages.LibaryFindNpcSearchResultFormat = gameData.messages.meta.libary.find_npc_results_format; - Messages.LibaryFindNpcSearchNoResults = gameData.messages.meta.libary.find_npc_no_results; - Messages.LibaryFindNpcLimit5 = gameData.messages.meta.libary.find_npc_limit5; - - Messages.LibaryFindRanch = gameData.messages.meta.libary.find_ranch; - Messages.LibaryFindRanchResultsHeader = gameData.messages.meta.libary.find_ranch_match_closely; - Messages.LibaryFindRanchResultFormat = gameData.messages.meta.libary.find_ranch_result; - Messages.LibaryFindRanchResultsNoResults = gameData.messages.meta.libary.find_ranch_no_results; - - Messages.HorseBreedFormat = gameData.messages.meta.libary.horse_breed_format; - Messages.HorseRelativeFormat = gameData.messages.meta.libary.horse_relative_format; - Messages.BreedViewerFormat = gameData.messages.meta.libary.breed_preview_format; - Messages.BreedViewerMaximumStats = gameData.messages.meta.libary.maximum_stats; - - // Chat - - Messages.ChatViolationMessageFormat = gameData.messages.chat.violation_format; - Messages.RequiredChatViolations = gameData.messages.chat.violation_points_required; - - Messages.GlobalChatFormatForModerators = gameData.messages.chat.for_others.global_format_moderator; - Messages.DirectChatFormatForModerators = gameData.messages.chat.for_others.dm_format_moderator; - - Messages.YouWereSentToPrisionIsle = gameData.messages.starved_horse; - - Messages.HereChatFormat = gameData.messages.chat.for_others.here_format; - Messages.IsleChatFormat = gameData.messages.chat.for_others.isle_format; - Messages.NearChatFormat = gameData.messages.chat.for_others.near_format; - Messages.GlobalChatFormat = gameData.messages.chat.for_others.global_format; - Messages.AdsChatFormat = gameData.messages.chat.for_others.ads_format; - Messages.DirectChatFormat = gameData.messages.chat.for_others.dm_format; - Messages.BuddyChatFormat = gameData.messages.chat.for_others.friend_format; - Messages.ModChatFormat = gameData.messages.chat.for_others.mod_format; - Messages.AdminChatFormat = gameData.messages.chat.for_others.admin_format; - - Messages.HereChatFormatForSender = gameData.messages.chat.for_sender.here_format; - Messages.IsleChatFormatForSender = gameData.messages.chat.for_sender.isle_format; - Messages.NearChatFormatForSender = gameData.messages.chat.for_sender.near_format; - Messages.BuddyChatFormatForSender = gameData.messages.chat.for_sender.friend_format; - Messages.DirectChatFormatForSender = gameData.messages.chat.for_sender.dm_format; - Messages.ModChatFormatForSender = gameData.messages.chat.for_sender.mod_format; - Messages.AdsChatFormatForSender = gameData.messages.chat.for_sender.ads_format; - Messages.AdminChatFormatForSender = gameData.messages.chat.for_sender.admin_format; - - Messages.ServerAnnoucementFormat = gameData.messages.chat.server_annoucement; - - Messages.DmModBadge = gameData.messages.chat.dm_moderator; - Messages.DmAutoResponse = gameData.messages.chat.dm_autoreply; - - Messages.AdminCommandFormat = gameData.messages.commands.admin_command_completed; - Messages.PlayerCommandFormat = gameData.messages.commands.player_command_completed; - Messages.MuteHelp = gameData.messages.commands.mute_help; - Messages.UnMuteHelp = gameData.messages.commands.unmute_help; - - Messages.PasswordNotice = gameData.messages.chat.password_included; - Messages.CapsNotice = gameData.messages.chat.caps_notice; - - // AutoReply - Messages.AutoReplyTooLong = gameData.messages.auto_reply.too_long; - Messages.AutoReplyHasViolations = gameData.messages.auto_reply.contains_violations; - - // Drawing Rooms - Messages.DrawingLastToDrawFormat = gameData.messages.meta.drawing_rooms.last_draw; - Messages.DrawingContentsSavedInSlotFormat = gameData.messages.meta.drawing_rooms.saved; - Messages.DrawingContentsLoadedFromSlotFormat = gameData.messages.meta.drawing_rooms.load; - Messages.DrawingPlzClearDraw = gameData.messages.meta.drawing_rooms.plz_clear_draw; - Messages.DrawingPlzClearLoad = gameData.messages.meta.drawing_rooms.plz_clear_load; - Messages.DrawingNotSentNotSubscribed = gameData.messages.meta.drawing_rooms.not_subscribed_draw; - Messages.DrawingCannotLoadNotSubscribed = gameData.messages.meta.drawing_rooms.not_subscribed_load; - - // Brickpoet - Messages.LastPoetFormat = gameData.messages.meta.last_poet; - - // Mutliroom - Messages.MultiroomParticipentFormat = gameData.messages.meta.multiroom.partcipent_format; - Messages.MultiroomPlayersParticipating = gameData.messages.meta.multiroom.other_players_participating; - - // Dropped Items - - Messages.NothingMessage = gameData.messages.meta.dropped_items.nothing_message; - Messages.ItemsOnGroundMessage = gameData.messages.meta.dropped_items.items_message; - Messages.GrabItemFormat = gameData.messages.meta.dropped_items.item_format; - Messages.ItemInformationFormat = gameData.messages.meta.dropped_items.item_information_format; - Messages.GrabAllItemsButton = gameData.messages.meta.dropped_items.grab_all; - Messages.DroppedAnItemMessage = gameData.messages.dropped_items.dropped_item_message; - Messages.DroppedItemTileIsFull = gameData.messages.dropped_items.drop_tile_full; - Messages.DroppedItemCouldntPickup = gameData.messages.dropped_items.other_picked_up; - Messages.GrabbedAllItemsMessage = gameData.messages.dropped_items.grab_all_message; - Messages.GrabbedItemMessage = gameData.messages.dropped_items.grab_message; - Messages.GrabAllItemsMessage = gameData.messages.dropped_items.grab_all_message; - - Messages.GrabbedAllItemsButInventoryFull = gameData.messages.dropped_items.grab_all_but_inv_full; - Messages.GrabbedItemButInventoryFull = gameData.messages.dropped_items.grab_but_inv_full; - - // Tools - Messages.BinocularsNothing = gameData.messages.tools.binoculars; - Messages.MagnifyNothing = gameData.messages.tools.magnify; - Messages.RakeNothing = gameData.messages.tools.rake; - Messages.ShovelNothing = gameData.messages.tools.shovel; - - // Shop - Messages.ThingsIAmSelling = gameData.messages.meta.shop.selling; - Messages.ThingsYouSellMe = gameData.messages.meta.shop.sell_me; - Messages.InfinitySign = gameData.messages.meta.shop.infinity; - - Messages.CantAfford1 = gameData.messages.shop.cant_afford_1; - Messages.CantAfford5 = gameData.messages.shop.cant_afford_5; - Messages.CantAfford25 = gameData.messages.shop.cant_afford_25; - Messages.Brought1Format = gameData.messages.shop.brought_1; - Messages.Brought5Format = gameData.messages.shop.brought_5; - Messages.Brought25Format = gameData.messages.shop.brought_25; - Messages.Sold1Format = gameData.messages.shop.sold_1; - Messages.SoldAllFormat = gameData.messages.shop.sold_all; - Messages.CannotSellYoudGetTooMuchMoney = gameData.messages.shop.cant_hold_extra_money; - - Messages.Brought1ButInventoryFull = gameData.messages.shop.brought_1_but_inv_full; - Messages.Brought5ButInventoryFull = gameData.messages.shop.brought_5_but_inv_full; - Messages.Brought25ButInventoryFull = gameData.messages.shop.brought_25_but_inv_full; - - // Player List - - Messages.PlayerListHeader = gameData.messages.meta.player_list.playerlist_header; - Messages.PlayerListSelectFromFollowing = gameData.messages.meta.player_list.select_from_following; - Messages.PlayerListOfBuddiesFormat = gameData.messages.meta.player_list.list_of_buddies_format; - Messages.PlayerListOfNearby = gameData.messages.meta.player_list.list_of_players_nearby; - Messages.PlayerListOfPlayersFormat = gameData.messages.meta.player_list.list_of_all_players_format; - Messages.PlayerListOfPlayersAlphabetically = gameData.messages.meta.player_list.list_of_all_players_alphabetically; - Messages.PlayerListMapAllBuddiesForamt = gameData.messages.meta.player_list.map_all_buddies_format; - Messages.PlayerListMapAllPlayersFormat = gameData.messages.meta.player_list.map_all_players_format; - Messages.PlayerListAbuseReport = gameData.messages.meta.player_list.abuse_report; - - Messages.MuteButton = gameData.messages.meta.player_list.mute_button; - Messages.HearButton = gameData.messages.meta.player_list.hear_button; - - Messages.ThreeMonthSubscripitionIcon = gameData.messages.meta.player_list.icon_subbed_3month; - Messages.YearSubscriptionIcon = gameData.messages.meta.player_list.icon_subbed_year; - Messages.NewUserIcon = gameData.messages.meta.player_list.icon_new; - Messages.MonthSubscriptionIcon = gameData.messages.meta.player_list.icon_subbed_month; - Messages.AdminIcon = gameData.messages.meta.player_list.icon_admin; - Messages.ModeratorIcon = gameData.messages.meta.player_list.icon_mod; - - Messages.BuddyListHeader = gameData.messages.meta.player_list.online_buddy_header; - Messages.BuddyListOnlineBuddyEntryFormat = gameData.messages.meta.player_list.online_buddy_format; - Messages.BuddyListOfflineBuddys = gameData.messages.meta.player_list.offline_buddys; - Messages.BuddyListOfflineBuddyEntryFormat = gameData.messages.meta.player_list.offline_buddy_format; - - Messages.NearbyPlayersListHeader = gameData.messages.meta.player_list.nearby_player_header; - Messages.PlayerListAllAlphabeticalHeader = gameData.messages.meta.player_list.all_players_alphabetical_header; - - Messages.PlayerListEntryFormat = gameData.messages.meta.player_list.player_format; - - Messages.PlayerListIdle = gameData.messages.meta.player_list.idle_text; - Messages.PlayerListAllHeader = gameData.messages.meta.player_list.all_players_header; - Messages.PlayerListIconFormat = gameData.messages.meta.player_list.icon_format; - Messages.PlayerListIconInformation = gameData.messages.meta.player_list.icon_info; - - // Consume - - Messages.ConsumeItemFormat = gameData.messages.consume.consumed_item_format; - Messages.ConsumedButMaxReached = gameData.messages.consume.consumed_but_max_reached; - - // Meta Format - - Messages.LocationFormat = gameData.messages.meta.location_format; - Messages.IsleFormat = gameData.messages.meta.isle_format; - Messages.TownFormat = gameData.messages.meta.town_format; - Messages.AreaFormat = gameData.messages.meta.area_format; - Messages.Seperator = gameData.messages.meta.seperator; - Messages.TileFormat = gameData.messages.meta.tile_format; - Messages.ExitThisPlace = gameData.messages.meta.exit_this_place; - Messages.BackToMap = gameData.messages.meta.back_to_map; - Messages.BackToMapHorse = gameData.messages.meta.back_to_map_horse; - Messages.LongFullLine = gameData.messages.meta.long_full_line; - Messages.MetaTerminator = gameData.messages.meta.end_of_meta; - - Messages.PlayersHere = gameData.messages.meta.player_interaction.players_here; - Messages.NearbyPlayers = gameData.messages.meta.nearby.players_nearby; - Messages.North = gameData.messages.meta.nearby.north; - Messages.East = gameData.messages.meta.nearby.east; - Messages.South = gameData.messages.meta.nearby.south; - Messages.West = gameData.messages.meta.nearby.west; - - Messages.NoPitchforkMeta = gameData.messages.meta.hay_pile.no_pitchfork; - Messages.HasPitchforkMeta = gameData.messages.meta.hay_pile.pitchfork; - Messages.R1 = gameData.messages.meta.r1; - Messages.PasswordEntry = gameData.messages.meta.password_input; - - // Venus Fly Trap - - Messages.VenusFlyTrapFormat = gameData.messages.meta.venus_flytrap_format; - - // Shortcut - Messages.NoTelescope = gameData.messages.no_telescope; - - // Inn - Messages.InnBuyMeal = gameData.messages.meta.inn.buy_meal; - Messages.InnBuyRest = gameData.messages.meta.inn.buy_rest; - Messages.InnItemEntryFormat = gameData.messages.meta.inn.inn_entry; - Messages.InnEnjoyedServiceFormat = gameData.messages.inn.enjoyed_service; - Messages.InnCannotAffordService = gameData.messages.inn.cant_afford; - Messages.InnFullyRested = gameData.messages.inn.fully_rested; - - // Password - Messages.IncorrectPasswordMessage = gameData.messages.incorrect_password; - - // Fountain - Messages.FountainMeta = gameData.messages.meta.fountain; - Messages.FountainDrankYourFull = gameData.messages.fountain.drank_your_fill; - Messages.FountainDroppedMoneyFormat = gameData.messages.fountain.dropped_money; - - // Highscore - - Messages.HighscoreHeaderMeta = gameData.messages.meta.highscores.header_meta; - Messages.HighscoreFormat = gameData.messages.meta.highscores.highscore_format; - Messages.BestTimeFormat = gameData.messages.meta.highscores.besttime_format; - - Messages.GameHighScoreHeaderFormat = gameData.messages.meta.highscores.game_highscore_header; - Messages.GameHighScoreFormat = gameData.messages.meta.highscores.game_highscore_format; - - Messages.GameWinLooseHeaderFormat = gameData.messages.meta.highscores.game_winloose_header; - Messages.GameWinLooseFormat = gameData.messages.meta.highscores.game_winloose_format; - - Messages.GameBestTimeHeaderFormat = gameData.messages.meta.highscores.game_besttime_header; - Messages.GameBestTimeFormat = gameData.messages.meta.highscores.game_besttime_format; - - // Awards - - Messages.AwardHeader = gameData.messages.meta.awards_page.awards_header; - Messages.AwardOthersFormat = gameData.messages.meta.awards_page.awards_others_header; - Messages.NoAwards = gameData.messages.meta.awards_page.no_awards; - Messages.AwardFormat = gameData.messages.meta.awards_page.award_format; - - // World Peace - Messages.NoWishingCoins = gameData.messages.meta.wishing_well.no_coins; - Messages.YouHaveWishingCoinsFormat = gameData.messages.meta.wishing_well.wish_coins; - Messages.WishItemsFormat = gameData.messages.meta.wishing_well.wish_things; - Messages.WishMoneyFormat = gameData.messages.meta.wishing_well.wish_money; - Messages.WishWorldPeaceFormat = gameData.messages.meta.wishing_well.wish_worldpeace; - - Messages.TossedCoin = gameData.messages.meta.wishing_well.make_wish; - Messages.WorldPeaceOnlySoDeep = gameData.messages.meta.wishing_well.world_peace_message; - Messages.WishingWellMeta = gameData.messages.meta.wishing_well.wish_meta; - // Sec Codes - - Messages.InvalidSecCodeError = gameData.messages.sec_code.invalid_sec_code; - Messages.YouEarnedAnItemFormat = gameData.messages.sec_code.item_earned; - Messages.YouEarnedAnItemButInventoryWasFullFormat = gameData.messages.sec_code.item_earned_full_inv; - Messages.YouLostAnItemFormat = gameData.messages.sec_code.item_deleted; - Messages.YouEarnedMoneyFormat = gameData.messages.sec_code.money_earned; - Messages.BeatHighscoreFormat = gameData.messages.sec_code.highscore_beaten; - Messages.BeatBestHighscore = gameData.messages.sec_code.best_highscore_beaten; - Messages.BeatBestTimeFormat = gameData.messages.sec_code.best_time_beaten; - - // Inventory - - Messages.InventoryHeaderFormat = gameData.messages.meta.inventory.header_format; - Messages.InventoryItemFormat = gameData.messages.meta.inventory.item_entry; - Messages.ShopEntryFormat = gameData.messages.meta.inventory.shop_entry; - Messages.ItemInformationButton = gameData.messages.meta.inventory.item_info_button; - Messages.ItemInformationByIdButton = gameData.messages.meta.inventory.item_info_itemid_button; - - Messages.ItemDropButton = gameData.messages.meta.inventory.item_drop_button; - Messages.ItemThrowButton = gameData.messages.meta.inventory.item_throw_button; - Messages.ItemConsumeButton = gameData.messages.meta.inventory.item_consume_button; - Messages.ItemUseButton = gameData.messages.meta.inventory.item_use_button; - Messages.ItemOpenButton = gameData.messages.meta.inventory.item_open_button; - Messages.ItemWearButton = gameData.messages.meta.inventory.item_wear_button; - Messages.ItemReadButton = gameData.messages.meta.inventory.item_read_button; - - Messages.ShopBuyButton = gameData.messages.meta.inventory.buy_button; - Messages.ShopBuy5Button = gameData.messages.meta.inventory.buy_5_button; - Messages.ShopBuy25Button = gameData.messages.meta.inventory.buy_25_button; - - Messages.SellButton = gameData.messages.meta.inventory.sell_button; - Messages.SellAllButton = gameData.messages.meta.inventory.sell_all_button; - // Npc - - Messages.NpcStartChatFormat = gameData.messages.meta.npc.start_chat_format; - Messages.NpcNoChatpoints = gameData.messages.meta.npc.no_chatpoints; - Messages.NpcChatpointFormat = gameData.messages.meta.npc.chatpoint_format; - Messages.NpcReplyFormat = gameData.messages.meta.npc.reply_format; - Messages.NpcTalkButton = gameData.messages.meta.npc.npc_talk_button; - Messages.NpcInformationButton = gameData.messages.meta.npc.npc_information_button; - Messages.NpcInformationFormat = gameData.messages.meta.npc.npc_information_format; - - // Login Failed Reasons - Messages.LoginFailedReasonBanned = gameData.messages.login.banned; - Messages.LoginFailedReasonBannedIpFormat = gameData.messages.login.ip_banned; - - // Disconnect Reasons - - Messages.KickReasonKicked = gameData.messages.disconnect.kicked; - Messages.KickReasonBanned = gameData.messages.disconnect.banned; - Messages.KickReasonIdleFormat = gameData.messages.disconnect.client_timeout.kick_message; - Messages.KickReasonNoTime = gameData.messages.disconnect.no_playtime; - Messages.IdleWarningFormat = gameData.messages.disconnect.client_timeout.warn_message; - Messages.KickReasonDuplicateLogin = gameData.messages.disconnect.dupe_login; - - // Competition Gear - - Messages.EquipCompetitionGearFormat = gameData.messages.equips.equip_competition_gear_format; - Messages.RemoveCompetitionGear = gameData.messages.equips.removed_competition_gear; - - // Jewerly - Messages.EquipJewelryFormat = gameData.messages.equips.equip_jewelry; - Messages.MaxJewelryMessage = gameData.messages.equips.max_jewelry; - Messages.RemoveJewelry = gameData.messages.equips.removed_jewelry; - - // Click - Messages.NothingInterestingHere = gameData.messages.click_nothing_message; - - // Swf - Messages.WagonCutscene = gameData.transport.wagon_cutscene; - Messages.BoatCutscene = gameData.transport.boat_cutscene; - Messages.BallonCutscene = gameData.transport.ballon_cutscene; - - gameData = null; - return; - } - - } -} +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; +using HISP.Game; +using HISP.Game.Chat; +using HISP.Player; +using HISP.Game.Services; +using HISP.Game.SwfModules; +using HISP.Game.Horse; +using HISP.Game.Items; +using System.Globalization; +using HISP.Security; +using System; +using HISP.Game.Events; + +namespace HISP.Server +{ + public class GameDataJson + { + + public static void ReadGamedata() + { + if (!File.Exists(ConfigReader.GameDataFile)) + { + Logger.ErrorPrint("Game Data JSON File: " + ConfigReader.GameDataFile + " Does not exist!"); + throw new FileNotFoundException(ConfigReader.GameDataFile + " Not found :("); + } + string jsonData = File.ReadAllText(ConfigReader.GameDataFile); + dynamic gameData = JsonConvert.DeserializeObject(jsonData); + + // Register Towns + int totalTowns = gameData.places.towns.Count; + for (int i = 0; i < totalTowns; i++) + { + + World.Town town = new World.Town(); + town.StartX = gameData.places.towns[i].start_x; + town.StartY = gameData.places.towns[i].start_y; + town.EndX = gameData.places.towns[i].end_x; + town.EndY = gameData.places.towns[i].end_y; + town.Name = gameData.places.towns[i].name; + + Logger.DebugPrint("Registered Town: " + town.Name + " X " + town.StartX + "-" + town.EndX + " Y " + town.StartY + "-" + town.EndY); + World.Towns.Add(town); + } + + // Register Zones + int totalZones = gameData.places.zones.Count; + for (int i = 0; i < totalZones; i++) + { + + World.Zone zone = new World.Zone(); + zone.StartX = gameData.places.zones[i].start_x; + zone.StartY = gameData.places.zones[i].start_y; + zone.EndX = gameData.places.zones[i].end_x; + zone.EndY = gameData.places.zones[i].end_y; + zone.Name = gameData.places.zones[i].name; + + Logger.DebugPrint("Registered Zone: " + zone.Name + " X " + zone.StartX + "-" + zone.EndX + " Y " + zone.StartY + "-" + zone.EndY); + World.Zones.Add(zone); + } + + // Register Areas + int totalAreas = gameData.places.areas.Count; + for (int i = 0; i < totalAreas; i++) + { + + World.Area area = new World.Area(); + area.StartX = gameData.places.areas[i].start_x; + area.StartY = gameData.places.areas[i].start_y; + area.EndX = gameData.places.areas[i].end_x; + area.EndY = gameData.places.areas[i].end_y; + area.Name = gameData.places.areas[i].name; + + Logger.DebugPrint("Registered Area: " + area.Name + " X " + area.StartX + "-" + area.EndX + " Y " + area.StartY + "-" + area.EndY); + World.Areas.Add(area); + } + + // Register Isles + int totalIsles = gameData.places.isles.Count; + for (int i = 0; i < totalIsles; i++) + { + + World.Isle isle = new World.Isle(); + isle.StartX = gameData.places.isles[i].start_x; + isle.StartY = gameData.places.isles[i].start_y; + isle.EndX = gameData.places.isles[i].end_x; + isle.EndY = gameData.places.isles[i].end_y; + isle.Tileset = gameData.places.isles[i].tileset; + isle.Name = gameData.places.isles[i].name; + + Logger.DebugPrint("Registered Isle: " + isle.Name + " X " + isle.StartX + "-" + isle.EndX + " Y " + isle.StartY + "-" + isle.EndY + " tileset: " + isle.Tileset); + World.Isles.Add(isle); + } + + int totalWaypoints = gameData.places.waypoints.Count; + for (int i = 0; i < totalWaypoints; i++) + { + World.Waypoint waypoint = new World.Waypoint(); + waypoint.Name = gameData.places.waypoints[i].name; + waypoint.PosX = gameData.places.waypoints[i].pos_x; + waypoint.PosY = gameData.places.waypoints[i].pos_y; + waypoint.Type = gameData.places.waypoints[i].type; + waypoint.Description = gameData.places.waypoints[i].description; + waypoint.WeatherTypesAvalible = gameData.places.waypoints[i].weather_avalible.ToObject(); + Logger.DebugPrint("Registered Waypoint: " + waypoint.PosX.ToString() + ", " + waypoint.PosY.ToString() + " TYPE: " + waypoint.Type); + World.Waypoints.Add(waypoint); + } + + // Register Special Tiles + int totalSpecialTiles = gameData.places.special_tiles.Count; + for (int i = 0; i < totalSpecialTiles; i++) + { + + World.SpecialTile specialTile = new World.SpecialTile(); + specialTile.X = gameData.places.special_tiles[i].x; + specialTile.Y = gameData.places.special_tiles[i].y; + specialTile.Title = gameData.places.special_tiles[i].title; + specialTile.Description = gameData.places.special_tiles[i].description; + specialTile.Code = gameData.places.special_tiles[i].code; + if (gameData.places.special_tiles[i].exit_x != null) + specialTile.ExitX = gameData.places.special_tiles[i].exit_x; + if (gameData.places.special_tiles[i].exit_x != null) + specialTile.ExitY = gameData.places.special_tiles[i].exit_y; + specialTile.AutoplaySwf = gameData.places.special_tiles[i].autoplay_swf; + specialTile.TypeFlag = gameData.places.special_tiles[i].type_flag; + + Logger.DebugPrint("Registered Special Tile: " + specialTile.Title + " X " + specialTile.X + " Y: " + specialTile.Y); + World.SpecialTiles.Add(specialTile); + } + + // Register Filter Reasons + int totalReasons = gameData.messages.chat.reason_messages.Count; + for (int i = 0; i < totalReasons; i++) + { + Chat.Reason reason = new Chat.Reason(); + reason.Name = gameData.messages.chat.reason_messages[i].name; + reason.Message = gameData.messages.chat.reason_messages[i].message; + Chat.AddReason(reason); + + Logger.DebugPrint("Registered Chat Warning Reason: " + reason.Name + " (Message: " + reason.Message + ")"); + } + // Register Filters + + int totalFilters = gameData.messages.chat.filter.Count; + for (int i = 0; i < totalFilters; i++) + { + Chat.Filter filter = new Chat.Filter(); + filter.FilteredWord = gameData.messages.chat.filter[i].word; + filter.MatchAll = gameData.messages.chat.filter[i].match_all; + filter.Reason = Chat.GetReason((string)gameData.messages.chat.filter[i].reason_type); + Chat.AddFilter(filter); + + Logger.DebugPrint("Registered Filtered Word: " + filter.FilteredWord + " With reason: " + filter.Reason.Name + " (Matching all: " + filter.MatchAll + ")"); + } + + // Register Corrections + int totalCorrections = gameData.messages.chat.correct.Count; + for (int i = 0; i < totalCorrections; i++) + { + Chat.Correction correction = new Chat.Correction(); + correction.FilteredWord = gameData.messages.chat.correct[i].word; + correction.ReplacedWord = gameData.messages.chat.correct[i].new_word; + Chat.AddCorrection(correction); + + Logger.DebugPrint("Registered Word Correction: " + correction.FilteredWord + " to " + correction.ReplacedWord); + } + + // Register Transports + + int totalTransportPoints = gameData.transport.transport_points.Count; + for (int i = 0; i < totalTransportPoints; i++) + { + Transport.TransportPoint transportPoint = new Transport.TransportPoint(); + transportPoint.X = gameData.transport.transport_points[i].x; + transportPoint.Y = gameData.transport.transport_points[i].y; + transportPoint.Locations = gameData.transport.transport_points[i].places.ToObject(); + Transport.TransportPoints.Add(transportPoint); + + Logger.DebugPrint("Registered Transport Point: At X: " + transportPoint.X + " Y: " + transportPoint.Y); + } + + int totalTransportPlaces = gameData.transport.transport_places.Count; + for (int i = 0; i < totalTransportPlaces; i++) + { + Transport.TransportLocation transportPlace = new Transport.TransportLocation(); + transportPlace.Id = gameData.transport.transport_places[i].id; + transportPlace.Cost = gameData.transport.transport_places[i].cost; + transportPlace.GotoX = gameData.transport.transport_places[i].goto_x; + transportPlace.GotoY = gameData.transport.transport_places[i].goto_y; + transportPlace.Type = gameData.transport.transport_places[i].type; + transportPlace.LocationTitle = gameData.transport.transport_places[i].place_title; + Transport.TransportLocations.Add(transportPlace); + + Logger.DebugPrint("Registered Transport Location: " + transportPlace.LocationTitle + " To Goto X: " + transportPlace.GotoX + " Y: " + transportPlace.GotoY); + } + + // Register Items + int totalItems = gameData.item.item_list.Count; + for (int i = 0; i < totalItems; i++) + { + Item.ItemInformation item = new Item.ItemInformation(); + item.Id = gameData.item.item_list[i].id; + item.Name = gameData.item.item_list[i].name; + item.PluralName = gameData.item.item_list[i].plural_name; + item.Description = gameData.item.item_list[i].description; + item.IconId = gameData.item.item_list[i].icon_id; + item.SortBy = gameData.item.item_list[i].sort_by; + item.SellPrice = gameData.item.item_list[i].sell_price; + item.EmbedSwf = gameData.item.item_list[i].embed_swf; + item.WishingWell = gameData.item.item_list[i].wishing_well; + item.Type = gameData.item.item_list[i].type; + item.MiscFlags = gameData.item.item_list[i].misc_flags.ToObject(); + int effectsCount = gameData.item.item_list[i].effects.Count; + + Item.Effects[] effectsList = new Item.Effects[effectsCount]; + for (int ii = 0; ii < effectsCount; ii++) + { + effectsList[ii] = new Item.Effects(); + effectsList[ii].EffectsWhat = gameData.item.item_list[i].effects[ii].effect_what; + effectsList[ii].EffectAmount = gameData.item.item_list[i].effects[ii].effect_amount; + } + + item.Effects = effectsList; + item.SpawnParamaters = new Item.SpawnRules(); + item.SpawnParamaters.SpawnCap = gameData.item.item_list[i].spawn_parameters.spawn_cap; + item.SpawnParamaters.SpawnInZone = gameData.item.item_list[i].spawn_parameters.spawn_in_area; + item.SpawnParamaters.SpawnOnTileType = gameData.item.item_list[i].spawn_parameters.spawn_on_tile_type; + item.SpawnParamaters.SpawnOnSpecialTile = gameData.item.item_list[i].spawn_parameters.spawn_on_special_tile; + item.SpawnParamaters.SpawnNearSpecialTile = gameData.item.item_list[i].spawn_parameters.spawn_near_special_tile; + + Logger.DebugPrint("Registered Item ID: " + item.Id + " Name: " + item.Name + " spawns on: " + item.SpawnParamaters.SpawnOnTileType); + Item.AddItemInfo(item); + } + // Register Throwables + int totalThrowable = gameData.item.throwable.Count; + for (int i = 0; i < totalThrowable; i++) + { + Item.ThrowableItem throwableItem = new Item.ThrowableItem(); + throwableItem.Id = gameData.item.throwable[i].id; + throwableItem.HitMessage = gameData.item.throwable[i].message_hit; + throwableItem.ThrowMessage = gameData.item.throwable[i].message_throw; + throwableItem.HitYourselfMessage = gameData.item.throwable[i].message_hit_yourself; + Item.AddThrowableItem(throwableItem); + } + + // Register NPCs + Logger.DebugPrint("Registering NPCS: "); + int totalNpcs = gameData.npc_list.Count; + for (int i = 0; i < totalNpcs; i++) + { + int id = gameData.npc_list[i].id; + int x = gameData.npc_list[i].x; + int y = gameData.npc_list[i].y; + bool moves = gameData.npc_list[i].moves; + + int udlrStartX = 0; + int udlrStartY = 0; + + if (gameData.npc_list[i].udlr_start_x != null) + udlrStartX = gameData.npc_list[i].udlr_start_x; + if (gameData.npc_list[i].udlr_start_y != null) + udlrStartY = gameData.npc_list[i].udlr_start_y; + + Npc.NpcEntry npcEntry = new Npc.NpcEntry(id, x, y, moves, udlrStartX, udlrStartY); + + npcEntry.Name = gameData.npc_list[i].name; + npcEntry.AdminDescription = gameData.npc_list[i].admin_description; + npcEntry.ShortDescription = gameData.npc_list[i].short_description; + npcEntry.LongDescription = gameData.npc_list[i].long_description; + + + if (gameData.npc_list[i].stay_on != null) + npcEntry.StayOn = gameData.npc_list[i].stay_on; + if (gameData.npc_list[i].requires_questid_completed != null) + npcEntry.RequiresQuestIdCompleted = gameData.npc_list[i].requires_questid_completed; + if (gameData.npc_list[i].requires_questid_not_completed != null) + npcEntry.RequiresQuestIdNotCompleted = gameData.npc_list[i].requires_questid_not_completed; + if (gameData.npc_list[i].udlr_script != null) + npcEntry.UDLRScript = gameData.npc_list[i].udlr_script; + + npcEntry.AdminOnly = gameData.npc_list[i].admin_only; + npcEntry.LibarySearchable = gameData.npc_list[i].libary_searchable; + npcEntry.IconId = gameData.npc_list[i].icon_id; + + Logger.DebugPrint("NPC ID:" + npcEntry.Id.ToString() + " NAME: " + npcEntry.Name); + List chats = new List(); + int totalNpcChat = gameData.npc_list[i].chatpoints.Count; + for (int ii = 0; ii < totalNpcChat; ii++) + { + Npc.NpcChat npcChat = new Npc.NpcChat(); + npcChat.Id = gameData.npc_list[i].chatpoints[ii].chatpoint_id; + npcChat.ChatText = gameData.npc_list[i].chatpoints[ii].chat_text; + npcChat.ActivateQuestId = gameData.npc_list[i].chatpoints[ii].activate_questid; + + Logger.DebugPrint("CHATPOINT ID: " + npcChat.Id.ToString() + " TEXT: " + npcChat.ChatText); + int totalNpcReply = gameData.npc_list[i].chatpoints[ii].replies.Count; + List replys = new List(); + for (int iii = 0; iii < totalNpcReply; iii++) + { + Npc.NpcReply npcReply = new Npc.NpcReply(); + npcReply.Id = gameData.npc_list[i].chatpoints[ii].replies[iii].reply_id; + npcReply.ReplyText = gameData.npc_list[i].chatpoints[ii].replies[iii].reply_text; + npcReply.GotoChatpoint = gameData.npc_list[i].chatpoints[ii].replies[iii].goto_chatpoint; + + if (gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_completed != null) + npcReply.RequiresQuestIdCompleted = gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_completed; + + if (gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_not_completed != null) + npcReply.RequiresQuestIdNotCompleted = gameData.npc_list[i].chatpoints[ii].replies[iii].requires_questid_not_completed; + + Logger.DebugPrint("REPLY ID: " + npcReply.Id.ToString() + " TEXT: " + npcReply.ReplyText); + replys.Add(npcReply); + + } + npcChat.Replies = replys.ToArray(); + chats.Add(npcChat); + } + npcEntry.Chatpoints = chats.ToArray(); + Npc.AddNpc(npcEntry); + } + + // Register Quests + + Logger.DebugPrint("Registering Quests: "); + int totalQuests = gameData.quest_list.Count; + for (int i = 0; i < totalQuests; i++) + { + Quest.QuestEntry quest = new Quest.QuestEntry(); + quest.Id = gameData.quest_list[i].id; + quest.Notes = gameData.quest_list[i].notes; + if (gameData.quest_list[i].title != null) + quest.Title = gameData.quest_list[i].title; + quest.RequiresQuestIdCompleteStatsMenu = gameData.quest_list[i].requires_questid_statsmenu.ToObject(); + if (gameData.quest_list[i].alt_activation != null) + { + quest.AltActivation = new Quest.QuestAltActivation(); + quest.AltActivation.Type = gameData.quest_list[i].alt_activation.type; + quest.AltActivation.ActivateX = gameData.quest_list[i].alt_activation.x; + quest.AltActivation.ActivateY = gameData.quest_list[i].alt_activation.y; + } + quest.Tracked = gameData.quest_list[i].tracked; + quest.MaxRepeats = gameData.quest_list[i].max_repeats; + quest.MoneyCost = gameData.quest_list[i].money_cost; + int itemsRequiredCount = gameData.quest_list[i].items_required.Count; + + List itmInfo = new List(); + for (int ii = 0; ii < itemsRequiredCount; ii++) + { + Quest.QuestItemInfo itemInfo = new Quest.QuestItemInfo(); + itemInfo.ItemId = gameData.quest_list[i].items_required[ii].item_id; + itemInfo.Quantity = gameData.quest_list[i].items_required[ii].quantity; + itmInfo.Add(itemInfo); + } + quest.ItemsRequired = itmInfo.ToArray(); + if (gameData.quest_list[i].fail_npc_chat != null) + quest.FailNpcChat = gameData.quest_list[i].fail_npc_chat; + quest.MoneyEarned = gameData.quest_list[i].money_gained; + + int itemsGainedCount = gameData.quest_list[i].items_gained.Count; + itmInfo = new List(); + for (int ii = 0; ii < itemsGainedCount; ii++) + { + Quest.QuestItemInfo itemInfo = new Quest.QuestItemInfo(); + itemInfo.ItemId = gameData.quest_list[i].items_gained[ii].item_id; + itemInfo.Quantity = gameData.quest_list[i].items_gained[ii].quantity; + itmInfo.Add(itemInfo); + } + quest.ItemsEarned = itmInfo.ToArray(); + + quest.QuestPointsEarned = gameData.quest_list[i].quest_points; + quest.SetNpcChatpoint = gameData.quest_list[i].set_npc_chatpoint; + quest.GotoNpcChatpoint = gameData.quest_list[i].goto_npc_chatpoint; + if (gameData.quest_list[i].warp_x != null) + quest.WarpX = gameData.quest_list[i].warp_x; + if (gameData.quest_list[i].warp_y != null) + quest.WarpY = gameData.quest_list[i].warp_y; + if (gameData.quest_list[i].success_message != null) + quest.SuccessMessage = gameData.quest_list[i].success_message; + if (gameData.quest_list[i].success_npc_chat != null) + quest.SuccessNpcChat = gameData.quest_list[i].success_npc_chat; + if (gameData.quest_list[i].requires_awardid != null) + quest.AwardRequired = gameData.quest_list[i].requires_awardid; + quest.RequiresQuestIdCompleted = gameData.quest_list[i].requires_questid_completed.ToObject(); + quest.RequiresQuestIdNotCompleted = gameData.quest_list[i].requires_questid_not_completed.ToObject(); + quest.HideReplyOnFail = gameData.quest_list[i].hide_reply_on_fail; + if (gameData.quest_list[i].difficulty != null) + quest.Difficulty = gameData.quest_list[i].difficulty; + if (gameData.quest_list[i].author != null) + quest.Author = gameData.quest_list[i].author; + if (gameData.quest_list[i].chained_questid != null) + quest.ChainedQuestId = gameData.quest_list[i].chained_questid; + quest.Minigame = gameData.quest_list[i].minigame; + Logger.DebugPrint("Registered Quest: " + quest.Id + " - " + quest.Title); + Quest.AddQuestEntry(quest); + } + + int totalShops = gameData.shop_list.Count; + for (int i = 0; i < totalShops; i++) + { + int id = gameData.shop_list[i].id; + int[] item_list = gameData.shop_list[i].stocks_itemids.ToObject(); + Shop shop = new Shop(item_list, id); + shop.BuyPricePercentage = gameData.shop_list[i].buy_percent; + shop.SellPricePercentage = gameData.shop_list[i].sell_percent; + shop.BuysItemTypes = gameData.shop_list[i].buys_item_types.ToObject(); + + Logger.DebugPrint("Registered Shop ID: " + shop.Id + " Selling items at " + shop.SellPricePercentage + "% and buying at " + shop.BuyPricePercentage); + } + + // Register awards + + int totalAwards = gameData.award_list.Count; + Award.GlobalAwardList = new Award.AwardEntry[totalAwards]; + for (int i = 0; i < totalAwards; i++) + { + + Award.AwardEntry award = new Award.AwardEntry(); + award.Id = gameData.award_list[i].id; + award.Sort = gameData.award_list[i].sort_by; + award.Title = gameData.award_list[i].title; + award.IconId = gameData.award_list[i].icon_id; + award.MoneyBonus = gameData.award_list[i].earn_money; + award.CompletionText = gameData.award_list[i].on_complete_text; + award.Description = gameData.award_list[i].description; + + Award.GlobalAwardList[i] = award; + + Logger.DebugPrint("Registered Award ID: " + award.Id + " - " + award.Title); + } + + // Register Abuse Report Reasons + + int totalAbuseReportReasons = gameData.messages.meta.abuse_report.reasons.Count; + for (int i = 0; i < totalAbuseReportReasons; i++) + { + AbuseReport.ReportReason reason = new AbuseReport.ReportReason(); + reason.Id = gameData.messages.meta.abuse_report.reasons[i].id; + reason.Name = gameData.messages.meta.abuse_report.reasons[i].name; + reason.Meta = gameData.messages.meta.abuse_report.reasons[i].meta; + AbuseReport.AddReason(reason); + Logger.DebugPrint("Registered Abuse Report Reason: " + reason.Name); + } + + // Map Data + + Map.OverlayTileDepth = gameData.tile_paramaters.overlay_tiles.tile_depth.ToObject(); + + List terrainTiles = new List(); + int totalTerrainTiles = gameData.tile_paramaters.terrain_tiles.Count; + for (int i = 0; i < totalTerrainTiles; i++) + { + Map.TerrainTile tile = new Map.TerrainTile(); + tile.Passable = gameData.tile_paramaters.terrain_tiles[i].passable; + tile.Type = gameData.tile_paramaters.terrain_tiles[i].tile_type; + Logger.DebugPrint("Registered Tile: " + i + " Passable: " + tile.Passable + " Type: " + tile.Type); + terrainTiles.Add(tile); + } + Map.TerrainTiles = terrainTiles.ToArray(); + + // Register Abuse Report Reasons + + int totalInns = gameData.inns.Count; + for (int i = 0; i < totalInns; i++) + { + int id = gameData.inns[i].id; + int[] restsOffered = gameData.inns[i].rests_offered.ToObject(); + int[] mealsOffered = gameData.inns[i].meals_offered.ToObject(); + int buyPercent = gameData.inns[i].buy_percent; + Inn inn = new Inn(id, restsOffered, mealsOffered, buyPercent); + + Logger.DebugPrint("Registered Inn: " + inn.Id + " Buying at: " + inn.BuyPercentage.ToString() + "%!"); + } + + int totalPoets = gameData.poetry.Count; + for (int i = 0; i < totalPoets; i++) + { + Brickpoet.PoetryEntry entry = new Brickpoet.PoetryEntry(); + entry.Id = gameData.poetry[i].id; + entry.Word = gameData.poetry[i].word; + entry.Room = gameData.poetry[i].room_id; + Brickpoet.AddPoetEntry(entry); + + Logger.DebugPrint("Registered poet: " + entry.Id.ToString() + " word: " + entry.Word + " in room " + entry.Room.ToString()); + } + + // Register Horse Breeds + int totalBreeds = gameData.horses.breeds.Count; + for (int i = 0; i < totalBreeds; i++) + { + HorseInfo.Breed horseBreed = new HorseInfo.Breed(); + + horseBreed.Id = gameData.horses.breeds[i].id; + horseBreed.Name = gameData.horses.breeds[i].name; + horseBreed.Description = gameData.horses.breeds[i].description; + + int speed = gameData.horses.breeds[i].base_stats.speed; + int strength = gameData.horses.breeds[i].base_stats.strength; + int conformation = gameData.horses.breeds[i].base_stats.conformation; + int agility = gameData.horses.breeds[i].base_stats.agility; + int inteligence = gameData.horses.breeds[i].base_stats.inteligence; + int endurance = gameData.horses.breeds[i].base_stats.endurance; + int personality = gameData.horses.breeds[i].base_stats.personality; + int height = gameData.horses.breeds[i].base_stats.height; + horseBreed.BaseStats = new HorseInfo.AdvancedStats(null, speed, strength, conformation, agility, inteligence, endurance, personality, height); + horseBreed.BaseStats.MinHeight = gameData.horses.breeds[i].base_stats.min_height; + horseBreed.BaseStats.MaxHeight = gameData.horses.breeds[i].base_stats.max_height; + + horseBreed.Colors = gameData.horses.breeds[i].colors.ToObject(); + horseBreed.SpawnOn = gameData.horses.breeds[i].spawn_on; + horseBreed.SpawnInArea = gameData.horses.breeds[i].spawn_area; + horseBreed.Swf = gameData.horses.breeds[i].swf; + horseBreed.Type = gameData.horses.breeds[i].type; + + HorseInfo.AddBreed(horseBreed); + Logger.DebugPrint("Registered Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name); + } + // Register Breed Prices @ Pawneer Order + int totalBreedPrices = gameData.horses.pawneer_base_price.Count; + for (int i = 0; i < totalBreedPrices; i++) + { + int id = gameData.horses.pawneer_base_price[i].breed_id; + int price = gameData.horses.pawneer_base_price[i].price; + Pawneer pawneerPricing = new Pawneer(id, price); + Pawneer.AddPawneerPriceModel(pawneerPricing); + Logger.DebugPrint("Registered Pawneer Base Price " + pawneerPricing.BreedId + " for $" + pawneerPricing.BasePrice.ToString("N0", CultureInfo.InvariantCulture)); + } + + int totalCategories = gameData.horses.categorys.Count; + for (int i = 0; i < totalCategories; i++) + { + HorseInfo.Category category = new HorseInfo.Category(); + category.Name = gameData.horses.categorys[i].name; + category.MetaOthers = gameData.horses.categorys[i].message_others; + category.Meta = gameData.horses.categorys[i].message; + HorseInfo.AddHorseCategory(category); + Logger.DebugPrint("Registered horse category type: " + category.Name); + } + int totalTrackedItems = gameData.messages.meta.misc_stats.tracked_items.Count; + for (int i = 0; i < totalTrackedItems; i++) + { + Tracking.TrackedItemStatsMenu trackedItem = new Tracking.TrackedItemStatsMenu(); + trackedItem.What = gameData.messages.meta.misc_stats.tracked_items[i].id; + trackedItem.Value = gameData.messages.meta.misc_stats.tracked_items[i].value; + Tracking.TrackedItemsStatsMenu.Add(trackedItem); + Logger.DebugPrint("Registered Tracked Item: " + trackedItem.What + " value: " + trackedItem.Value); + } + // Register Services + + int totalVets = gameData.services.vet.price_multipliers.Count; + for (int i = 0; i < totalVets; i++) + { + double cost = gameData.services.vet.price_multipliers[i].cost; + int id = gameData.services.vet.price_multipliers[i].id; + Vet vet = new Vet(id, cost); + Logger.DebugPrint("Registered Vet: " + vet.Id + " selling at: " + vet.PriceMultiplier.ToString(CultureInfo.InvariantCulture)); + } + + int totalGroomers = gameData.services.groomer.price_multipliers.Count; + for (int i = 0; i < totalGroomers; i++) + { + double cost = gameData.services.groomer.price_multipliers[i].cost; + int id = gameData.services.groomer.price_multipliers[i].id; + int max = gameData.services.groomer.price_multipliers[i].max; + Groomer groomer = new Groomer(id, cost, max); + Logger.DebugPrint("Registered Groomer: " + groomer.Id + " selling at: " + groomer.PriceMultiplier.ToString(CultureInfo.InvariantCulture)); + } + + int totalFarriers = gameData.services.farrier.price_multipliers.Count; + for (int i = 0; i < totalFarriers; i++) + { + int id = gameData.services.farrier.price_multipliers[i].id; + int steel = gameData.services.farrier.price_multipliers[i].steel; + int steelcost = gameData.services.farrier.price_multipliers[i].steel_cost; + int iron = gameData.services.farrier.price_multipliers[i].iron; + int ironcost = gameData.services.farrier.price_multipliers[i].iron_cost; + + Farrier farrier = new Farrier(id, steel, steelcost, iron, ironcost); + Logger.DebugPrint("Registered Farrier: " + farrier.Id); + } + + int totalBarns = gameData.services.barn.price_multipliers.Count; + for (int i = 0; i < totalBarns; i++) + { + int id = gameData.services.barn.price_multipliers[i].id; + double tired_cost = gameData.services.barn.price_multipliers[i].tired_cost; + double hunger_cost = gameData.services.barn.price_multipliers[i].hunger_cost; + double thirst_cost = gameData.services.barn.price_multipliers[i].thirst_cost; + + + Barn barn = new Barn(id, tired_cost, hunger_cost, thirst_cost); + Logger.DebugPrint("Registered Barn: " + barn.Id); + } + + + // Register Libary Books + int totalBooks = gameData.books.Count; + for (int i = 0; i < totalBooks; i++) + { + int id = gameData.books[i].id; + string author = gameData.books[i].author; + string title = gameData.books[i].title; + string text = gameData.books[i].text; + Book book = new Book(id, title, author, text); + Logger.DebugPrint("Registered Libary Book: " + book.Id + " " + book.Title + " by " + book.Author); + + } + + // Register Crafts + int totalWorkshops = gameData.workshop.Count; + for (int i = 0; i < totalWorkshops; i++) + { + Workshop wkShop = new Workshop(); + wkShop.X = gameData.workshop[i].pos_x; + wkShop.Y = gameData.workshop[i].pos_y; + int totalCraftableItems = gameData.workshop[i].craftable_items.Count; + for (int ii = 0; ii < totalCraftableItems; ii++) + { + Workshop.CraftableItem craftableItem = new Workshop.CraftableItem(); + craftableItem.Id = gameData.workshop[i].craftable_items[ii].id; + craftableItem.GiveItemId = gameData.workshop[i].craftable_items[ii].give_item; + craftableItem.MoneyCost = gameData.workshop[i].craftable_items[ii].money_cost; + int totalItemsRequired = gameData.workshop[i].craftable_items[ii].required_items.Count; + for (int iii = 0; iii < totalItemsRequired; iii++) + { + Workshop.RequiredItem requiredItem = new Workshop.RequiredItem(); + requiredItem.RequiredItemId = gameData.workshop[i].craftable_items[ii].required_items[iii].req_item; + requiredItem.RequiredItemCount = gameData.workshop[i].craftable_items[ii].required_items[iii].req_quantity; + craftableItem.AddRequiredItem(requiredItem); + } + wkShop.AddCraftableItem(craftableItem); + } + + Workshop.AddWorkshop(wkShop); + Logger.DebugPrint("Registered Workshop at X: " + wkShop.X + " Y: " + wkShop.Y); + + } + // Register Ranch Buildings + int totalRanchBuildings = gameData.ranch.ranch_buildings.buildings.Count; + for (int i = 0; i < totalRanchBuildings; i++) + { + int id = gameData.ranch.ranch_buildings.buildings[i].id; + int cost = gameData.ranch.ranch_buildings.buildings[i].cost; + string title = gameData.ranch.ranch_buildings.buildings[i].title; + string description = gameData.ranch.ranch_buildings.buildings[i].description; + + Ranch.RanchBuilding building = new Ranch.RanchBuilding(); + + building.Id = id; + building.Cost = cost; + building.Title = title; + building.Description = description; + + Ranch.RanchBuilding.RanchBuildings.Add(building); + Logger.DebugPrint("Registered Ranch Building: " + building.Title); + + } + // Register Ranch Upgrades + int totalRanchUpgrades = gameData.ranch.ranch_buildings.upgrades.Count; + for (int i = 0; i < totalRanchUpgrades; i++) + { + int id = gameData.ranch.ranch_buildings.upgrades[i].id; + int cost = gameData.ranch.ranch_buildings.upgrades[i].cost; + string title = gameData.ranch.ranch_buildings.upgrades[i].title; + string description = gameData.ranch.ranch_buildings.upgrades[i].description; + + Ranch.RanchUpgrade upgrade = new Ranch.RanchUpgrade(); + + if (gameData.ranch.ranch_buildings.upgrades[i].limit != null) + upgrade.Limit = gameData.ranch.ranch_buildings.upgrades[i].limit; + upgrade.Id = id; + upgrade.Cost = cost; + upgrade.Title = title; + upgrade.Description = description; + + Ranch.RanchUpgrade.RanchUpgrades.Add(upgrade); + Logger.DebugPrint("Registered Ranch Upgrade: " + upgrade.Title); + + } + // Register Ranches + int totalRanchLocations = gameData.ranch.ranch_locations.Count; + for (int i = 0; i < totalRanchLocations; i++) + { + int x = gameData.ranch.ranch_locations[i].x; + int y = gameData.ranch.ranch_locations[i].y; + int id = gameData.ranch.ranch_locations[i].id; + int value = gameData.ranch.ranch_locations[i].value; + Ranch ranch = new Ranch(x, y, id, value); + Ranch.Ranches.Add(ranch); + Logger.DebugPrint("Registered Ranch id " + id + " at X: " + ranch.X + " Y: " + ranch.Y); + + } + // Register Riddles + int totalRiddles = gameData.riddle_room.Count; + for (int i = 0; i < totalRiddles; i++) + { + int id = gameData.riddle_room[i].id; + string riddle = gameData.riddle_room[i].riddle; + string[] answers = gameData.riddle_room[i].answers.ToObject(); + string reason = gameData.riddle_room[i].reason; + Riddler riddlerRiddle = new Riddler(id, riddle, answers, reason); + Logger.DebugPrint("Registered Riddler Riddle: " + riddlerRiddle.Riddle); + + } + + // Register BBCODE + int totalBBocdes = gameData.bbcode.Count; + for (int i = 0; i < totalBBocdes; i++) + { + string tag = gameData.bbcode[i].tag; + string meta = gameData.bbcode[i].meta; + BBCode code = new BBCode(tag, meta); + Logger.DebugPrint("Registered BBCODE: " + code.Tag + " to " + code.MetaTranslation); + } + + // Register Training Pens + int totalTrainingPens = gameData.training_pens.Count; + for (int i = 0; i < totalTrainingPens; i++) + { + Trainer trainer = new Trainer(); + trainer.Id = gameData.training_pens[i].trainer_id; + trainer.ImprovesStat = gameData.training_pens[i].improves_stat; + trainer.ImprovesAmount = gameData.training_pens[i].improves_amount; + trainer.ThirstCost = gameData.training_pens[i].thirst_cost; + trainer.MoodCost = gameData.training_pens[i].mood_cost; + trainer.HungerCost = gameData.training_pens[i].hunger_cost; + trainer.MoneyCost = gameData.training_pens[i].money_cost; + trainer.ExperienceGained = gameData.training_pens[i].experience; + Trainer.Trainers.Add(trainer); + Logger.DebugPrint("Registered Training Pen: " + trainer.Id + " for " + trainer.ImprovesStat); + } + + // Register Arenas + int totalArenas = gameData.arena.arena_list.Count; + for (int i = 0; i < totalArenas; i++) + { + int arenaId = gameData.arena.arena_list[i].arena_id; + string arenaType = gameData.arena.arena_list[i].arena_type; + int arenaEntryCost = gameData.arena.arena_list[i].entry_cost; + int raceEvery = gameData.arena.arena_list[i].race_every; + int slots = gameData.arena.arena_list[i].slots; + int timeout = gameData.arena.arena_list[i].timeout; + + Arena arena = new Arena(arenaId, arenaType, arenaEntryCost, raceEvery, slots, timeout); + Logger.DebugPrint("Registered Arena: " + arena.Id.ToString() + " as " + arena.Type); + } + Arena.ExpRewards = gameData.arena.arena_exp.ToObject(); + + // Register Leaser + int totalLeasers = gameData.leaser.Count; + for (int i = 0; i < totalLeasers; i++) + { + int breedId = gameData.leaser[i].horse.breed; + + int saddle = -1; + int saddlePad = -1; + int bridle = -1; + + if (gameData.leaser[i].horse.tack.saddle != null) + saddle = gameData.leaser[i].horse.tack.saddle; + + if (gameData.leaser[i].horse.tack.saddle_pad != null) + saddlePad = gameData.leaser[i].horse.tack.saddle_pad; + + if (gameData.leaser[i].horse.tack.bridle != null) + bridle = gameData.leaser[i].horse.tack.bridle; + + Leaser leaser = new Leaser(breedId, saddle, saddlePad, bridle); + leaser.LeaseId = gameData.leaser[i].lease_id; + leaser.ButtonId = gameData.leaser[i].button_id; + leaser.Info = gameData.leaser[i].info; + leaser.OnLeaseText = gameData.leaser[i].on_lease; + leaser.Price = gameData.leaser[i].price; + leaser.Minutes = gameData.leaser[i].minutes; + + leaser.Color = gameData.leaser[i].horse.color; + leaser.Gender = gameData.leaser[i].horse.gender; + leaser.Height = gameData.leaser[i].horse.hands; + leaser.Experience = gameData.leaser[i].horse.exp; + leaser.HorseName = gameData.leaser[i].horse.name; + + leaser.Health = gameData.leaser[i].horse.basic_stats.health; + leaser.Hunger = gameData.leaser[i].horse.basic_stats.hunger; + leaser.Thirst = gameData.leaser[i].horse.basic_stats.thirst; + leaser.Mood = gameData.leaser[i].horse.basic_stats.mood; + leaser.Tiredness = gameData.leaser[i].horse.basic_stats.energy; + leaser.Groom = gameData.leaser[i].horse.basic_stats.groom; + leaser.Shoes = gameData.leaser[i].horse.basic_stats.shoes; + + leaser.Speed = gameData.leaser[i].horse.advanced_stats.speed; + leaser.Strength = gameData.leaser[i].horse.advanced_stats.strength; + leaser.Conformation = gameData.leaser[i].horse.advanced_stats.conformation; + leaser.Agility = gameData.leaser[i].horse.advanced_stats.agility; + leaser.Endurance = gameData.leaser[i].horse.advanced_stats.endurance; + leaser.Inteligence = gameData.leaser[i].horse.advanced_stats.inteligence; + leaser.Personality = gameData.leaser[i].horse.advanced_stats.personality; + + Leaser.AddHorseLeaser(leaser); + Logger.DebugPrint("Registered Leaser: " + leaser.LeaseId.ToString() + " For a " + leaser.HorseName); + } + + // Register Socials + int totalSocials = gameData.social_types.Count; + for (int i = 0; i < totalSocials; i++) + { + string socialType = gameData.social_types[i].type; + int totalSocialsOfType = gameData.social_types[i].socials.Count; + for (int ii = 0; ii < totalSocialsOfType; ii++) + { + SocialType.Social social = new SocialType.Social(); + + social.Id = gameData.social_types[i].socials[ii].social_id; + social.ButtonName = gameData.social_types[i].socials[ii].button_name; + social.ForSender = gameData.social_types[i].socials[ii].for_sender; + social.ForTarget = gameData.social_types[i].socials[ii].for_target; + social.ForEveryone = gameData.social_types[i].socials[ii].for_everyone; + social.SoundEffect = gameData.social_types[i].socials[ii].sound_effect; + + SocialType.AddNewSocial(socialType, social); + Logger.DebugPrint("Registered Social: " + social.ButtonName); + } + } + + // Register Events : Real Time Riddle + int totalRealTimeRiddles = gameData.events.real_time_riddle.Count; + for (int i = 0; i < totalRealTimeRiddles; i++) + { + int id = gameData.events.real_time_riddle[i].id; + string riddleText = gameData.events.real_time_riddle[i].text; + string[] riddleAnswers = gameData.events.real_time_riddle[i].answers.ToObject(); + int reward = gameData.events.real_time_riddle[i].money_reward; + + RealTimeRiddle riddle = new RealTimeRiddle(id, riddleText, riddleAnswers, reward); + + Logger.DebugPrint("Registered Riddle #" + riddle.RiddleId.ToString()); + } + + // Register Events : Real Time Quiz + int totalRealTimeQuizCategories = gameData.events.real_time_quiz.Count; + RealTimeQuiz.Categories = new RealTimeQuiz.QuizCategory[totalRealTimeQuizCategories]; // initalize array + for (int i = 0; i < totalRealTimeQuizCategories; i++) + { + string name = gameData.events.real_time_quiz[i].name; + int totalQuestions = gameData.events.real_time_quiz[i].questons.Count; + + RealTimeQuiz.QuizCategory quizCategory = new RealTimeQuiz.QuizCategory(); + quizCategory.Name = name; + quizCategory.Questions = new RealTimeQuiz.QuizQuestion[totalQuestions]; + + for(int ii = 0; ii < totalQuestions; ii++) + { + quizCategory.Questions[ii] = new RealTimeQuiz.QuizQuestion(quizCategory); + quizCategory.Questions[ii].Question = gameData.events.real_time_quiz[i].questons[ii].question; + quizCategory.Questions[ii].Answers = gameData.events.real_time_quiz[i].questons[ii].answers.ToObject(); + Logger.DebugPrint("Registered Real Time Quiz Question: " + quizCategory.Questions[ii].Question); + } + + RealTimeQuiz.Categories[i] = quizCategory; + + Logger.DebugPrint("Registered Real Time Quiz Category: " + name); + } + + // Register Random Event + + int totalRandomEvent = gameData.events.random_events.Count; + for (int i = 0; i < totalRandomEvent; i++) + { + int minmoney = 0; + int maxmoney = 0; + int lowerHorseHealth = 0; + int giveObj = 0; + + int id = gameData.events.random_events[i].id; + string txt = gameData.events.random_events[i].text; + + if(gameData.events.random_events[i].min_money != null) + minmoney = gameData.events.random_events[i].min_money; + if(gameData.events.random_events[i].max_money != null) + maxmoney = gameData.events.random_events[i].max_money; + if(gameData.events.random_events[i].lower_horse_health != null) + lowerHorseHealth = gameData.events.random_events[i].lower_horse_health; + if(gameData.events.random_events[i].give_object != null) + giveObj = gameData.events.random_events[i].give_object; + + new RandomEvent(id, txt, minmoney, maxmoney, lowerHorseHealth, giveObj); + + Logger.DebugPrint("Registered Random Event: " + txt); + } + + HorseInfo.HorseNames = gameData.horses.names.ToObject(); + + Item.Present = gameData.item.special.present; + Item.MailMessage = gameData.item.special.mail_message; + Item.DorothyShoes = gameData.item.special.dorothy_shoes; + Item.PawneerOrder = gameData.item.special.pawneer_order; + Item.Telescope = gameData.item.special.telescope; + Item.Pitchfork = gameData.item.special.pitchfork; + Item.WishingCoin = gameData.item.special.wishing_coin; + Item.FishingPole = gameData.item.special.fishing_poll; + Item.Earthworm = gameData.item.special.earthworm; + Item.BirthdayToken = gameData.item.special.birthday_token; + Item.WaterBalloon = gameData.item.special.water_balloon; + Item.ModSplatterball = gameData.item.special.mod_splatterball; + Item.MagicBean = gameData.item.special.magic_bean; + Item.MagicDroplet = gameData.item.special.magic_droplet; + Item.Ruby = gameData.item.special.ruby; + + Item.StallionTradingCard = gameData.item.special.stallion_trading_card; + Item.MareTradingCard = gameData.item.special.mare_trading_card; + Item.ColtTradingCard = gameData.item.special.colt_trading_card; + Item.FillyTradingCard = gameData.item.special.filly_trading_card; + + GameServer.IdleWarning = Convert.ToInt32(gameData.messages.disconnect.client_timeout.warn_after); + GameServer.IdleTimeout = Convert.ToInt32(gameData.messages.disconnect.client_timeout.kick_after); + + Chat.PrivateMessageSound = gameData.messages.chat.pm_sound; + + // New Users + + Messages.NewUserMessage = gameData.messages.new_user.starting_message; + Map.NewUserStartX = gameData.messages.new_user.starting_x; + Map.NewUserStartY = gameData.messages.new_user.starting_y; + + // Timed Messages + + Messages.PlaytimeMessageFormat = gameData.messages.timed_messages.playtime_message; + Messages.RngMessages = gameData.messages.timed_messages.rng_message.ToObject(); + + // Auto Sell + Messages.AutoSellNotStandingInSamePlace = gameData.messages.meta.auto_sell.not_standing_sameplace; + Messages.AutoSellSuccessFormat = gameData.messages.meta.auto_sell.success; + Messages.AutoSellInsufficentFunds = gameData.messages.meta.auto_sell.insufficent_money; + Messages.AutoSellTooManyHorses = gameData.messages.meta.auto_sell.toomany_horses; + Messages.AutoSellYouSoldHorseFormat = gameData.messages.meta.auto_sell.you_sold; + Messages.AutoSellYouSoldHorseOfflineFormat = gameData.messages.meta.auto_sell.sold_offline; + + // Mute Command + Messages.NowMutingPlayerFormat = gameData.messages.meta.mute_command.now_ignoring_player; + Messages.StoppedMutingPlayerFormat = gameData.messages.meta.mute_command.stop_ignoring_player; + + Messages.PlayerIgnoringYourPrivateMessagesFormat = gameData.messages.meta.mute_command.player_ignoring_your_pm; + Messages.PlayerIgnoringYourBuddyRequests = gameData.messages.meta.mute_command.player_ignoring_your_br; + Messages.PlayerIgnoringYourSocials = gameData.messages.meta.mute_command.player_ignoring_your_socials; + + Messages.PlayerIgnoringAllPrivateMessagesFormat = gameData.messages.meta.mute_command.player_ignoring_all_pm; + Messages.PlayerIgnoringAllBuddyRequests = gameData.messages.meta.mute_command.player_ignoring_all_br; + Messages.PlayerIgnoringAllSocials = gameData.messages.meta.mute_command.player_ignoring_all_socials; + + Messages.CantSendInMutedChannel = gameData.messages.meta.mute_command.cant_send_in_muted_channel; + Messages.CantSendBuddyRequestWhileMuted = gameData.messages.meta.mute_command.cant_send_br_muted; + Messages.CantSendPrivateMessageWhileMuted = gameData.messages.meta.mute_command.cant_send_pm_muted; + + Messages.CantSendPrivateMessagePlayerMutedFormat = gameData.messages.meta.mute_command.cant_send_pm_player_muted; + + // Chat Errors + Messages.CantFindPlayerToPrivateMessage = gameData.messages.chat_errors.cant_find_player; + Messages.AdsOnlyOncePerMinute = gameData.messages.chat_errors.ads_once_per_minute; + Messages.GlobalChatLimited = gameData.messages.chat_errors.global_chats_limited; + Messages.GlobalChatTooLong = gameData.messages.chat_errors.global_too_long; + Messages.AdsChatTooLong = gameData.messages.chat_errors.ads_too_long; + + // Warp Command + + Messages.SuccessfullyWarpedToPlayer = gameData.messages.commands.warp.player; + Messages.SuccessfullyWarpedToLocation = gameData.messages.commands.warp.location; + Messages.OnlyUnicornCanWarp = gameData.messages.commands.warp.only_unicorn; + Messages.FailedToUnderstandLocation = gameData.messages.commands.warp.location_unknown; + + // Mod Isle + Messages.ModSplatterballEarnedYouFormat = gameData.messages.mods_revenge.awarded_you; + Messages.ModSplatterballEarnedOtherFormat = gameData.messages.mods_revenge.awareded_others; + Messages.ModIsleMessage = gameData.messages.commands.mod_isle.message; + Map.ModIsleX = gameData.messages.commands.mod_isle.x; + Map.ModIsleY = gameData.messages.commands.mod_isle.y; + + // Rules Isle + Map.RulesIsleX = gameData.messages.commands.rules_isle.x; + Map.RulesIsleY = gameData.messages.commands.rules_isle.y; + Messages.RulesIsleSentMessage = gameData.messages.commands.rules_isle.message; + Messages.RulesIsleCommandMessageFormat = gameData.messages.commands.rules_isle.command_msg; + + // Prison Isle + Map.PrisonIsleX = gameData.messages.commands.prison_isle.x; + Map.PrisonIsleY = gameData.messages.commands.prison_isle.y; + Messages.PrisonIsleSentMessage = gameData.messages.commands.prison_isle.message; + Messages.PrisonIsleCommandMessageFormat = gameData.messages.commands.prison_isle.command_msg; + + + // Tag + + Messages.TagYourItFormat = gameData.messages.meta.player_interaction.tag.tag_player; + Messages.TagOtherBuddiesOnlineFormat = gameData.messages.meta.player_interaction.tag.total_buddies; + + // Add Buddy + + Messages.AddBuddyPending = gameData.messages.meta.player_interaction.add_buddy.add_pending; + Messages.AddBuddyOtherPendingFormat = gameData.messages.meta.player_interaction.add_buddy.other_pending; + Messages.AddBuddyYourNowBuddiesFormat = gameData.messages.meta.player_interaction.add_buddy.add_confirmed; + Messages.AddBuddyDeleteBuddyFormat = gameData.messages.meta.player_interaction.add_buddy.deleted; + + // Socials + + Messages.SocialButton = gameData.messages.meta.player_interaction.socials.socials_button; + Messages.SocialMessageFormat = gameData.messages.meta.player_interaction.socials.socials_message; + Messages.SocialTypeFormat = gameData.messages.meta.player_interaction.socials.socials_menu_type; + Messages.SocialPlayerNoLongerNearby = gameData.messages.meta.player_interaction.socials.no_longer_nearby; + + // Message Queue + Messages.MessageQueueHeader = gameData.messages.message_queue; + + // Random Event + Messages.RandomEventPrefix = gameData.messages.random_event_prefix; + + // Events : Mods Revenge + Messages.EventStartModsRevenge = gameData.messages.events.mods_revenge.event_start; + Messages.EventEndModsRevenge = gameData.messages.events.mods_revenge.event_end; + + // Events : Isle Trading Game + Messages.EventStartIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_start; + Messages.EventDisqualifiedIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_disqualified; + Messages.EventOnlyOneTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_one_type; + Messages.EventOnlyTwoTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_two_type; + Messages.EventOnlyThreeTypeIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_three_type; + Messages.EventNoneIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_no_cards; + Messages.EventWonIsleTradingGame = gameData.messages.events.isle_card_trading_game.event_win; + + // Events : Water Ballon Game + Messages.EventStartWaterBallonGame = gameData.messages.events.water_balloon_game.event_start; + Messages.EventWonWaterBallonGame = gameData.messages.events.water_balloon_game.event_won; + Messages.EventEndWaterBalloonGame = gameData.messages.events.water_balloon_game.event_end; + Messages.EventWinnerWaterBalloonGameFormat = gameData.messages.events.water_balloon_game.event_winner; + + // Events : Real Time Quiz + + Messages.EventMetaRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_meta; + Messages.EventStartRealTimeQuiz = gameData.messages.events.real_time_quiz.event_start; + Messages.EventEndRealTimeQuiz = gameData.messages.events.real_time_quiz.event_end; + Messages.EventBonusRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_bonus; + Messages.EventWinBonusRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_win_bonus; + Messages.EventWinRealTimeQuizFormat = gameData.messages.events.real_time_quiz.event_win; + Messages.EventUnavailableRealTimeQuiz = gameData.messages.events.real_time_quiz.event_unavailable; + Messages.EventEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered; + Messages.EventAlreadyEnteredRealTimeQuiz = gameData.messages.events.real_time_quiz.event_entered_already; + Messages.EventQuitRealTimeQuiz = gameData.messages.events.real_time_quiz.event_quit; + + // Events : Real Time Riddle + + Messages.EventStartRealTimeRiddleFormat = gameData.messages.events.real_time_riddle.event_start; + Messages.EventEndRealTimeRiddle = gameData.messages.events.real_time_riddle.event_end; + Messages.EventWonRealTimeRiddleForOthersFormat = gameData.messages.events.real_time_riddle.event_won_others; + Messages.EventWonRealTimeRiddleForYouFormat = gameData.messages.events.real_time_riddle.event_won_you; + Messages.EventAlreadySovledRealTimeRiddle = gameData.messages.events.real_time_riddle.event_solved_already; + + // Events : Tack Shop Giveaway + + Messages.EventStartTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_start; + Messages.Event1MinTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_1min; + Messages.EventWonTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_won; + Messages.EventEndTackShopGiveawayFormat = gameData.messages.events.tack_shop_giveaway.event_end; + + + // MultiHorses + Messages.OtherPlayersHere = gameData.messages.meta.multihorses.other_players_here; + Messages.MultiHorseSelectOneToJoinWith = gameData.messages.meta.multihorses.select_a_horse; + Messages.MultiHorseFormat = gameData.messages.meta.multihorses.horse_format; + + // 2Player + Messages.TwoPlayerOtherPlayer = gameData.messages.meta.two_player.other_player; + Messages.TwoPlayerPlayerFormat = gameData.messages.meta.two_player.player_name; + Messages.TwoPlayerInviteButton = gameData.messages.meta.two_player.invite_button; + Messages.TwoPlayerAcceptButton = gameData.messages.meta.two_player.accept_button; + Messages.TwoPlayerSentInvite = gameData.messages.meta.two_player.sent_invite; + Messages.TwoPlayerPlayingWithFormat = gameData.messages.meta.two_player.playing_with; + + Messages.TwoPlayerGameInProgressFormat = gameData.messages.meta.two_player.game_in_progress; + + Messages.TwoPlayerYourInvitedFormat = gameData.messages.meta.two_player.your_invited; + Messages.TwoPlayerInvitedFormat = gameData.messages.meta.two_player.you_invited; + Messages.TwoPlayerStartingUpGameFormat = gameData.messages.meta.two_player.starting_game; + + Messages.TwoPlayerGameClosed = gameData.messages.meta.two_player.game_closed; + Messages.TwoPlayerGameClosedOther = gameData.messages.meta.two_player.game_closed_other; + + Messages.TwoPlayerRecordedWinFormat = gameData.messages.meta.two_player.recorded_win; + Messages.TwoPlayerRecordedLossFormat = gameData.messages.meta.two_player.recorded_loss; + + // Trade + + Messages.TradeWithPlayerFormat = gameData.messages.meta.player_interaction.trade.trading_with; + + Messages.TradeWaitingForOtherDone = gameData.messages.meta.player_interaction.trade.trade_wait_for_done; + Messages.TradeOtherPlayerIsDone = gameData.messages.meta.player_interaction.trade.other_player_is_done; + Messages.TradeFinalReview = gameData.messages.meta.player_interaction.trade.final_review; + + Messages.TradeYourOfferingFormat = gameData.messages.meta.player_interaction.trade.you_offering; + + Messages.TradeAddItems = gameData.messages.meta.player_interaction.trade.add_items; + Messages.TradeOtherOfferingFormat = gameData.messages.meta.player_interaction.trade.other_offering; + + Messages.TradeWhenDoneClick = gameData.messages.meta.player_interaction.trade.when_done_click; + Messages.TradeCancelAnytime = gameData.messages.meta.player_interaction.trade.cancel_anytime; + Messages.TradeAcceptTrade = gameData.messages.meta.player_interaction.trade.accept_trade; + + Messages.TradeOfferingNothing = gameData.messages.meta.player_interaction.trade.offering_nothing; + Messages.TradeOfferingMoneyFormat = gameData.messages.meta.player_interaction.trade.offering_money; + Messages.TradeOfferingItemFormat = gameData.messages.meta.player_interaction.trade.offering_item; + Messages.TradeOfferingHorseFormat = gameData.messages.meta.player_interaction.trade.offering_horse; + + // Trading : What to offer + + Messages.TradeWhatToOfferFormat = gameData.messages.meta.player_interaction.trade.what_to_offer; + Messages.TradeOfferMoney = gameData.messages.meta.player_interaction.trade.offer_money; + + Messages.TradeOfferHorse = gameData.messages.meta.player_interaction.trade.offer_horse; + Messages.TradeOfferHorseFormat = gameData.messages.meta.player_interaction.trade.offer_horse_format; + Messages.TradeOfferHorseTacked = gameData.messages.meta.player_interaction.trade.horse_tacked; + + Messages.TradeOfferItem = gameData.messages.meta.player_interaction.trade.offer_object; + Messages.TradeOfferItemFormat = gameData.messages.meta.player_interaction.trade.offer_object_format; + Messages.TradeOfferItemOtherPlayerInvFull = gameData.messages.meta.player_interaction.trade.offer_object_inv_full; + + // Trading : Offer Submenu + + Messages.TradeMoneyOfferSubmenuFormat = gameData.messages.meta.player_interaction.trade.money_offer_submenu; + Messages.TradeItemOfferSubmenuFormat = gameData.messages.meta.player_interaction.trade.object_offer_submenu; + + // Trading : Messges + + Messages.TradeWaitingForOthersToAcceptMessage = gameData.messages.meta.player_interaction.trade.waiting_for_other_to_accept; + Messages.TradeRequiresBothPlayersMessage = gameData.messages.meta.player_interaction.trade.requires_both_players; + + Messages.TradeItemOfferAtleast1 = gameData.messages.meta.player_interaction.trade.object_offer_atleast_1; + Messages.TradeItemOfferTooMuchFormat = gameData.messages.meta.player_interaction.trade.object_offer_too_much; + Messages.TradeMoneyOfferTooMuch = gameData.messages.meta.player_interaction.trade.money_offer_too_much; + + Messages.TradeOtherPlayerHasNegativeMoney = gameData.messages.meta.player_interaction.trade.other_player_has_negative_money; + Messages.TradeYouHaveNegativeMoney = gameData.messages.meta.player_interaction.trade.you_have_negative_money; + + + Messages.TradeAcceptedMessage = gameData.messages.meta.player_interaction.trade.trade_accepted; + Messages.TradeCanceledByYouMessage = gameData.messages.meta.player_interaction.trade.you_canceled; + Messages.TradeCanceledByOtherPlayerFormat = gameData.messages.meta.player_interaction.trade.other_canceled; + Messages.TradeCanceledBecuasePlayerMovedMessage = gameData.messages.meta.player_interaction.trade.trade_canceled_moved; + Messages.TradeCanceledInterupted = gameData.messages.meta.player_interaction.trade.trade_interupted; + + Messages.TradeRiddenHorse = gameData.messages.meta.player_interaction.trade.trade_ridden_horse; + + Messages.TradeYouCantHandleMoreHorses = gameData.messages.meta.player_interaction.trade.cant_handle_more_horses; + Messages.TradeOtherPlayerCantHandleMoreHorsesFormat = gameData.messages.meta.player_interaction.trade.other_player_cant_handle_more_horses; + + Messages.TradeOtherCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.other_carry_more; + Messages.TradeYouCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.you_cant_carry_more; + + Messages.TradeYouSpentMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_spent; + Messages.TradeYouReceivedMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_received; + + Messages.TradeNotAllowedWhileBidding = gameData.messages.meta.player_interaction.trade.trade_not_allowed_while_bidding; + Messages.TradeNotAllowedWhileOtherBidding = gameData.messages.meta.player_interaction.trade.trade_not_allowed_while_other_is_bidding; + + Messages.TradeWillGiveYouTooMuchMoney = gameData.messages.meta.player_interaction.trade.trade_other_cannot_carry_that_much; + Messages.TradeWillGiveOtherTooMuchMoney = gameData.messages.meta.player_interaction.trade.trade_you_cannot_carry_that_much; + + // Player Interation + + Messages.PlayerHereMenuFormat = gameData.messages.meta.player_interaction.menu; + + Messages.PlayerHereProfileButton = gameData.messages.meta.player_interaction.profiile_button; + Messages.PlayerHereSocialButton = gameData.messages.meta.player_interaction.social_button; + Messages.PlayerHereTradeButton = gameData.messages.meta.player_interaction.trade_button; + Messages.PlayerHereAddBuddyButton = gameData.messages.meta.player_interaction.buddy_button; + Messages.PlayerHereTagButton = gameData.messages.meta.player_interaction.tag_button; + Messages.PmButton = gameData.messages.meta.player_interaction.pm_button; + + + // Auction + Messages.AuctionsRunning = gameData.messages.meta.auction.auctions_running; + Messages.AuctionPlayersHereFormat = gameData.messages.meta.auction.players_here; + Messages.AuctionHorseEntryFormat = gameData.messages.meta.auction.auction_horse_entry; + Messages.AuctionAHorse = gameData.messages.meta.auction.auction_horse; + + Messages.AuctionListHorse = gameData.messages.meta.auction.list_horse; + Messages.AuctionHorseListEntryFormat = gameData.messages.meta.auction.horse_list_entry; + Messages.AuctionHorseViewButton = gameData.messages.meta.auction.view_button; + Messages.AuctionHorseIsTacked = gameData.messages.meta.auction.tacked; + + Messages.AuctionBidMax = gameData.messages.meta.auction.max_bid; + Messages.AuctionBidRaisedFormat = gameData.messages.meta.auction.bid_raised; + Messages.AuctionTopBid = gameData.messages.meta.auction.top_bid; + Messages.AuctionExistingBidHigher = gameData.messages.meta.auction.existing_higher; + + Messages.AuctionYouHaveTooManyHorses = gameData.messages.meta.auction.you_have_too_many_horses; + Messages.AuctionOnlyOneWinningBidAllowed = gameData.messages.meta.auction.only_one_winning_bid_allowed; + + Messages.AuctionOneHorsePerPlayer = gameData.messages.meta.auction.one_horse_at_a_time; + Messages.AuctionYouveBeenOutbidFormat = gameData.messages.meta.auction.outbid_by; + Messages.AuctionCantAffordBid = gameData.messages.meta.auction.cant_afford_bid; + Messages.AuctionCantAffordAuctionFee = gameData.messages.meta.auction.cant_afford_listing; + Messages.AuctionNoOtherTransactionAllowed = gameData.messages.meta.auction.no_other_transaction_allowed; + + Messages.AuctionYouBroughtAHorseFormat = gameData.messages.meta.auction.brought_horse; + Messages.AuctionNoHorseBrought = gameData.messages.meta.auction.no_one_brought; + Messages.AuctionHorseSoldFormat = gameData.messages.meta.auction.horse_sold; + + Messages.AuctionSoldToFormat = gameData.messages.meta.auction.sold_to; + Messages.AuctionNotSold = gameData.messages.meta.auction.not_sold; + Messages.AuctionGoingToFormat = gameData.messages.meta.auction.going_to; + + // Hammock Text + Messages.HammockText = gameData.messages.meta.hammock; + + // Horse Leaser + Messages.HorseLeaserCantAffordMessage = gameData.messages.horse_leaser.cant_afford; + Messages.HorseLeaserTemporaryHorseAdded = gameData.messages.horse_leaser.temporary_horse_added; + Messages.HorseLeaserHorsesFull = gameData.messages.horse_leaser.horses_full; + + Messages.HorseLeaserReturnedToUniterPegasus = gameData.messages.horse_leaser.returned_to_uniter_pegasus; + + Messages.HorseLeaserReturnedToUniterFormat = gameData.messages.horse_leaser.returned_to_uniter; + Messages.HorseLeaserReturnedToOwnerFormat = gameData.messages.horse_leaser.returned_to_owner; + + // Competitions + Messages.ArenaResultsMessage = gameData.messages.meta.arena.results; + Messages.ArenaPlacingFormat = gameData.messages.meta.arena.placing; + Messages.ArenaAlreadyEntered = gameData.messages.meta.arena.already_entered; + + Messages.ArenaFirstPlace = gameData.messages.meta.arena.first_place; + Messages.ArenaSecondPlace = gameData.messages.meta.arena.second_place; + Messages.ArenaThirdPlace = gameData.messages.meta.arena.third_place; + Messages.ArenaFourthPlace = gameData.messages.meta.arena.fourth_place; + Messages.ArenaFifthPlace = gameData.messages.meta.arena.fifth_place; + Messages.ArenaSixthPlace = gameData.messages.meta.arena.sixth_place; + + Messages.ArenaEnteredInto = gameData.messages.meta.arena.enter_into; + Messages.ArenaCantAfford = gameData.messages.meta.arena.cant_afford; + + Messages.ArenaYourScoreFormat = gameData.messages.meta.arena.your_score; + + Messages.ArenaJumpingStartup = gameData.messages.meta.arena.jumping_start_up; + Messages.ArenaDraftStartup = gameData.messages.meta.arena.draft_start_up; + Messages.ArenaRacingStartup = gameData.messages.meta.arena.racing_start_up; + Messages.ArenaConformationStartup = gameData.messages.meta.arena.conformation_start_up; + + Messages.ArenaYouWinFormat = gameData.messages.meta.arena.winner; + Messages.ArenaOnlyWinnerWins = gameData.messages.meta.arena.only_winner_wins; + + Messages.ArenaTooHungry = gameData.messages.meta.arena.too_hungry; + Messages.ArenaTooThirsty = gameData.messages.meta.arena.too_thisty; + Messages.ArenaNeedsFarrier = gameData.messages.meta.arena.farrier; + Messages.ArenaTooTired = gameData.messages.meta.arena.too_tired; + Messages.ArenaNeedsVet = gameData.messages.meta.arena.needs_vet; + + Messages.ArenaEventNameFormat = gameData.messages.meta.arena.event_name; + Messages.ArenaCurrentlyTakingEntriesFormat = gameData.messages.meta.arena.currently_taking_entries; + Messages.ArenaCompetitionInProgress = gameData.messages.meta.arena.competition_in_progress; + Messages.ArenaYouHaveHorseEntered = gameData.messages.meta.arena.horse_entered; + Messages.ArenaCompetitionFull = gameData.messages.meta.arena.competiton_full; + + Messages.ArenaFullErrorMessage = gameData.messages.meta.arena.arena_join_fail_full; + + Messages.ArenaEnterHorseFormat = gameData.messages.meta.arena.enter_horse; + Messages.ArenaCurrentCompetitors = gameData.messages.meta.arena.current_competitors; + Messages.ArenaCompetingHorseFormat = gameData.messages.meta.arena.competing_horses; + + // Horse Games + Messages.HorseGamesSelectHorse = gameData.messages.meta.horse_games.select_a_horse; + Messages.HorseGamesHorseEntryFormat = gameData.messages.meta.horse_games.horse_entry; + + // City Hall + Messages.CityHallMenu = gameData.messages.meta.city_hall.menu; + Messages.CityHallMailSendMeta = gameData.messages.meta.city_hall.mail_send_meta; + + Messages.CityHallSentMessageFormat = gameData.messages.meta.city_hall.sent_mail; + Messages.CityHallCantAffordPostageMessage = gameData.messages.meta.city_hall.cant_afford_postage; + Messages.CityHallCantFindPlayerMessageFormat = gameData.messages.meta.city_hall.cant_find_player; + + Messages.CityHallCheapestAutoSells = gameData.messages.meta.city_hall.auto_sell.top_100_cheapest; + Messages.CityHallCheapestAutoSellHorseEntryFormat = gameData.messages.meta.city_hall.auto_sell.cheap_horse_entry; + + Messages.CityHallMostExpAutoSells = gameData.messages.meta.city_hall.auto_sell.top_50_most_exp; + Messages.CityHallMostExpAutoSellHorseEntryFormat = gameData.messages.meta.city_hall.auto_sell.exp_horse_entry; + + Messages.CityHallTop25Ranches = gameData.messages.meta.city_hall.ranch_investment.top_25; + Messages.CityHallRanchEntryFormat = gameData.messages.meta.city_hall.ranch_investment.ranch_entry; + + Messages.CityHallTop25Players = gameData.messages.meta.city_hall.richest_players.top_25; + Messages.CityHallRichPlayerFormat = gameData.messages.meta.city_hall.richest_players.rich_player_format; + + Messages.CityHallTop100SpoiledHorses = gameData.messages.meta.city_hall.spoiled_horses.top_100; + Messages.CityHallSpoiledHorseEntryFormat = gameData.messages.meta.city_hall.spoiled_horses.spoiled_horse_entry; + + Messages.CityHallTop25AdventurousPlayers = gameData.messages.meta.city_hall.most_adventurous_players.top_25; + Messages.CityHallAdventurousPlayerEntryFormat = gameData.messages.meta.city_hall.most_adventurous_players.adventurous_player_entry; + + Messages.CityHallTop25ExperiencedPlayers = gameData.messages.meta.city_hall.most_experinced_players.top_25; + Messages.CityHallExperiencePlayerEntryFormat = gameData.messages.meta.city_hall.most_experinced_players.experienced_player_entry; + + Messages.CityHallTop25MinigamePlayers = gameData.messages.meta.city_hall.most_active_minigame_players.top_25; + Messages.CityHallMinigamePlayerEntryFormat = gameData.messages.meta.city_hall.most_active_minigame_players.minigame_player_entry; + + Messages.CityHallTop25ExperiencedHorses = gameData.messages.meta.city_hall.most_experienced_horses.top_25; + Messages.CityHallExperiencedHorseEntryFormat = gameData.messages.meta.city_hall.most_experienced_horses.experienced_horse_entry; + + // Mail Messages + Messages.MailReceivedMessage = gameData.messages.meta.mail.mail_received; + Messages.MailSelectFromFollowing = gameData.messages.meta.mail.mail_select; + Messages.MailSe = gameData.messages.meta.mail.mail_se; + + Messages.MailReadMetaFormat = gameData.messages.meta.mail.mail_read; + Messages.MailEntryFormat = gameData.messages.meta.mail.mail_entry; + Messages.MailRippedMessage = gameData.messages.meta.mail.mail_ripped; + + // Click + Messages.ClickPlayerHereFormat = gameData.messages.player_here; + + + // Ranch + Messages.RanchUnownedRanchFormat = gameData.messages.meta.ranch.unowned_ranch; + Messages.RanchYouCouldPurchaseThisRanch = gameData.messages.meta.ranch.you_could_purchase_this; + Messages.RanchYouAllreadyOwnARanch = gameData.messages.meta.ranch.ranch_already_owned; + Messages.RanchSubscribersOnly = gameData.messages.meta.ranch.sub_only; + Messages.RanchDescriptionOthersFormat = gameData.messages.meta.ranch.ranch_desc_others; + Messages.RanchUnownedRanchClicked = gameData.messages.meta.ranch.unowned_ranch_click; + Messages.RanchClickMessageFormat = gameData.messages.meta.ranch.click_message; + + Messages.RanchNoDorothyShoesMessage = gameData.messages.meta.ranch.no_dorothy_shoes; + Messages.RanchDorothyShoesMessage = gameData.messages.meta.ranch.dorothy_message; + Messages.RanchDorothyShoesPrisonIsleMessage = gameData.messages.meta.ranch.dorothy_prison_isle; + Messages.RanchForcefullySoldFormat = gameData.messages.meta.ranch.forcefully_sold; + + Messages.RanchCantAffordRanch = gameData.messages.meta.ranch.ranch_buy_cannot_afford; + Messages.RanchRanchBroughtMessageFormat = gameData.messages.meta.ranch.ranch_brought; + + Messages.RanchSavedRanchDescripton = gameData.messages.meta.ranch.ranch_info.saved; + Messages.RanchSavedTitleTooLongError = gameData.messages.meta.ranch.ranch_info.title_too_long; + Messages.RanchSavedDescrptionTooLongError = gameData.messages.meta.ranch.ranch_info.description_too_long; + Messages.RanchSavedTitleViolationsError = gameData.messages.meta.ranch.ranch_info.title_contains_violations; + Messages.RanchSavedDescrptionViolationsErrorFormat = gameData.messages.meta.ranch.ranch_info.desc_contains_violations; + + + Messages.RanchDefaultRanchTitle = gameData.messages.meta.ranch.default_title; + Messages.RanchEditDescriptionMetaFormat = gameData.messages.meta.ranch.edit_description; + Messages.RanchTitleFormat = gameData.messages.meta.ranch.your_ranch_meta; + Messages.RanchYourDescriptionFormat = gameData.messages.meta.ranch.view_desc; + + Messages.RanchSellAreYouSure = gameData.messages.meta.ranch.sell_confirm; + Messages.RanchSoldFormat = gameData.messages.meta.ranch.sell_done; + + // Ranch : Breed + + Messages.RanchCanBuildOneOfTheFollowingInThisSpot = gameData.messages.meta.ranch.build.build_on_this_spot; + Messages.RanchBuildingEntryFormat = gameData.messages.meta.ranch.build.build_format; + Messages.RanchCantAffordThisBuilding = gameData.messages.meta.ranch.build.cannot_afford; + Messages.RanchBuildingInformationFormat = gameData.messages.meta.ranch.build.information; + Messages.RanchBuildingComplete = gameData.messages.meta.ranch.build.build_complete; + Messages.RanchBuildingAlreadyHere = gameData.messages.meta.ranch.build.building_allready_placed; + Messages.RanchTornDownRanchBuildingFormat = gameData.messages.meta.ranch.build.torn_down; + Messages.RanchViewBuildingFormat = gameData.messages.meta.ranch.build.view_building; + Messages.RanchBarnHorsesFormat = gameData.messages.meta.ranch.build.barn; + + // Ranch : Upgrades + + Messages.UpgradedMessage = gameData.messages.meta.ranch.upgrade.upgrade_message; + Messages.UpgradeCannotAfford = gameData.messages.meta.ranch.upgrade.cannot_afford; + Messages.UpgradeCurrentUpgradeFormat = gameData.messages.meta.ranch.upgrade.upgrade_meta; + Messages.UpgradeNextUpgradeFormat = gameData.messages.meta.ranch.upgrade.you_could_upgrade; + + // Ranch : Special + + Messages.BuildingRestHere = gameData.messages.meta.ranch.special.rest_here; + Messages.BuildingGrainSilo = gameData.messages.meta.ranch.special.grain_silo; + Messages.BuildingBarnFormat = gameData.messages.meta.ranch.special.barn; + Messages.BuildingBigBarnFormat = gameData.messages.meta.ranch.special.big_barn; + Messages.BuildingGoldBarnFormat = gameData.messages.meta.ranch.special.gold_barn; + Messages.BuildingWaterWell = gameData.messages.meta.ranch.special.water_well; + Messages.BuildingWindmillFormat = gameData.messages.meta.ranch.special.windmills; + Messages.BuildingWagon = gameData.messages.meta.ranch.special.wagon; + Messages.BuildingTrainingPen = gameData.messages.meta.ranch.special.training_pen; + Messages.BuildingVegatableGarden = gameData.messages.meta.ranch.special.vegatable_garden; + + Messages.RanchTrainAllAttempt = gameData.messages.meta.ranch.special.train_all; + Messages.RanchTrainSuccessFormat = gameData.messages.meta.ranch.special.train_success; + Messages.RanchTrainCantTrainFormat = gameData.messages.meta.ranch.special.train_cant_train; + Messages.RanchTrainBadMoodFormat = gameData.messages.meta.ranch.special.train_bad_mood; + Messages.RanchHorsesFullyRested = gameData.messages.meta.ranch.special.fully_rested; + Messages.RanchWagonDroppedYouOff = gameData.messages.meta.ranch.special.wagon_used; + + // Treasure + Messages.PirateTreasureFormat = gameData.messages.treasure.pirate_treasure; + Messages.PotOfGoldFormat = gameData.messages.treasure.pot_of_gold; + + // Records + Messages.PrivateNotesSavedMessage = gameData.messages.private_notes_save; + Messages.PrivateNotesMetaFormat = gameData.messages.meta.private_notes_format; + + // Profile + Messages.ProfileSavedMessage = gameData.messages.profile.save; + Messages.ProfileTooLongMessage = gameData.messages.profile.too_long; + Messages.ProfileViolationFormat = gameData.messages.profile.blocked; + + // Announcements + + Messages.WelcomeFormat = gameData.messages.welcome_format; + Messages.MotdFormat = gameData.messages.motd_format; + Messages.LoginMessageFormat = gameData.messages.login_format; + Messages.LogoutMessageFormat = gameData.messages.logout_format; + + // Pronoun + Messages.PronounFemaleShe = gameData.messages.meta.stats_page.pronouns.female_she; + Messages.PronounFemaleHer = gameData.messages.meta.stats_page.pronouns.female_her; + + Messages.PronounMaleHe = gameData.messages.meta.stats_page.pronouns.male_he; + Messages.PronounMaleHis = gameData.messages.meta.stats_page.pronouns.male_his; + + Messages.PronounYouYour = gameData.messages.meta.stats_page.pronouns.you_your; + + // Stats + Messages.StatsBarFormat = gameData.messages.meta.stats_page.stats_bar_format; + Messages.StatsAreaFormat = gameData.messages.meta.stats_page.stats_area_format; + Messages.StatsMoneyFormat = gameData.messages.meta.stats_page.stats_money_format; + Messages.StatsFreeTimeFormat = gameData.messages.meta.stats_page.stats_freetime_format; + Messages.StatsDescriptionFormat = gameData.messages.meta.stats_page.stats_description_format; + Messages.StatsExpFormat = gameData.messages.meta.stats_page.stats_experience; + Messages.StatsQuestpointsFormat = gameData.messages.meta.stats_page.stats_questpoints; + Messages.StatsHungerFormat = gameData.messages.meta.stats_page.stats_hunger; + Messages.StatsThirstFormat = gameData.messages.meta.stats_page.stats_thisrt; + Messages.StatsTiredFormat = gameData.messages.meta.stats_page.stats_tiredness; + Messages.StatsGenderFormat = gameData.messages.meta.stats_page.stats_gender; + Messages.StatsJewelFormat = gameData.messages.meta.stats_page.stats_equipped; + Messages.StatsCompetitionGearFormat = gameData.messages.meta.stats_page.stats_competion_gear; + + Messages.JewelrySlot1Format = gameData.messages.meta.stats_page.jewelry.slot_1; + Messages.JewelrySlot2Format = gameData.messages.meta.stats_page.jewelry.slot_2; + Messages.JewelrySlot3Format = gameData.messages.meta.stats_page.jewelry.slot_3; + Messages.JewelrySlot4Format = gameData.messages.meta.stats_page.jewelry.slot_4; + + Messages.JewelryRemoveSlot1Button = gameData.messages.meta.stats_page.jewelry.remove_slot_1; + Messages.JewelryRemoveSlot2Button = gameData.messages.meta.stats_page.jewelry.remove_slot_2; + Messages.JewelryRemoveSlot3Button = gameData.messages.meta.stats_page.jewelry.remove_slot_3; + Messages.JewelryRemoveSlot4Button = gameData.messages.meta.stats_page.jewelry.remove_slot_4; + + Messages.CompetitionGearHeadFormat = gameData.messages.meta.stats_page.competition_gear.head_format; + Messages.CompetitionGearBodyFormat = gameData.messages.meta.stats_page.competition_gear.body_format; + Messages.CompetitionGearLegsFormat = gameData.messages.meta.stats_page.competition_gear.legs_format; + Messages.CompetitionGearFeetFormat = gameData.messages.meta.stats_page.competition_gear.feet_format; + + Messages.CompetitionGearRemoveHeadButton = gameData.messages.meta.stats_page.competition_gear.remove_head; + Messages.CompetitionGearRemoveBodyButton = gameData.messages.meta.stats_page.competition_gear.remove_body; + Messages.CompetitionGearRemoveLegsButton = gameData.messages.meta.stats_page.competition_gear.remove_legs; + Messages.CompetitionGearRemoveFeetButton = gameData.messages.meta.stats_page.competition_gear.remove_feet; + + Messages.StatsPrivateNotesButton = gameData.messages.meta.stats_page.stats_private_notes; + Messages.StatsQuestsButton = gameData.messages.meta.stats_page.stats_quests; + Messages.StatsMinigameRankingButton = gameData.messages.meta.stats_page.stats_minigame_ranking; + Messages.StatsAwardsButton = gameData.messages.meta.stats_page.stats_awards; + Messages.StatsMiscButton = gameData.messages.meta.stats_page.stats_misc; + + Messages.JewelrySelected = gameData.messages.meta.stats_page.msg.jewelry_selected; + Messages.JewelrySelectedOther = gameData.messages.meta.stats_page.msg.jewelry_other; + + Messages.NoJewerlyEquipped = gameData.messages.meta.stats_page.msg.no_jewelry_equipped; + Messages.NoJewerlyEquippedOther = gameData.messages.meta.stats_page.msg.no_jewelry_other; + + Messages.NoCompetitionGear = gameData.messages.meta.stats_page.msg.no_competition_gear; + Messages.NoCompetitionGearOther = gameData.messages.meta.stats_page.msg.no_competition_gear_other; + + Messages.CompetitionGearSelected = gameData.messages.meta.stats_page.msg.competition_gear_selected; + Messages.CompetitionGearSelectedOther = gameData.messages.meta.stats_page.msg.competition_gear_other_selected; + + Messages.StatHunger = gameData.messages.meta.stats_page.hunger_stat_name; + Messages.StatThirst = gameData.messages.meta.stats_page.thirst_stat_name; + Messages.StatTired = gameData.messages.meta.stats_page.tired_stat_name; + + Messages.StatsOtherHorses = gameData.messages.meta.stats_page.msg.other_horses; + Messages.StatPlayerFormats = gameData.messages.meta.stats_page.player_stats.ToObject(); + + Messages.StatThirstDizzy = gameData.messages.movement_key.thirsty; + Messages.StatHungerStumble = gameData.messages.movement_key.hungery; + + // Misc Stats + Messages.StatMiscHeader = gameData.messages.meta.misc_stats.header; + Messages.StatMiscNoneRecorded = gameData.messages.meta.misc_stats.no_stats_recorded; + Messages.StatMiscEntryFormat = gameData.messages.meta.misc_stats.stat_format; + + // Books (Libary) + Messages.BooksOfHorseIsle = gameData.messages.meta.libary.books.books_of_horseisle; + Messages.BookEntryFormat = gameData.messages.meta.libary.books.book_entry; + Messages.BookReadFormat = gameData.messages.meta.libary.books.book_read; + + // Awards (Libary) + Messages.AwardsAvalible = gameData.messages.meta.libary.awards.all_earnable_awards; + Messages.AwardEntryFormat = gameData.messages.meta.libary.awards.award_entry; + + // Locations (Libary) + Messages.LocationKnownIslands = gameData.messages.meta.libary.locations.known_islands; + Messages.LocationKnownTowns = gameData.messages.meta.libary.locations.known_towns; + Messages.LocationIslandFormat = gameData.messages.meta.libary.locations.isle_entry; + Messages.LocationTownFormat = gameData.messages.meta.libary.locations.town_entry; + Messages.LocationDescriptionFormat = gameData.messages.meta.libary.locations.location_description; + + // Minigame (Libary) + Messages.MinigameSingleplayer = gameData.messages.meta.libary.minigames.singleplayer; + Messages.MinigameTwoplayer = gameData.messages.meta.libary.minigames.twoplayer; + Messages.MinigameMultiplayer = gameData.messages.meta.libary.minigames.multiplayer; + Messages.MinigameCompetitions = gameData.messages.meta.libary.minigames.competitions; + Messages.MinigameEntryFormat = gameData.messages.meta.libary.minigames.minigame_entry; + + // Companion (Libary) + Messages.CompanionViewFormat = gameData.messages.meta.libary.companion.view_button; + Messages.CompanionEntryFormat = gameData.messages.meta.libary.companion.entry_format; + + // Tack (Libary) + Messages.TackViewSetFormat = gameData.messages.meta.libary.tack.view_tack_set; + Messages.TackSetPeiceFormat = gameData.messages.meta.libary.tack.set_peice_format; + + // Groomer + Messages.GroomerBestToHisAbilitiesFormat = gameData.messages.meta.groomer.groomed_best_it_can; + Messages.GroomerCannotAffordMessage = gameData.messages.meta.groomer.cannot_afford_service; + Messages.GroomerCannotImprove = gameData.messages.meta.groomer.cannot_improve; + Messages.GroomerBestToHisAbilitiesALL = gameData.messages.meta.groomer.groomed_best_all; + Messages.GroomerDontNeed = gameData.messages.meta.groomer.dont_need; + + Messages.GroomerHorseCurrentlyAtFormat = gameData.messages.meta.groomer.currently_at; + Messages.GroomerApplyServiceFormat = gameData.messages.meta.groomer.apply_service; + Messages.GroomerApplyServiceForAllFormat = gameData.messages.meta.groomer.apply_all; + + // Barn + Messages.BarnHorseFullyFedFormat = gameData.messages.meta.barn.fully_fed; + Messages.BarnCantAffordService = gameData.messages.meta.barn.cant_afford; + Messages.BarnAllHorsesFullyFed = gameData.messages.meta.barn.rested_all; + Messages.BarnServiceNotNeeded = gameData.messages.meta.barn.not_needed; + + Messages.BarnHorseStatusFormat = gameData.messages.meta.barn.horse_status; + Messages.BarnHorseMaxed = gameData.messages.meta.barn.horse_maxed; + Messages.BarnLetHorseRelaxFormat = gameData.messages.meta.barn.let_relax; + Messages.BarnLetAllHorsesReleaxFormat = gameData.messages.meta.barn.relax_all; + + // Farrier + Messages.FarrierCurrentShoesFormat = gameData.messages.meta.farrier.current_shoes; + Messages.FarrierApplyIronShoesFormat = gameData.messages.meta.farrier.apply_iron; + Messages.FarrierApplySteelShoesFormat = gameData.messages.meta.farrier.apply_steel; + Messages.FarrierShoeAllFormat = gameData.messages.meta.farrier.shoe_all; + + Messages.FarrierPutOnSteelShoesMessageFormat = gameData.messages.meta.farrier.put_on_steel_shoes; + Messages.FarrierPutOnIronShoesMessageFormat = gameData.messages.meta.farrier.put_on_iron_shoes; + Messages.FarrierPutOnSteelShoesAllMesssageFormat = gameData.messages.meta.farrier.put_on_steel_all; + Messages.FarrierShoesCantAffordMessage = gameData.messages.meta.farrier.cant_afford_farrier; + + // Trainng Pen + Messages.TrainedInStatFormat = gameData.messages.meta.trainer_pen.train_success; + Messages.TrainerHeaderFormat = gameData.messages.meta.trainer_pen.train_header; + Messages.TrainerHorseEntryFormat = gameData.messages.meta.trainer_pen.train_format; + Messages.TrainerHorseFullyTrainedFormat = gameData.messages.meta.trainer_pen.fully_trained; + Messages.TrainerCantTrainAgainInFormat = gameData.messages.meta.trainer_pen.train_again_in; + Messages.TrainerCantAfford = gameData.messages.meta.trainer_pen.cant_afford; + + // Santa + Messages.SantaHiddenText = gameData.messages.meta.santa.hidden_text; + Messages.SantaWrapItemFormat = gameData.messages.meta.santa.wrap_format; + Messages.SantaWrappedObjectMessage = gameData.messages.meta.santa.wrapped_object; + Messages.SantaCantWrapInvFull = gameData.messages.meta.santa.wrap_fail_inv_full; + Messages.SantaCantOpenNothingInside = gameData.messages.meta.santa.open_fail_empty; + Messages.SantaItemOpenedFormat = gameData.messages.meta.santa.open_format; + Messages.SantaItemCantOpenInvFull = gameData.messages.meta.santa.open_fail_inv_full; + + // Pawneer + Messages.PawneerUntackedHorsesICanBuy = gameData.messages.meta.pawneer.untacked_i_can_buy; + Messages.PawneerHorseFormat = gameData.messages.meta.pawneer.pawn_horse; + Messages.PawneerOrderMeta = gameData.messages.meta.pawneer.pawneer_order; + Messages.PawneerHorseConfirmationFormat = gameData.messages.meta.pawneer.are_you_sure; + Messages.PawneerHorseSoldMessagesFormat = gameData.messages.meta.pawneer.horse_sold; + Messages.PawneerHorseNotFound = gameData.messages.meta.pawneer.horse_not_found; + + Messages.PawneerOrderSelectBreed = gameData.messages.meta.pawneer.order.select_breed; + Messages.PawneerOrderBreedEntryFormat = gameData.messages.meta.pawneer.order.breed_entry; + + Messages.PawneerOrderSelectColorFormat = gameData.messages.meta.pawneer.order.select_color; + Messages.PawneerOrderColorEntryFormat = gameData.messages.meta.pawneer.order.color_entry; + + Messages.PawneerOrderSelectGenderFormat = gameData.messages.meta.pawneer.order.select_gender; + Messages.PawneerOrderGenderEntryFormat = gameData.messages.meta.pawneer.order.gender_entry; + + Messages.PawneerOrderHorseFoundFormat = gameData.messages.meta.pawneer.order.found; + + // Vet + Messages.VetServiceHorseFormat = gameData.messages.meta.vet.service_horse; + Messages.VetSerivcesNotNeeded = gameData.messages.meta.vet.not_needed; + Messages.VetApplyServicesFormat = gameData.messages.meta.vet.apply; + + Messages.VetApplyServicesForAllFormat = gameData.messages.meta.vet.apply_all; + Messages.VetFullHealthRecoveredMessageFormat = gameData.messages.meta.vet.now_full_health; + Messages.VetServicesNotNeededAll = gameData.messages.meta.vet.not_needed_all; + Messages.VetAllFullHealthRecoveredMessage = gameData.messages.meta.vet.all_full; + Messages.VetCannotAffordMessage = gameData.messages.meta.vet.cant_afford; + + // Pond + Messages.PondHeader = gameData.messages.meta.pond.header; + Messages.PondGoFishing = gameData.messages.meta.pond.go_fishing; + Messages.PondNoFishingPole = gameData.messages.meta.pond.no_fishing_pole; + Messages.PondDrinkHereIfSafe = gameData.messages.meta.pond.drink_here; + Messages.PondHorseDrinkFormat = gameData.messages.meta.pond.horse_drink_format; + Messages.PondNoEarthWorms = gameData.messages.meta.pond.no_earth_worms; + + Messages.PondDrinkFullFormat = gameData.messages.meta.pond.drank_full; + Messages.PondCantDrinkHpLowFormat = gameData.messages.meta.pond.cant_drink_hp_low; + Messages.PondDrinkOhNoesFormat = gameData.messages.meta.pond.drank_something_bad; + Messages.PondNotThirstyFormat = gameData.messages.meta.pond.not_thirsty; + + // Horse Whisperer + Messages.WhispererHorseLocateButtonFormat = gameData.messages.meta.whisperer.horse_locate_meta; + Messages.WhispererServiceCostYouFormat = gameData.messages.meta.whisperer.service_cost; + Messages.WhispererServiceCannotAfford = gameData.messages.meta.whisperer.cant_afford; + Messages.WhispererSearchingAmoungHorses = gameData.messages.meta.whisperer.searching_amoung_horses; + Messages.WhispererNoneFound = gameData.messages.meta.whisperer.none_found_meta; + Messages.WhispererHorsesFoundFormat = gameData.messages.meta.whisperer.horse_found_meta; + + // Mud Hole + Messages.MudHoleNoHorses = gameData.messages.meta.mud_hole.no_horses; + Messages.MudHoleRuinedGroomFormat = gameData.messages.meta.mud_hole.ruined_groom; + + // Movement + Messages.RandomMovement = gameData.messages.random_movement; + + // Quests Log + Messages.QuestLogHeader = gameData.messages.meta.quest_log.header_meta; + Messages.QuestFormat = gameData.messages.meta.quest_log.quest_format; + + Messages.QuestNotCompleted = gameData.messages.meta.quest_log.not_complete; + Messages.QuestNotAvalible = gameData.messages.meta.quest_log.not_avalible; + Messages.QuestCompleted = gameData.messages.meta.quest_log.completed; + + Messages.QuestFooterFormat = gameData.messages.meta.quest_log.footer_format; + // Transport + + Messages.CantAffordTransport = gameData.messages.transport.not_enough_money; + Messages.WelcomeToAreaFormat = gameData.messages.transport.welcome_to_format; + Messages.TransportFormat = gameData.messages.meta.transport_format; + Messages.TransportCostFormat = gameData.messages.meta.transport_cost; + Messages.TransportWagonFree = gameData.messages.meta.transport_free; + + // Abuse Reports + Messages.AbuseReportMetaFormat = gameData.messages.meta.abuse_report.options_format; + Messages.AbuseReportReasonFormat = gameData.messages.meta.abuse_report.report_reason_format; + + Messages.AbuseReportPlayerNotFoundFormat = gameData.messages.abuse_report.player_not_found_format; + Messages.AbuseReportFiled = gameData.messages.abuse_report.report_filed; + Messages.AbuseReportProvideValidReason = gameData.messages.abuse_report.valid_reason; + + // Bank + Messages.BankMadeInIntrestFormat = gameData.messages.meta.bank.made_interest; + Messages.BankCarryingFormat = gameData.messages.meta.bank.carrying_message; + Messages.BankWhatToDo = gameData.messages.meta.bank.what_to_do; + Messages.BankOptionsFormat = gameData.messages.meta.bank.options; + + + Messages.BankDepositedMoneyFormat = gameData.messages.bank.deposit_format; + Messages.BankWithdrewMoneyFormat = gameData.messages.bank.withdraw_format; + + Messages.BankCantHoldThisMuch = gameData.messages.bank.cant_hold_that_much; + Messages.BankYouCantHoldThisMuch = gameData.messages.bank.cant_withdraw_that_much; + + // Riddler + Messages.RiddlerAnsweredAll = gameData.messages.meta.riddler.riddle_all_complete; + Messages.RiddlerIncorrectAnswer = gameData.messages.meta.riddler.riddle_incorrect; + Messages.RiddlerCorrectAnswerFormat = gameData.messages.meta.riddler.riddle_correct; + Messages.RiddlerEnterAnswerFormat = gameData.messages.meta.riddler.riddle_format; + + // Workshop + Messages.WorkshopCraftEntryFormat = gameData.messages.meta.workshop.craft_entry; + Messages.WorkshopRequiresFormat = gameData.messages.meta.workshop.requires; + Messages.WorkshopRequireEntryFormat = gameData.messages.meta.workshop.require; + Messages.WorkshopAnd = gameData.messages.meta.workshop.and; + + Messages.WorkshopNoRoomInInventory = gameData.messages.meta.workshop.no_room; + Messages.WorkshopMissingRequiredItem = gameData.messages.meta.workshop.missing_item; + Messages.WorkshopCraftingSuccess = gameData.messages.meta.workshop.craft_success; + Messages.WorkshopCannotAfford = gameData.messages.meta.workshop.no_money; + + // Horses + Messages.AdvancedStatFormat = gameData.messages.meta.horse.stat_format; + Messages.BasicStatFormat = gameData.messages.meta.horse.basic_stat_format; + Messages.HorsesHere = gameData.messages.meta.horse.horses_here; + Messages.WildHorseFormat = gameData.messages.meta.horse.wild_horse; + Messages.HorseCaptureTimer = gameData.messages.meta.horse.horse_timer; + + Messages.YouCapturedTheHorse = gameData.messages.meta.horse.horse_caught; + Messages.HorseEvadedCapture = gameData.messages.meta.horse.horse_escaped; + Messages.HorseEscapedAnyway = gameData.messages.meta.horse.horse_escaped_anyway; + + Messages.HorsesMenuHeader = gameData.messages.meta.horse.horses_menu; + Messages.TooManyHorses = gameData.messages.meta.horse.too_many_horses; + Messages.UpdateHorseCategory = gameData.messages.meta.horse.update_category; + Messages.HorseEntryFormat = gameData.messages.meta.horse.horse_format; + Messages.ViewBaiscStats = gameData.messages.meta.horse.view_basic_stats; + Messages.ViewAdvancedStats = gameData.messages.meta.horse.view_advanced_stats; + Messages.HorseBuckedYou = gameData.messages.meta.horse.horse_bucked; + Messages.HorseLlamaBuckedYou = gameData.messages.meta.horse.llama_bucked; + Messages.HorseCamelBuckedYou = gameData.messages.meta.horse.camel_bucked; + + Messages.HorseRidingMessageFormat = gameData.messages.meta.horse.riding_message; + Messages.HorseNameYoursFormat = gameData.messages.meta.horse.horse_inventory.your_horse_format; + Messages.HorseNameOthersFormat = gameData.messages.meta.horse.horse_inventory.horse_others_format; + Messages.HorseDescriptionFormat = gameData.messages.meta.horse.horse_inventory.description_format; + Messages.HorseHandsHeightFormat = gameData.messages.meta.horse.horse_inventory.hands_high; + Messages.HorseExperienceEarnedFormat = gameData.messages.meta.horse.horse_inventory.experience; + + Messages.HorseTrainableInFormat = gameData.messages.meta.horse.horse_inventory.trainable_in; + Messages.HorseIsTrainable = gameData.messages.meta.horse.horse_inventory.currently_trainable; + Messages.HorseLeasedRemainingTimeFormat = gameData.messages.meta.horse.horse_inventory.leased_horse; + + Messages.HorseCannotMountUntilTackedMessage = gameData.messages.meta.horse.cannot_mount_tacked; + Messages.HorseDismountedBecauseNotTackedMessageFormat = gameData.messages.meta.horse.dismount_because_tack; + Messages.HorseMountButtonFormat = gameData.messages.meta.horse.horse_inventory.mount_button; + Messages.HorseDisMountButtonFormat = gameData.messages.meta.horse.horse_inventory.dismount_button; + Messages.HorseFeedButtonFormat = gameData.messages.meta.horse.horse_inventory.feed_button; + Messages.HorseTackButtonFormat = gameData.messages.meta.horse.horse_inventory.tack_button; + Messages.HorsePetButtonFormat = gameData.messages.meta.horse.horse_inventory.pet_button; + Messages.HorseProfileButtonFormat = gameData.messages.meta.horse.horse_inventory.profile_button; + + Messages.HorseSavedProfileMessageFormat = gameData.messages.meta.horse.profile.saved; + Messages.HorseProfileMessageTooLongError = gameData.messages.meta.horse.profile.desc_too_long; + Messages.HorseNameTooLongError = gameData.messages.meta.horse.profile.name_too_long; + Messages.HorseNameViolationsError = gameData.messages.meta.horse.profile.name_profanity_detected; + Messages.HorseProfileMessageProfileError = gameData.messages.meta.horse.profile.profile_profanity_detected; + + Messages.HorseCatchTooManyHorsesMessage = gameData.messages.meta.horse.horse_inventory.horse_cannot_catch_max; + Messages.HorseNoAutoSell = gameData.messages.meta.horse.horse_inventory.no_auto_sell; + Messages.HorseAutoSellPriceFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_format; + Messages.HorseAutoSellOthersFormat = gameData.messages.meta.horse.horse_inventory.auto_sell_others; + Messages.HorseAutoSellFormat = gameData.messages.meta.horse.horse_inventory.auto_sell; + Messages.HorseCantAutoSellTacked = gameData.messages.meta.horse.horse_inventory.cannot_auto_sell_tacked; + + Messages.HorseCurrentlyCategoryFormat = gameData.messages.meta.horse.horse_inventory.marked_as; + Messages.HorseMarkAsCategory = gameData.messages.meta.horse.horse_inventory.marking_options; + Messages.HorseStats = gameData.messages.meta.horse.horse_inventory.horse_stats; + Messages.HorseTacked = gameData.messages.meta.horse.horse_inventory.wearing_tacked; + Messages.HorseTackFormat = gameData.messages.meta.horse.horse_inventory.tacked_format; + + Messages.HorseCompanion = gameData.messages.meta.horse.horse_inventory.companion; + Messages.HorseCompanionFormat = gameData.messages.meta.horse.horse_inventory.companion_selected; + Messages.HorseCompanionChangeButton = gameData.messages.meta.horse.horse_inventory.companion_change_button; + Messages.HorseNoCompanion = gameData.messages.meta.horse.horse_inventory.no_companion; + + Messages.HorseAdvancedStatsFormat = gameData.messages.meta.horse.horse_inventory.advanced_stats; + Messages.HorseBreedDetailsFormat = gameData.messages.meta.horse.horse_inventory.breed_details; + Messages.HorseHeightRangeFormat = gameData.messages.meta.horse.horse_inventory.height_range; + Messages.HorsePossibleColorsFormat = gameData.messages.meta.horse.horse_inventory.possible_colors; + Messages.HorseReleaseButton = gameData.messages.meta.horse.horse_inventory.release_horse; + Messages.HorseOthers = gameData.messages.meta.horse.horse_inventory.other_horses; + + Messages.HorseDescriptionEditFormat = gameData.messages.meta.horse.description_edit; + Messages.HorseEquipTackMessageFormat = gameData.messages.meta.horse.equip_tack_message; + Messages.HorseUnEquipTackMessageFormat = gameData.messages.meta.horse.unequip_tack_message; + Messages.HorseStopRidingMessage = gameData.messages.meta.horse.stop_riding_message; + + Messages.HorsePetMessageFormat = gameData.messages.meta.horse.pet_horse; + Messages.HorsePetTooHappy = gameData.messages.meta.horse.pet_horse_too_happy; + Messages.HorsePetTooTired = gameData.messages.meta.horse.pet_horse_too_sleepy; + Messages.HorseSetNewCategoryMessageFormat = gameData.messages.meta.horse.horse_set_new_category; + + Messages.HorseAutoSellMenuFormat = gameData.messages.meta.horse.auto_sell.auto_sell_meta; + Messages.HorseIsAutoSell = gameData.messages.meta.horse.auto_sell.is_auto_sell; + Messages.HorseAutoSellConfirmedFormat = gameData.messages.meta.horse.auto_sell.auto_sell_confirmed; + Messages.HorseAutoSellValueTooHigh = gameData.messages.meta.horse.auto_sell.auto_sell_to_high; + Messages.HorseAutoSellRemoved = gameData.messages.meta.horse.auto_sell.auto_sell_remove; + + Messages.HorseSetAutoSell = gameData.messages.meta.horse.horse_inventory.set_auto_sell; + Messages.HorseChangeAutoSell = gameData.messages.meta.horse.horse_inventory.change_auto_sell; + Messages.HorseTackFailAutoSell = gameData.messages.meta.horse.tack_fail_autosell; + + Messages.HorseAreYouSureYouWantToReleaseFormat = gameData.messages.meta.horse.horse_release; + Messages.HorseCantReleaseTheHorseYourRidingOn = gameData.messages.meta.horse.cant_release_currently_riding; + Messages.HorseReleasedMeta = gameData.messages.meta.horse.released_horse; + Messages.HorseReleasedBy = gameData.messages.meta.horse.released_by_message; + + // All Stats (basic) + + Messages.HorseAllBasicStats = gameData.messages.meta.horse.allstats_basic.all_baisc_stats; + Messages.HorseBasicStatEntryFormat = gameData.messages.meta.horse.allstats_basic.horse_entry; + + // All Stats (all) + Messages.HorseAllStatsHeader = gameData.messages.meta.horse.allstats.all_stats_header; + Messages.HorseNameEntryFormat = gameData.messages.meta.horse.allstats.horse_name_entry; + Messages.HorseBasicStatsCompactedFormat = gameData.messages.meta.horse.allstats.basic_stats_compact; + Messages.HorseAdvancedStatsCompactedFormat = gameData.messages.meta.horse.allstats.advanced_stats_compact; + Messages.HorseAllStatsLegend = gameData.messages.meta.horse.allstats.legend; + + + // Horse companion menu + Messages.HorseCompanionMenuHeaderFormat = gameData.messages.meta.horse.companion_menu.menu_header; + Messages.HorseCompnaionMenuCurrentCompanionFormat = gameData.messages.meta.horse.companion_menu.selected_companion; + Messages.HorseCompanionEntryFormat = gameData.messages.meta.horse.companion_menu.companion_entry; + Messages.HorseCompanionEquipMessageFormat = gameData.messages.meta.horse.companion_menu.companion_equip_message; + Messages.HorseCompanionRemoveMessageFormat = gameData.messages.meta.horse.companion_menu.companion_remove_message; + Messages.HorseCompanionMenuCurrentlyAvalibleCompanions = gameData.messages.meta.horse.companion_menu.companions_avalible; + + // Horse Feed Menu + Messages.HorseCurrentStatusFormat = gameData.messages.meta.horse.feed_horse.current_status; + Messages.HorseHoldingHorseFeed = gameData.messages.meta.horse.feed_horse.holding_horse_feed; + Messages.HorsefeedFormat = gameData.messages.meta.horse.feed_horse.horsefeed_format; + Messages.HorseNeighsThanks = gameData.messages.meta.horse.feed_horse.horse_neigh; + Messages.HorseCouldNotFinish = gameData.messages.meta.horse.feed_horse.horse_could_not_finish; + + Messages.HorseFeedPersonalityIncreased = gameData.messages.meta.horse.feed_horse.feed_special_personality; + Messages.HorseFeedInteligenceIncreased = gameData.messages.meta.horse.feed_horse.feed_special_inteligence; + Messages.HorseFeedMagicBeanFormat = gameData.messages.meta.horse.feed_horse.feed_special_magic_bean; + Messages.HorseFeedMagicDropletFormat = gameData.messages.meta.horse.feed_horse.feed_special_magic_droplet; + + // Tack menu (horses) + Messages.HorseTackedAsFollowsFormat = gameData.messages.meta.horse.tack_menu.tacked_as_follows; + Messages.HorseUnEquipSaddleFormat = gameData.messages.meta.horse.tack_menu.dequip_saddle; + Messages.HorseUnEquipSaddlePadFormat = gameData.messages.meta.horse.tack_menu.dequip_saddle_pad; + Messages.HorseUnEquipBridleFormat = gameData.messages.meta.horse.tack_menu.dequip_bridle; + Messages.HorseTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_tack; + Messages.HorseLlamaTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_llama_tack; + Messages.HorseCamelTackInInventory = gameData.messages.meta.horse.tack_menu.you_have_following_camel_tack; + Messages.HorseEquipFormat = gameData.messages.meta.horse.tack_menu.equip_tack; + Messages.BackToHorse = gameData.messages.meta.horse.back_to_horse; + + + // Libary + Messages.LibaryMainMenu = gameData.messages.meta.libary.main_menu; + Messages.LibaryFindNpc = gameData.messages.meta.libary.find_npc; + Messages.LibaryFindNpcSearchResultsHeader = gameData.messages.meta.libary.find_npc_results_header; + Messages.LibaryFindNpcSearchResultFormat = gameData.messages.meta.libary.find_npc_results_format; + Messages.LibaryFindNpcSearchNoResults = gameData.messages.meta.libary.find_npc_no_results; + Messages.LibaryFindNpcLimit5 = gameData.messages.meta.libary.find_npc_limit5; + + Messages.LibaryFindRanch = gameData.messages.meta.libary.find_ranch; + Messages.LibaryFindRanchResultsHeader = gameData.messages.meta.libary.find_ranch_match_closely; + Messages.LibaryFindRanchResultFormat = gameData.messages.meta.libary.find_ranch_result; + Messages.LibaryFindRanchResultsNoResults = gameData.messages.meta.libary.find_ranch_no_results; + + Messages.HorseBreedFormat = gameData.messages.meta.libary.horse_breed_format; + Messages.HorseRelativeFormat = gameData.messages.meta.libary.horse_relative_format; + Messages.BreedViewerFormat = gameData.messages.meta.libary.breed_preview_format; + Messages.BreedViewerMaximumStats = gameData.messages.meta.libary.maximum_stats; + + // Chat + + Messages.ChatViolationMessageFormat = gameData.messages.chat.violation_format; + Messages.RequiredChatViolations = gameData.messages.chat.violation_points_required; + + Messages.GlobalChatFormatForModerators = gameData.messages.chat.for_others.global_format_moderator; + // Messages.DirectChatFormatForModerators = gameData.messages.chat.for_others.dm_format_moderator; + + Messages.YouWereSentToPrisionIsle = gameData.messages.starved_horse; + + Messages.HereChatFormat = gameData.messages.chat.for_others.here_format; + Messages.IsleChatFormat = gameData.messages.chat.for_others.isle_format; + Messages.NearChatFormat = gameData.messages.chat.for_others.near_format; + Messages.GlobalChatFormat = gameData.messages.chat.for_others.global_format; + Messages.AdsChatFormat = gameData.messages.chat.for_others.ads_format; + Messages.DirectChatFormat = gameData.messages.chat.for_others.dm_format; + Messages.BuddyChatFormat = gameData.messages.chat.for_others.friend_format; + Messages.ModChatFormat = gameData.messages.chat.for_others.mod_format; + Messages.AdminChatFormat = gameData.messages.chat.for_others.admin_format; + + Messages.HereChatFormatForSender = gameData.messages.chat.for_sender.here_format; + Messages.IsleChatFormatForSender = gameData.messages.chat.for_sender.isle_format; + Messages.NearChatFormatForSender = gameData.messages.chat.for_sender.near_format; + Messages.BuddyChatFormatForSender = gameData.messages.chat.for_sender.friend_format; + Messages.DirectChatFormatForSender = gameData.messages.chat.for_sender.dm_format; + Messages.ModChatFormatForSender = gameData.messages.chat.for_sender.mod_format; + Messages.AdsChatFormatForSender = gameData.messages.chat.for_sender.ads_format; + Messages.AdminChatFormatForSender = gameData.messages.chat.for_sender.admin_format; + + Messages.DmModBadge = gameData.messages.chat.dm_moderator; + Messages.DmAutoResponse = gameData.messages.chat.dm_autoreply; + + Messages.AdminCommandFormat = gameData.messages.commands.admin_command_completed; + Messages.PlayerCommandFormat = gameData.messages.commands.player_command_completed; + Messages.MuteHelp = gameData.messages.commands.mute_help; + Messages.UnMuteHelp = gameData.messages.commands.unmute_help; + + Messages.PasswordNotice = gameData.messages.chat.password_included; + Messages.CapsNotice = gameData.messages.chat.caps_notice; + + // AutoReply + Messages.AutoReplyTooLong = gameData.messages.auto_reply.too_long; + Messages.AutoReplyHasViolations = gameData.messages.auto_reply.contains_violations; + + // Drawing Rooms + Messages.DrawingLastToDrawFormat = gameData.messages.meta.drawing_rooms.last_draw; + Messages.DrawingContentsSavedInSlotFormat = gameData.messages.meta.drawing_rooms.saved; + Messages.DrawingContentsLoadedFromSlotFormat = gameData.messages.meta.drawing_rooms.load; + Messages.DrawingPlzClearDraw = gameData.messages.meta.drawing_rooms.plz_clear_draw; + Messages.DrawingPlzClearLoad = gameData.messages.meta.drawing_rooms.plz_clear_load; + Messages.DrawingNotSentNotSubscribed = gameData.messages.meta.drawing_rooms.not_subscribed_draw; + Messages.DrawingCannotLoadNotSubscribed = gameData.messages.meta.drawing_rooms.not_subscribed_load; + + // Brickpoet + Messages.LastPoetFormat = gameData.messages.meta.last_poet; + + // Mutliroom + Messages.MultiroomParticipentFormat = gameData.messages.meta.multiroom.partcipent_format; + Messages.MultiroomPlayersParticipating = gameData.messages.meta.multiroom.other_players_participating; + + // Dropped Items + + Messages.NothingMessage = gameData.messages.meta.dropped_items.nothing_message; + Messages.ItemsOnGroundMessage = gameData.messages.meta.dropped_items.items_message; + Messages.GrabItemFormat = gameData.messages.meta.dropped_items.item_format; + Messages.ItemInformationFormat = gameData.messages.meta.dropped_items.item_information_format; + Messages.GrabAllItemsButton = gameData.messages.meta.dropped_items.grab_all; + Messages.DroppedAnItemMessage = gameData.messages.dropped_items.dropped_item_message; + Messages.DroppedItemTileIsFull = gameData.messages.dropped_items.drop_tile_full; + Messages.DroppedItemCouldntPickup = gameData.messages.dropped_items.other_picked_up; + Messages.GrabbedAllItemsMessage = gameData.messages.dropped_items.grab_all_message; + Messages.GrabbedItemMessage = gameData.messages.dropped_items.grab_message; + Messages.GrabAllItemsMessage = gameData.messages.dropped_items.grab_all_message; + + Messages.GrabbedAllItemsButInventoryFull = gameData.messages.dropped_items.grab_all_but_inv_full; + Messages.GrabbedItemButInventoryFull = gameData.messages.dropped_items.grab_but_inv_full; + + // Tools + Messages.BinocularsNothing = gameData.messages.tools.binoculars; + Messages.MagnifyNothing = gameData.messages.tools.magnify; + Messages.RakeNothing = gameData.messages.tools.rake; + Messages.ShovelNothing = gameData.messages.tools.shovel; + + // Shop + Messages.ThingsIAmSelling = gameData.messages.meta.shop.selling; + Messages.ThingsYouSellMe = gameData.messages.meta.shop.sell_me; + Messages.InfinitySign = gameData.messages.meta.shop.infinity; + + Messages.CantAfford1 = gameData.messages.shop.cant_afford_1; + Messages.CantAfford5 = gameData.messages.shop.cant_afford_5; + Messages.CantAfford25 = gameData.messages.shop.cant_afford_25; + Messages.Brought1Format = gameData.messages.shop.brought_1; + Messages.Brought5Format = gameData.messages.shop.brought_5; + Messages.Brought25Format = gameData.messages.shop.brought_25; + Messages.Sold1Format = gameData.messages.shop.sold_1; + Messages.SoldAllFormat = gameData.messages.shop.sold_all; + Messages.CannotSellYoudGetTooMuchMoney = gameData.messages.shop.cant_hold_extra_money; + + Messages.Brought1ButInventoryFull = gameData.messages.shop.brought_1_but_inv_full; + Messages.Brought5ButInventoryFull = gameData.messages.shop.brought_5_but_inv_full; + Messages.Brought25ButInventoryFull = gameData.messages.shop.brought_25_but_inv_full; + + // Player List + + Messages.PlayerListHeader = gameData.messages.meta.player_list.playerlist_header; + Messages.PlayerListSelectFromFollowing = gameData.messages.meta.player_list.select_from_following; + Messages.PlayerListOfBuddiesFormat = gameData.messages.meta.player_list.list_of_buddies_format; + Messages.PlayerListOfNearby = gameData.messages.meta.player_list.list_of_players_nearby; + Messages.PlayerListOfPlayersFormat = gameData.messages.meta.player_list.list_of_all_players_format; + Messages.PlayerListOfPlayersAlphabetically = gameData.messages.meta.player_list.list_of_all_players_alphabetically; + Messages.PlayerListMapAllBuddiesForamt = gameData.messages.meta.player_list.map_all_buddies_format; + Messages.PlayerListMapAllPlayersFormat = gameData.messages.meta.player_list.map_all_players_format; + Messages.PlayerListAbuseReport = gameData.messages.meta.player_list.abuse_report; + + Messages.MuteButton = gameData.messages.meta.player_list.mute_button; + Messages.HearButton = gameData.messages.meta.player_list.hear_button; + + Messages.ThreeMonthSubscripitionIcon = gameData.messages.meta.player_list.icon_subbed_3month; + Messages.YearSubscriptionIcon = gameData.messages.meta.player_list.icon_subbed_year; + Messages.NewUserIcon = gameData.messages.meta.player_list.icon_new; + Messages.MonthSubscriptionIcon = gameData.messages.meta.player_list.icon_subbed_month; + Messages.AdminIcon = gameData.messages.meta.player_list.icon_admin; + Messages.ModeratorIcon = gameData.messages.meta.player_list.icon_mod; + + Messages.BuddyListHeader = gameData.messages.meta.player_list.online_buddy_header; + Messages.BuddyListOnlineBuddyEntryFormat = gameData.messages.meta.player_list.online_buddy_format; + Messages.BuddyListOfflineBuddys = gameData.messages.meta.player_list.offline_buddys; + Messages.BuddyListOfflineBuddyEntryFormat = gameData.messages.meta.player_list.offline_buddy_format; + + Messages.NearbyPlayersListHeader = gameData.messages.meta.player_list.nearby_player_header; + Messages.PlayerListAllAlphabeticalHeader = gameData.messages.meta.player_list.all_players_alphabetical_header; + + Messages.PlayerListEntryFormat = gameData.messages.meta.player_list.player_format; + + Messages.PlayerListIdle = gameData.messages.meta.player_list.idle_text; + Messages.PlayerListAllHeader = gameData.messages.meta.player_list.all_players_header; + Messages.PlayerListIconFormat = gameData.messages.meta.player_list.icon_format; + Messages.PlayerListIconInformation = gameData.messages.meta.player_list.icon_info; + + // Consume + + Messages.ConsumeItemFormat = gameData.messages.consume.consumed_item_format; + Messages.ConsumedButMaxReached = gameData.messages.consume.consumed_but_max_reached; + + // Meta Format + + Messages.LocationFormat = gameData.messages.meta.location_format; + Messages.IsleFormat = gameData.messages.meta.isle_format; + Messages.TownFormat = gameData.messages.meta.town_format; + Messages.AreaFormat = gameData.messages.meta.area_format; + Messages.Seperator = gameData.messages.meta.seperator; + Messages.TileFormat = gameData.messages.meta.tile_format; + Messages.ExitThisPlace = gameData.messages.meta.exit_this_place; + Messages.BackToMap = gameData.messages.meta.back_to_map; + Messages.BackToMapHorse = gameData.messages.meta.back_to_map_horse; + Messages.LongFullLine = gameData.messages.meta.long_full_line; + Messages.MetaTerminator = gameData.messages.meta.end_of_meta; + + Messages.PlayersHere = gameData.messages.meta.player_interaction.players_here; + Messages.NearbyPlayers = gameData.messages.meta.nearby.players_nearby; + Messages.North = gameData.messages.meta.nearby.north; + Messages.East = gameData.messages.meta.nearby.east; + Messages.South = gameData.messages.meta.nearby.south; + Messages.West = gameData.messages.meta.nearby.west; + + Messages.NoPitchforkMeta = gameData.messages.meta.hay_pile.no_pitchfork; + Messages.HasPitchforkMeta = gameData.messages.meta.hay_pile.pitchfork; + Messages.R1 = gameData.messages.meta.r1; + Messages.PasswordEntry = gameData.messages.meta.password_input; + + // Venus Fly Trap + + Messages.VenusFlyTrapFormat = gameData.messages.meta.venus_flytrap_format; + + // Shortcut + Messages.NoTelescope = gameData.messages.no_telescope; + + // Inn + Messages.InnBuyMeal = gameData.messages.meta.inn.buy_meal; + Messages.InnBuyRest = gameData.messages.meta.inn.buy_rest; + Messages.InnItemEntryFormat = gameData.messages.meta.inn.inn_entry; + Messages.InnEnjoyedServiceFormat = gameData.messages.inn.enjoyed_service; + Messages.InnCannotAffordService = gameData.messages.inn.cant_afford; + Messages.InnFullyRested = gameData.messages.inn.fully_rested; + + // Password + Messages.IncorrectPasswordMessage = gameData.messages.incorrect_password; + + // Fountain + Messages.FountainMeta = gameData.messages.meta.fountain; + Messages.FountainDrankYourFull = gameData.messages.fountain.drank_your_fill; + Messages.FountainDroppedMoneyFormat = gameData.messages.fountain.dropped_money; + + // Highscore + + Messages.HighscoreHeaderMeta = gameData.messages.meta.highscores.header_meta; + Messages.HighscoreFormat = gameData.messages.meta.highscores.highscore_format; + Messages.BestTimeFormat = gameData.messages.meta.highscores.besttime_format; + + Messages.GameHighScoreHeaderFormat = gameData.messages.meta.highscores.game_highscore_header; + Messages.GameHighScoreFormat = gameData.messages.meta.highscores.game_highscore_format; + + Messages.GameWinLooseHeaderFormat = gameData.messages.meta.highscores.game_winloose_header; + Messages.GameWinLooseFormat = gameData.messages.meta.highscores.game_winloose_format; + + Messages.GameBestTimeHeaderFormat = gameData.messages.meta.highscores.game_besttime_header; + Messages.GameBestTimeFormat = gameData.messages.meta.highscores.game_besttime_format; + + // Awards + + Messages.AwardHeader = gameData.messages.meta.awards_page.awards_header; + Messages.AwardOthersFormat = gameData.messages.meta.awards_page.awards_others_header; + Messages.NoAwards = gameData.messages.meta.awards_page.no_awards; + Messages.AwardFormat = gameData.messages.meta.awards_page.award_format; + + // World Peace + Messages.NoWishingCoins = gameData.messages.meta.wishing_well.no_coins; + Messages.YouHaveWishingCoinsFormat = gameData.messages.meta.wishing_well.wish_coins; + Messages.WishItemsFormat = gameData.messages.meta.wishing_well.wish_things; + Messages.WishMoneyFormat = gameData.messages.meta.wishing_well.wish_money; + Messages.WishWorldPeaceFormat = gameData.messages.meta.wishing_well.wish_worldpeace; + + Messages.TossedCoin = gameData.messages.meta.wishing_well.make_wish; + Messages.WorldPeaceOnlySoDeep = gameData.messages.meta.wishing_well.world_peace_message; + Messages.WishingWellMeta = gameData.messages.meta.wishing_well.wish_meta; + // Sec Codes + + Messages.InvalidSecCodeError = gameData.messages.sec_code.invalid_sec_code; + Messages.YouEarnedAnItemFormat = gameData.messages.sec_code.item_earned; + Messages.YouEarnedAnItemButInventoryWasFullFormat = gameData.messages.sec_code.item_earned_full_inv; + Messages.YouLostAnItemFormat = gameData.messages.sec_code.item_deleted; + Messages.YouEarnedMoneyFormat = gameData.messages.sec_code.money_earned; + Messages.BeatHighscoreFormat = gameData.messages.sec_code.highscore_beaten; + Messages.BeatBestHighscore = gameData.messages.sec_code.best_highscore_beaten; + Messages.BeatBestTimeFormat = gameData.messages.sec_code.best_time_beaten; + + // Inventory + + Messages.InventoryHeaderFormat = gameData.messages.meta.inventory.header_format; + Messages.InventoryItemFormat = gameData.messages.meta.inventory.item_entry; + Messages.ShopEntryFormat = gameData.messages.meta.inventory.shop_entry; + Messages.ItemInformationButton = gameData.messages.meta.inventory.item_info_button; + Messages.ItemInformationByIdButton = gameData.messages.meta.inventory.item_info_itemid_button; + + Messages.ItemDropButton = gameData.messages.meta.inventory.item_drop_button; + Messages.ItemThrowButton = gameData.messages.meta.inventory.item_throw_button; + Messages.ItemConsumeButton = gameData.messages.meta.inventory.item_consume_button; + Messages.ItemUseButton = gameData.messages.meta.inventory.item_use_button; + Messages.ItemOpenButton = gameData.messages.meta.inventory.item_open_button; + Messages.ItemWearButton = gameData.messages.meta.inventory.item_wear_button; + Messages.ItemReadButton = gameData.messages.meta.inventory.item_read_button; + + Messages.ShopBuyButton = gameData.messages.meta.inventory.buy_button; + Messages.ShopBuy5Button = gameData.messages.meta.inventory.buy_5_button; + Messages.ShopBuy25Button = gameData.messages.meta.inventory.buy_25_button; + + Messages.SellButton = gameData.messages.meta.inventory.sell_button; + Messages.SellAllButton = gameData.messages.meta.inventory.sell_all_button; + // Npc + + Messages.NpcStartChatFormat = gameData.messages.meta.npc.start_chat_format; + Messages.NpcNoChatpoints = gameData.messages.meta.npc.no_chatpoints; + Messages.NpcChatpointFormat = gameData.messages.meta.npc.chatpoint_format; + Messages.NpcReplyFormat = gameData.messages.meta.npc.reply_format; + Messages.NpcTalkButton = gameData.messages.meta.npc.npc_talk_button; + Messages.NpcInformationButton = gameData.messages.meta.npc.npc_information_button; + Messages.NpcInformationFormat = gameData.messages.meta.npc.npc_information_format; + + // Login Failed Reasons + Messages.LoginFailedReasonBanned = gameData.messages.login.banned; + Messages.LoginFailedReasonBannedIpFormat = gameData.messages.login.ip_banned; + + // Disconnect Reasons + + Messages.KickReasonKicked = gameData.messages.disconnect.kicked; + Messages.KickReasonBanned = gameData.messages.disconnect.banned; + Messages.KickReasonIdleFormat = gameData.messages.disconnect.client_timeout.kick_message; + Messages.KickReasonNoTime = gameData.messages.disconnect.no_playtime; + Messages.IdleWarningFormat = gameData.messages.disconnect.client_timeout.warn_message; + Messages.KickReasonDuplicateLogin = gameData.messages.disconnect.dupe_login; + + // Competition Gear + + Messages.EquipCompetitionGearFormat = gameData.messages.equips.equip_competition_gear_format; + Messages.RemoveCompetitionGear = gameData.messages.equips.removed_competition_gear; + + // Jewerly + Messages.EquipJewelryFormat = gameData.messages.equips.equip_jewelry; + Messages.MaxJewelryMessage = gameData.messages.equips.max_jewelry; + Messages.RemoveJewelry = gameData.messages.equips.removed_jewelry; + + // Click + Messages.NothingInterestingHere = gameData.messages.click_nothing_message; + + // Swf + Messages.WagonCutscene = gameData.transport.wagon_cutscene; + Messages.BoatCutscene = gameData.transport.boat_cutscene; + Messages.BallonCutscene = gameData.transport.ballon_cutscene; + + gameData = null; + return; + } + + } +} diff --git a/HorseIsleServer/LibHISP/Server/GameServer.cs b/HorseIsleServer/LibHISP/Server/GameServer.cs old mode 100755 new mode 100644 index 267c413..6cb45ee --- a/HorseIsleServer/LibHISP/Server/GameServer.cs +++ b/HorseIsleServer/LibHISP/Server/GameServer.cs @@ -1,8276 +1,8286 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Threading; -using System.Drawing; - -using HISP.Player; -using HISP.Game; -using HISP.Security; -using HISP.Game.Chat; -using HISP.Player.Equips; -using HISP.Game.Services; -using HISP.Game.Inventory; -using HISP.Game.SwfModules; -using HISP.Game.Horse; -using HISP.Game.Events; -using HISP.Game.Items; -using HISP.Util; - -namespace HISP.Server -{ - public class GameServer - { - public static Socket ServerSocket; - - - public static int IdleTimeout; - public static int IdleWarning; - - public static Random RandomNumberGenerator = new Random(); - - // Events - public static RealTimeRiddle RiddleEvent = RealTimeRiddle.GetRandomRiddle(); - public static TackShopGiveaway TackShopGiveawayEvent = null; - public static RealTimeQuiz QuizEvent = null; - public static WaterBalloonGame WaterBalloonEvent = new WaterBalloonGame(); - public static IsleCardTradingGame IsleCardTrading; - public static ModsRevenge ModsRevengeEvent = new ModsRevenge(); - - /* - * Private stuff - */ - private static int gameTickSpeed = 4800; // Changing this to ANYTHING else will cause desync with the client. - private static int totalMinutesElapsed = 0; - private static int oneMinute = 1000 * 60; - private static Timer gameTimer; // Controls in-game time. - private static Timer minuteTimer; // ticks every real world minute. - private static void onGameTick(object state) - { - // Tick the game clock. - World.TickWorldClock(); - - // Start all events with this RaceEvery set. - Arena.StartArenas(World.ServerTime.Minutes); - - // Decrement horse train timer - Database.DecHorseTrainTimeout(); - - // Write time to database: - Database.SetServerTime(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years); - - // Ranch Windmill Payments - if (World.ServerTime.Minutes % 720 == 0) // every 12 hours - { - Logger.DebugPrint("Paying windmill owners . . . "); - foreach (Ranch ranch in Ranch.Ranches) - { - int ranchOwner = ranch.OwnerId; - if (ranchOwner != -1) - { - int moneyToAdd = 5000 * ranch.GetBuildingCount(8); // Windmill - if (GameServer.IsUserOnline(ranchOwner)) - GameServer.GetUserById(ranchOwner).AddMoney(moneyToAdd); - else - { - try - { - Database.SetPlayerMoney(Database.GetPlayerMoney(ranchOwner) + moneyToAdd, ranchOwner); - } - catch (OverflowException) - { - Database.SetPlayerMoney(2147483647, ranchOwner); - } - } - } - } - } - - if((World.StartDate != -1)) // Birthday tokens - { - int curTime = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; - if (curTime >= World.StartDate + 378691200) - { - Logger.InfoPrint("Your server has been running for 12 years! Adding birthday tokens"); - Database.SetStartTime(-1); - World.StartDate = -1; - - - AddItemToAllUsersEvenOffline(Item.BirthdayToken, 10); - } - - } - - gameTimer.Change(gameTickSpeed, gameTickSpeed); - - } - private static void onMinuteTick(object state) - { - totalMinutesElapsed++; - - if (totalMinutesElapsed % 8 == 0) - { - Database.IncAllUsersFreeTime(1); - } - - if (totalMinutesElapsed % 25 == 0) - { - - Logger.DebugPrint("Randomizing Weather..."); - foreach (World.Town town in World.Towns) - { - if (RandomNumberGenerator.Next(0, 100) < 25) - { - town.Weather = town.SelectRandomWeather(); - } - } - - foreach (World.Isle isle in World.Isles) - { - if (RandomNumberGenerator.Next(0, 100) < 25) - { - isle.Weather = isle.SelectRandomWeather(); - } - } - } - - /* - * EVENTS - */ - - // Mods Revenge - if(totalMinutesElapsed % ((60*8)+15) == 0) - { - ModsRevengeEvent.StartEvent(); - } - - // Isle Card Trading Game - if(totalMinutesElapsed % (60 *2) == 0) - { - IsleCardTrading = new IsleCardTradingGame(); - IsleCardTrading.StartEvent(); - } - - // Water Balloon Game - if(totalMinutesElapsed % (60 * 2) == 0) - { - WaterBalloonEvent.StartEvent(); - } - - // Tack Shop Giveaway - if(totalMinutesElapsed % ((60 * 3)+5) == 0) - { - TackShopGiveawayEvent = new TackShopGiveaway(); - TackShopGiveawayEvent.StartEvent(); - } - - // Real Time Riddle - if(totalMinutesElapsed % (RealTimeRiddle.LastWon ? 20 : 15) == 0) - { - RiddleEvent = RealTimeRiddle.GetRandomRiddle(); - RiddleEvent.StartEvent(); - } - - // Real Time Quiz - if(totalMinutesElapsed % (60 + 30) == 0) - { - QuizEvent = new RealTimeQuiz(); - QuizEvent.StartEvent(); - } - - - if (totalMinutesElapsed % 60 == 0) // Do spoils - { - foreach (HorseInstance horse in Database.GetMostSpoiledHorses()) - { - horse.BasicStats.Health = 1000; - horse.BasicStats.Mood = 1000; - horse.BasicStats.Hunger = 1000; - horse.BasicStats.Thirst = 1000; - } - } - - if (totalMinutesElapsed % 5 == 0) - { - Treasure.AddValue(); - } - - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client == null) - continue; - - if (client.LoggedIn) - { - if (!client.User.MajorPriority && !client.User.MinorPriority) - UpdateArea(client); - - byte[] BaseStatsPacketData = PacketBuilder.CreateMoneyPlayerCountAndMail(client.User.Money, GameServer.GetNumberOfPlayers(), client.User.MailBox.UnreadMailCount); - client.SendPacket(BaseStatsPacketData); - - UpdateWorld(client); - UpdatePlayer(client); - } - } - - foreach(Auction auction in Auction.AuctionRooms.ToArray()) - { - foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray()) - { - entry.TimeRemaining--; - if (entry.Completed) - auction.DeleteEntry(entry); - else if (entry.TimeRemaining <= 0) - entry.Completed = true; - - auction.UpdateAuctionRoom(); - } - } - - - - Database.IncPlayerTirednessForOfflineUsers(); - - // Offline player handling w sql black magic... - - Database.DecrementHorseLeaseTimeForOfflinePlayers(); - Database.TpOfflinePlayersBackToUniterForOfflinePlayers(); - Database.DeleteExpiredLeasedHorsesForOfflinePlayers(); - - DroppedItems.DespawnItems(); - DroppedItems.GenerateItems(); - - - WildHorse.Update(); - Npc.WanderNpcs(); - minuteTimer.Change(oneMinute, oneMinute); - } - - /* - * This section is where all the event handlers live, - * eg: OnMovementPacket is whenever the server receies a movement request from the client. - */ - - // HI1 Protocol - - public static void OnPlayerInteration(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in."); - return; - } - if(packet.Length >= 2) - { - byte method = packet[1]; - switch (method) - { - case PacketBuilder.PLAYER_INTERACTION_TRADE_REJECT: - if (sender.User.TradingWith != null) - sender.User.TradingWith.CancelTrade(); - break; - case PacketBuilder.PLAYER_INTERACTION_ACCEPT: - if (sender.User.TradingWith != null) - sender.User.TradingWith.AcceptTrade(); - break; - case PacketBuilder.PLAYER_INTERACTION_PROFILE: - string packetStr = Encoding.UTF8.GetString(packet); - string playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to view profile of User ID NaN."); - break; - } - - if (IsUserOnline(playerId)) - { - User user = GetUserById(playerId); - sender.User.MajorPriority = true; - - byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildStatsMenu(user, true)); - sender.SendPacket(metaTag); - } - break; - case PacketBuilder.PLAYER_INTERACTION_MUTE: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to MUTE User ID NaN."); - break; - } - - if (IsUserOnline(playerId)) - { - User user = GetUserById(playerId); - if (!sender.User.MutePlayer.IsUserMuted(user)) - sender.User.MutePlayer.MuteUser(user); - - byte[] nowMuting = PacketBuilder.CreateChat(Messages.FormatNowMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(nowMuting); - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.User)); - sender.SendPacket(metaPacket); - } - break; - case PacketBuilder.PLAYER_INTERACTION_UNMUTE: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to UNMUTE User ID NaN."); - break; - } - - if (IsUserOnline(playerId)) - { - User user = GetUserById(playerId); - if (sender.User.MutePlayer.IsUserMuted(user)) - sender.User.MutePlayer.UnmuteUser(user); - - byte[] stoppedMuting = PacketBuilder.CreateChat(Messages.FormatStoppedMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(stoppedMuting); - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.User)); - sender.SendPacket(metaPacket); - } - break; - case PacketBuilder.PLAYER_INTERACTION_REMOVE_BUDDY: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to remove User ID NaN as a buddy."); - break; - } - - - if (sender.User.Friends.IsFriend(playerId)) - { - sender.User.Friends.RemoveFriend(playerId); - - byte[] friendRemoved = PacketBuilder.CreateChat(Messages.FormatAddBuddyRemoveBuddy(Database.GetUsername(playerId)), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(friendRemoved); - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.User)); - sender.SendPacket(metaPacket); - } - - break; - case PacketBuilder.PLAYER_INTERACTION_TAG: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to trade with User ID NaN."); - break; - } - - if (IsUserOnline(playerId)) - { - User user = GetUserById(playerId); ; - string TAGYourIT = Messages.FormatTagYourIt(user.Username, sender.User.Username); - int totalBuds = 0; - foreach (int friendId in sender.User.Friends.List) - { - if (friendId == sender.User.Id) - continue; - - if (IsUserOnline(friendId)) - { - User buddy = GetUserById(friendId); - byte[] tagYourItPacket = PacketBuilder.CreateChat(TAGYourIT, PacketBuilder.CHAT_BOTTOM_RIGHT); - buddy.Client.SendPacket(tagYourItPacket); - totalBuds++; - } - } - string budStr = Messages.FormatTagTotalBuddies(totalBuds); - - byte[] tagYouItPacket = PacketBuilder.CreateChat(TAGYourIT + budStr, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tagYouItPacket); - - } - break; - case PacketBuilder.PLAYER_INTERACTION_ADD_BUDDY: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to add friend with User ID NaN."); - break; - } - if (IsUserOnline(playerId)) - { - User userToAdd = GetUserById(playerId); - sender.User.Friends.AddFriend(userToAdd); - } - break; - case PacketBuilder.PLAYER_INTERACTION_ADD_ITEM: - if (sender.User.TradingWith == null) - break; - if (packet.Length < 5) - break; - - packetStr = Encoding.UTF8.GetString(packet); - string idStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - char firstChar = idStr[0]; - switch (firstChar) - { - case '3': // Trade Money - - if (sender.User.Bids.Length > 0) - { - byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantBuyWhileAuctioning); - break; - } - - sender.User.TradeMenuPriority = true; - sender.User.AttemptingToOfferItem = -1; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTradeAddMoney(sender.User.TradingWith.MoneyOffered)); - sender.SendPacket(metaPacket); - - break; - case '2': // Trade Horse - string horseRandomIdStr = idStr.Substring(1); - int horseRandomId = -1; - try - { - horseRandomId = int.Parse(horseRandomIdStr); - } - catch (FormatException) - { - break; - } - - if (!sender.User.HorseInventory.HorseIdExist(horseRandomId)) - break; - - HorseInstance horse = sender.User.HorseInventory.GetHorseById(horseRandomId); - if (!sender.User.TradingWith.HorsesOffered.Contains(horse)) - sender.User.TradingWith.OfferHorse(horse); - - UpdateArea(sender); - - if (sender.User.TradingWith != null) - if (!sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); - - break; - case '1': // Trade Item - string itemIdStr = idStr.Substring(1); - int itemId = -1; - try - { - itemId = int.Parse(itemIdStr); - } - catch (FormatException) - { - break; - } - - if (!sender.User.Inventory.HasItemId(itemId)) - break; - - sender.User.TradeMenuPriority = true; - sender.User.AttemptingToOfferItem = itemId; - InventoryItem item = sender.User.Inventory.GetItemByItemId(itemId); - byte[] addItemPacket = PacketBuilder.CreateMeta(Meta.BuildTradeAddItem(item.ItemInstances.Length)); - sender.SendPacket(addItemPacket); - break; - - } - break; - case PacketBuilder.PLAYER_INTERACTION_TRADE: - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to trade with User ID NaN."); - break; - } - if (IsUserOnline(playerId)) - { - User user = GetUserById(playerId); - byte[] tradeMsg = PacketBuilder.CreateChat(Messages.TradeRequiresBothPlayersMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tradeMsg); - - sender.User.PendingTradeTo = user.Id; - - if (user.PendingTradeTo == sender.User.Id) - { - // Start Trade - Trade tradeWithYou = new Trade(sender.User); - Trade tradeWithOther = new Trade(user); - tradeWithYou.OtherTrade = tradeWithOther; - tradeWithOther.OtherTrade = tradeWithYou; - - sender.User.TradingWith = tradeWithYou; - user.TradingWith = tradeWithOther; - - UpdateArea(sender); - UpdateArea(user.Client); - } - - } - break; - default: - Logger.DebugPrint("Unknown Player interaction Method: 0x" + method.ToString("X") + " Packet: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - return; - } - } - public static void OnSocialPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Tried to be socialable, but has no account and therefor no friends."); - return; - } - byte method = packet[1]; - - switch (method) - { - case PacketBuilder.SOCIALS_MENU: - string packetStr = Encoding.UTF8.GetString(packet); - string playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to socialize with User ID NaN."); - break; - } - - if(IsUserOnline(playerId)) - { - sender.User.SocializingWith = GetUserById(playerId); - - sender.User.SocializingWith.AddSocailizedWith(sender.User); - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildSocialMenu(sender.User.CurrentlyRidingHorse != null)); - sender.SendPacket(metaPacket); - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to socialize with User #"+playerId.ToString()+" but there not online."); - } - break; - case PacketBuilder.SOCIALS_USE: - int socialId = Convert.ToInt32(packet[2] - (byte)0x21); - SocialType.Social social = SocialType.GetSocial(socialId); - /* - * Check if player being socialed with - * is actually on this tile, not muted, etc - */ - if (sender.User.SocializingWith != null && social.BaseSocialType.Type != "GROUP") - { - if (sender.User.SocializingWith.MuteAll || sender.User.SocializingWith.MuteSocials) - { - byte[] cantSocialize = PacketBuilder.CreateChat(Messages.PlayerIgnoringAllSocials, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSocialize); - break; - } - - if (sender.User.SocializingWith.MutePlayer.IsUserMuted(sender.User)) - { - byte[] cantSocialize = PacketBuilder.CreateChat(Messages.PlayerIgnoringYourSocials, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSocialize); - break; - } - - if(sender.User.SocializingWith.X != sender.User.X && sender.User.SocializingWith.Y != sender.User.Y) - { - byte[] playerNotNearby = PacketBuilder.CreateChat(Messages.SocialPlayerNoLongerNearby, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(playerNotNearby); - break; - } - } - - - if(social.ForEveryone != null) - { - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y, true, true)) - { - if (social.BaseSocialType.Type != "GROUP") - if (user.Id == sender.User.SocializingWith.Id) - continue; - - if (user.Id == sender.User.Id) - continue; - - if (user.MuteAll || user.MuteSocials) - continue; - string socialTarget = ""; - if(sender.User.SocializingWith != null) - socialTarget = sender.User.SocializingWith.Username; - byte[] msgEveryone = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForEveryone, socialTarget, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(msgEveryone); - } - - } - if(social.ForTarget != null) - { - if(sender.User.SocializingWith != null) - { - if (social.BaseSocialType.Type != "GROUP") - { - byte[] msgTarget = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForTarget, sender.User.SocializingWith.Username, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.SocializingWith.Client.SendPacket(msgTarget); - } - } - } - if(social.ForSender != null) - { - string socialTarget = ""; - if (sender.User.SocializingWith != null) - socialTarget = sender.User.SocializingWith.Username; - - byte[] msgSender = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForSender, socialTarget, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msgSender); - - - } - - if (social.SoundEffect != null) - { - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y, true, true)) - { - - if (user.MuteAll || user.MuteSocials) - continue; - - byte[] soundEffect = PacketBuilder.CreatePlaySound(social.SoundEffect); - user.Client.SendPacket(soundEffect); - } - } - - break; - default: - Logger.ErrorPrint(sender.User.Username + " unknown social: " + method.ToString("X") + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - - } - public static void OnBirdMapRequested(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in."); - return; - } - - if(sender.User.Inventory.HasItemId(Item.Telescope)) - { - byte[] birdMapPacket = PacketBuilder.CreateBirdMap(sender.User.X, sender.User.Y); - sender.SendPacket(birdMapPacket); - } - else - { - byte[] noTelescopeMessage = PacketBuilder.CreateChat(Messages.NoTelescope, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(noTelescopeMessage); - } - } - - public static void OnAuctionPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent auction packet when not logged in."); - return; - } - if (packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid sized auction packet: " + BitConverter.ToString(packet).Replace("-", " ")); - return; - } - byte method = packet[1]; - int bidAmount = 0; - switch (method) - { - case PacketBuilder.AUCTION_BID_100: - bidAmount = 100; - goto doBids; - case PacketBuilder.AUCTION_BID_1K: - bidAmount = 1000; - goto doBids; - case PacketBuilder.AUCTION_BID_10K: - bidAmount = 10000; - goto doBids; - case PacketBuilder.AUCTION_BID_100K: - bidAmount = 100000; - goto doBids; - case PacketBuilder.AUCTION_BID_1M: - bidAmount = 1000000; - goto doBids; - case PacketBuilder.AUCTION_BID_10M: - bidAmount = 10000000; - goto doBids; - case PacketBuilder.AUCITON_BID_100M: - bidAmount = 100000000; - doBids:; - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if(tile.Code.StartsWith("AUCTION-")) - { - Auction auctionRoom = Auction.GetAuctionRoomById(int.Parse(tile.Code.Split('-')[1])); - int auctionEntryId = -1; - string packetStr = Encoding.UTF8.GetString(packet); - string auctionEntryStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - auctionEntryId = int.Parse(auctionEntryStr); - } - catch(FormatException) - { - Logger.ErrorPrint("Cant find auciton entry id NaN."); - break; - } - if (!auctionRoom.HasAuctionEntry(auctionEntryId)) - break; - - Auction.AuctionEntry entry = auctionRoom.GetAuctionEntry(auctionEntryId); - entry.Bid(sender.User, bidAmount); - - UpdateAreaForAll(tile.X, tile.Y, true, null); - } - } - } - break; - default: - Logger.ErrorPrint("Unknown method id: 0x" + method.ToString("X")); - break; - - } - - } - public static void OnHorseInteraction(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent horse interaction when not logged in."); - return; - } - - if(packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid sized horse interaction packet: " + BitConverter.ToString(packet).Replace("-", " ")); - return; - } - - byte method = packet[1]; - switch(method) - { - case PacketBuilder.HORSE_LIST: - sender.User.MajorPriority = true; - byte[] metaTags = PacketBuilder.CreateMeta(Meta.BuildHorseInventory(sender.User)); - sender.SendPacket(metaTags); - break; - case PacketBuilder.HORSE_PROFILE: - byte methodProfileEdit = packet[2]; - if(methodProfileEdit == PacketBuilder.HORSE_PROFILE_EDIT) - { - if (sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseDescriptionEditMeta(sender.User.LastViewedHorse)); - sender.SendPacket(metaPacket); - } - else - { - Logger.ErrorPrint(sender.User.Username + "Trying to edit description of no horse"); - } - } - else - { - Logger.InfoPrint(BitConverter.ToString(packet).Replace("-", " ")); - } - break; - case PacketBuilder.HORSE_FEED: - int randomId = 0; - string packetStr = Encoding.UTF8.GetString(packet); - string randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseFeedInst = sender.User.HorseInventory.GetHorseById(randomId); - - sender.User.LastViewedHorse = horseFeedInst; - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(horseFeedInst, sender.User)); - sender.SendPacket(metaPacket); - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to feed at a non existant horse."); - break; - } - case PacketBuilder.HORSE_PET: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horsePetInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horsePetInst; - int randMoodAddition = RandomNumberGenerator.Next(1, 20); - int randTiredMinus = RandomNumberGenerator.Next(1, 10); - - string msgs = ""; - if (horsePetInst.BasicStats.Mood + randMoodAddition >= 1000) - { - msgs += Messages.HorsePetTooHappy; - } - - if (horsePetInst.BasicStats.Tiredness - randTiredMinus <= 0) - { - msgs += Messages.HorsePetTooTired; - } - - horsePetInst.BasicStats.Tiredness -= randTiredMinus; - horsePetInst.BasicStats.Mood += randMoodAddition; - - byte[] petMessagePacket = PacketBuilder.CreateChat(Messages.FormatHorsePetMessage(msgs,randMoodAddition, randTiredMinus), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(petMessagePacket); - - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to feed at a non existant horse."); - break; - } - case PacketBuilder.HORSE_VET_SERVICE_ALL: - - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("VET-")) - { - string[] vetInfo = tile.Code.Split('-'); - int vetId = int.Parse(vetInfo[1]); - Vet vet = Vet.GetVetById(vetId); - int price = 0; - - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - price += vet.CalculatePrice(horse.BasicStats.Health); - if (price == 0) - { - byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.VetServicesNotNeededAll, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notNeededMessagePacket); - break; - } - else if (sender.User.Money >= price) - { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - horse.BasicStats.Health = 1000; - - byte[] healedMessagePacket = PacketBuilder.CreateChat(Messages.VetAllFullHealthRecoveredMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(healedMessagePacket); - - sender.User.TakeMoney(price); - - } - else - { - byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.VetCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cannotAffordMessagePacket); - break; - } - UpdateArea(sender); - } - - } - } - break; - case PacketBuilder.HORSE_VET_SERVICE: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if (randomIdStr == "NaN") - break; - - try - { - randomId = int.Parse(randomIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseVetServiceInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseVetServiceInst; - - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("VET-")) - { - string[] vetInfo = tile.Code.Split('-'); - int vetId = int.Parse(vetInfo[1]); - - Vet vet = Vet.GetVetById(vetId); - int price = vet.CalculatePrice(horseVetServiceInst.BasicStats.Health); - if (sender.User.Money >= price) - { - horseVetServiceInst.BasicStats.Health = 1000; - sender.User.TakeMoney(price); - - byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatVetHorseAtFullHealthMessage(horseVetServiceInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(messagePacket); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.VetCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - UpdateArea(sender); - } - - } - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to use vet services on a non existant horse."); - break; - } - case PacketBuilder.HORSE_SHOE_STEEL: - case PacketBuilder.HORSE_SHOE_IRON: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if (randomIdStr == "NaN") - break; - - try - { - randomId = int.Parse(randomIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseFarrierServiceInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseFarrierServiceInst; - - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("FARRIER-")) - { - string[] farrierInfo = tile.Code.Split('-'); - int farrierId = int.Parse(farrierInfo[1]); - - Farrier farrier = Farrier.GetFarrierById(farrierId); - int price = 0; - int incAmount = 0; - string msg = ""; - - if (method == PacketBuilder.HORSE_SHOE_STEEL) - { - price = farrier.SteelCost; - incAmount = farrier.SteelShoesAmount; - msg = Messages.FormatFarrierPutOnSteelShoesMessage(incAmount, 1000); - } - else - { - price = farrier.IronCost; - incAmount = farrier.IronShoesAmount; - msg = Messages.FormatFarrierPutOnIronShoesMessage(incAmount, 1000); - } - - if (sender.User.Money >= price) - { - horseFarrierServiceInst.BasicStats.Shoes = incAmount; - sender.User.TakeMoney(price); - - byte[] messagePacket = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(messagePacket); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.FarrierShoesCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - UpdateArea(sender); - } - - } - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to use farrier services on a non existant horse."); - break; - } - case PacketBuilder.HORSE_SHOE_ALL: - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("FARRIER-")) - { - string[] farrierInfo = tile.Code.Split('-'); - int farrierId = int.Parse(farrierInfo[1]); - - Farrier farrier = Farrier.GetFarrierById(farrierId); - - int totalPrice = 0; - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - { - if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) - { - totalPrice += farrier.SteelCost; - } - } - - if (sender.User.Money >= totalPrice) - { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - { - if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) - { - horse.BasicStats.Shoes = farrier.SteelShoesAmount; - } - } - sender.User.TakeMoney(totalPrice); - - byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatFarrierPutOnSteelShoesAllMesssage(farrier.SteelShoesAmount, 1000), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(messagePacket); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.FarrierShoesCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - UpdateArea(sender); - } - } - - } - break; - case PacketBuilder.HORSE_GROOM_SERVICE: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if (randomIdStr == "NaN") - break; - - try - { - randomId = int.Parse(randomIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance groomHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = groomHorseInst; - - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("GROOMER-")) - { - string[] groomerInfo = tile.Code.Split('-'); - int groomerId = int.Parse(groomerInfo[1]); - - Groomer groomer = Groomer.GetGroomerById(groomerId); - int price = groomer.CalculatePrice(groomHorseInst.BasicStats.Groom); - - - if (sender.User.Money >= price) - { - groomHorseInst.BasicStats.Groom = groomer.Max; - sender.User.TakeMoney(price); - - byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatHorseGroomedToBestAbilities(groomHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(messagePacket); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.GroomerCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - UpdateArea(sender); - } - - } - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to use groomer services on a non existant horse."); - break; - } - case PacketBuilder.HORSE_GROOM_SERVICE_ALL: - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("GROOMER-")) - { - string[] groomerInfo = tile.Code.Split('-'); - int groomId = int.Parse(groomerInfo[1]); - Groomer groomer = Groomer.GetGroomerById(groomId); - int price = 0; - int count = 0; - - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - { - if (horse.BasicStats.Groom < groomer.Max) - { - price += groomer.CalculatePrice(horse.BasicStats.Groom); - count++; - } - } - if (count == 0) - { - byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.GroomerDontNeed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notNeededMessagePacket); - break; - } - else if (sender.User.Money >= price) - { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - if (horse.BasicStats.Groom < groomer.Max) - horse.BasicStats.Groom = groomer.Max; - - byte[] groomedAllHorsesPacket = PacketBuilder.CreateChat(Messages.GroomerBestToHisAbilitiesALL, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(groomedAllHorsesPacket); - - sender.User.TakeMoney(price); - - } - else - { - byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.GroomerCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cannotAffordMessagePacket); - break; - } - UpdateArea(sender); - } - - } - } - break; - case PacketBuilder.HORSE_BARN_SERVICE: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if (randomIdStr == "NaN") - break; - - try - { - randomId = int.Parse(randomIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance barnHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = barnHorseInst; - - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if (tile.Code != null) - { - if (tile.Code.StartsWith("BARN-")) - { - string[] barnInfo = tile.Code.Split('-'); - int barnId = int.Parse(barnInfo[1]); - - Barn barn = Barn.GetBarnById(barnId); - int price = barn.CalculatePrice(barnHorseInst.BasicStats.Tiredness, barnHorseInst.BasicStats.Hunger, barnHorseInst.BasicStats.Thirst); ; - - - if (sender.User.Money >= price) - { - barnHorseInst.BasicStats.Tiredness = 1000; - barnHorseInst.BasicStats.Hunger = 1000; - barnHorseInst.BasicStats.Thirst = 1000; - sender.User.TakeMoney(price); - - byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatBarnHorseFullyFed(barnHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(messagePacket); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - UpdateArea(sender); - } - - } - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to use groomer services on a non existant horse."); - break; - } - case PacketBuilder.HORSE_BARN_SERVICE_ALL: - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("BARN-")) - { - string[] barnInfo = tile.Code.Split('-'); - int barnId = int.Parse(barnInfo[1]); - Barn barn = Barn.GetBarnById(barnId); - int totalPrice = 0; - - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - { - int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); - if (price > 0) - totalPrice += price; - } - if (totalPrice == 0) - { - byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.BarnServiceNotNeeded, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notNeededMessagePacket); - break; - } - else if (sender.User.Money >= totalPrice) - { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) - { - horse.BasicStats.Tiredness = 1000; - horse.BasicStats.Thirst = 1000; - horse.BasicStats.Hunger = 1000; - } - - byte[] barnedAllHorsesPacket = PacketBuilder.CreateChat(Messages.BarnAllHorsesFullyFed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(barnedAllHorsesPacket); - - sender.User.TakeMoney(totalPrice); - - } - else - { - byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cannotAffordMessagePacket); - break; - } - UpdateArea(sender); - } - - } - } - break; - case PacketBuilder.HORSE_TRAIN: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if (randomIdStr == "NaN") - break; - - try - { - randomId = int.Parse(randomIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance trainHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = trainHorseInst; - - if (World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if (tile.Code != null) - { - if (tile.Code.StartsWith("TRAINER-")) - { - if (trainHorseInst.TrainTimer > 0) - { - byte[] trainSuccessfulMessage = PacketBuilder.CreateChat(Messages.FormatTrainerCantTrainAgainIn(trainHorseInst.TrainTimer), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(trainSuccessfulMessage); - break; - } - string[] trainerInfo = tile.Code.Split('-'); - int trainerId = int.Parse(trainerInfo[1]); - - Trainer trainer = Trainer.GetTrainerById(trainerId); - - if (sender.User.Money >= trainer.MoneyCost) - { - sender.User.TakeMoney(trainer.MoneyCost); - trainHorseInst.BasicStats.Mood -= trainer.MoodCost; - trainHorseInst.BasicStats.Thirst -= trainer.ThirstCost; - trainHorseInst.BasicStats.Hunger -= trainer.HungerCost; - - - switch (trainer.ImprovesStat.ToUpper()) - { - case "SPEED": - trainHorseInst.AdvancedStats.Speed += trainer.ImprovesAmount; - break; - case "STRENGTH": - trainHorseInst.AdvancedStats.Strength += trainer.ImprovesAmount; - break; - case "AGILITY": - trainHorseInst.AdvancedStats.Agility += trainer.ImprovesAmount; - break; - case "ENDURANCE": - trainHorseInst.AdvancedStats.Endurance += trainer.ImprovesAmount; - break; - case "CONFORMATION": - trainHorseInst.AdvancedStats.Conformation += trainer.ImprovesAmount; - break; - default: - trainHorseInst.AdvancedStats.Speed += trainer.ImprovesAmount; - break; - } - trainHorseInst.BasicStats.Experience += trainer.ExperienceGained; - if (!sender.User.Subscribed) - trainHorseInst.TrainTimer = 1440; - else - trainHorseInst.TrainTimer = 720; - - byte[] trainSuccessfulMessage = PacketBuilder.CreateChat(Messages.FormatTrainedInStatFormat(trainHorseInst.Name, trainer.ImprovesStat), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(trainSuccessfulMessage); - - - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count++; - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(26)); // Pro Trainer - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(53)); // Top Trainer - - UpdateArea(sender); - } - else - { - byte[] cantAffordPacket = PacketBuilder.CreateChat(Messages.TrainerCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordPacket); - } - - } - - } - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to use trauber services on a non existant horse."); - break; - } - case PacketBuilder.HORSE_GIVE_FEED: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if(sender.User.LastViewedHorse == null) - { - Logger.InfoPrint(sender.User.Username + " Tried to feed a non existant horse."); - break; - } - if (sender.User.Inventory.HasItem(randomId)) - { - InventoryItem item = sender.User.Inventory.GetItemByRandomid(randomId); - Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); - HorseInstance horseInstance = sender.User.LastViewedHorse; - bool tooMuch = false; - bool changePersonality = false; - bool changeInteligence = false; - - foreach(Item.Effects effect in itemInfo.Effects) - { - switch(effect.EffectsWhat) - { - case "HEALTH": - if (horseInstance.BasicStats.Health + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Health += effect.EffectAmount; - break; - case "HUNGER": - if (horseInstance.BasicStats.Hunger + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Hunger += effect.EffectAmount; - break; - case "MOOD": - if (horseInstance.BasicStats.Mood + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Mood += effect.EffectAmount; - break; - case "GROOM": - if (horseInstance.BasicStats.Groom + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Groom += effect.EffectAmount; - break; - case "SHOES": - if (horseInstance.BasicStats.Shoes + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Shoes += effect.EffectAmount; - break; - case "THIRST": - if (horseInstance.BasicStats.Thirst + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Thirst += effect.EffectAmount; - break; - case "TIREDNESS": - if (horseInstance.BasicStats.Tiredness + effect.EffectAmount > 1000) - tooMuch = true; - horseInstance.BasicStats.Tiredness += effect.EffectAmount; - break; - case "INTELLIGENCEOFFSET": - horseInstance.AdvancedStats.Inteligence += effect.EffectAmount; - changeInteligence = true; - break; - case "PERSONALITYOFFSET": - horseInstance.AdvancedStats.Personality += effect.EffectAmount; - changePersonality = true; - - break; - case "SPOILED": - horseInstance.Spoiled += effect.EffectAmount; - break; - } - } - sender.User.Inventory.Remove(item.ItemInstances[0]); - - if(changePersonality) - { - byte[] personalityIncreased = PacketBuilder.CreateChat(Messages.HorseFeedPersonalityIncreased, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(personalityIncreased); - } - if (changeInteligence) - { - byte[] inteligenceIncreased = PacketBuilder.CreateChat(Messages.HorseFeedInteligenceIncreased, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inteligenceIncreased); - } - - if(item.ItemId == Item.MagicDroplet) - { - string oldColor = horseInstance.Color; - string newColor = horseInstance.Breed.Colors[RandomNumberGenerator.Next(0, horseInstance.Breed.Colors.Length)]; - - horseInstance.Color = newColor; - horseInstance.MagicUsed++; - - byte[] magicDropletUsed = PacketBuilder.CreateChat(Messages.FormatHorseFeedMagicDropletUsed(oldColor, newColor), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(magicDropletUsed); - } - - if(item.ItemId == Item.MagicBean) - { - double oldH = HorseInfo.CalculateHands(horseInstance.AdvancedStats.Height, false); - int newHeight = RandomNumberGenerator.Next(horseInstance.Breed.BaseStats.MinHeight, horseInstance.Breed.BaseStats.MaxHeight+1); - double newH = HorseInfo.CalculateHands(newHeight, false); - - horseInstance.AdvancedStats.Height = newHeight; - horseInstance.MagicUsed++; - - byte[] magicBeansUsed = PacketBuilder.CreateChat(Messages.FormatHorseFeedMagicBeanUsed(oldH, newH), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(magicBeansUsed); - } - - byte[] horseNeighThanksPacket = PacketBuilder.CreateChat(Messages.HorseNeighsThanks, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseNeighThanksPacket); - - if (tooMuch) - { - byte[] horseCouldntFinishItAll = PacketBuilder.CreateChat(Messages.HorseCouldNotFinish, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseCouldntFinishItAll); - } - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(sender.User.LastViewedHorse, sender.User)); - sender.SendPacket(metaPacket); - - - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to feed a non existant item to a horse."); - break; - } - case PacketBuilder.HORSE_ENTER_ARENA: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseInstance = sender.User.HorseInventory.GetHorseById(randomId); - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("ARENA-")) - { - string[] arenaInfo = tile.Code.Split('-'); - int arenaId = int.Parse(arenaInfo[1]); - Arena arena = Arena.GetAreaById(arenaId); - if (!Arena.UserHasEnteredHorseInAnyArena(sender.User)) - { - if (horseInstance.BasicStats.Thirst <= 200) - { - byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooThirsty); - break; - } - else if (horseInstance.BasicStats.Hunger <= 200) - { - byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooHungry); - break; - } - else if (horseInstance.BasicStats.Shoes <= 200) - { - byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(needsFarrier); - break; - } - else if (horseInstance.BasicStats.Tiredness <= 200) - { - byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooTired); - break; - } - else if (horseInstance.BasicStats.Health <= 200) - { - byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(needsVet); - break; - } - - - - if (sender.User.Money >= arena.EntryCost) - { - arena.AddEntry(sender.User, horseInstance); - break; - } - else - { - byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordEntryFee); - break; - } - } - else - { - byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(allreadyEntered); - } - } - - } - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to enter a non existant horse into a competition."); - break; - } - break; - case PacketBuilder.HORSE_RELEASE: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - if(World.InTown(sender.User.X, sender.User.Y)) - { - Logger.HackerPrint(sender.User.Username + " Tried to reelease a horse while inside a town...."); - break; - } - - - HorseInstance horseReleaseInst = sender.User.HorseInventory.GetHorseById(randomId); - if(sender.User.CurrentlyRidingHorse != null) - { - if(horseReleaseInst.RandomId == sender.User.CurrentlyRidingHorse.RandomId) - { - byte[] errorChatPacket = PacketBuilder.CreateChat(Messages.HorseCantReleaseTheHorseYourRidingOn, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorChatPacket); - break; - } - - } - - if (horseReleaseInst.Description == "") - horseReleaseInst.Description += Messages.FormatHorseReleasedBy(sender.User.Username); - - Logger.InfoPrint(sender.User.Username + " RELEASED HORSE: " + horseReleaseInst.Name + " (a " + horseReleaseInst.Breed.Name + ")."); - - sender.User.HorseInventory.DeleteHorse(horseReleaseInst); - new WildHorse(horseReleaseInst, sender.User.X, sender.User.Y, 60, true); - - sender.User.LastViewedHorse = horseReleaseInst; - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseReleased()); - sender.SendPacket(metaPacket); - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to release at a non existant horse."); - break; - } - case PacketBuilder.HORSE_TACK: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseTackInst = sender.User.HorseInventory.GetHorseById(randomId); - - sender.User.LastViewedHorse = horseTackInst; - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(horseTackInst, sender.User)); - sender.SendPacket(metaPacket); - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to tack at a non existant horse."); - break; - } - case PacketBuilder.HORSE_DRINK: - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != "POND") - { - Logger.HackerPrint(sender.User.Username + " Tried to drink from a pond when not on one."); - break; - } - } - - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - HorseInstance horseDrinkInst = sender.User.HorseInventory.GetHorseById(randomId); - - if(horseDrinkInst.BasicStats.Health < 200) - { - byte[] hpToLow = PacketBuilder.CreateChat(Messages.FormatPondHpLowMessage(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(hpToLow); - break; - } - - if(horseDrinkInst.BasicStats.Thirst < 1000) - { - horseDrinkInst.BasicStats.Thirst = 1000; - byte[] drinkFull = PacketBuilder.CreateChat(Messages.FormatPondDrinkFull(horseDrinkInst.Name),PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(drinkFull); - - if(RandomNumberGenerator.Next(0, 100) < 25) - { - horseDrinkInst.BasicStats.Health -= 200; - byte[] ohNoes = PacketBuilder.CreateChat(Messages.FormatPondDrinkOhNoes(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ohNoes); - } - - UpdateArea(sender); - } - else - { - byte[] notThirsty = PacketBuilder.CreateChat(Messages.FormatPondNotThirsty(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notThirsty); - break; - } - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to tack at a non existant horse."); - break; - } - case PacketBuilder.HORSE_TACK_EQUIP: - - int itemId = 0; - packetStr = Encoding.UTF8.GetString(packet); - string itemIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - itemId = int.Parse(itemIdStr); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if(Item.ItemIdExist(itemId)) - { - if(sender.User.LastViewedHorse != null) - { - if(sender.User.LastViewedHorse.AutoSell > 0) - { - byte[] failMessagePacket = PacketBuilder.CreateChat(Messages.HorseTackFailAutoSell, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(failMessagePacket); - break; - } - - if(sender.User.Inventory.HasItemId(itemId)) - { - Item.ItemInformation itemInfo = Item.GetItemById(itemId); - if (itemInfo.Type == "TACK") - { - switch (itemInfo.GetMiscFlag(0)) - { - case 1: // Saddle - if(sender.User.LastViewedHorse.Equipment.Saddle != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Saddle.Id)); - Database.SetSaddle(sender.User.LastViewedHorse.RandomId, itemInfo.Id); - sender.User.LastViewedHorse.Equipment.Saddle = itemInfo; - break; - case 2: // Saddle Pad - if (sender.User.LastViewedHorse.Equipment.SaddlePad != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.SaddlePad.Id)); - Database.SetSaddlePad(sender.User.LastViewedHorse.RandomId, itemInfo.Id); - sender.User.LastViewedHorse.Equipment.SaddlePad = itemInfo; - break; - case 3: // Bridle - if (sender.User.LastViewedHorse.Equipment.Bridle != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Bridle.Id)); - Database.SetBridle(sender.User.LastViewedHorse.RandomId, itemInfo.Id); - sender.User.LastViewedHorse.Equipment.Bridle = itemInfo; - break; - } - - - sender.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(sender.User.LastViewedHorse, sender.User)); - sender.SendPacket(metaPacket); - - byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatEquipTackMessage(itemInfo.Name, sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(equipMsgPacket); - - } - else if(itemInfo.Type == "COMPANION") - { - if (sender.User.LastViewedHorse.Equipment.Companion != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Companion.Id)); - Database.SetCompanion(sender.User.LastViewedHorse.RandomId, itemInfo.Id); - sender.User.LastViewedHorse.Equipment.Companion = itemInfo; - - sender.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(sender.User.LastViewedHorse, sender.User)); - sender.SendPacket(metaPacket); - - byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatHorseCompanionEquipMessage(sender.User.LastViewedHorse.Name, itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(equipMsgPacket); - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to equip a tack item to a hrose but that item was not of type \"TACK\"."); - } - } - else - { - Logger.HackerPrint(sender.User.Username + " tried to equip tack he doesnt have"); - break; - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to equip tack to a horse when not viewing one."); - break; - } - } - else - { - Logger.HackerPrint(sender.User.Username + " tried to equip tack he doesnt exist"); - break; - } - - break; - case PacketBuilder.HORSE_TACK_UNEQUIP: - if (sender.User.LastViewedHorse != null) - { - byte equipSlot = packet[2]; - switch(equipSlot) - { - case 0x31: // Saddle - if (sender.User.LastViewedHorse.Equipment.Saddle != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Saddle.Id)); - Database.ClearSaddle(sender.User.LastViewedHorse.RandomId); - sender.User.LastViewedHorse.Equipment.Saddle = null; - break; - case 0x32: // Saddle Pad - if (sender.User.LastViewedHorse.Equipment.SaddlePad != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.SaddlePad.Id)); - Database.ClearSaddlePad(sender.User.LastViewedHorse.RandomId); - sender.User.LastViewedHorse.Equipment.SaddlePad = null; - break; - case 0x33: // Bridle - if (sender.User.LastViewedHorse.Equipment.Bridle != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Bridle.Id)); - Database.ClearBridle(sender.User.LastViewedHorse.RandomId); - sender.User.LastViewedHorse.Equipment.Bridle = null; - break; - case 0x34: // Companion - if (sender.User.LastViewedHorse.Equipment.Companion != null) - sender.User.Inventory.AddIgnoringFull(new ItemInstance(sender.User.LastViewedHorse.Equipment.Companion.Id)); - Database.ClearCompanion(sender.User.LastViewedHorse.RandomId); - sender.User.LastViewedHorse.Equipment.Companion = null; - goto companionRemove; - default: - Logger.ErrorPrint("Unknown equip slot: " + equipSlot.ToString("X")); - break; - } - byte[] itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatUnEquipTackMessage(sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemUnequipedMessage); - - if(sender.User.CurrentlyRidingHorse != null) - { - if(sender.User.CurrentlyRidingHorse.RandomId == sender.User.LastViewedHorse.RandomId) - { - byte[] disMounted = PacketBuilder.CreateChat(Messages.FormatHorseDismountedBecauseTackedMessage(sender.User.CurrentlyRidingHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.Facing %= 5; - sender.User.CurrentlyRidingHorse = null; - sender.SendPacket(disMounted); - } - } - - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(sender.User.LastViewedHorse, sender.User)); - sender.SendPacket(metaPacket); - break; - companionRemove:; - itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatHorseCompanionRemoveMessage(sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemUnequipedMessage); - - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(sender.User.LastViewedHorse, sender.User)); - sender.SendPacket(metaPacket); - break; - - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to unequip items from non existnat horse"); - } - break; - case PacketBuilder.HORSE_DISMOUNT: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if(randomIdStr == "") // F7 Shortcut - { - if(sender.User.CurrentlyRidingHorse != null) - { - - byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(stopRidingHorseMessagePacket); - - StopRidingHorse(sender); - } - else - { - if(sender.User.HorseInventory.HorseIdExist(sender.User.LastRiddenHorse)) - StartRidingHorse(sender, sender.User.LastRiddenHorse); - } - break; - } - - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - - byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(stopRidingHorseMessagePacket); - - StopRidingHorse(sender); - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to dismount at a non existant horse."); - break; - } - break; - case PacketBuilder.HORSE_MOUNT: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - break; - } - if (sender.User.HorseInventory.HorseIdExist(randomId)) - { - StartRidingHorse(sender, randomId); - break; - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to mount at a non existant horse."); - break; - } - case PacketBuilder.HORSE_LOOK: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - HorseInstance horseInst; - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - return; - } - if(sender.User.HorseInventory.HorseIdExist(randomId)) - { - horseInst = sender.User.HorseInventory.GetHorseById(randomId); - UpdateHorseMenu(sender, horseInst); - } - else - { - try - { // Not your horse? possibly viewed inside a ranch? - horseInst = Database.GetPlayerHorse(randomId); - UpdateHorseMenu(sender, horseInst); - break; - } - catch(Exception) - { - Logger.HackerPrint(sender.User.Username + " Tried to look at a non existant horse."); - break; - } - } - - break; - case PacketBuilder.HORSE_ESCAPE: - if(WildHorse.DoesHorseExist(sender.User.CapturingHorseId)) - { - WildHorse capturing = WildHorse.GetHorseById(sender.User.CapturingHorseId); - sender.User.CapturingHorseId = 0; - - if (capturing.X == sender.User.X && capturing.Y == sender.User.Y) - { - capturing.Escape(); - Logger.InfoPrint(sender.User.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y); - - } - } - sender.User.MajorPriority = true; - byte[] hoseEscaped = PacketBuilder.CreateMeta(Meta.BuildHorseEscapedMessage()); - sender.SendPacket(hoseEscaped); - break; - case PacketBuilder.HORSE_CAUGHT: - if (WildHorse.DoesHorseExist(sender.User.CapturingHorseId)) - { - WildHorse capturing = WildHorse.GetHorseById(sender.User.CapturingHorseId); - sender.User.CapturingHorseId = 0; - - if (capturing.X == sender.User.X && capturing.Y == sender.User.Y) - { - try - { - capturing.Capture(sender.User); - } - catch (InventoryFullException) - { - byte[] chatMsg = PacketBuilder.CreateChat(Messages.TooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMsg); - break; - } - - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count++; - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 100) - sender.User.Awards.AddAward(Award.GetAwardById(24)); // Wrangler - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(25)); // Pro Wrangler - - Logger.InfoPrint(sender.User.Username + " Captured a: " + capturing.Instance.Breed.Name); - - sender.User.MajorPriority = true; - byte[] horseCaught = PacketBuilder.CreateMeta(Meta.BuildHorseCaughtMessage()); - sender.SendPacket(horseCaught); - - break; - } - } - sender.User.MajorPriority = true; - byte[] horseAllreadyCaught = PacketBuilder.CreateMeta(Meta.BuildHorseEscapedAnyway()); - sender.SendPacket(horseAllreadyCaught); - break; - case PacketBuilder.HORSE_TRY_CAPTURE: - randomId = 0; - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - try - { - randomId = int.Parse(randomIdStr); - - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); - return; - } - if (!WildHorse.DoesHorseExist(randomId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to catch a horse that doesnt exist."); - return; - } - - if(sender.User.HorseInventory.HorseList.Length >= sender.User.MaxHorses) - { - byte[] caughtTooManyHorses = PacketBuilder.CreateChat(Messages.HorseCatchTooManyHorsesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(caughtTooManyHorses); - return; - } - - sender.User.CapturingHorseId = randomId; - byte[] chatPacket = PacketBuilder.CreateChat(Messages.HorseCaptureTimer, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - byte[] swfModulePacket = PacketBuilder.CreateSwfModule("catchhorse", PacketBuilder.PACKET_SWF_MODULE_FORCE); - sender.SendPacket(swfModulePacket); - - break; - default: - Logger.DebugPrint("Unknown horse packet: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - } - - public static void OnDynamicInputReceived(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent dyamic input when not logged in."); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string dynamicInputStr = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if(dynamicInputStr.Contains("|")) - { - string[] dynamicInput = dynamicInputStr.Split('|'); - if(dynamicInput.Length >= 1) - { - int inputId = 0; - try - { - inputId = int.Parse(dynamicInput[0]); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input "); - return; - } - - switch(inputId) - { - case 1: // Bank - if (dynamicInput.Length >= 3) - { - Int64 moneyDeposited = 0; - Int64 moneyWithdrawn = 0; - try - { - moneyDeposited = Int64.Parse(dynamicInput[1]); - moneyWithdrawn = Int64.Parse(dynamicInput[2]); - } - catch (Exception) - { - Logger.ErrorPrint(sender.User.Username + " tried to deposit/witthdraw NaN money...."); - UpdateArea(sender); - break; - } - - // Check if trying to deposit more than can be held in the bank. - - if (Convert.ToInt64(sender.User.BankMoney) + moneyDeposited > 9999999999) - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.BankCantHoldThisMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - UpdateArea(sender); - break; - } - - // Check if trying to deposit more than 2.1B - - if (moneyWithdrawn > 2100000000) - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.BankYouCantHoldThisMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - UpdateArea(sender); - break; - } - - - if((moneyDeposited <= sender.User.Money) && moneyDeposited != 0) - { - sender.User.TakeMoney(Convert.ToInt32(moneyDeposited)); - sender.User.BankMoney += moneyDeposited; - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatDepositedMoneyMessage(Convert.ToInt32(moneyDeposited)), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - - if ((moneyWithdrawn <= sender.User.BankMoney) && moneyWithdrawn != 0) - { - sender.User.BankMoney -= moneyWithdrawn; - sender.User.AddMoney(Convert.ToInt32(moneyWithdrawn)); - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatWithdrawMoneyMessage(Convert.ToInt32(moneyWithdrawn)), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - - UpdateArea(sender); - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); - break; - } - case 2: // Send Mail - if(dynamicInput.Length >= 4) - { - string to = dynamicInput[1]; - string subject = dynamicInput[2]; - string message = dynamicInput[3]; - - if(sender.User.Money >= 3) - { - if(Database.CheckUserExist(to)) - { - int playerId = Database.GetUserid(to); - - sender.User.TakeMoney(3); - Mailbox.Mail mailMessage = new Mailbox.Mail(); - mailMessage.RandomId = RandomID.NextRandomId(); - mailMessage.FromUser = sender.User.Id; - mailMessage.ToUser = playerId; - mailMessage.Timestamp = Convert.ToInt32((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); - mailMessage.Read = false; - mailMessage.Subject = subject; - mailMessage.Message = message; - - if(IsUserOnline(playerId)) - { - User user = GetUserById(playerId); - user.MailBox.AddMail(mailMessage); - - byte[] BaseStatsPacketData = PacketBuilder.CreateMoneyPlayerCountAndMail(user.Money, GameServer.GetNumberOfPlayers(), user.MailBox.UnreadMailCount); - user.Client.SendPacket(BaseStatsPacketData); - } - else - { - Database.AddMail(mailMessage.RandomId, mailMessage.ToUser, mailMessage.FromUser, mailMessage.Subject, mailMessage.Message, mailMessage.Timestamp, mailMessage.Read); - } - - byte[] mailMessageSent = PacketBuilder.CreateChat(Messages.FormatCityHallSendMailMessage(to.ToLower()),PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(mailMessageSent); - - UpdateArea(sender); - } - else - { - byte[] userDontExistFormat = PacketBuilder.CreateChat(Messages.FormatCityHallCantFindPlayerMessage(to), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(userDontExistFormat); - } - } - - } - break; - case 3: // Add Item or Money to Trade - { - if (dynamicInput.Length >= 2) - { - if(sender.User.AttemptingToOfferItem == -1) // Money - { - string answer = dynamicInput[1]; - int amountMoney = -1; - try - { - amountMoney = int.Parse(answer); - } - catch (Exception) - { - byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooMuchMoney); - break; - } - if(amountMoney < 0) - { - Logger.ErrorPrint(sender.User.Username + " tried to trade less than 0$"); - } - if(amountMoney >= sender.User.Money) - { - byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooMuchMoney); - break; - } - - sender.User.TradingWith.MoneyOffered = amountMoney; - - UpdateArea(sender); - if(sender.User.TradingWith != null) - if (!sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); - break; - } - - - - if (Item.ItemIdExist(sender.User.AttemptingToOfferItem)) - { - string answer = dynamicInput[1]; - int itemCount = -1; - try - { - itemCount = int.Parse(answer); - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (Item TRADE, id is NaN)"); - } - - InventoryItem item = sender.User.Inventory.GetItemByItemId(sender.User.AttemptingToOfferItem); - - if (itemCount <= 0) - { - byte[] MustBeAtleast1 = PacketBuilder.CreateChat(Messages.TradeItemOfferAtleast1, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(MustBeAtleast1); - break; - } - if(itemCount > item.ItemInstances.Length) - { - byte[] TooMuchItems = PacketBuilder.CreateChat(Messages.FormatTradeItemOfferTooMuch(item.ItemInstances.Length, itemCount), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(TooMuchItems); - break; - } - - foreach(ItemInstance[] existingItems in sender.User.TradingWith.ItemsOffered) - { - if(existingItems[0].ItemId == sender.User.AttemptingToOfferItem) - { - sender.User.TradingWith.RemoveOfferedItems(existingItems); - break; - } - } - - - - ItemInstance[] items = new ItemInstance[itemCount]; - for (int i = 0; i < itemCount; i++) - { - items[i] = item.ItemInstances[i]; - } - sender.User.TradingWith.OfferItems(items); - - UpdateArea(sender); - if (sender.User.TradingWith != null) - if (!sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); - } - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (Item TRADE, wrong size)"); - break; - } - } - case 6: // Riddle Room - if (dynamicInput.Length >= 2) - { - if (sender.User.LastRiddle != null) - { - string answer = dynamicInput[1]; - if(sender.User.LastRiddle.CheckAnswer(sender.User, answer)) - sender.User.LastRiddle = null; - UpdateArea(sender); - } - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (LastRiddle, wrong size)"); - break; - } - case 5: // Horse Description - if (dynamicInput.Length >= 3) - { - if(sender.User.LastViewedHorse != null) - { - string desc = dynamicInput[2]; - string name = dynamicInput[1]; - name.Trim(); - desc.Trim(); - - if(name.Length > 50) - { - byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseNameTooLongPacket); - break; - } - - if (desc.Length > 250) - { - byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseNameTooLongPacket); - break; - } - - object filterReason = ChatMsg.FilterMessage(name); - if (filterReason != null) - { - byte[] msg = PacketBuilder.CreateChat(Messages.HorseNameViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - return; - } - - filterReason = ChatMsg.FilterMessage(desc); - if (filterReason != null) - { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; - byte[] msg = PacketBuilder.CreateChat(Messages.FormatHorseProfileBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - return; - } - - sender.User.MajorPriority = true; - sender.User.LastViewedHorse.Name = dynamicInput[1]; - sender.User.LastViewedHorse.Description = dynamicInput[2]; - byte[] horseProfileSavedPacket = PacketBuilder.CreateChat(Messages.FormatHorseSavedProfileMessage(sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseProfileSavedPacket); - UpdateHorseMenu(sender, sender.User.LastViewedHorse); - } - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); - break; - } - case 4: // NPC Search - if(dynamicInput.Length >= 2) - { - sender.User.MajorPriority = true; - string metaWindow = Meta.BuildNpcSearch(dynamicInput[1]); - byte[] metaPacket = PacketBuilder.CreateMeta(metaWindow); - sender.SendPacket(metaPacket); - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); - break; - } - case 7: // Private Notes - if (dynamicInput.Length >= 2) - { - sender.User.PrivateNotes = dynamicInput[1]; - UpdateStats(sender); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.PrivateNotesSavedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); - break; - } - case 10: // Change auto sell price - if (dynamicInput.Length >= 2) - { - if (sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - int newSellPrice = 0; - try - { - newSellPrice = int.Parse(dynamicInput[1]); - } - catch (Exception) - { - newSellPrice = 2147483647; // too high - } - - if(newSellPrice > 500000000 || newSellPrice < 0) - { - byte[] priceTooHigh = PacketBuilder.CreateChat(Messages.HorseAutoSellValueTooHigh, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(priceTooHigh); - break; - } - byte[] sellPricePacket; - if (newSellPrice > 0) - sellPricePacket = PacketBuilder.CreateChat(Messages.FormatAutoSellConfirmedMessage(newSellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); - else - sellPricePacket = PacketBuilder.CreateChat(Messages.HorseAutoSellRemoved, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(sellPricePacket); - horseInstance.AutoSell = newSellPrice; - - UpdateHorseMenu(sender, sender.User.LastViewedHorse); - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (autosell, wrong size)"); - break; - } - break; - case 11: // Ranch Description Edit - if (dynamicInput.Length >= 2) - { - string title = dynamicInput[1]; - string desc = dynamicInput[2]; - if(sender.User.OwnedRanch != null) - { - title.Trim(); - desc.Trim(); - if(title.Length > 100) - { - byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooLongPacket); - break; - } - if (desc.Length > 4000) - { - byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooLongPacket); - break; - } - - object filterReason = ChatMsg.FilterMessage(title); - if (filterReason != null) - { - byte[] msg = PacketBuilder.CreateChat(Messages.RanchSavedTitleViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - return; - } - - filterReason = ChatMsg.FilterMessage(desc); - if (filterReason != null) - { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; - byte[] msg = PacketBuilder.CreateChat(Messages.FormatRanchDesriptionBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - return; - } - - - sender.User.OwnedRanch.Title = title; - sender.User.OwnedRanch.Description = desc; - } - byte[] descriptionEditedMessage = PacketBuilder.CreateChat(Messages.RanchSavedRanchDescripton, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(descriptionEditedMessage); - - /* - * Pinto bug: Saving ranch description will take you to the STATS menu - * instead of just back to your ranch. - */ - - if (ConfigReader.FixOfficalBugs) - UpdateArea(sender); - else - UpdateStats(sender); - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (ranch description, wrong size)"); - break; - } - break; - case 12: // Abuse Report - if (dynamicInput.Length >= 2) - { - string userName = dynamicInput[1]; - string reason = dynamicInput[2]; - if(Database.CheckUserExist(userName)) - { - if(reason == "") - { - byte[] validReasonPlz = PacketBuilder.CreateChat(Messages.AbuseReportProvideValidReason, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(validReasonPlz); - break; - } - - Database.AddReport(sender.User.Username, userName, reason); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.AbuseReportFiled, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - UpdateArea(sender); - break; - } - else - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAbuseReportPlayerNotFound(userName), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - break; - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); - break; - } - case 13: // Libary Ranch Search - if (dynamicInput.Length >= 2) - { - string searchQuery = dynamicInput[1]; - sender.User.MajorPriority = true; - byte[] serachResponse = PacketBuilder.CreateMeta(Meta.BuildRanchSearchResults(searchQuery)); - sender.SendPacket(serachResponse); - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); - break; - } - case 14: - if(dynamicInput.Length >= 1) - { - string password = dynamicInput[1]; - // Get current tile - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code != null) - { - if (tile.Code.StartsWith("PASSWORD-")) - { - string[] args = tile.Code.Replace("!", "-").Split('-'); - if (args.Length >= 3) - { - string expectedPassword = args[1]; - int questId = int.Parse(args[2]); - if (password.ToLower() == expectedPassword.ToLower()) - { - Quest.CompleteQuest(sender.User, Quest.GetQuestById(questId), false); - } - else - { - Quest.QuestResult result = Quest.FailQuest(sender.User, Quest.GetQuestById(questId), true); - if (result.NpcChat == null || result.NpcChat == "") - result.NpcChat = Messages.IncorrectPasswordMessage; - byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ChatPacket); - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Send invalid password input request. (Too few arguments!)"); - break; - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Send password input request. (Not on password tile!)"); - break; - } - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Sent a password while not in a special tile."); - break; - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid password request, (wrong size)"); - break; - } - - break; - case 15: // Real Time Quiz - if (dynamicInput.Length >= 2) - { - if(QuizEvent != null) - { - if (sender.User.InRealTimeQuiz) - { - RealTimeQuiz.Participent participent = QuizEvent.JoinEvent(sender.User); - string answer = dynamicInput[1]; - participent.CheckAnswer(answer); - } - } - break; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (RealTimeQuiz, wrong size)"); - break; - } - default: - Logger.ErrorPrint("Unknown dynamic input: " + inputId.ToString() + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - - - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (wrong size)"); - return; - } - } - - - } - - public static void OnPlayerInfoPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requests player info when not logged in."); - return; - } - if(packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent playerinfo packet of wrong size"); - } - - byte method = packet[1]; - switch(method) - { - case PacketBuilder.PLAYERINFO_PLAYER_LIST: - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.User)); - sender.SendPacket(metaPacket); - break; - } - - } - public static void OnDynamicButtonPressed(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Clicked dynamic button when not logged in."); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string buttonIdStr = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - switch(buttonIdStr) - { - case "2": // Compose Mail - if(sender.User.Money <= 3) - { - byte[] cantAffordPostage = PacketBuilder.CreateChat(Messages.CityHallCantAffordPostageMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordPostage); - break; - } - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildComposeMailMenu()); - sender.SendPacket(metaPacket); - break; - case "3": // Quest Log - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildQuestLog(sender.User)); - sender.SendPacket(metaPacket); - break; - case "4": // View Horse Breeds - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseBreedListLibary()); - sender.SendPacket(metaPacket); - break; - case "5": // Back to horse - if (sender.User.LastViewedHorse != null) - UpdateHorseMenu(sender, sender.User.LastViewedHorse); - break; - case "6": // Equip companion - if (sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(horseInstance,sender.User)); - sender.SendPacket(metaPacket); - } - break; - case "7": // TP To nearest wagon (ranch) - if(sender.User.OwnedRanch != null) - { - if(sender.User.OwnedRanch.GetBuildingCount(7) > 0) // Wagon - { - int ranchX = sender.User.OwnedRanch.X; - int ranchY = sender.User.OwnedRanch.Y; - - double smallestDistance = Double.PositiveInfinity; - int smalestTransportPointId = 0; - for (int i = 0; i < Transport.TransportPoints.Count; i++) - { - Transport.TransportPoint tpPoint = Transport.TransportPoints[i]; - - if(Transport.GetTransportLocation(tpPoint.Locations[0]).Type == "WAGON") // is wagon? - { - double distance = Helper.PointsToDistance(ranchX, ranchY, tpPoint.X, tpPoint.Y); - if(distance < smallestDistance) - { - smallestDistance = distance; - smalestTransportPointId = i; - } - } - } - Transport.TransportPoint newPoint = Transport.TransportPoints[smalestTransportPointId]; - - int newX = newPoint.X; - int newY = newPoint.Y; - - if (World.InSpecialTile(newX, newY)) - { - World.SpecialTile tile = World.GetSpecialTile(newX, newY); - if (tile.ExitX != 0) - newX = tile.ExitX; - if (tile.ExitY != 0) - newY = tile.ExitY; - } - - byte[] transported = PacketBuilder.CreateChat(Messages.RanchWagonDroppedYouOff, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(transported); - sender.User.Teleport(newX, newY); - } - } - break; - case "8": - if(sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseReleaseConfirmationMessage(horseInstance)); - sender.SendPacket(metaPacket); - } - break; - case "9": // View Tack (Libary) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackLibary()); - sender.SendPacket(metaPacket); - break; - case "10": // View Companions (Libary) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildCompanionLibary()); - sender.SendPacket(metaPacket); - break; - case "11": // Randomize horse name - if (sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - horseInstance.ChangeNameWithoutUpdatingDatabase(HorseInfo.GenerateHorseName()); - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseDescriptionEditMeta(horseInstance)); - sender.SendPacket(metaPacket); - } - break; - case "12": // View Minigames (Libary) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigamesLibary()); - sender.SendPacket(metaPacket); - break; - case "13": // Train All (Ranch) - if (sender.User.OwnedRanch != null) - { - if(sender.User.OwnedRanch.GetBuildingCount(6) > 0) // Training Pen - { - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchTraining(sender.User)); - sender.SendPacket(metaPacket); - } - } - break; - case "14": // Most Valued Ranches - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMostValuedRanches()); - sender.SendPacket(metaPacket); - break; - case "15": // Most Richest Players - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRichestPlayers()); - sender.SendPacket(metaPacket); - break; - case "16": // Most Adventurous Players - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAdventurousPlayers()); - sender.SendPacket(metaPacket); - break; - case "17": // Most Experienced Players - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildExperiencedPlayers()); - sender.SendPacket(metaPacket); - break; - case "18": // Best Minigame Players - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigamePlayers()); - sender.SendPacket(metaPacket); - break; - case "19": // Most Experienced Horses - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMostExperienedHoses()); - sender.SendPacket(metaPacket); - break; - case "20": // Minigame Rankings - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigameRankingsForUser(sender.User)); - sender.SendPacket(metaPacket); - break; - case "21": // Private Notes - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPrivateNotes(sender.User)); - sender.SendPacket(metaPacket); - break; - case "22": // View Locations (Libary) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildLocationsLibary()); - sender.SendPacket(metaPacket); - break; - case "23": // View Awards (Libary) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAwardsLibary()); - sender.SendPacket(metaPacket); - break; - case "26": // Buy Horse (Auto Sell) - if(sender.User.LastViewedHorseOther != null) - { - bool isOnRanch = false; - bool isOnPlayer = false; - HorseInstance horseToSell = sender.User.LastViewedHorseOther; - if (Ranch.GetOwnedRanch(horseToSell.Owner)) - { - Ranch ranch = Ranch.GetRanchOwnedBy(horseToSell.Owner); - if(sender.User.X == ranch.X && sender.User.Y == ranch.Y) - { - isOnRanch = true; - } - - } - if(GameServer.IsUserOnline(horseToSell.Owner)) - { - User user = GameServer.GetUserById(horseToSell.Owner); - if (user.X == sender.User.X && user.Y == sender.User.Y) - { - isOnPlayer = true; - } - } - - if (isOnRanch || isOnPlayer) - { - - if (horseToSell.AutoSell == 0) - break; - if(sender.User.Money >= horseToSell.AutoSell) - { - if (sender.User.HorseInventory.HorseList.Length + 1 > sender.User.MaxHorses) - { - byte[] tooManyHorses = PacketBuilder.CreateChat(Messages.AutoSellTooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooManyHorses); - break; - } - - sender.User.TakeMoney(horseToSell.AutoSell); - - if (IsUserOnline(horseToSell.Owner)) - { - User seller = GetUserById(horseToSell.Owner); - seller.HorseInventory.DeleteHorse(horseToSell, false); - seller.AddMoney(horseToSell.AutoSell); - - byte[] horseBrought = PacketBuilder.CreateChat(Messages.FormatAutoSellSold(horseToSell.Name, horseToSell.AutoSell, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - seller.Client.SendPacket(horseBrought); - } - else - { - Database.AddMessageToQueue(horseToSell.Owner, Messages.FormatAutoSellSoldOffline(horseToSell.Name, horseToSell.AutoSell, sender.User.Username)); - try - { - Database.SetPlayerMoney((Database.GetPlayerMoney(horseToSell.Owner) + horseToSell.AutoSell), horseToSell.Owner); - } - catch (OverflowException) - { - Database.SetPlayerMoney(2147483647, horseToSell.Owner); - } - } - - horseToSell.Owner = sender.User.Id; - horseToSell.AutoSell = 0; - sender.User.HorseInventory.AddHorse(horseToSell, false); - - byte[] success = PacketBuilder.CreateChat(Messages.FormatAutoSellSuccess(horseToSell.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(success); - - UpdateArea(sender); - break; - } - else - { - byte[] noMoney = PacketBuilder.CreateChat(Messages.AutoSellInsufficentFunds, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(noMoney); - break; - } - - } - else - { - byte[] notInRightPlace = PacketBuilder.CreateChat(Messages.AutoSellNotStandingInSamePlace, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notInRightPlace); - break; - } - - - } - break; - case "24": // Award List - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAwardList(sender.User)); - sender.SendPacket(metaPacket); - break; - case "27": // Ranch Edit - if(sender.User.OwnedRanch != null) - { - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchEdit(sender.User.OwnedRanch)); - sender.SendPacket(metaPacket); - } - break; - case "29": // Auto Sell Horses - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildTopAutoSellHorses()); - sender.SendPacket(metaPacket); - break; - case "31": - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchSearchLibary()); - sender.SendPacket(metaPacket); - break; - case "35": // Buddy List - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildBuddyList(sender.User)); - sender.SendPacket(metaPacket); - break; - case "36": // Nearby list - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildNearbyList(sender.User)); - sender.SendPacket(metaPacket); - break; - case "37": // All Players List - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerList(sender.User)); - sender.SendPacket(metaPacket); - break; - case "40": // All Players Alphabetical - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListAlphabetical(sender.User)); - sender.SendPacket(metaPacket); - break; - case "30": // Find NPC - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildFindNpcMenu()); - sender.SendPacket(metaPacket); - break; - case "25": // Set auto sell price - if (sender.User.LastViewedHorse != null) - { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAutoSellMenu(horseInstance)); - sender.SendPacket(metaPacket); - } - break; - case "33": // View All stats (Horse) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAllBasicStats(sender.User)); - sender.SendPacket(metaPacket); - break; - case "34": // View Basic stats (Horse) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAllStats(sender.User)); - sender.SendPacket(metaPacket); - break; - case "38": // Read Books - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildBooksLibary()); - sender.SendPacket(metaPacket); - break; - case "41": // Put horse into auction - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAuctionHorseList(sender.User)); - sender.SendPacket(metaPacket); - break; - case "47": - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderBreedList()); - sender.SendPacket(metaPacket); - break; - case "53": // Misc Stats / Tracked Items - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMiscStats(sender.User)); - sender.SendPacket(metaPacket); - break; - case "58": // Add new item to trade - if(sender.User.TradingWith != null) - { - sender.User.TradeMenuPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildTradeAdd(sender.User.TradingWith)); - sender.SendPacket(metaPacket); - } - break; - case "59": // Done - if (sender.User.TradingWith != null) - { - sender.User.TradingWith.Stage = "DONE"; - - if (sender.User.TradingWith != null) - if (sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); - UpdateArea(sender); - - } - break; - case "60": // Ranch Sell - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchSellConfirmation()); - sender.SendPacket(metaPacket); - break; - case "61": // Most Spoiled Horse - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildMostSpoiledHorses()); - sender.SendPacket(metaPacket); - break; - case "28c1": // Abuse Report - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAbuseReportPage()); - sender.SendPacket(metaPacket); - break; - case "52c1": // Horse set to KEEPER - string category = "KEEPER"; - goto setCategory; - case "52c2": // Horse set to TRAINING - category = "TRAINING"; - goto setCategory; - case "52c3": // Horse set to TRADING - category = "TRADING"; - goto setCategory; - case "52c4": // Horse set to RETIRED - category = "RETIRED"; - goto setCategory; - setCategory:; - if (sender.User.LastViewedHorse != null) - { - sender.User.LastViewedHorse.Category = category; - byte[] categoryChangedPacket = PacketBuilder.CreateChat(Messages.FormatHorseSetToNewCategory(category), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(categoryChangedPacket); - - sender.User.MajorPriority = true; - UpdateHorseMenu(sender, sender.User.LastViewedHorse); - } - break; - - default: - if(buttonIdStr.StartsWith("39c")) // Book Read - { - string idStr = buttonIdStr.Substring(3); - int bookId = -1; - try - { - bookId = int.Parse(idStr); - } - catch (FormatException) - { - Logger.DebugPrint(sender.User.Username + " Tried to read a book of id NaN"); - break; - }; - - if(Book.BookExists(bookId)) - { - Book book = Book.GetBookById(bookId); - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildBookReadLibary(book)); - sender.SendPacket(metaPacket); - } - else - { - Logger.HackerPrint(sender.User.Username + "Tried to read a book that doesnt exist."); - } - break; - } - if (buttonIdStr.StartsWith("32c")) // Horse Whisperer - { - string idStr = buttonIdStr.Substring(3); - int breedId = -1; - try - { - breedId = int.Parse(idStr); - } - catch (FormatException) - { - Logger.DebugPrint(sender.User.Username + " Tried to whisper a horse with BreedId NaN."); - break; - }; - - if (sender.User.Money < 50000) - { - byte[] cannotAffordMessage = PacketBuilder.CreateChat(Messages.WhispererServiceCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cannotAffordMessage); - break; - } - - List horsesFound = new List(); - foreach (WildHorse horse in WildHorse.WildHorses) - { - if (horse.Instance.Breed.Id == breedId) - { - horsesFound.Add(horse); - } - } - int cost = 0; - if (horsesFound.Count >= 1) - { - cost = 50000; - } - else - { - cost = 10000; - } - sender.User.MajorPriority = true; - - byte[] pricingMessage = PacketBuilder.CreateChat(Messages.FormatWhispererPrice(cost), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(pricingMessage); - - byte[] serachResultMeta = PacketBuilder.CreateMeta(Meta.BuildWhisperSearchResults(horsesFound.ToArray())); - sender.SendPacket(serachResultMeta); - - sender.User.TakeMoney(cost); - break; - } - else if (buttonIdStr.StartsWith("4c")) // Libary Breed Search - { - string idStr = buttonIdStr.Substring(2); - int breedId = -1; - HorseInfo.Breed horseBreed; - try - { - breedId = int.Parse(idStr); - horseBreed = HorseInfo.GetBreedById(breedId); - } - catch (Exception) - { - Logger.DebugPrint(sender.User.Username + " Sent invalid libary breed viewer request."); - break; - }; - sender.User.MajorPriority = true; - string metaTag = Meta.BuildBreedViewerLibary(horseBreed); - metaPacket = PacketBuilder.CreateMeta(metaTag); - sender.SendPacket(metaPacket); - - string swf = "breedviewer.swf?terrain=book&breed=" + horseBreed.Swf + "&j="; - byte[] loadSwf = PacketBuilder.CreateSwfModule(swf, PacketBuilder.PACKET_SWF_MODULE_FORCE); - sender.SendPacket(loadSwf); - - break; - - } - else if (buttonIdStr.StartsWith("50c")) - { - string gender = buttonIdStr.Substring(3); - if (sender.User.PawneerOrderBreed != null) - { - if (sender.User.PawneerOrderBreed.GenderTypes().Contains(gender)) - { - if (sender.User.Inventory.HasItemId(Item.PawneerOrder)) - { - sender.User.PawneerOrderGender = gender; - - HorseInstance horseInstance = new HorseInstance(sender.User.PawneerOrderBreed); - horseInstance.Color = sender.User.PawneerOrderColor; - horseInstance.Gender = sender.User.PawneerOrderGender; - horseInstance.Name = "Pawneer Order"; - - sender.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(Item.PawneerOrder).ItemInstances[0]); - sender.User.HorseInventory.AddHorse(horseInstance, true, true); - - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderFound(horseInstance)); - sender.SendPacket(metaPacket); - break; - } - } - } - Logger.ErrorPrint(sender.User.Username + " Error occured when doing a Pawneer Order."); - break; - } - else if (buttonIdStr.StartsWith("49c")) - { - string color = buttonIdStr.Substring(3); - if (sender.User.PawneerOrderBreed != null) - { - if (sender.User.PawneerOrderBreed.Colors.Contains(color)) - { - sender.User.PawneerOrderColor = color; - - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderGenderList(sender.User.PawneerOrderBreed, color)); - sender.SendPacket(metaPacket); - break; - } - } - Logger.ErrorPrint(sender.User.Username + " Asked for a horse of an unknown color " + color); - break; - } - else if (buttonIdStr.StartsWith("48c")) // Pawneer Order Breed Select - { - string idStr = buttonIdStr.Substring(3); - int breedId = -1; - HorseInfo.Breed breed; - try - { - breedId = int.Parse(idStr); - breed = HorseInfo.GetBreedById(breedId); - } - catch (Exception) - { - Logger.DebugPrint(sender.User.Username + " Tried to pawner order a horse with id NaN."); - break; - } - sender.User.PawneerOrderBreed = breed; - - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderColorList(breed)); - sender.SendPacket(metaPacket); - break; - } - else if (buttonIdStr.StartsWith("43c")) // Pawn Horse Confirm - { - string idStr = buttonIdStr.Substring(3); - int horseId = -1; - try - { - horseId = int.Parse(idStr); - } - catch (FormatException) - { - Logger.DebugPrint(sender.User.Username + " Tried to pawn a horse with id NaN."); - break; - } - - if (sender.User.HorseInventory.HorseIdExist(horseId)) - { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); - int price = Pawneer.CalculateTotalPrice(inst); - string name = inst.Name; - - sender.User.HorseInventory.DeleteHorse(inst); // 1000% a "distant land.." - sender.User.LastViewedHorse = null; - - sender.User.AddMoney(price); - byte[] soldHorseMessage = PacketBuilder.CreateChat(Messages.FormatPawneerSold(name, price), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(soldHorseMessage); - - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count++; - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 100) - sender.User.Awards.AddAward(Award.GetAwardById(44)); // Vendor - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(45)); // Pro Vendor - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(52)); // Top Vendor - - UpdateArea(sender); - - break; - } - else - { - byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantFindHorse); - } - break; - } - else if (buttonIdStr.StartsWith("51c")) // Pawn Horse - { - string idStr = buttonIdStr.Substring(3); - int horseId = -1; - try - { - horseId = int.Parse(idStr); - } - catch (FormatException) - { - Logger.DebugPrint(sender.User.Username + " Tried to pawn a horse with id NaN."); - break; - } - - if (sender.User.HorseInventory.HorseIdExist(horseId)) - { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); - - sender.User.MajorPriority = true; - byte[] confirmScreen = PacketBuilder.CreateMeta(Meta.BuildPawneerConfimation(inst)); - sender.SendPacket(confirmScreen); - break; - } - else - { - byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantFindHorse); - } - break; - } - else if (buttonIdStr.StartsWith("42c")) - { - string idStr = buttonIdStr.Substring(3); - int horseId = -1; - try - { - horseId = int.Parse(idStr); - } - catch (FormatException) - { - Logger.DebugPrint(sender.User.Username + " Tried to auction a horse with id NaN."); - break; - } - if (sender.User.HorseInventory.HorseIdExist(horseId)) - { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); - - if(World.InSpecialTile(sender.User.X, sender.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); - if(tile.Code == null || !tile.Code.StartsWith("AUCTION-")) - { - Logger.ErrorPrint("Cant find auction room that " + sender.User.Username + " Is trying to place a horse in."); - return; - } - Auction auctionRoom = Auction.GetAuctionRoomById(int.Parse(tile.Code.Split('-')[1])); - if(auctionRoom.HasUserPlacedAuctionAllready(sender.User)) - { - byte[] cantPlaceAuction = PacketBuilder.CreateChat(Messages.AuctionOneHorsePerPlayer, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantPlaceAuction); - break; - } - if (sender.User.Money >= 1000) - { - sender.User.TakeMoney(1000); - Auction.AuctionEntry entry = new Auction.AuctionEntry(8, 0, sender.User.Id); - entry.Horse = inst; - entry.OwnerId = sender.User.Id; - entry.Completed = false; - inst.Hidden = true; - auctionRoom.AddEntry(entry); - UpdateArea(sender); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - break; - } - else - { - byte[] cantAffordAuctionMsg = PacketBuilder.CreateChat(Messages.AuctionCantAffordAuctionFee, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordAuctionMsg); - } - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to auction a horse they did not have."); - break; - } - } - if (Leaser.LeaserButtonIdExists(buttonIdStr)) - { - Leaser horseLeaser = Leaser.GetLeaserByButtonId(buttonIdStr); - - if(sender.User.Money >= horseLeaser.Price) - { - if(sender.User.HorseInventory.HorseList.Length + 1 > sender.User.MaxHorses) - { - byte[] cantManageHorses = PacketBuilder.CreateChat(Messages.HorseLeaserHorsesFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantManageHorses); - break; - } - else - { - sender.User.MajorPriority = true; - sender.User.TakeMoney(horseLeaser.Price); - - HorseInstance leaseHorse = horseLeaser.GenerateLeaseHorse(); - - if(leaseHorse.Breed.Id == 170) // UniPeg - { - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnipegTeamup).Count++; - if(sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnipegTeamup).Count >= 5) - sender.User.Awards.AddAward(Award.GetAwardById(55)); // UniPeg Friend - } - else if(leaseHorse.Breed.Type == "unicorn") - { - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnicornTeamup).Count++; - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnicornTeamup).Count >= 5) - sender.User.Awards.AddAward(Award.GetAwardById(42)); // Unicorn Friend - } - else if(leaseHorse.Breed.Type == "pegasus") - { - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PegasusTeamup).Count++; - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PegasusTeamup).Count >= 5) - sender.User.Awards.AddAward(Award.GetAwardById(43)); // Pegasus Friend - } - - sender.User.HorseInventory.AddHorse(leaseHorse); - - byte[] addedHorseMeta = PacketBuilder.CreateMeta(Meta.BuildLeaserOnLeaseInfo(horseLeaser)); - sender.SendPacket(addedHorseMeta); - - byte[] addedNewTempHorseMessage = PacketBuilder.CreateChat(Messages.HorseLeaserTemporaryHorseAdded, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(addedNewTempHorseMessage); - break; - - } - } - else - { - byte[] cantAffordLease = PacketBuilder.CreateChat(Messages.HorseLeaserCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordLease); - break; - } - - } - if(AbuseReport.DoesReasonExist(buttonIdStr)) - { - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(AbuseReport.GetReasonById(buttonIdStr).Meta); - sender.SendPacket(metaPacket); - break; - } - - Logger.ErrorPrint("Dynamic button #" + buttonIdStr + " unknown... Packet Dump: "+BitConverter.ToString(packet).Replace("-", " ")); - break; - } - } - public static void OnArenaScored(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); - return; - } - if(packet.Length <= 2) - { - Logger.ErrorPrint(sender.User.Username + "Sent invalid Arena Scored Packet."); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string scoreStr = packetStr.Substring(1, (packet.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int score = -1; - try - { - score = int.Parse(scoreStr); - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Scored NAN in an arena."); - return; - } - - if(Arena.UserHasEnteredHorseInAnyArena(sender.User)) - { - byte[] waitingOnResults = PacketBuilder.CreateChat(Messages.FormatArenaYourScore(score), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(waitingOnResults); - - Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.User); - enteredArena.SubmitScore(sender.User, score); - } - else - { - Logger.ErrorPrint(sender.User.Username + " Scored in an arena while not in one"); - } - return; - - } - public static void OnUserInfoRequest(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); - return; - } - - // Prevent duplicate requests. - if (sender.User.UserInfoSend) - return; - - sender.User.UserInfoSend = true; - - // This allows the website to view that the player is online. - Database.AddOnlineUser(sender.User.Id, sender.User.Administrator, sender.User.Moderator, sender.User.Subscribed, sender.User.NewPlayer); - - Logger.DebugPrint(sender.User.Username + " Requested user information."); - User user = sender.User; - - // Send player current location & map data - byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); - sender.SendPacket(MovementPacket); - - // Send "Welcome to the Secret Land of Horses" message. - byte[] WelcomeMessage = PacketBuilder.CreateChat(Messages.FormatWelcomeMessage(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(WelcomeMessage); - - // Send weather effects, and current server time. - byte[] WorldData = PacketBuilder.CreateTimeAndWeatherUpdate(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, sender.User.GetWeatherSeen()); - sender.SendPacket(WorldData); - - // if the player is logging in for the first time, send Welcome newest rider of Horse Isle message. - if (sender.User.NewPlayer) - { - byte[] NewUserMessage = PacketBuilder.CreateChat(Messages.NewUserMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(NewUserMessage); - } - - // Send Security Codes, used (badly) to verify Minigame Rewards - byte[] SecCodePacket = PacketBuilder.CreateSecCode(user.SecCodeSeeds, user.SecCodeInc, user.Administrator, user.Moderator); - sender.SendPacket(SecCodePacket); - - // Send player money count, total players and total unread mail. - byte[] BaseStatsPacketData = PacketBuilder.CreateMoneyPlayerCountAndMail(user.Money, GameServer.GetNumberOfPlayers(), user.MailBox.UnreadMailCount); - sender.SendPacket(BaseStatsPacketData); - - // Sends Meta Window information (Nearby, current tile, etc) - UpdateArea(sender); - - /* - * Send all nearby players locations to the client - * if there not nearby, say there at 1000,1000. - */ - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (client.User.Id != user.Id) - { - if(IsOnScreen(client.User.X, client.User.Y, sender.User.X, sender.User.Y)) - { - byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(client.User.X, client.User.Y, client.User.Facing, client.User.CharacterId, client.User.Username); - sender.SendPacket(PlayerInfo); - } - else - { - byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000+4, 1000+1, client.User.Facing, client.User.CharacterId, client.User.Username); - sender.SendPacket(PlayerInfo); - } - } - } - } - - /* - * Update all nearby users - * that the new player logged in. - */ - foreach (User nearbyUser in GameServer.GetNearbyUsers(sender.User.X, sender.User.Y, false, false)) - if (nearbyUser.Id != sender.User.Id) - if(!nearbyUser.MajorPriority) - if(!nearbyUser.MinorPriority) - UpdateArea(nearbyUser.Client); - - /* - * Send a list of isles, towns and areas to the player - * This is used for the world map. - */ - - byte[] IsleData = PacketBuilder.CreatePlaceData(World.Isles.ToArray(), World.Towns.ToArray(), World.Areas.ToArray()); - sender.SendPacket(IsleData); - - // Tells the client which tiles are passable, which the player should appear ontop of and which it should be below. - byte[] TileFlags = PacketBuilder.CreateTileOverlayFlags(Map.OverlayTileDepth); - sender.SendPacket(TileFlags); - - // Send Todays Note: - byte[] MotdData = PacketBuilder.CreateMotd(Messages.FormatMotd(ConfigReader.Motd)); - sender.SendPacket(MotdData); - - // Send riddle annoucement - if (RiddleEvent != null) - if (RiddleEvent.Active) - RiddleEvent.ShowStartMessage(sender); - - /* - * Gives Queued Items - * When you buy a PO from the store on the website - * its added to this queued items list. - */ - DoItemPurchases(sender); - - // Send Queued Messages - string[] queuedMessages = Database.GetMessageQueue(sender.User.Id); - foreach(string queuedMessage in queuedMessages) - { - byte[] msg = PacketBuilder.CreateChat(Messages.MessageQueueHeader+queuedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - } - Database.ClearMessageQueue(sender.User.Id); - - // Send "Playername Logged in" message - byte[] loginMessageBytes = PacketBuilder.CreateChat(Messages.FormatLoginMessage(sender.User.Username), PacketBuilder.CHAT_BOTTOM_LEFT); - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - if (!client.User.MuteLogins && !client.User.MuteAll) - if (client.User.Id != sender.User.Id) - client.SendPacket(loginMessageBytes); - - - /* - * Send players nearby to you - * your position, otherwise just send 1000,1000 - */ - byte[] yourPlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(sender.User.X, sender.User.Y, sender.User.Facing, sender.User.CharacterId, sender.User.Username); - byte[] yourPlayerInfoOffscreen = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, sender.User.Facing, sender.User.CharacterId, sender.User.Username); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (client.User.Id != sender.User.Id) - { - if (IsOnScreen(client.User.X, client.User.Y, sender.User.X, sender.User.Y)) - client.SendPacket(yourPlayerInfo); - else - client.SendPacket(yourPlayerInfoOffscreen); - } - } - } - - } - - public static void OnSwfModuleCommunication(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " tried to send swf communication when not logged in."); - return; - } - if (packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid swf commmunication Packet"); - return; - } - - - byte module = packet[1]; - switch(module) - { - case PacketBuilder.SWFMODULE_INVITE: - if(packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid 2PLAYER INVITE Packet (WRONG SIZE)"); - break; - } - string packetStr = Encoding.UTF8.GetString(packet); - string playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (Exception) { }; - - if(IsUserOnline(playerId)) - { - User toInvite = GetUserById(playerId); - TwoPlayer twoPlayerGame = new TwoPlayer(toInvite, sender.User, false); - } - break; - case PacketBuilder.SWFMODULE_ACCEPT: - if (packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid 2PLAYER ACCEPT Packet (WRONG SIZE)"); - break; - } - packetStr = Encoding.UTF8.GetString(packet); - playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - playerId = -1; - try - { - playerId = int.Parse(playerIdStr); - } - catch (Exception) { }; - - if (IsUserOnline(playerId)) - { - User toAccept = GetUserById(playerId); - if(TwoPlayer.IsPlayerInvitingPlayer(toAccept, sender.User)) - { - TwoPlayer twoPlayerGame = TwoPlayer.GetGameInvitingPlayer(toAccept, sender.User); - twoPlayerGame.Accept(sender.User); - } - } - break; - case PacketBuilder.SWFMODULE_DRAWINGROOM: - if(packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM packet (swf communication, WRONG SIZE)"); - break; - } - if(packet[2] == PacketBuilder.DRAWINGROOM_GET_DRAWING) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); - break; - } - int roomId = packet[3] - 40; - Drawingroom room; - try - { - room = Drawingroom.GetDrawingRoomById(roomId); - } - catch(KeyNotFoundException) - { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); - break; - } - - if(room.Drawing != "") - { - byte[] drawingPacket = PacketBuilder.CreateDrawingUpdate(room.Drawing); - sender.SendPacket(drawingPacket); - } - - } - else if(packet[2] == PacketBuilder.DRAWINGROOM_SAVE) - { - if (packet.Length < 4) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); - break; - } - - /* - * The lack of an if case for if the user isnt subscribed - * is NOT a bug thats just how pinto does it. - * you can save but not load if your subscribed. weird huh? - */ - - int roomId = packet[3] - 40; - Drawingroom room; - try - { - room = Drawingroom.GetDrawingRoomById(roomId); - } - catch (KeyNotFoundException) - { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); - break; - } - - if (!Database.SavedDrawingsExist(sender.User.Id)) - Database.CreateSavedDrawings(sender.User.Id); - - int slotNo = 0; - byte slot = packet[4]; - switch (slot) - { - case 0x29: // Slot 1 - Database.SaveDrawingSlot1(sender.User.Id, room.Drawing); - slotNo = 1; - break; - case 0x2A: // Slot 2 - Database.SaveDrawingSlot2(sender.User.Id, room.Drawing); - slotNo = 2; - break; - case 0x2B: // Slot 3 - Database.SaveDrawingSlot3(sender.User.Id, room.Drawing); - slotNo = 3; - break; - } - - byte[] savedDrawingMessage = PacketBuilder.CreateChat(Messages.FormatDrawingRoomSaved(slotNo), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(savedDrawingMessage); - - break; - } - else if (packet[2] == PacketBuilder.DRAWINGROOM_LOAD) - { - if (packet.Length < 4) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); - break; - } - - if(!sender.User.Subscribed) - { - byte[] notSubscribedCantLoad = PacketBuilder.CreateChat(Messages.DrawingCannotLoadNotSubscribed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notSubscribedCantLoad); - break; - } - - int roomId = packet[3] - 40; - Drawingroom room; - try{ - room = Drawingroom.GetDrawingRoomById(roomId); - } - catch (KeyNotFoundException){ - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); - break; - } - - if (!Database.SavedDrawingsExist(sender.User.Id)) - Database.CreateSavedDrawings(sender.User.Id); - - int slotNo = 0; - byte slot = packet[4]; - string drawingToAdd = ""; - switch (slot) - { - case 0x29: // Slot 1 - drawingToAdd = Database.LoadDrawingSlot1(sender.User.Id); - slotNo = 1; - break; - case 0x2A: // Slot 2 - drawingToAdd = Database.LoadDrawingSlot2(sender.User.Id); - slotNo = 2; - break; - case 0x2B: // Slot 3 - drawingToAdd = Database.LoadDrawingSlot3(sender.User.Id); - slotNo = 3; - break; - } - - try { - room.Drawing += drawingToAdd; - } - catch(DrawingroomFullException){ - byte[] roomFullMessage = PacketBuilder.CreateChat(Messages.DrawingPlzClearLoad, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(roomFullMessage); - break; - } - - Database.SetLastPlayer("D" + room.Id.ToString(), sender.User.Id); - UpdateDrawingForAll("D" + room.Id, sender, drawingToAdd, true); - - byte[] loadedDrawingMessage = PacketBuilder.CreateChat(Messages.FormatDrawingRoomLoaded(slotNo), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(loadedDrawingMessage); - - break; - } - else // Default action- draw line - { - if (packet.Length < 4) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); - break; - } - - if(!sender.User.Subscribed) - { - Logger.ErrorPrint(sender.User.Username + " Tried to draw while not subscribed."); - byte[] notSubscribedMessage = PacketBuilder.CreateChat(Messages.DrawingNotSentNotSubscribed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notSubscribedMessage); - break; - } - - int roomId = packet[2] - 40; - Drawingroom room; - try - { - room = Drawingroom.GetDrawingRoomById(roomId); - } - catch (KeyNotFoundException) - { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); - break; - } - - packetStr = Encoding.UTF8.GetString(packet); - - string drawing = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (drawing.Contains("X!")) // Clear byte - { - room.Drawing = ""; - goto update; - } - - try { - room.Drawing += drawing; - } - catch (DrawingroomFullException) - { - byte[] roomFullMessage = PacketBuilder.CreateChat(Messages.DrawingPlzClearDraw, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(roomFullMessage); - break; - } - update:; - Database.SetLastPlayer("D" + room.Id.ToString(), sender.User.Id); - UpdateDrawingForAll("D" + room.Id, sender, drawing, false); - } - - break; - case PacketBuilder.SWFMODULE_BRICKPOET: - if(packet.Length < 4) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET packet (swf communication, WRONG SIZE)"); - break; - } - if(packet[2] == PacketBuilder.BRICKPOET_LIST_ALL) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET LIST ALL packet (swf communication, WRONG SIZE)"); - break; - } - - int roomId = packet[3] - 40; - Brickpoet.PoetryPeice[] room; - try // Make sure the room exists- - { - room = Brickpoet.GetPoetryRoom(roomId); - } - catch(KeyNotFoundException) - { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid brickpoet room: " + roomId); - break; - } - // Send list of peices - byte[] poetPacket = PacketBuilder.CreateBrickPoetList(room); - sender.SendPacket(poetPacket); - - } - else if(packet[3] == PacketBuilder.BRICKPOET_MOVE) - { - if (packet.Length < 0xA) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, WRONG SIZE)"); - break; - } - packetStr = Encoding.UTF8.GetString(packet); - if(!packetStr.Contains('|')) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, NO | SEPERATOR)"); - break; - } - string[] args = packetStr.Split('|'); - if(args.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET MOVE Packet (swf communication, NOT ENOUGH | SEPERATORS."); - break; - } - - int roomId = packet[2] - 40; - int peiceId; - int x; - int y; - Brickpoet.PoetryPeice[] room; - Brickpoet.PoetryPeice peice; - - try // Make sure these are acturally numbers! - { - peiceId = int.Parse(args[1]); - x = int.Parse(args[2]); - y = int.Parse(args[3]); - - - room = Brickpoet.GetPoetryRoom(roomId); - peice = Brickpoet.GetPoetryPeice(room, peiceId); - - } - catch (Exception e) - { - Logger.ErrorPrint(sender.User.Username + " brickpoet - "+e.ToString()); - break; - } - // Change location in Database - peice.X = x; - peice.Y = y; - - foreach(User user in GetUsersOnSpecialTileCode("MULTIROOM-" + "P" + roomId.ToString())) // Send to each user! - { - if (user.Id == sender.User.Id) - continue; - - byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMove(peice); - user.Client.SendPacket(updatePoetRoomPacket); - - } - - if (Database.GetLastPlayer("P" + roomId) != sender.User.Id) - { - Database.SetLastPlayer("P" + roomId, sender.User.Id); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - } - - break; - } - else - { - Logger.DebugPrint(" packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - - break; - case PacketBuilder.SWFMODULE_DRESSUPROOM: - if ( packet.Length < 5 ) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM packet (swf communication, WRONG SIZE)"); - break; - } - if (packet[2] == PacketBuilder.DRESSUPROOM_LIST_ALL) - { - int roomId = packet[3] - 40; - Dressup.DressupRoom room = Dressup.GetDressupRoom(roomId); - - if (room.DressupPeices.Length > 0) - { - byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceLoad(room.DressupPeices); - sender.SendPacket(allDressupsResponse); - } - - } - else // Move - { - if (packet.Length < 8) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, WRONG SIZE)"); - break; - } - - int roomId = packet[2] - 40; - if (roomId <= 0) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID ROOM)"); - break; - } - Dressup.DressupRoom room = Dressup.GetDressupRoom(roomId); - - packetStr = Encoding.UTF8.GetString(packet); - string moveStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - string[] moves = moveStr.Split('|'); - - if(moves.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, MOVES WRONG SIZE)"); - break; - } - - int peiceId; - double moveToX; - double moveToY; - bool active = true; - try // Make sure these are acturally numbers! - { - peiceId = int.Parse(moves[0]); - if (moves[1] == "D" || moves[2] == "D") - { - active = false; - moveToX = 0; - moveToY = 0; - } - else - { - moveToX = double.Parse(moves[1]); - moveToY = double.Parse(moves[2]); - } - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID LOCATION)"); - break; - } - - Dressup.DressupPeice peice = room.GetDressupPeice(peiceId); - // Update database entries - peice.X = Convert.ToInt32(Math.Round(moveToX)); - peice.Y = Convert.ToInt32(Math.Round(moveToY)); - peice.Active = active; - - // Forward to other users - byte[] movePeicePacket = PacketBuilder.CreateDressupRoomPeiceMove(peice.PeiceId, moveToX, moveToY, peice.Active); - User[] users = GetUsersAt(sender.User.X, sender.User.Y, true, true); - foreach(User user in users) - { - if (user.Id != sender.User.Id) - user.Client.SendPacket(movePeicePacket); - } - } - break; - case PacketBuilder.SWFMODULE_BROADCAST: - byte[] response = PacketBuilder.CreateForwardedSwfModule(packet); - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y)) - { - if (user.Id == sender.User.Id) - continue; - user.Client.SendPacket(response); - } - break; - case PacketBuilder.SWFMODULE_OPPONENT: - if(TwoPlayer.IsPlayerInGame(sender.User)) - { - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.User); - - User otherUser = null; - if (twoPlayerGame.Invitee.Id == sender.User.Id) - otherUser = twoPlayerGame.Inviting; - else if (twoPlayerGame.Inviting.Id == sender.User.Id) - otherUser = twoPlayerGame.Invitee; - - response = PacketBuilder.CreateForwardedSwfModule(packet); - otherUser.Client.SendPacket(response); - } - break; - case PacketBuilder.SWFMODULE_CLOSE: - if (TwoPlayer.IsPlayerInGame(sender.User)) - { - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.User); - - User otherUser = null; - if (twoPlayerGame.Invitee.Id == sender.User.Id) - otherUser = twoPlayerGame.Inviting; - else if (twoPlayerGame.Inviting.Id == sender.User.Id) - otherUser = twoPlayerGame.Invitee; - - response = PacketBuilder.Create2PlayerClose(); - otherUser.Client.SendPacket(response); - - twoPlayerGame.CloseGame(sender.User); - - - } - break; - case PacketBuilder.SWFMODULE_ARENA: - if (Arena.UserHasEnteredHorseInAnyArena(sender.User)) - { - Arena arena = Arena.GetArenaUserEnteredIn(sender.User); - response = PacketBuilder.CreateForwardedSwfModule(packet); - foreach (Arena.ArenaEntry entry in arena.Entries.ToArray()) - { - if (entry.EnteredUser.Id == sender.User.Id) - continue; - if(entry.EnteredUser.Client.LoggedIn) - entry.EnteredUser.Client.SendPacket(response); - } - - } - break; - default: - Logger.DebugPrint("Unknown moduleid : " + module + " packet dump: " + BitConverter.ToString(packet).Replace("-"," ")); - break; - - } - - } - - public static void OnWish(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " tried to wish when not logged in."); - return; - } - - if(packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid wish Packet"); - return; - } - - if (!sender.User.Inventory.HasItemId(Item.WishingCoin)) - { - Logger.HackerPrint(sender.User.Username + " Tried to use a wishing well while having 0 coins."); - return; - } - - InventoryItem wishingCoinInvItems = sender.User.Inventory.GetItemByItemId(Item.WishingCoin); - byte wishType = packet[1]; - string message = ""; - - byte[] chatMsg = PacketBuilder.CreateChat(Messages.TossedCoin, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMsg); - - switch(wishType) - { - case PacketBuilder.WISH_MONEY: - int gainMoney = RandomNumberGenerator.Next(500, 1000); - sender.User.AddMoney(gainMoney); - message = Messages.FormatWishMoneyMessage(gainMoney); - break; - case PacketBuilder.WISH_ITEMS: - Item.ItemInformation[] wishableItmes = Item.GetAllWishableItems(); - int item = RandomNumberGenerator.Next(0, wishableItmes.Length); - Item.ItemInformation itm = wishableItmes[item]; - item = RandomNumberGenerator.Next(0, wishableItmes.Length); - Item.ItemInformation itm2 = wishableItmes[item]; - - sender.User.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); - sender.User.Inventory.AddIgnoringFull(new ItemInstance(itm2.Id)); - - message = Messages.FormatWishThingsMessage(itm.Name, itm2.Name); - break; - case PacketBuilder.WISH_WORLDPEACE: - byte[] tooDeep = PacketBuilder.CreateChat(Messages.WorldPeaceOnlySoDeep, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooDeep); - - wishableItmes = Item.GetAllWishableItems(); - item = RandomNumberGenerator.Next(0, wishableItmes.Length); - int earnMoney = RandomNumberGenerator.Next(0, 500); - itm = wishableItmes[item]; - - - sender.User.AddMoney(earnMoney); - sender.User.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); - - message = Messages.FormatWishWorldPeaceMessage(earnMoney, itm.Name); - break; - default: - Logger.ErrorPrint("Unknnown Wish type: " + wishType.ToString("X")); - break; - } - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count++; - - if(sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 100) - sender.User.Awards.AddAward(Award.GetAwardById(30)); // Well Wisher - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(31)); // Star Wisher - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(51)); // Extraordanary Wisher - - byte[] msg = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - - sender.User.Inventory.Remove(wishingCoinInvItems.ItemInstances[0]); - UpdateArea(sender); - } - public static void OnKeepAlive(GameClient sender, byte[] packet) - { - if (packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid update Packet"); - return; - } - - if (packet[1] == PacketBuilder.PACKET_CLIENT_TERMINATOR) - { - Logger.DebugPrint("Received KEEP_ALIVE from: " + sender.User.Username); - return; - } - } - public static void OnStatsPacket(GameClient sender, byte[] packet) - { - if(!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested stats when not logged in."); - return; - } - if(packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + "Sent an invalid Stats Packet"); - return; - } - - - } - public static void OnProfilePacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Requested to change profile page when not logged in."); - return; - } - if (packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Profile Packet"); - return; - } - - byte method = packet[1]; - if (method == PacketBuilder.PACKET_CLIENT_TERMINATOR) - { - UpdateStats(sender); - } - if (method == PacketBuilder.VIEW_PROFILE) - { - sender.User.MajorPriority = true; - string profilePage = sender.User.ProfilePage; - byte[] profilePacket = PacketBuilder.CreateProfilePage(profilePage); - sender.SendPacket(profilePacket); - } - else if (method == PacketBuilder.SAVE_PROFILE) - { - - string packetStr = Encoding.UTF8.GetString(packet); - if (packet.Length <= 3 || !packetStr.Contains('|')) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Profile SAVE Packet"); - return; - } - - int characterId = (packet[2] - 20) * 64 + (packet[3] - 20); - - string profilePage = packetStr.Split('|')[1]; - profilePage = profilePage.Substring(0, profilePage.Length - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - sender.User.CharacterId = characterId; - - if (profilePage.Length > 4000) - { - byte[] notSaved = PacketBuilder.CreateChat(Messages.ProfileTooLongMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(notSaved); - return; - } - - object filterReason = ChatMsg.FilterMessage(profilePage); - if(filterReason != null) - { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; - byte[] msg = PacketBuilder.CreateChat(Messages.FormatProfileSavedBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(msg); - return; - } - - sender.User.ProfilePage = profilePage; - - Logger.DebugPrint(sender.User.Username + " Changed to character id: " + characterId + " and set there Profile Description to '" + profilePage + "'"); - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.ProfileSavedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - - UpdateArea(sender); - UpdateUserFacingAndLocation(sender.User); - } - else if (method == PacketBuilder.SECCODE_AWARD) - { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode AWARD request with invalid size"); - return; - } - - string packetStr = Encoding.UTF8.GetString(packet); - string awardIdStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - int value = -1; - try - { - value = int.Parse(awardIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid awardid value"); - return; - } - - sender.User.Awards.AddAward(Award.GetAwardById(value)); - return; - } - else - { - byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); - return; - } - } - else if (method == PacketBuilder.SECCODE_SCORE || method == PacketBuilder.SECCODE_TIME || method == PacketBuilder.SECCODE_WINLOOSE) - { - bool time = (method == PacketBuilder.SECCODE_TIME); - bool winloose = (method == PacketBuilder.SECCODE_WINLOOSE); - - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode score/time/winloose request with invalid size"); - return; - } - - - string packetStr = Encoding.UTF8.GetString(packet); - string gameInfoStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (winloose) - { - string gameTitle = gameInfoStr.Substring(1); - byte pmethod = packet[6]; - if(pmethod == PacketBuilder.WINLOOSE_WIN) - { - sender.User.Highscores.Win(gameTitle); - byte[] winMsg = PacketBuilder.CreateChat(Messages.Format2PlayerRecordWin(gameTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(winMsg); - } - else if(pmethod == PacketBuilder.WINLOOSE_LOOSE) - { - sender.User.Highscores.Loose(gameTitle); - byte[] looseMsg = PacketBuilder.CreateChat(Messages.Format2PlayerRecordLose(gameTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(looseMsg); - } - - if (sender.User.Highscores.HighscoreList.Length >= 30) - sender.User.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player - - if (sender.User.Highscores.HighscoreList.Length >= 60) - sender.User.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master - - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut - - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy - return; - } - if (gameInfoStr.Contains("|")) - { - string[] gameInfo = gameInfoStr.Split('|'); - if (gameInfo.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent a invalid seccode score request"); - return; - } - - string gameTitle = gameInfo[0]; - string gameScoreStr = gameInfo[1]; - - int value = -1; - try - { - value = int.Parse(gameScoreStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid score value"); - return; - } - Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameTitle, 5, !time); - bool bestScoreEver = false; - if (scores.Length >= 1) - bestScoreEver = scores[0].Score <= value; - - bool newHighscore = sender.User.Highscores.UpdateHighscore(gameTitle, value, time); - if(bestScoreEver && !time) - { - byte[] bestScoreBeaten = PacketBuilder.CreateChat(Messages.BeatBestHighscore, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(bestScoreBeaten); - sender.User.AddMoney(2500); - } - else if (newHighscore) - { - if(time) - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatTimeBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - else - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatHighscoreBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - - } - - if(sender.User.Highscores.HighscoreList.Length >= 30) - sender.User.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player - - if (sender.User.Highscores.HighscoreList.Length >= 60) - sender.User.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master - - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut - - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy - - } - else - { - Logger.ErrorPrint(sender.User.Username + " didnt send a game name AND a score."); - return; - } - - } - else - { - byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); - return; - } - } - else if (method == PacketBuilder.SECCODE_MONEY) - { - - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode money request with invalid size"); - return; - } - - string packetStr = Encoding.UTF8.GetString(packet); - string gameInfoStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (gameInfoStr.Contains("|")) - { - string[] moneyInfo = gameInfoStr.Split('|'); - if (moneyInfo.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent a invalid money score request"); - return; - } - - string id = moneyInfo[0]; // not sure what this is for? - - string moneyStr = moneyInfo[1]; - int value = -1; - try - { - value = int.Parse(moneyStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid money value"); - return; - } - - int moneyEarned = value * 10; - Logger.InfoPrint(sender.User.Username + " Earned $" + moneyEarned + " In: " + id); - - sender.User.AddMoney(moneyEarned); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatMoneyEarnedMessage(moneyEarned), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - - } - else - { - Logger.ErrorPrint(sender.User.Username + " didnt send a game name AND a score."); - return; - } - - } - } - else if (method == PacketBuilder.SECCODE_GIVE_ITEM) - { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode item request with invalid size"); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string intStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int value = -1; - try - { - value = int.Parse(intStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid value"); - return; - } - - - if (Item.ItemIdExist(value)) - { - ItemInstance itm = new ItemInstance(value); - - Item.ItemInformation itemInfo = Item.GetItemById(value); - string messageToSend = Messages.FormatYouEarnedAnItemMessage(itemInfo.Name); - try - { - sender.User.Inventory.Add(itm); - } - catch(InventoryException) - { - messageToSend = Messages.FormatYouEarnedAnItemButInventoryFullMessage(itemInfo.Name); - } - - byte[] earnedItemMessage = PacketBuilder.CreateChat(messageToSend, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(earnedItemMessage); - } - else - { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to give an non existant item"); - return; - } - - } - else - { - byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); - return; - } - } - else if (method == PacketBuilder.SECCODE_DELETE_ITEM) - { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode item request with invalid size"); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string intStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int value = -1; - try - { - value = int.Parse(intStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid value"); - return; - } - - - if (sender.User.Inventory.HasItemId(value)) - { - InventoryItem item = sender.User.Inventory.GetItemByItemId(value); - sender.User.Inventory.Remove(item.ItemInstances[0]); - - Item.ItemInformation itemInfo = Item.GetItemById(value); - byte[] lostItemMessage = PacketBuilder.CreateChat(Messages.FormatYouLostAnItemMessage(itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(lostItemMessage); - - UpdateArea(sender); - } - else - { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to delete an non existant item"); - return; - } - - } - else - { - byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); - return; - } - } - else if (method == PacketBuilder.SECCODE_QUEST) - { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); - byte[] GotSecCode = new byte[4]; - Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); - Logger.DebugPrint(sender.User.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); - if (ExpectedSecCode.SequenceEqual(GotSecCode)) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode quest request with invalid size"); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - string intStr = packetStr.Substring(6, (packetStr.Length - 6) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int value = -1; - try - { - value = int.Parse(intStr); - } - catch (FormatException) - { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but invalid value"); - return; - } - - - if (Quest.DoesQuestExist(value)) - { - Quest.QuestEntry questEntry = Quest.GetQuestById(value); - Quest.ActivateQuest(sender.User, questEntry); - } - else - { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to activate a non existant quest"); - return; - } - - - } - else - { - byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); - return; - } - } - else if (method == PacketBuilder.PROFILE_HIGHSCORES_LIST) - { - sender.User.MajorPriority = true; - string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopHighscores(gameName)); - sender.SendPacket(metaTag); - } - else if (method == PacketBuilder.PROFILE_BESTTIMES_LIST) - { - sender.User.MajorPriority = true; - string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopTimes(gameName)); - sender.SendPacket(metaTag); - } - else if (method == PacketBuilder.PROFILE_WINLOOSE_LIST) - { - sender.User.MajorPriority = true; - string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopWinners(gameName)); - sender.SendPacket(metaTag); - } - else - { - Logger.DebugPrint("Unknown Profile Packet! " + BitConverter.ToString(packet).Replace("-", " ")); - } - } - public static void OnMovementPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent movement packet when not logged in."); - return; - } - - - User loggedInUser = sender.User; - - /* - * Player stuff - */ - - // Store this for later... do it now to avoid TOCTOU. - User[] onScreenBefore = GetOnScreenUsers(loggedInUser.X, loggedInUser.Y, true, true); - - // Leave Multirooms - Multiroom.LeaveAllMultirooms(loggedInUser); - - loggedInUser.PendingBuddyRequestTo = null; - - // Close Social Windows - foreach (User sUser in loggedInUser.BeingSocializedBy) - UpdateArea(sUser.Client); - loggedInUser.ClearSocailizedWith(); - - - if (loggedInUser.CurrentlyRidingHorse != null) - { - if(loggedInUser.CurrentlyRidingHorse.BasicStats.Experience < 25) - { - if(GameServer.RandomNumberGenerator.Next(0, 100) == 97) - { - loggedInUser.CurrentlyRidingHorse.BasicStats.Experience++; - byte[] horseBuckedMessage; - if(loggedInUser.CurrentlyRidingHorse.Breed.Type == "llama") - horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseLlamaBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); - else if (loggedInUser.CurrentlyRidingHorse.Breed.Type == "camel") - horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseCamelBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); - else - horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); - - sender.User.CurrentlyRidingHorse = null; - sender.User.Facing %= 5; - sender.SendPacket(horseBuckedMessage); - } - } - } - - // Randomly move if thirst, hunger, tiredness too low- - - byte movementDirection = packet[1]; - - if (loggedInUser.Thirst <= 0 || loggedInUser.Hunger <= 0 || loggedInUser.Tiredness <= 0) - { - if (RandomNumberGenerator.Next(0, 10) == 7) - { - byte[] possibleDirections = new byte[] { PacketBuilder.MOVE_UP, PacketBuilder.MOVE_DOWN, PacketBuilder.MOVE_RIGHT, PacketBuilder.MOVE_LEFT }; - - if (possibleDirections.Contains(movementDirection)) - { - byte newDirection = possibleDirections[RandomNumberGenerator.Next(0, possibleDirections.Length)]; - if (newDirection != movementDirection) - { - movementDirection = newDirection; - if (loggedInUser.Thirst <= 0) - { - byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatThirst.ToUpper(), Messages.StatThirstDizzy), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMessage); - } - else if (loggedInUser.Hunger <= 0) - { - byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatHunger.ToUpper(), Messages.StatHungerStumble), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMessage); - } - /* - * Doesnt appear to acturally exist. - * - else if (loggedInUser.Tiredness <= 0) - { - byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatTired.ToUpper()), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMessage); - } - */ - } - } - } - } - - - - int onHorse = 0; - int facing = sender.User.Facing; - while (facing >= 5) - { - facing -= 5; - onHorse++; - } - byte direction = 0; - int newX = loggedInUser.X; - int newY = loggedInUser.Y; - - - bool moveTwo = false; - - if (movementDirection == PacketBuilder.MOVE_ESCAPE) // Exit this place / X Button - { - - byte Direction; - if (World.InSpecialTile(loggedInUser.X, loggedInUser.Y)) - { - - World.SpecialTile tile = World.GetSpecialTile(loggedInUser.X, loggedInUser.Y); - if (tile.ExitX != 0) - newX = tile.ExitX; - if (tile.ExitY != 0) - newY = tile.ExitY; - else - if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y + 1) || loggedInUser.NoClip) - newY += 1; - - - - if (loggedInUser.X + 1 == newX && loggedInUser.Y == newY) - Direction = PacketBuilder.DIRECTION_RIGHT; - else if (loggedInUser.X - 1 == newX && loggedInUser.Y == newY) - Direction = PacketBuilder.DIRECTION_LEFT; - else if (loggedInUser.Y + 1 == newY && loggedInUser.X == newX) - Direction = PacketBuilder.DIRECTION_DOWN; - else if (loggedInUser.Y - 1 == newY && loggedInUser.X == newX) - Direction = PacketBuilder.DIRECTION_UP; - else - Direction = PacketBuilder.DIRECTION_TELEPORT; - - loggedInUser.X = newX; - loggedInUser.Y = newY; - - - } - else - { - if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y + 1) || loggedInUser.NoClip) - loggedInUser.Y += 1; - - Direction = PacketBuilder.DIRECTION_DOWN; - } - - loggedInUser.Facing = Direction + (onHorse * 5); - Logger.DebugPrint("Exiting player: " + loggedInUser.Username + " to: " + loggedInUser.X + "," + loggedInUser.Y); - byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true); - sender.SendPacket(moveResponse); - goto Complete; - } - - if (movementDirection == PacketBuilder.MOVE_UP) - { - direction = PacketBuilder.DIRECTION_UP; - if (Map.CheckPassable(newX, newY - 1) || loggedInUser.NoClip) - newY -= 1; - - - if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move - if (Map.CheckPassable(newX, newY - 1) || loggedInUser.NoClip) - { - newY -= 1; - moveTwo = true; - } - } - else if (movementDirection == PacketBuilder.MOVE_LEFT) - { - direction = PacketBuilder.DIRECTION_LEFT; - if (Map.CheckPassable(newX - 1, newY) || loggedInUser.NoClip) - newX -= 1; - - - if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move - if (Map.CheckPassable(newX - 1, newY) || loggedInUser.NoClip) - { - newX -= 1; - moveTwo = true; - } - } - else if (movementDirection == PacketBuilder.MOVE_RIGHT) - { - direction = PacketBuilder.DIRECTION_RIGHT; - if (Map.CheckPassable(newX + 1, newY) || loggedInUser.NoClip) - newX += 1; - - - if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move - if (Map.CheckPassable(newX + 1, newY) || loggedInUser.NoClip) - { - newX += 1; - moveTwo = true; - } - } - else if (movementDirection == PacketBuilder.MOVE_DOWN) - { - direction = PacketBuilder.DIRECTION_DOWN; - if (Map.CheckPassable(newX, newY + 1) || loggedInUser.NoClip) - newY += 1; - - - if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move - if (Map.CheckPassable(newX, newY + 1) || loggedInUser.NoClip) - { - newY += 1; - moveTwo = true; - } - } - else if(movementDirection == PacketBuilder.MOVE_UPDATE) - { - UpdateArea(sender); - return; - } - - - - loggedInUser.Facing = direction + (onHorse * 5); - if (loggedInUser.Y != newY || loggedInUser.X != newX) - { - if (moveTwo) - direction += 20; - - loggedInUser.Y = newY; - loggedInUser.X = newX; - - // Check Treasures - if (Treasure.IsTileTreasure(loggedInUser.X, loggedInUser.Y)) - { - Treasure treasure = Treasure.GetTreasureAt(loggedInUser.X, loggedInUser.Y); - if (treasure.Type == "RAINBOW") - { - treasure.CollectTreasure(loggedInUser); - goto Complete; - } - } - - byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true); - sender.SendPacket(moveResponse); - } - else - { - byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false); - sender.SendPacket(moveResponse); - } - Complete:; - - // Cancel Trades - if (loggedInUser.TradingWith != null) - if ((loggedInUser.TradingWith.Trader.X != loggedInUser.X) && (loggedInUser.TradingWith.Trader.Y != loggedInUser.Y)) - loggedInUser.TradingWith.CancelTradeMoved(); - - // Pac-man the world. - if (loggedInUser.X > Map.Width) - loggedInUser.Teleport(2, loggedInUser.Y); - else if (loggedInUser.X < 2) - loggedInUser.Teleport(Map.Width - 2, loggedInUser.Y); - else if (loggedInUser.Y > Map.Height - 2) - loggedInUser.Teleport(loggedInUser.X, 2); - else if (loggedInUser.Y < 2) - loggedInUser.Teleport(loggedInUser.X, Map.Height - 2); - - - User[] onScreenNow = GetOnScreenUsers(loggedInUser.X, loggedInUser.Y, true, true); - - User[] goneOffScreen = onScreenBefore.Except(onScreenNow).ToArray(); - User[] goneOnScreen = onScreenNow.Except(onScreenBefore).ToArray(); - - foreach (User offScreenUsers in goneOffScreen) - { - if (offScreenUsers.Id == loggedInUser.Id) - continue; - - byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, loggedInUser.Facing, loggedInUser.CharacterId, loggedInUser.Username); - offScreenUsers.Client.SendPacket(playerInfoBytes); - } - - foreach (User onScreenUsers in goneOnScreen) - { - if (onScreenUsers.Id == loggedInUser.Id) - continue; - - byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(onScreenUsers.X, onScreenUsers.Y, onScreenUsers.Facing, onScreenUsers.CharacterId, onScreenUsers.Username); - loggedInUser.Client.SendPacket(playerInfoBytes); - } - - Update(sender); - - } - public static void OnQuitPacket(GameClient sender, byte[] packet) - { - if(!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent quit packet when not logged in."); - return; - } - Logger.InfoPrint(sender.User.Username + " Clicked \"Quit Game\".. Disconnecting"); - sender.Disconnect(); - } - public static void OnNpcInteraction(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent npc interaction packet when not logged in."); - return; - } - if (packet.Length < 2) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid npc interaction packet."); - return; - } - byte action = packet[1]; - if (action == PacketBuilder.NPC_START_CHAT) - { - - string packetStr = Encoding.UTF8.GetString(packet); - string number = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int chatId = 0; - - try - { - chatId = int.Parse(number); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to start talking to an NPC with id that is NaN."); - return; - } - if(!Npc.NpcExists(chatId)) - { - Logger.ErrorPrint(sender.User.Username + " Tried to start talking to an NPC that doesnt exist."); - return; - } - sender.User.MajorPriority = true; - Npc.NpcEntry entry = Npc.GetNpcById(chatId); - - if(entry.Chatpoints.Length <= 0) - { - Logger.ErrorPrint(sender.User.Username + " Tried to start talking to an NPC with no chatpoints."); - return; - } - - int defaultChatpointId = Npc.GetDefaultChatpoint(sender.User, entry); - Npc.NpcChat startingChatpoint = Npc.GetNpcChatpoint(entry, defaultChatpointId); - - string metaInfo = Meta.BuildNpcChatpoint(sender.User, entry, startingChatpoint); - byte[] metaPacket = PacketBuilder.CreateMeta(metaInfo); - sender.SendPacket(metaPacket); - - sender.User.LastTalkedToNpc = entry; - } - else if (action == PacketBuilder.NPC_CONTINUE_CHAT) - { - string packetStr = Encoding.UTF8.GetString(packet); - string number = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int replyId = 0; - try - { - replyId = int.Parse(number); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to reply to an NPC with replyid that is NaN."); - return; - } - - Npc.NpcEntry lastNpc = sender.User.LastTalkedToNpc; - Npc.NpcReply reply; - try - { - reply = Npc.GetNpcReply(lastNpc, replyId); - } - catch(KeyNotFoundException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to reply with replyid that does not exist."); - return; - } - - if (reply.GotoChatpoint == -1) - { - UpdateArea(sender); - return; - } - sender.User.MajorPriority = true; - string metaInfo = Meta.BuildNpcChatpoint(sender.User, lastNpc, Npc.GetNpcChatpoint(lastNpc, reply.GotoChatpoint)); - byte[] metaPacket = PacketBuilder.CreateMeta(metaInfo); - sender.SendPacket(metaPacket); - return; - } - } - public static void OnTransportUsed(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent transport packet when not logged in."); - return; - } - if (packet.Length < 2) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid transport packet."); - return; - } - - - string packetStr = Encoding.UTF8.GetString(packet); - string number = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - int transportid; - try - { - transportid = Int32.Parse(number); - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Tried to use a transport with id that is NaN."); - return; - } - try - { - Transport.TransportPoint transportPoint = Transport.GetTransportPoint(sender.User.X, sender.User.Y); - if (transportPoint.X != sender.User.X && transportPoint.Y != sender.User.Y) - { - Logger.HackerPrint(sender.User.Username + " Tried to use transport id: " + transportid.ToString() + " while not the correct transport point!"); - return; - } - - Transport.TransportLocation transportLocation = Transport.GetTransportLocation(transportid); - int cost = transportLocation.Cost; - - if (transportLocation.Type == "WAGON") - { - if(sender.User.OwnedRanch != null) - { - if(sender.User.OwnedRanch.GetBuildingCount(7) > 0) // Wagon - { - cost = 0; - } - } - } - - if (sender.User.Bids.Length > 0) - { - byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantBuyWhileAuctioning); - return; - } - - - if (sender.User.Money >= cost) - { - string swfToLoad = Messages.BoatCutscene; - if (transportLocation.Type == "WAGON") - swfToLoad = Messages.WagonCutscene; - - if (transportLocation.Type != "ROWBOAT") - { - byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swfToLoad, PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - sender.SendPacket(swfModulePacket); - } - - sender.User.Teleport(transportLocation.GotoX, transportLocation.GotoY); - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count++; - - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count >= 500) - sender.User.Awards.AddAward(Award.GetAwardById(27)); // Traveller - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count >= 5000) - sender.User.Awards.AddAward(Award.GetAwardById(28)); // Globetrotter - - byte[] welcomeToIslePacket = PacketBuilder.CreateChat(Messages.FormatWelcomeToAreaMessage(transportLocation.LocationTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(welcomeToIslePacket); - - if(cost > 0) - sender.User.TakeMoney(cost); - } - else - { - byte[] cantAfford = PacketBuilder.CreateChat(Messages.CantAffordTransport, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAfford); - } - } - catch (KeyNotFoundException) - { - Logger.HackerPrint(sender.User.Username + " Tried to use transport id: " + transportid.ToString() + " while not on a transport point!"); - } - - - } - public static void OnRanchPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent ranch packet when not logged in."); - return; - } - if (packet.Length < 3) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid ranch packet."); - return; - } - string packetStr = Encoding.UTF8.GetString(packet); - byte method = packet[1]; - - if (method == PacketBuilder.RANCH_INFO) - { - string buildingIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int buildingId = 0; - try - { - buildingId = int.Parse(buildingIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); - return; - } - if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) - { - Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); - - byte[] ranchBuild = PacketBuilder.CreateChat(Messages.FormatBuildingInformaton(building.Title, building.Description), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ranchBuild); - - return; - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id that didnt exist."); - return; - } - } - else if (method == PacketBuilder.RANCH_SELL) - { - string NanSTR = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (NanSTR == "NaN") - { - if (sender.User.OwnedRanch == null) - { - Logger.HackerPrint(sender.User.Username + " Tried to sell there ranch when they didnt own one."); - return; - } - int sellPrice = sender.User.OwnedRanch.GetSellPrice(); - sender.User.AddMoney(sellPrice); - byte[] sellPacket = PacketBuilder.CreateChat(Messages.FormatRanchSoldMessage(sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.OwnedRanch.OwnerId = -1; - sender.SendPacket(sellPacket); - - // Change map sprite. - User[] users = GetUsersAt(sender.User.X, sender.User.Y, true, true); - foreach (User user in users) - { - byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); - user.Client.SendPacket(MovementPacket); - } - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to sell there ranch without sending NaN."); - return; - } - } - else if (method == PacketBuilder.RANCH_UPGRADE) - { - string NanSTR = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (NanSTR == "NaN") - { - if (sender.User.OwnedRanch != null) - { - Ranch.RanchUpgrade currentUpgrade = sender.User.OwnedRanch.GetRanchUpgrade(); - - if (!Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1)) - { - Logger.ErrorPrint(sender.User.Username + " Tried to upgrade there ranch when it was max upgrade."); - return; - } - - Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1); - if (sender.User.Money >= nextUpgrade.Cost) - { - sender.User.TakeMoney(nextUpgrade.Cost); - sender.User.OwnedRanch.InvestedMoney += nextUpgrade.Cost; - sender.User.OwnedRanch.UpgradedLevel++; - - byte[] upgraded = PacketBuilder.CreateChat(Messages.UpgradedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(upgraded); - - // Change map sprite. - User[] users = GetUsersAt(sender.User.X, sender.User.Y, true, true); - foreach (User user in users) - { - byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); - user.Client.SendPacket(MovementPacket); - } - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - } - else - { - byte[] cantAfford = PacketBuilder.CreateChat(Messages.UpgradeCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAfford); - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to upgrade there ranch when they didnt own one."); - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to upgrade there ranch without sending NaN."); - return; - } - } - else if (method == PacketBuilder.RANCH_REMOVE) - { - string buildingIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int buildingId = 0; - try - { - buildingId = int.Parse(buildingIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); - return; - } - if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) - { - Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); - int ranchBuild = sender.User.LastClickedRanchBuilding; - if (ranchBuild <= 0) - return; - if (sender.User.OwnedRanch != null) - { - if (ranchBuild > sender.User.OwnedRanch.GetRanchUpgrade().Limit) - { - Logger.HackerPrint(sender.User.Username + " Tried to remove more buildings than the limit."); - return; - } - - Ranch.RanchBuilding ranchBuilding = sender.User.OwnedRanch.GetBuilding(ranchBuild - 1); - - if (ranchBuilding == null) - return; - - if (ranchBuilding.Id == buildingId) - { - sender.User.OwnedRanch.SetBuilding(ranchBuild - 1, null); - sender.User.AddMoney(ranchBuilding.GetTeardownPrice()); - sender.User.OwnedRanch.InvestedMoney -= building.Cost; - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatBuildingTornDown(ranchBuilding.GetTeardownPrice()), PacketBuilder.CHAT_BOTTOM_RIGHT); - - sender.SendPacket(chatPacket); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - return; - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to remove bulidingid: " + buildingId + " from building slot " + ranchBuild + " but the building was not found there."); - } - - } - Logger.HackerPrint(sender.User.Username + " Tried to remove in a ranch when they dont own one."); - return; - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id that didnt exist."); - return; - } - } - else if (method == PacketBuilder.RANCH_BUILD) - { - string buildingIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int buildingId = 0; - try - { - buildingId = int.Parse(buildingIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); - return; - } - if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) - { - Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); - int ranchBuild = sender.User.LastClickedRanchBuilding; - if (ranchBuild == 0) - return; - if (sender.User.OwnedRanch != null) - { - if (ranchBuild > sender.User.OwnedRanch.GetRanchUpgrade().Limit) - { - Logger.HackerPrint(sender.User.Username + " Tried to build more buildings than the limit."); - return; - } - - if (sender.User.Money >= building.Cost) - { - sender.User.OwnedRanch.SetBuilding(ranchBuild - 1, building); - sender.User.OwnedRanch.InvestedMoney += building.Cost; - sender.User.TakeMoney(building.Cost); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchBuildingComplete, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - return; - - } - else - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchCantAffordThisBuilding, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - return; - } - } - Logger.HackerPrint(sender.User.Username + " Tried to build in a ranch when they dont own one."); - return; - } - else - { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id that didnt exist."); - return; - } - } - else if (method == PacketBuilder.RANCH_BUY) - { - string nan = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if (nan == "NaN") - { - if (Ranch.IsRanchHere(sender.User.X, sender.User.Y)) - { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); - if (sender.User.Money >= ranch.Value) - { - byte[] broughtRanch = PacketBuilder.CreateChat(Messages.FormatRanchBroughtMessage(ranch.Value), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(broughtRanch); - sender.User.TakeMoney(ranch.Value); - ranch.OwnerId = sender.User.Id; - ranch.InvestedMoney += ranch.Value; - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - - } - else - { - byte[] cantAfford = PacketBuilder.CreateChat(Messages.RanchCantAffordRanch, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAfford); - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Tried to buy a non existant ranch."); - return; - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " Sent RANCH_BUY without \"NaN\"."); - return; - } - } - else if (method == PacketBuilder.RANCH_CLICK) - { - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid ranch click packet."); - return; - } - byte action = packet[2]; - if (action == PacketBuilder.RANCH_CLICK_BUILD) - { - if (Ranch.IsRanchHere(sender.User.X, sender.User.Y)) - { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); - if (sender.User.OwnedRanch != null) - { - if (sender.User.OwnedRanch.Id == ranch.Id) - { - int buildSlot = packet[3] - 40; - sender.User.LastClickedRanchBuilding = buildSlot; - sender.User.MajorPriority = true; - - if (buildSlot == 0) - { - byte[] buildingsAvalible = PacketBuilder.CreateMeta(Meta.BuildRanchUpgrade(ranch)); - sender.SendPacket(buildingsAvalible); - - } - else - { - byte[] buildingsAvalible = PacketBuilder.CreateMeta(Meta.BuildRanchBuildingsAvalible(ranch, buildSlot)); - sender.SendPacket(buildingsAvalible); - } - - - return; - } - } - } - - Logger.HackerPrint(sender.User.Username + " Tried to build in a ranch they didnt own."); - return; - } - else if (action == PacketBuilder.RANCH_CLICK_NORM) - { - if (Ranch.IsRanchHere(sender.User.X, sender.User.Y)) - { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); - int buildSlot = packet[3] - 40; - sender.User.MajorPriority = true; - - if (buildSlot == 0) // Main Building - { - byte[] upgradeDescription = PacketBuilder.CreateMeta(Meta.BuildRanchBuilding(ranch, ranch.GetRanchUpgrade())); - sender.SendPacket(upgradeDescription); - } - else // Other Building - { - byte[] buildingDescription = PacketBuilder.CreateMeta(Meta.BuildRanchBuilding(ranch, ranch.GetBuilding(buildSlot - 1))); - sender.SendPacket(buildingDescription); - } - return; - } - else - { - Logger.ErrorPrint(sender.User.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); - } - } - } - else - { - Logger.ErrorPrint(sender.User.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); - } - } - public static void OnChatPacket(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent chat packet when not logged in."); - return; - } - - if (packet.Length < 3) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid chat packet."); - return; - } - - - string packetStr = Encoding.UTF8.GetString(packet); - - ChatMsg.ChatChannel channel = (ChatMsg.ChatChannel)packet[1]; - string message = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - Logger.DebugPrint(sender.User.Username + " Attempting to say '" + message + "' in channel: " + channel.ToString()); - - string nameTo = null; - if (channel == ChatMsg.ChatChannel.Dm) - { - nameTo = ChatMsg.GetDmRecipiant(message); - message = ChatMsg.GetDmMessage(message); - } - - if (message == "") - return; - - if (message.StartsWith("/")) - { - string channelString = message.Split(' ')[0].ToLower(); - string newMessage = string.Join(' ', message.Split(' ').Skip(1)); - message = newMessage.Trim(); - - if (message == "") - channelString = "/"; - - switch (channelString) - { - case "/$": - case "/ads": - channel = ChatMsg.ChatChannel.Ads; - break; - case "/a": - case "/all": - channel = ChatMsg.ChatChannel.All; - break; - case "/h": - case "/here": - channel = ChatMsg.ChatChannel.Here; - break; - case "/n": - case "/near": - channel = ChatMsg.ChatChannel.Near; - break; - case "/b": - case "/buddy": - channel = ChatMsg.ChatChannel.Buddies; - break; - case "/i": - case "/island": - channel = ChatMsg.ChatChannel.Isle; - break; - case "/admin": - if (sender.User.Administrator) - channel = ChatMsg.ChatChannel.Admin; - else - return; - break; - case "/mod": - if (sender.User.Moderator) - channel = ChatMsg.ChatChannel.Mod; - else - return; - break; - default: - channel = ChatMsg.ChatChannel.Dm; - nameTo = channelString.Substring(1).Trim(); - break; - } - - if (message == "") // this is how pinto does it, im serious. - { - channel = ChatMsg.ChatChannel.Dm; - nameTo = ""; - } - } - - message = message.Trim(); - - if (channel == ChatMsg.ChatChannel.All && message.Length > 150) - { - byte[] tooLong = PacketBuilder.CreateChat(Messages.GlobalChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooLong); - return; - } - - if (channel == ChatMsg.ChatChannel.Ads && message.Length > 150) - { - byte[] tooLong = PacketBuilder.CreateChat(Messages.AdsChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tooLong); - return; - } - if (ChatMsg.ProcessCommand(sender.User, message)) - { - Logger.DebugPrint(sender.User.Username + " Attempting to run command '" + message + "' in channel: " + channel.ToString()); - return; - } - - // Check events - if (RiddleEvent.Active) - if(RiddleEvent.CheckRiddle(message)) - RiddleEvent.Win(sender.User); - - - - // Check if player is muting channel - - if( (sender.User.MuteGlobal && channel == ChatMsg.ChatChannel.All) || (sender.User.MuteAds && channel == ChatMsg.ChatChannel.Ads) || (sender.User.MuteHere && channel == ChatMsg.ChatChannel.Here) && (sender.User.MuteBuddy && channel == ChatMsg.ChatChannel.Buddies) && (sender.User.MuteNear && channel == ChatMsg.ChatChannel.Near) && (sender.User.MuteIsland && channel == ChatMsg.ChatChannel.Isle)) - { - byte[] cantSendMessage = PacketBuilder.CreateChat(Messages.CantSendInMutedChannel, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSendMessage); - return; - } - - if(sender.User.MutePrivateMessage && channel == ChatMsg.ChatChannel.Dm) - { - byte[] cantSendDmMessage = PacketBuilder.CreateChat(Messages.CantSendPrivateMessageWhileMuted, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSendDmMessage); - return; - } - - Object violationReason = ChatMsg.FilterMessage(message); - if (violationReason != null) - { - sender.User.ChatViolations += 1; - string chatViolationMessage = Messages.FormatGlobalChatViolationMessage((ChatMsg.Reason)violationReason); - byte[] chatViolationPacket = PacketBuilder.CreateChat(chatViolationMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatViolationPacket); - return; - } - - byte chatSide = ChatMsg.GetSide(channel); - message = ChatMsg.DoCorrections(message); - message = ChatMsg.EscapeMessage(message); - - string failedReason = ChatMsg.NonViolationChecks(sender.User, message); - if (failedReason != null) - { - byte[] failedMessage = PacketBuilder.CreateChat(failedReason, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(failedMessage); - return; - } - - GameClient[] recipiants = ChatMsg.GetRecipiants(sender.User, channel, nameTo); - - - if(channel == ChatMsg.ChatChannel.Dm) - { - if(recipiants.Length <= 0) - { - byte[] cantFindPlayer = PacketBuilder.CreateChat(Messages.CantFindPlayerToPrivateMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantFindPlayer); - - return; - } - else - { - nameTo = recipiants[0].User.Username; - } - } - - // Spam filter - if(ConfigReader.EnableSpamFilter) - { - if (channel == ChatMsg.ChatChannel.Ads) - { - if (!sender.User.CanUseAdsChat && !sender.User.Administrator) - { - byte[] cantSendInAds = PacketBuilder.CreateChat(Messages.AdsOnlyOncePerMinute, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSendInAds); - - return; - } - sender.User.CanUseAdsChat = false; - } - else if (channel == ChatMsg.ChatChannel.All) - { - if (sender.User.TotalGlobalChatMessages <= 0 && !sender.User.Administrator) - { - byte[] globalLimited = PacketBuilder.CreateChat(Messages.GlobalChatLimited, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(globalLimited); - - return; - } - sender.User.TotalGlobalChatMessages--; - } - } - - - // Muted user checks - if(channel == ChatMsg.ChatChannel.Dm) - { - try - { - User userTo = GetUserByNameStartswith(nameTo); - if (sender.User.MutePlayer.IsUserMuted(userTo)) - { - byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatCantSendYourIgnoringPlayer(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); - sender.SendPacket(dmWasBlocked); - return; - } - else if (userTo.MutePrivateMessage) - { - byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatPlayerIgnoringAllPms(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); - sender.SendPacket(dmWasBlocked); - return; - } - else if (userTo.MutePlayer.IsUserMuted(sender.User)) - { - byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatPlayerIgnoringYourPms(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); - sender.SendPacket(dmWasBlocked); - return; - } - } - catch (KeyNotFoundException) - { - return; - } - } - // Finally send chat message. - string formattedMessage = ChatMsg.FormatChatForOthers(sender.User, channel, message); - string formattedMessageSender = ChatMsg.FormatChatForSender(sender.User, channel, message, nameTo); - - - byte[] chatPacketOthers = PacketBuilder.CreateChat(formattedMessage, chatSide); - byte[] chatPacketSender = PacketBuilder.CreateChat(formattedMessageSender, chatSide); - byte[] playDmSound = PacketBuilder.CreatePlaySound(ChatMsg.PrivateMessageSound); - - // Send to clients ... - foreach (GameClient recipiant in recipiants) - { - recipiant.SendPacket(chatPacketOthers); - - if (channel == ChatMsg.ChatChannel.Dm) - recipiant.SendPacket(playDmSound); - } - - // Send to sender - sender.SendPacket(chatPacketSender); - - // AutoReply - if (channel == ChatMsg.ChatChannel.Dm) - { - foreach (GameClient recipiant in recipiants) - { - if (recipiant.User.AutoReplyText != "") - { - string formattedMessageAuto = ChatMsg.FormatChatForOthers(recipiant.User, channel, recipiant.User.AutoReplyText, true); - string formattedMessageSenderAuto = ChatMsg.FormatChatForSender(recipiant.User, channel, recipiant.User.AutoReplyText, nameTo, true); - - byte[] chatPacketAutoOthers = PacketBuilder.CreateChat(formattedMessageAuto, chatSide); - sender.SendPacket(chatPacketAutoOthers); - - byte[] chatPacketAutoSender = PacketBuilder.CreateChat(formattedMessageSenderAuto, chatSide); - recipiant.SendPacket(chatPacketAutoSender); - } - } - - } - - } - public static void OnClickPacket(GameClient sender, byte[] packet) - { - - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Send click packet when not logged in."); - return; - } - if (packet.Length < 5) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Click Packet"); - return; - } - - string packetStr = Encoding.UTF8.GetString(packet); - if(packetStr.Contains("|")) - { - string packetContents = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - string[] xy = packetContents.Split('|'); - int x = 0; - int y = 0; - - try - { - x = int.Parse(xy[0])+4; - y = int.Parse(xy[1])+1; - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent a click packet with non-string xy value."); - return; - } - - Logger.DebugPrint(sender.User.Username + " Clicked on tile: " + Map.GetTileId(x, y, false).ToString() + "(overlay: " + Map.GetTileId(x, y, true).ToString() + ") at " + x.ToString() + "," + y.ToString()); - - - // Get description of tile - string returnedMsg = Messages.NothingInterestingHere; - if(World.InSpecialTile(x, y)) - { - World.SpecialTile tile = World.GetSpecialTile(x, y); - if (tile.Title != null) - returnedMsg = tile.Title; - } - if(Ranch.IsRanchHere(x, y)) // Ranch here? - { - Ranch ranch = Ranch.GetRanchAt(x, y); - if(ranch.OwnerId == -1) - { - returnedMsg = Messages.RanchUnownedRanchClicked; - } - else - { - string title = ranch.Title; - if (title == null || title == "") - title = Messages.RanchDefaultRanchTitle; - returnedMsg = Messages.FormatRanchClickMessage(Database.GetUsername(ranch.OwnerId), title); - } - } - User[] users = GetUsersAt(x, y, false, true); - if (users.Length > 0) // Player here? - { - string usernameStr = ""; - - for(int i = 0; i < users.Length; i++) - { - usernameStr += users[i].Username; - if (i + 1 < users.Length) - usernameStr += ", "; - } - - returnedMsg = Messages.FormatPlayerHereMessage(usernameStr); - } - byte[] tileInfoPacket = PacketBuilder.CreateTileClickInfo(returnedMsg); - // Debug tile id information - //byte[] tileInfoPacket = PacketBuilder.CreateTileClickInfo("ground: " + (Map.GetTileId(x, y, false)-1).ToString() + ", overlay: " + (Map.GetTileId(x, y, true)-1).ToString()); - sender.SendPacket(tileInfoPacket); - } - } - public static void OnItemInteraction(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent object interaction packet when not logged in."); - return; - } - if (packet.Length < 2) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - byte action = packet[1]; - switch(action) - { - case PacketBuilder.ITEM_PICKUP_ALL: - string chatMsg = Messages.GrabAllItemsMessage; - DroppedItems.DroppedItem[] droppedItems = DroppedItems.GetItemsAt(sender.User.X, sender.User.Y); - - foreach (DroppedItems.DroppedItem item in droppedItems) - { - try - { - sender.User.Inventory.Add(item.Instance); - DroppedItems.RemoveDroppedItem(item); - } - catch (InventoryException) - { - chatMsg = Messages.GrabbedAllItemsButInventoryFull; - } - } - - UpdateAreaForAll(sender.User.X, sender.User.Y); - - byte[] chatMessage = PacketBuilder.CreateChat(chatMsg, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMessage); - - break; - case PacketBuilder.ITEM_PICKUP: - string packetStr = Encoding.UTF8.GetString(packet); - string randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch(FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - try - { - DroppedItems.DroppedItem item = DroppedItems.GetDroppedItemById(randomId); - try - { - sender.User.Inventory.Add(item.Instance); - } - catch (InventoryException) - { - byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.GrabbedItemButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inventoryFullMessage); - break; - } - - - DroppedItems.RemoveDroppedItem(item); - - UpdateAreaForAll(sender.User.X, sender.User.Y); - - chatMessage = PacketBuilder.CreateChat(Messages.GrabbedItemMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatMessage); - } - catch(KeyNotFoundException) - { - byte[] pickedUp = PacketBuilder.CreateChat(Messages.DroppedItemCouldntPickup, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(pickedUp); - - Logger.HackerPrint(sender.User.Username + " Tried to grab a non existing object."); - return; - } - - break; - case PacketBuilder.ITEM_REMOVE: - char toRemove = (char)packet[2]; - switch(toRemove) - { - case '1': - if(sender.User.EquipedCompetitionGear.Head != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Head.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Head = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove competition gear when none was equipped."); - } - break; - case '2': - if (sender.User.EquipedCompetitionGear.Body != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Body.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Body = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove competition gear when none was equipped."); - } - break; - case '3': - if (sender.User.EquipedCompetitionGear.Legs != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Legs.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Legs = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove competition gear when none was equipped."); - } - break; - case '4': - if (sender.User.EquipedCompetitionGear.Feet != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Feet.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Feet = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove competition gear when none was equipped."); - } - break; - case '5': - if (sender.User.EquipedJewelry.Slot1 != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot1.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedJewelry.Slot1 = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove jewery when none was equipped."); - } - break; - case '6': - if (sender.User.EquipedJewelry.Slot2 != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot2.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedJewelry.Slot2 = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove jewery when none was equipped."); - } - break; - case '7': - if (sender.User.EquipedJewelry.Slot3 != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot3.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedJewelry.Slot3 = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove jewery when none was equipped."); - } - break; - case '8': - if (sender.User.EquipedJewelry.Slot4 != null) - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot4.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedJewelry.Slot4 = null; - } - else - { - Logger.HackerPrint(sender.User.Username + " Attempted to remove jewery when none was equipped."); - } - break; - default: - Logger.InfoPrint(sender.User.Username + "Unimplemented \"remove worn item\" ItemInteraction packet: " + BitConverter.ToString(packet).Replace("-", " ")); - break; - } - - UpdateStats(sender); - if(toRemove >= '1' && toRemove <= '4') - { - byte[] itemRemovedMessage = PacketBuilder.CreateChat(Messages.RemoveCompetitionGear, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemRemovedMessage); - } - else if (toRemove >= '5' && toRemove <= '8') - { - byte[] itemRemovedMessage = PacketBuilder.CreateChat(Messages.RemoveJewelry, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemRemovedMessage); - } - - break; - case PacketBuilder.ITEM_THROW: - packetStr = Encoding.UTF8.GetString(packet); - string itemidStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int itemId = 0; - - try - { - itemId = Int32.Parse(itemidStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. (THROW) " + BitConverter.ToString(packet)); - return; - } - if (sender.User.Inventory.HasItemId(itemId)) - { - if (!Item.IsThrowable(itemId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to throw an item that isnt throwable."); - return; - } - - ItemInstance curItem = sender.User.Inventory.GetItemByItemId(itemId).ItemInstances[0]; - User[] userAt = GetReallyNearbyUsers(sender.User.X, sender.User.Y); - - while (true) - { - int userIndx = RandomNumberGenerator.Next(0, userAt.Length); - - if (userAt.Length > 1) - if (userAt[userIndx].Id == sender.User.Id) - continue; - - Item.ThrowableItem throwableItem = Item.GetThrowableItem(curItem.ItemId); - - if (userAt[userIndx].Id == sender.User.Id) - { - byte[] thrownHitYourself = PacketBuilder.CreateChat(throwableItem.HitYourselfMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(thrownHitYourself); - break; - } - if(itemId == Item.WaterBalloon) - { - if (WaterBalloonEvent != null) - if (WaterBalloonEvent.Active) - WaterBalloonEvent.AddWaterBallon(userAt[userIndx]); - } - if(itemId == Item.ModSplatterball) - { - ModsRevengeEvent.Payout(sender.User, userAt[userIndx]); - } - - byte[] thrownForYou = PacketBuilder.CreateChat(Messages.FormatThrownItemMessage(throwableItem.ThrowMessage, userAt[userIndx].Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - byte[] thrownForOthers = PacketBuilder.CreateChat(Messages.FormatThrownItemMessage(throwableItem.HitMessage, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - - sender.SendPacket(thrownForYou); - userAt[userIndx].Client.SendPacket(thrownForOthers); - - break; - } - - sender.User.Inventory.Remove(curItem); - UpdateInventory(sender); - - } - break; - case PacketBuilder.ITEM_WRAP: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - if (sender.User.Inventory.HasItem(randomId)) - { - ItemInstance curItem = sender.User.Inventory.GetItemByRandomid(randomId).ItemInstances[0]; - ItemInstance wrappedItem = new ItemInstance(Item.Present, -1, curItem.ItemId); - - try - { - sender.User.Inventory.Add(wrappedItem); - sender.User.Inventory.Remove(curItem); - } - catch(InventoryException) - { - byte[] cantWrapPresent = PacketBuilder.CreateChat(Messages.SantaCantWrapInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantWrapPresent); - UpdateArea(sender); - break; - } - } - byte[] wrappedObjectMessage = PacketBuilder.CreateChat(Messages.SantaWrappedObjectMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(wrappedObjectMessage); - UpdateArea(sender); - break; - case PacketBuilder.ITEM_OPEN: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - if (sender.User.Inventory.HasItem(randomId)) - { - InventoryItem item = sender.User.Inventory.GetItemByRandomid(randomId); - int newItem = item.ItemInstances[0].Data; - if(newItem == 0) - { - sender.User.Inventory.Remove(item.ItemInstances[0]); - - byte[] itemOpenFailedNothingInside = PacketBuilder.CreateChat(Messages.SantaCantOpenNothingInside, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemOpenFailedNothingInside); - - UpdateInventory(sender); - - break; - } - - try - { - sender.User.Inventory.Add(new ItemInstance(newItem)); - sender.User.Inventory.Remove(item.ItemInstances[0]); - } - catch(InventoryException) - { - byte[] cantOpenInvFull = PacketBuilder.CreateChat(Messages.SantaItemCantOpenInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantOpenInvFull); - break; - } - byte[] itemOpened = PacketBuilder.CreateChat(Messages.FormatSantaOpenPresent(Item.GetItemById(newItem).Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemOpened); - UpdateInventory(sender); - } - break; - case PacketBuilder.ITEM_USE: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - - if(randomIdStr == "") // f12 ranch shortcut - { - if (sender.User.Inventory.HasItemId(Item.DorothyShoes)) - { - InventoryItem itm = sender.User.Inventory.GetItemByItemId(Item.DorothyShoes); - Item.UseItem(sender.User, itm.ItemInstances[0]); - return; - } - else - { - byte[] noShoesMessage = PacketBuilder.CreateChat(Messages.RanchNoDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(noShoesMessage); - return; - } - } - - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - if (sender.User.Inventory.HasItem(randomId)) - { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); - Item.UseItem(sender.User, itm.ItemInstances[0]); - } - break; - case PacketBuilder.ITEM_WEAR: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - if (sender.User.Inventory.HasItem(randomId)) - { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); - ItemInstance instance = itm.ItemInstances[0]; - - Item.ItemInformation itemInf = instance.GetItemInfo(); - if(itemInf.Type == "CLOTHES") - { - switch (itemInf.GetMiscFlag(0)) - { - case CompetitionGear.MISC_FLAG_HEAD: - if (sender.User.EquipedCompetitionGear.Head == null) - sender.User.EquipedCompetitionGear.Head = itemInf; - else - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Head.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Head = itemInf; - } - break; - case CompetitionGear.MISC_FLAG_BODY: - if (sender.User.EquipedCompetitionGear.Body == null) - sender.User.EquipedCompetitionGear.Body = itemInf; - else - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Body.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Body = itemInf; - } - break; - case CompetitionGear.MISC_FLAG_LEGS: - if (sender.User.EquipedCompetitionGear.Legs == null) - sender.User.EquipedCompetitionGear.Legs = itemInf; - else - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Legs.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Legs = itemInf; - } - break; - case CompetitionGear.MISC_FLAG_FEET: - if (sender.User.EquipedCompetitionGear.Feet == null) - sender.User.EquipedCompetitionGear.Feet = itemInf; - else - { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Feet.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Feet = itemInf; - } - break; - default: - Logger.ErrorPrint(itemInf.Name + " Has unknown misc flags."); - return; - } - sender.User.Inventory.Remove(instance); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatEquipCompetitionGearMessage(itemInf.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - else if(itemInf.Type == "JEWELRY") - { - bool addedJewelry = false; - if (sender.User.EquipedJewelry.Slot1 == null) - { - sender.User.EquipedJewelry.Slot1 = itemInf; - addedJewelry = true; - } - else if (sender.User.EquipedJewelry.Slot2 == null) - { - sender.User.EquipedJewelry.Slot2 = itemInf; - addedJewelry = true; - } - else if (sender.User.EquipedJewelry.Slot3 == null) - { - sender.User.EquipedJewelry.Slot3 = itemInf; - addedJewelry = true; - } - else if (sender.User.EquipedJewelry.Slot4 == null) - { - sender.User.EquipedJewelry.Slot4 = itemInf; - addedJewelry = true; - } - - if(addedJewelry) - { - sender.User.Inventory.Remove(instance); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatJewerlyEquipMessage(itemInf.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - else - { - byte[] chatPacket = PacketBuilder.CreateChat(Messages.MaxJewelryMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - } - - UpdateInventory(sender); - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to wear an item they did not have."); - } - break; - case PacketBuilder.ITEM_DRINK: - packetStr = Encoding.UTF8.GetString(packet); - string idStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - if(idStr == "NaN") // Fountain - { - string msg = Messages.FountainDrankYourFull; - bool looseMoney = RandomNumberGenerator.Next(0, 20) == 18; - if(looseMoney) - { - int looseAmount = RandomNumberGenerator.Next(0, 100); - if (looseAmount > sender.User.Money) - looseAmount = sender.User.Money; - sender.User.TakeMoney(looseAmount); - msg = Messages.FormatDroppedMoneyMessage(looseAmount); - } - - sender.User.Thirst = 1000; - byte[] drankFromFountainMessage = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(drankFromFountainMessage); - } - else - { - Logger.ErrorPrint(sender.User.Username + "Sent unknown ITEM_DRINK command id: " + idStr); - } - break; - case PacketBuilder.ITEM_CONSUME: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - if (sender.User.Inventory.HasItem(randomId)) - { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); - ItemInstance instance = itm.ItemInstances[0]; - sender.User.Inventory.Remove(instance); - Item.ItemInformation itmInfo = instance.GetItemInfo(); - bool toMuch = Item.ConsumeItem(sender.User, itmInfo); - - byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatConsumeItemMessaege(itmInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - if (toMuch) - { - chatPacket = PacketBuilder.CreateChat(Messages.ConsumedButMaxReached, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - } - - UpdateInventory(sender); - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to consume an item they did not have."); - } - break; - case PacketBuilder.ITEM_DROP: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. (drop)"+BitConverter.ToString(packet)); - return; - } - - if(sender.User.Inventory.HasItem(randomId)) - { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); - ItemInstance instance = itm.ItemInstances[0]; - if(DroppedItems.GetItemsAt(sender.User.X, sender.User.Y).Length > 25) - { - byte[] tileIsFullPacket = PacketBuilder.CreateChat(Messages.DroppedItemTileIsFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(tileIsFullPacket); - break; - } - DroppedItems.AddItem(instance, sender.User.X, sender.User.Y); - sender.User.Inventory.Remove(instance); - byte[] chatPacket = PacketBuilder.CreateChat(Messages.DroppedAnItemMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(chatPacket); - UpdateInventory(sender); - - UpdateAreaForAll(sender.User.X, sender.User.Y, false, sender.User); - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to drop an item they did not have."); - } - break; - case PacketBuilder.ITEM_SHOVEL: - if (packet[2] != 0x14) - Logger.HackerPrint(sender.User.Username + " Used ITEM_SHOVEL with 3rd byte not 0x14."); - if (!Quest.UseTool(sender.User, Quest.Shovel, sender.User.X, sender.User.Y)) - { - byte[] ChatPacket = PacketBuilder.CreateChat(Messages.ShovelNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ChatPacket); - } - break; - case PacketBuilder.ITEM_RAKE: - if (packet[2] != 0x14) - Logger.HackerPrint(sender.User.Username + " Used ITEM_RAKE with 3rd byte not 0x14."); - if (!Quest.UseTool(sender.User, Quest.Rake, sender.User.X, sender.User.Y)) - { - byte[] ChatPacket = PacketBuilder.CreateChat(Messages.RakeNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ChatPacket); - } - break; - case PacketBuilder.ITEM_MAGNIFYING: - if (packet[2] != 0x14) - Logger.HackerPrint(sender.User.Username + " Used ITEM_MAGNIFYING with 3rd byte not 0x14."); - if (!Quest.UseTool(sender.User, Quest.MagnifyingGlass, sender.User.X, sender.User.Y)) - { - byte[] ChatPacket = PacketBuilder.CreateChat(Messages.MagnifyNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ChatPacket); - } - break; - case PacketBuilder.ITEM_BINOCULARS: - if (packet[2] != 0x14) - Logger.HackerPrint(sender.User.Username + " Used ITEM_BINOCULARS with 3rd byte not 0x14."); - if(!Quest.UseTool(sender.User, Quest.Binoculars, sender.User.X, sender.User.Y)) - { - byte[] ChatPacket = PacketBuilder.CreateChat(Messages.BinocularsNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ChatPacket); - } - break; - case PacketBuilder.ITEM_CRAFT: - packetStr = Encoding.UTF8.GetString(packet); - string craftIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int craftId = 0; - // Prevent crashing on non-int string. - try - { - craftId = Int32.Parse(craftIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " tried to craft using craft id NaN."); - return; - } - if(Workshop.CraftIdExists(craftId)) - { - Workshop.CraftableItem itm = Workshop.GetCraftId(craftId); - if(itm.MoneyCost <= sender.User.Money) // Check money - { - foreach(Workshop.RequiredItem reqItem in itm.RequiredItems) - { - if (sender.User.Inventory.HasItemId(reqItem.RequiredItemId)) - { - if (sender.User.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances.Length < reqItem.RequiredItemCount) - goto failMissingItem; - } - else - goto failMissingItem; - } - - // Finally create the items - try - { - sender.User.Inventory.Add(new ItemInstance(itm.GiveItemId)); - } - catch(InventoryException) - { - byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.WorkshopNoRoomInInventory, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inventoryFullMessage); - break; - } - sender.User.TakeMoney(itm.MoneyCost); - - // Remove the required items.. - foreach(Workshop.RequiredItem reqItem in itm.RequiredItems) - for(int i = 0; i < reqItem.RequiredItemCount; i++) - sender.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances[0]); - - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count++; - - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count >= 100) - sender.User.Awards.AddAward(Award.GetAwardById(22)); // Craftiness - if (sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count >= 1000) - sender.User.Awards.AddAward(Award.GetAwardById(23)); // Workmanship - - byte[] itemCraftSuccess = PacketBuilder.CreateChat(Messages.WorkshopCraftingSuccess, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(itemCraftSuccess); - break; - - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.WorkshopCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - break; - } - - failMissingItem: - { - byte[] missingItemMessage = PacketBuilder.CreateChat(Messages.WorkshopMissingRequiredItem, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(missingItemMessage); - break; - } - } - - break; - case PacketBuilder.ITEM_SELL: // Handles selling an item. - int totalSold = 1; - int message = 1; - - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - // Prevent crashing on non-int string. - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object sell packet."); - return; - } - - if (!sender.User.Inventory.HasItem(randomId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that they doesnt have in there inventory"); - return; - } - - InventoryItem invItem = sender.User.Inventory.GetItemByRandomid(randomId); - itemId = invItem.ItemId; - goto doSell; - case PacketBuilder.ITEM_SELL_ALL: - packetStr = Encoding.UTF8.GetString(packet); - string itemIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - itemId = 0; - // Prevent crashing on non-int string. - try - { - itemId = Int32.Parse(itemIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object sell packet."); - return; - } - - if (!sender.User.Inventory.HasItemId(itemId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that they doesnt have in there inventory"); - return; - } - invItem = sender.User.Inventory.GetItemByItemId(itemId); - - totalSold = invItem.ItemInstances.Length; - message = 2; - goto doSell; - doSell:; - - Item.ItemInformation itemInfo = Item.GetItemById(itemId); - Shop shop = sender.User.LastShoppedAt; - if (shop != null) - { - UInt64 sellPrice = Convert.ToUInt64(shop.CalculateSellCost(itemInfo) * Convert.ToUInt64(totalSold)); - if (shop.CanSell(itemInfo)) - { - // Check if goes over 2.1b - if (Convert.ToUInt64(sender.User.Money) + sellPrice > 2100000000) - { - byte[] cantSellMoneyCapCheck = PacketBuilder.CreateChat(Messages.CannotSellYoudGetTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantSellMoneyCapCheck); - break; - } - - // Remove items - for (int i = 0; i < totalSold; i++) - { - ItemInstance itemInstance = invItem.ItemInstances[0]; - sender.User.Inventory.Remove(itemInstance); - shop.Inventory.Add(itemInstance); - } - - if (sellPrice < 2147483647) // Sanity Check (yes i checked it earlier) - sender.User.AddMoney(Convert.ToInt32(sellPrice)); - - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - if(message == 1) - { - byte[] soldItemMessage = PacketBuilder.CreateChat(Messages.FormatSellMessage(itemInfo.Name, sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(soldItemMessage); - } - if(message == 2) - { - string name = itemInfo.Name; - - if (totalSold > 1) - name = itemInfo.PluralName; - - byte[] soldItemMessage = PacketBuilder.CreateChat(Messages.FormatSellAllMessage(name, sellPrice, totalSold), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(soldItemMessage); - } - - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that was not avalible to be sold."); - } - } - break; - - case PacketBuilder.ITEM_BUY_AND_CONSUME: - packetStr = Encoding.UTF8.GetString(packet); - itemIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - itemId = 0; - // Prevent crashing on non-int string. - try - { - itemId = Int32.Parse(itemIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object buy and consume packet."); - return; - } - if (!Item.ItemIdExist(itemId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to buy an itemid that doesnt even exist."); - break; - } - - Inn lastInn = sender.User.LastVisitedInn; - if (lastInn != null) - { - try - { - itemInfo = lastInn.GetStockedItem(itemId); - int price = lastInn.CalculateBuyCost(itemInfo); - if(sender.User.Money >= price) - { - sender.User.TakeMoney(price); - bool toMuch = Item.ConsumeItem(sender.User, itemInfo); - - string tooMuchMessage = Messages.ConsumedButMaxReached; - if (itemInfo.Effects.Length > 0) - if (itemInfo.Effects[0].EffectsWhat == "TIREDNESS") - tooMuchMessage = Messages.InnFullyRested; - if (itemInfo.Effects.Length > 1) - if (itemInfo.Effects[1].EffectsWhat == "TIREDNESS") - tooMuchMessage = Messages.InnFullyRested; - - byte[] enjoyedServiceMessage = PacketBuilder.CreateChat(Messages.FormatInnEnjoyedServiceMessage(itemInfo.Name, price), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(enjoyedServiceMessage); - - if(toMuch) - { - byte[] toMuchMessage = PacketBuilder.CreateChat(tooMuchMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(toMuchMessage); - } - - UpdateArea(sender); - } - else - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.InnCannotAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - } - } - catch(KeyNotFoundException) - { - Logger.HackerPrint(sender.User.Username + " Tried to buy and consume an item not stocked by the inn there standing on."); - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to buy and consume item while not in a inn."); - } - break; - - case PacketBuilder.ITEM_BUY: // Handles buying an item. - message = 1; - int count = 1; - goto doPurchase; - case PacketBuilder.ITEM_BUY_5: - message = 2; - count = 5; - goto doPurchase; - case PacketBuilder.ITEM_BUY_25: - message = 3; - count = 25; - doPurchase:; - packetStr = Encoding.UTF8.GetString(packet); - itemIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - itemId = 0; - // Prevent crashing on non-int string. - try - { - itemId = Int32.Parse(itemIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object buy packet."); - return; - } - - if(!Item.ItemIdExist(itemId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to buy an itemid that doesnt even exist."); - break; - } - - itemInfo = Item.GetItemById(itemId); - shop = sender.User.LastShoppedAt; - if (shop != null) - { - UInt64 buyCost = Convert.ToUInt64(shop.CalculateBuyCost(itemInfo) * Convert.ToUInt64(count)); - if (sender.User.Bids.Length > 0) - { - byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantBuyWhileAuctioning); - return; - } - - if (Convert.ToUInt64(sender.User.Money) < buyCost) - { - byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.CantAfford1, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(cantAffordMessage); - return; - } - if (shop.Inventory.HasItemId(itemId)) - { - if (shop.Inventory.GetItemByItemId(itemId).ItemInstances.Length < count) - { - Logger.HackerPrint(sender.User.Username + " Tried to buy more of an item than is in stock."); - break; - } - - - // Check we wont overflow the inventory - if (sender.User.Inventory.HasItemId(itemId)) - { - InventoryItem items = sender.User.Inventory.GetItemByItemId(itemId); - if (items.ItemInstances.Length + count > Item.MAX_STACK) - { - goto showError; - } - - } - else if(sender.User.Inventory.Count + 1 > sender.User.MaxItems) - { - goto showError; - } - - for (int i = 0; i < count; i++) - { - ItemInstance itemInstance = shop.Inventory.GetItemByItemId(itemId).ItemInstances[0]; - try - { - sender.User.Inventory.Add(itemInstance); - } - catch (InventoryException) - { - Logger.ErrorPrint("Failed to add: " + itemInfo.Name + " to " + sender.User.Username + " inventory."); - break; - } - shop.Inventory.Remove(itemInstance); - } - - if(buyCost < 2147483647) // Sanity Check (yes i checked it earlier) - sender.User.TakeMoney(Convert.ToInt32(buyCost)); - - - // Send chat message to client. - UpdateAreaForAll(sender.User.X, sender.User.Y, true); - if (message == 1) - { - byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuyMessage(itemInfo.Name, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(broughtItemMessage); - } - else if (message == 2) - { - byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuy5Message(itemInfo.PluralName, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(broughtItemMessage); - } - else if (message == 3) - { - byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuy25Message(itemInfo.PluralName, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(broughtItemMessage); - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to buy a item that was not for sale."); - } - } - else - { - Logger.HackerPrint(sender.User.Username + " Tried to buy an item while not in a store."); - } - - - break; - - showError:; - if (message == 1) - { - byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought1ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inventoryFullMessage); - } - else if (message == 2) - { - - byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought5ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inventoryFullMessage); - } - else if (message == 3) - { - - byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought25ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(inventoryFullMessage); - } - break; - case PacketBuilder.ITEM_RIP: - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - if (!sender.User.Inventory.HasItem(randomId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to rip someone elses mail. " + randomId.ToString()); - return; - } - - InventoryItem ripItems = sender.User.Inventory.GetItemByRandomid(randomId); - foreach (ItemInstance item in ripItems.ItemInstances) - { - if (item.RandomId == randomId) - { - if (item.Data == 0) - continue; - sender.User.MailBox.RipUpMessage(sender.User.MailBox.GetMessageByRandomId(item.Data)); - break; - } - } - break; - case PacketBuilder.ITEM_VIEW: - byte method = packet[2]; - if (method == PacketBuilder.ITEM_LOOK) - { - packetStr = Encoding.UTF8.GetString(packet); - itemIdStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - itemId = 0; - try - { - itemId = Int32.Parse(itemIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - if (itemId == Item.MailMessage) - { - if (!sender.User.Inventory.HasItemId(Item.MailMessage)) - { - Logger.ErrorPrint(sender.User.Username + " Tried to view a mail message when they didnt have one."); - return; - } - - sender.User.MajorPriority = true; - byte[] mailList = PacketBuilder.CreateMeta(Meta.BuildMailList(sender.User, sender.User.Inventory.GetItemByItemId(Item.MailMessage))); - sender.SendPacket(mailList); - break; - } - } - else if(method == PacketBuilder.ITEM_READ) - { - packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - randomId = 0; - try - { - randomId = Int32.Parse(randomIdStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); - return; - } - - if (!sender.User.Inventory.HasItem(randomId)) - { - Logger.HackerPrint(sender.User.Username + " Tried to view someone elses mail. " + randomId.ToString()); - return; - } - - InventoryItem items = sender.User.Inventory.GetItemByRandomid(randomId); - foreach (ItemInstance item in items.ItemInstances) - { - if (item.RandomId == randomId) - { - if (item.Data == 0) - continue; - - sender.User.MajorPriority = true; - byte[] readMail = PacketBuilder.CreateMeta(Meta.BuildMailLetter(sender.User.MailBox.GetMessageByRandomId(item.Data), randomId)); - sender.SendPacket(readMail); - break; - } - } - break; - - } - - - Logger.ErrorPrint(sender.User.Username + " Unknown Method- " + method.ToString("X") + " " + BitConverter.ToString(packet).Replace("-", " ")); - break; - case PacketBuilder.PACKET_INFORMATION: - packetStr = Encoding.UTF8.GetString(packet); - string valueStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - int value = 0; - try - { - value = Int32.Parse(valueStr); - } - catch (FormatException) - { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. "+BitConverter.ToString(packet)); - return; - } - if (packet[2] == PacketBuilder.ITEM_INFORMATON) - { - itemId = -1; - if (sender.User.Inventory.HasItem(value)) - itemId = sender.User.Inventory.GetItemByRandomid(value).ItemId; - else if (DroppedItems.IsDroppedItemExist(value)) - itemId = DroppedItems.GetDroppedItemById(value).Instance.ItemId; - if (itemId == -1) - { - Logger.HackerPrint(sender.User.Username + " asked for details of non existiant item."); - return; - } - sender.User.MajorPriority = true; - Item.ItemInformation info = Item.GetItemById(itemId); - string infoMessage = Meta.BuildItemInfo(info); - byte[] metaPacket = PacketBuilder.CreateMeta(infoMessage); - sender.SendPacket(metaPacket); - } - if (packet[2] == PacketBuilder.ITEM_INFORMATON_ID) - { - sender.User.MajorPriority = true; - if (!Item.ItemIdExist(value)) - { - Logger.HackerPrint(sender.User.Username + " asked for details of non existiant item."); - return; - } - - Item.ItemInformation info = Item.GetItemById(value); - string infoMessage = Meta.BuildItemInfo(info); - byte[] metaPacket = PacketBuilder.CreateMeta(infoMessage); - sender.SendPacket(metaPacket); - } - else if(packet[2] == PacketBuilder.NPC_INFORMATION) - { - if(Npc.NpcExists(value)) - { - sender.User.MajorPriority = true; - Npc.NpcEntry npc = Npc.GetNpcById(value); - string infoMessage = Meta.BuildNpcInfo(npc); - byte[] metaPacket = PacketBuilder.CreateMeta(infoMessage); - sender.SendPacket(metaPacket); - } - else - { - Logger.HackerPrint(sender.User.Username + " asked for details of non existiant npc."); - return; - } - } - - break; - default: - Logger.WarnPrint(sender.User.Username + " Sent an unknown Item Interaction Packet type: " + action.ToString() + ", Packet Dump: " + BitConverter.ToString(packet).Replace('-', ' ')); - break; - } - - } - public static void OnInventoryRequested(GameClient sender, byte[] packet) - { - if (!sender.LoggedIn) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent chat packet when not logged in."); - return; - } - - if (packet.Length < 1) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid inventory request packet."); - return; - } - - UpdateInventory(sender); - } - public static void OnUserLogin(GameClient sender, byte[] packet) - { - Logger.DebugPrint("Login request received from: " + sender.RemoteIp); - - string loginRequestString = Encoding.UTF8.GetString(packet).Substring(1); - - if (!loginRequestString.Contains('|') || packet.Length < 2) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid login request"); - return; - } - - if (packet[1] != PacketBuilder.PACKET_CLIENT_TERMINATOR) - { - string[] loginParts = loginRequestString.Split('|'); - if (loginParts.Length < 3) - { - Logger.ErrorPrint(sender.RemoteIp + " Sent a login request of invalid length. " + loginRequestString); - return; - } - - int version = int.Parse(loginParts[0]); - string encryptedUsername = loginParts[1]; - string encryptedPassword = loginParts[2]; - string username = Authentication.DecryptLogin(encryptedUsername); - string password = Authentication.DecryptLogin(encryptedPassword); - - if (Authentication.CheckPassword(username, password)) - { - // Obtain user information - int userId = Database.GetUserid(username); - - if(Database.IsUserBanned(userId)) - { - Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the account was banned."); - byte[] userBannedPacket = PacketBuilder.CreateLogin(false, Messages.LoginFailedReasonBanned); - sender.SendPacket(userBannedPacket); - return; - } - - if(Database.IsIpBanned(sender.RemoteIp)) - { - Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the IP was banned."); - byte[] ipBannedPacket = PacketBuilder.CreateLogin(false, Messages.FormatIpBannedMessage(sender.RemoteIp)); - sender.SendPacket(ipBannedPacket); - return; - } - - sender.Login(userId); - sender.User.Password = password; - - byte[] ResponsePacket = PacketBuilder.CreateLogin(true); - sender.SendPacket(ResponsePacket); - - Logger.DebugPrint(sender.RemoteIp + " Logged into : " + sender.User.Username + " (ADMIN: " + sender.User.Administrator + " MOD: " + sender.User.Moderator + ")"); - - } - else - { - Logger.WarnPrint(sender.RemoteIp + " Attempted to login to: " + username + " with incorrect password "); - byte[] ResponsePacket = PacketBuilder.CreateLogin(false); - sender.SendPacket(ResponsePacket); - } - } - - } - - public static void OnDisconnect(GameClient sender) - { - if (sender.LoggedIn) - { - Database.SetPlayerLastLogin(Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()), sender.User.Id); // Set last login date - Database.RemoveOnlineUser(sender.User.Id); - - // Leave multirooms - Multiroom.LeaveAllMultirooms(sender.User); - TwoPlayer.TwoPlayerRemove(sender.User); - - // Remove Trade Reference - sender.User.TradingWith = null; - sender.User.PendingTradeTo = 0; - - // Leave open water balloon game - if (WaterBalloonEvent != null) - if(WaterBalloonEvent.Active) - WaterBalloonEvent.LeaveEvent(sender.User); - - // Leave open quiz. - if (QuizEvent != null) - QuizEvent.LeaveEvent(sender.User); - - ModsRevengeEvent.LeaveEvent(sender.User); - - // Delete Arena Entries - if (Arena.UserHasEnteredHorseInAnyArena(sender.User)) - { - Arena arena = Arena.GetArenaUserEnteredIn(sender.User); - arena.DeleteEntry(sender.User); - } - - - // Send disconnect message - byte[] logoutMessageBytes = PacketBuilder.CreateChat(Messages.FormatLogoutMessage(sender.User.Username), PacketBuilder.CHAT_BOTTOM_LEFT); - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - if (!client.User.MuteLogins && !client.User.MuteAll) - if (client.User.Id != sender.User.Id) - client.SendPacket(logoutMessageBytes); - - // Tell clients of diconnect (remove from chat) - byte[] playerRemovePacket = PacketBuilder.CreatePlayerLeave(sender.User.Username); - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - if (client.User.Id != sender.User.Id) - client.SendPacket(playerRemovePacket); - } - - } - - /* - * Get(Some Information) - */ - - - public static bool IsUserOnline(int id) - { - try - { - GetUserById(id); - return true; - } - catch (KeyNotFoundException) - { - return false; - } - } - - public static User[] GetUsersInTown(World.Town town, bool includeStealth = false, bool includeMuted = false) - { - List usersInTown = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!includeMuted && client.User.MuteIsland) - continue; - if (World.InTown(client.User.X, client.User.Y)) - if (World.GetIsle(client.User.X, client.User.Y).Name == town.Name) - usersInTown.Add(client.User); - } - - return usersInTown.ToArray(); - } - public static User[] GetUsersInIsle(World.Isle isle, bool includeStealth = false, bool includeMuted = false) - { - List usersInIsle = new List(); - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!includeMuted && client.User.MuteIsland) - continue; - if (World.InIsle(client.User.X, client.User.Y)) - if (World.GetIsle(client.User.X, client.User.Y).Name == isle.Name) - usersInIsle.Add(client.User); - } - - return usersInIsle.ToArray(); - } - - public static User[] GetUsersOnSpecialTileCode(string code) - { - List userList = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - - if (World.InSpecialTile(client.User.X, client.User.Y)) - { - World.SpecialTile tile = World.GetSpecialTile(client.User.X, client.User.Y); - - if (tile.Code == code) - { - userList.Add(client.User); - } - } - } - } - return userList.ToArray(); - } - public static User[] GetUsersAt(int x, int y, bool includeStealth = false, bool includeMuted = false) - { - List usersHere = new List(); - foreach(GameClient client in GameClient.ConnectedClients) - { - if(client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!includeMuted && client.User.MuteNear) - continue; - if (client.User.X == x && client.User.Y == y) - usersHere.Add(client.User); - } - } - return usersHere.ToArray(); - } - public static User GetUserByNameStartswith(string username) - { - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (client.User.Username.ToLower().StartsWith(username.ToLower())) - return client.User; - } - } - throw new KeyNotFoundException("User was not found."); - } - - public static User GetUserByName(string username) - { - foreach(GameClient client in GameClient.ConnectedClients) - { - if(client.LoggedIn) - { - if (client.User.Username.ToLower() == username.ToLower()) - return client.User; - } - } - throw new KeyNotFoundException("User was not found."); - } - - public static User GetUserById(int id) - { - foreach(GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (client.User.Id == id) - return client.User; - } - - throw new KeyNotFoundException("User not found (not online?)"); - } - - public static User[] GetReallyNearbyUsers(int x, int y) - { - int startX = x - 3; - int endX = x + 3; - int startY = y - 3; - int endY = y + 3; - List usersNearby = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (startX <= client.User.X && endX >= client.User.X && startY <= client.User.Y && endY >= client.User.Y) - usersNearby.Add(client.User); - } - } - - return usersNearby.ToArray(); - } - - - public static bool IsOnScreen(int screenX, int screenY, int playerX, int playerY) - { - int startX = screenX - 9; - int endX = screenX + 9; - int startY = screenY - 8; - int endY = screenY + 9; - if (startX <= playerX && endX >= playerX && startY <= playerY && endY >= playerY) - return true; - else - return false; - } - public static User[] GetOnScreenUsers(int x, int y, bool includeStealth = false, bool includeMuted = false) - { - - List usersOnScreen = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!includeMuted && client.User.MuteNear) - continue; - if (IsOnScreen(x,y,client.User.X, client.User.Y)) - usersOnScreen.Add(client.User); - } - - return usersOnScreen.ToArray(); - } - - public static User[] GetNearbyUsers(int x, int y, bool includeStealth=false, bool includeMuted=false) - { - int startX = x - 15; - int endX = x + 15; - int startY = y - 19; - int endY = y + 19; - List usersNearby = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!includeMuted && client.User.MuteNear) - continue; - if (startX <= client.User.X && endX >= client.User.X && startY <= client.User.Y && endY >= client.User.Y) - usersNearby.Add(client.User); - } - } - - return usersNearby.ToArray(); - } - public static int GetNumberOfPlayers(bool includeStealth=false) - { - int count = 0; - foreach(GameClient client in GameClient.ConnectedClients) - if (client.LoggedIn) - { - if (!includeStealth && client.User.Stealth) - continue; - if (!client.User.Stealth) - count++; - } - - return count; - } - - public static Point[] GetAllBuddyLocations(User caller) - { - List allLocations = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - - if (!caller.Friends.List.Contains(client.User.Id)) - continue; - - - if (!client.User.Stealth) - allLocations.Add(new Point(client.User.X, client.User.Y)); - - } - } - - return allLocations.ToArray(); - } - - public static Point[] GetAllPlayerLocations(User caller) - { - List allLocations = new List(); - - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - { - - if (client.User.Id == caller.Id) - continue; - - if (!client.User.Stealth) - allLocations.Add(new Point(client.User.X, client.User.Y)); - - } - - - } - return allLocations.ToArray(); - } - public static int GetNumberOfPlayersListeningToAdsChat() - { - int count = 0; - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (!client.User.MuteAds) - count++; - } - return count; - } - - public static void CheckMail(User user) - { - if (user.MailBox.UnreadMailCount > 0) - { - - byte[] RipOffAOLSound = PacketBuilder.CreatePlaySound(Messages.MailSe); - user.Client.SendPacket(RipOffAOLSound); - - byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(mailReceivedText); - - user.MailBox.ReadAllMail(); - } - } - public static int GetNumberOfModsOnline() - { - int count = 0; - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if(client.User.Moderator) - count++; - } - return count; - } - - public static int GetNumberOfBuddiesOnline(User user) - { - int total = 0; - foreach(int bud in user.Friends.List.ToArray()) - { - if (IsUserOnline(bud)) - { - total++; - } - } - return total; - } - - public static int GetNumberOfAdminsOnline() - { - int count = 0; - foreach (GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (client.User.Administrator) - count++; - } - return count; - } - - /* - * Update game state functions. - */ - - public static void Update(GameClient client) - { - UpdateArea(client); - foreach (User nearbyUser in GameServer.GetNearbyUsers(client.User.X, client.User.Y, false, false)) - if (nearbyUser.Id != client.User.Id) - if(!nearbyUser.MajorPriority) - if(!nearbyUser.MinorPriority) - UpdateArea(nearbyUser.Client); - - UpdateUserFacingAndLocation(client.User); - } - - public static void UpdateDrawingForAll(string id, GameClient sender, string drawing, bool includingSender=false) - { - World.SpecialTile[] tiles = World.GetSpecialTilesByCode("MULTIROOM-" + id); - foreach (World.SpecialTile tile in tiles) - { - UpdateAreaForAll(tile.X, tile.Y, true, null); - User[] usersHere = GameServer.GetUsersAt(tile.X, tile.Y, true, true); - foreach (User user in usersHere) - { - if (!includingSender) - if (user.Id == sender.User.Id) - continue; - - byte[] patchDrawing = PacketBuilder.CreateDrawingUpdate(drawing); - user.Client.SendPacket(patchDrawing); - } - } - } - public static void UpdateHorseMenu(GameClient forClient, HorseInstance horseInst) - { - - forClient.User.MajorPriority = true; - - int TileID = Map.GetTileId(forClient.User.X, forClient.User.Y, false); - string type = Map.TerrainTiles[TileID - 1].Type; - - if (horseInst.Owner == forClient.User.Id) - forClient.User.LastViewedHorse = horseInst; - else - forClient.User.LastViewedHorseOther = horseInst; - - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseInformation(horseInst, forClient.User)); - forClient.SendPacket(metaPacket); - - string loadSwf = HorseInfo.BreedViewerSwf(horseInst, type); - byte[] swfPacket = PacketBuilder.CreateSwfModule(loadSwf, PacketBuilder.PACKET_SWF_MODULE_FORCE); - forClient.SendPacket(swfPacket); - } - public static void UpdateInventory(GameClient forClient) - { - if (!forClient.LoggedIn) - return; - forClient.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildInventoryInfo(forClient.User.Inventory)); - forClient.SendPacket(metaPacket); - } - - public static void UpdateWeather(GameClient forClient) - { - if (!forClient.LoggedIn) - { - Logger.ErrorPrint(forClient.RemoteIp + "tried to update weather information when not logged in."); - return; - } - - string lastWeather = forClient.User.LastSeenWeather; - string weather = forClient.User.GetWeatherSeen(); - if (lastWeather != weather) - { - byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdate(weather); - forClient.SendPacket(WeatherUpdate); - } - } - public static void UpdateWorld(GameClient forClient) - { - if (!forClient.LoggedIn) - { - Logger.ErrorPrint(forClient.RemoteIp + "tried to update world information when not logged in."); - return; - } - - byte[] WorldData = PacketBuilder.CreateTimeAndWeatherUpdate(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, forClient.User.GetWeatherSeen()); - forClient.SendPacket(WorldData); - } - public static void UpdatePlayer(GameClient forClient) - { - if (!forClient.LoggedIn) - { - Logger.ErrorPrint(forClient.RemoteIp + "tried to update player information when not logged in."); - return; - } - byte[] PlayerData = PacketBuilder.CreateMoneyPlayerCountAndMail(forClient.User.Money, GameServer.GetNumberOfPlayers(), forClient.User.MailBox.UnreadMailCount); - forClient.SendPacket(PlayerData); - } - - public static void UpdateUserFacingAndLocation(User user) - { - byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(user.X, user.Y, user.Facing, user.CharacterId, user.Username); - - foreach (User onScreenUser in GetOnScreenUsers(user.X, user.Y, true, true)) - if (onScreenUser.Id != user.Id) - onScreenUser.Client.SendPacket(playerInfoBytes); - } - public static void UpdateAreaForAll(int x, int y, bool ignoreMetaPrio=false, User exceptMe=null) - { - foreach(GameClient client in GameClient.ConnectedClients) - { - if (client.LoggedIn) - if (client.User.X == x && client.User.Y == y) - if(!client.User.MinorPriority || ignoreMetaPrio) - if(!client.User.MajorPriority) - if(client.User != exceptMe) - UpdateArea(client); - } - } - - public static void UpdateArea(GameClient forClient) - { - if(forClient == null) - { - Logger.ErrorPrint(forClient.RemoteIp + "tried to update tile information when not connected."); - return; - } - if (!forClient.LoggedIn) - { - Logger.ErrorPrint(forClient.RemoteIp + "tried to update tile information when not logged in."); - return; - } - - if(forClient.User.TradingWith != null) - { - if (!forClient.User.TradingWith.OtherTrade.Trader.Client.LoggedIn) - { - forClient.User.TradingWith.InteruptTrade(); - return; - } - - if (forClient.User.TradingWith.OtherTrade.Trader.TradingWith == null) - { - forClient.User.TradingWith.InteruptTrade(); - return; - } - - forClient.User.MajorPriority = true; - forClient.User.TradeMenuPriority = false; - byte[] tradeMeta = PacketBuilder.CreateMeta(Meta.BuildTrade(forClient.User.TradingWith)); - forClient.SendPacket(tradeMeta); - return; - } - - forClient.User.MajorPriority = false; - forClient.User.MinorPriority = false; - - string locationStr; - - int tileX = forClient.User.X; - int tileY = forClient.User.Y; - if (!World.InSpecialTile(tileX, tileY)) - { - if (forClient.User.InRealTimeQuiz) - return; - locationStr = Meta.BuildMetaInfo(forClient.User, tileX, tileY); - } - else - { - World.SpecialTile specialTile = World.GetSpecialTile(tileX, tileY); - if (specialTile.AutoplaySwf != null && specialTile.AutoplaySwf != "") - { - byte[] swfModulePacket = PacketBuilder.CreateSwfModule(specialTile.AutoplaySwf,PacketBuilder.PACKET_SWF_MODULE_GENTLE); - forClient.SendPacket(swfModulePacket); - } - - if (forClient.User.InRealTimeQuiz && QuizEvent != null) - { - QuizEvent.JoinEvent(forClient.User).UpdateParticipent(); - return; - } - - if (specialTile.Code != null) - if (!ProcessMapCodeWithArg(forClient, specialTile)) - return; - locationStr = Meta.BuildSpecialTileInfo(forClient.User, specialTile); - } - - - byte[] areaMessage = PacketBuilder.CreateMeta(locationStr); - forClient.SendPacket(areaMessage); - - } - public static void UpdateStats(GameClient client) - { - if (!client.LoggedIn) - return; - - client.User.MajorPriority = true; - string metaWind = Meta.BuildStatsMenu(client.User); - byte[] statsPacket = PacketBuilder.CreateMeta(metaWind); - client.SendPacket(statsPacket); - - } - - /* - * Other... - */ - - public static void AddItemToAllUsersEvenOffline(int itemId, int itemCount) - { - int[] allUsers = Database.GetUsers(); - foreach (int userid in allUsers) - { - for (int i = 0; i < itemCount; i++) - { - ItemInstance itm = new ItemInstance(itemId); - - if (GameServer.IsUserOnline(userid)) - GameServer.GetUserById(userid).Inventory.AddWithoutDatabase(itm); - - Database.AddItemToInventory(userid, itm); - } - } - } - - public static void RemoveAllItemsOfIdInTheGame(int id) - { - // Remove from all online players - foreach (GameClient connectedClient in GameClient.ConnectedClients) - { - if (connectedClient.LoggedIn) - { - if (connectedClient.User.Inventory.HasItemId(id)) - { - InventoryItem invItm = connectedClient.User.Inventory.GetItemByItemId(id); - foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) - connectedClient.User.Inventory.Remove(itm); - } - } - } - - // Remove from shops - foreach(Shop shop in Shop.ShopList) - { - if (shop.Inventory.HasItemId(id)) - { - InventoryItem invItm = shop.Inventory.GetItemByItemId(id); - foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) - shop.Inventory.Remove(itm); - } - - } - DroppedItems.DeleteAllItemsWithId(id); // Delete all dropped items - Database.DeleteAllItemsFromUsers(id); // Delete from offline players - } - - public static void StartRidingHorse(GameClient sender, int horseRandomId) - { - HorseInstance horseMountInst = sender.User.HorseInventory.GetHorseById(horseRandomId); - - if (horseMountInst.Breed.Type != "unicorn" && horseMountInst.Breed.Type != "pegasus") - { - if (horseMountInst.Equipment.Saddle == null || horseMountInst.Equipment.SaddlePad == null || horseMountInst.Equipment.Bridle == null) - { - byte[] horseNotTackedMessage = PacketBuilder.CreateChat(Messages.HorseCannotMountUntilTackedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(horseNotTackedMessage); - return; - } - } - - - string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseMountInst.Name); - byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(ridingHorseMessagePacket); - - sender.User.CurrentlyRidingHorse = horseMountInst; - - // Determine what sprite to use; - int incBy = 0; - switch (horseMountInst.Color) - { - case "brown": - incBy = 1; - break; - case "cremello": - case "white": - incBy = 2; - break; - case "black": - incBy = 3; - break; - case "chestnut": - incBy = 4; - break; - case "bay": - incBy = 5; - break; - case "grey": - incBy = 6; - break; - case "dun": - incBy = 7; - break; - case "palomino": - incBy = 8; - break; - case "roan": - incBy = 9; - break; - case "pinto": - incBy = 10; - break; - } - - - if (horseMountInst.Breed.Type == "zebra") - { - incBy = 11; - } - if (horseMountInst.Breed.Id == 5) // Appaloosa - { - if (horseMountInst.Color == "cremello") - incBy = 12; - } - if (horseMountInst.Breed.Type == "camel") - { - sender.User.Awards.AddAward(Award.GetAwardById(40)); // Camel Rider - - incBy = 13; - } - if(horseMountInst.Breed.Type == "llama") - { - sender.User.Awards.AddAward(Award.GetAwardById(41)); // Llama Rider - - incBy = 14; - } - if (horseMountInst.Breed.Type == "unicorn") - { - incBy = 15; - } - if (horseMountInst.Breed.Type == "pegasus") - { - incBy = 16; - } - if (horseMountInst.Breed.Id == 170) // Unipeg - { - incBy = 17; - } - - incBy *= 5; - sender.User.Facing %= 5; - sender.User.Facing += incBy; - sender.User.LastRiddenHorse = horseRandomId; - - UpdateUserFacingAndLocation(sender.User); - - byte[] updatePlayer = PacketBuilder.CreateMovement(sender.User.X, sender.User.Y, sender.User.CharacterId, sender.User.Facing, PacketBuilder.DIRECTION_NONE, true); - sender.SendPacket(updatePlayer); - - if (sender.User.HorseWindowOpen) - UpdateArea(sender); - } - public static void DoItemPurchases(GameClient sender) - { - if (!sender.LoggedIn) - return; - - Item.ItemPurchaseQueueItem[] queueItems = Database.GetItemPurchaseQueue(sender.User.Id); - foreach (Item.ItemPurchaseQueueItem queueItem in queueItems) - { - for (int i = 0; i < queueItem.ItemCount; i++) - { - sender.User.Inventory.AddIgnoringFull(new ItemInstance(queueItem.ItemId)); - } - } - Database.ClearItemPurchaseQueue(sender.User.Id); - - } - public static void StopRidingHorse(GameClient sender) - { - sender.User.CurrentlyRidingHorse = null; - - sender.User.Facing %= 5; - UpdateUserFacingAndLocation(sender.User); - - byte[] updatePlayer = PacketBuilder.CreateMovement(sender.User.X, sender.User.Y, sender.User.CharacterId, sender.User.Facing, PacketBuilder.DIRECTION_NONE, true); - sender.SendPacket(updatePlayer); - - if (sender.User.HorseWindowOpen) - UpdateArea(sender); - } - public static bool ProcessMapCodeWithArg(GameClient forClient, World.SpecialTile tile) - { - string mapCode = tile.Code; - if (mapCode == null) - return false; - if(mapCode.Contains('-')) - { - string[] codeInfo = mapCode.Split('-'); - string command = codeInfo[0]; - string paramaters = codeInfo[1]; - - if(command == "JUMP") - { - if(paramaters.Contains(',')) - { - string[] args = paramaters.Split(','); - try - { - int newX = int.Parse(args[0]); - int newY = int.Parse(args[1]); - forClient.User.Teleport(newX, newY); - if (World.InIsle(tile.X, tile.Y)) - { - World.Isle isle = World.GetIsle(tile.X, tile.Y); - int tileset = isle.Tileset; - int overlay = Map.GetTileId(tile.X, tile.Y, true); - if (tileset == 6 && overlay == 249) // warp point - { - byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - forClient.SendPacket(swfPacket); - } - } - return false; - } - catch(Exception) - { - return true; - } - } - } - } - if(mapCode == "HAMMOCK") - { - byte[] hammockText = PacketBuilder.CreateChat(Messages.HammockText, PacketBuilder.CHAT_BOTTOM_RIGHT); - forClient.SendPacket(hammockText); - - forClient.User.Tiredness = 1000; - foreach(HorseInstance horse in forClient.User.HorseInventory.HorseList) - { - horse.BasicStats.Tiredness = 1000; - } - } - return true; - } - public static void OnShutdown() - { - if(ServerSocket != null) - ServerSocket.Dispose(); - if (gameTimer != null) - gameTimer.Dispose(); - if (minuteTimer != null) - minuteTimer.Dispose(); - } - public static void ShutdownServer(string shutdownReason = "No reason provided.") - { - Logger.InfoPrint("Server shutting down; " + shutdownReason); - try - { - GameClient.OnShutdown(shutdownReason); - GameServer.OnShutdown(); - Database.OnShutdown(); - } - catch (Exception) { } - - Entry.OnShutdown(); - } - - - public static void StartServer() - { - ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - IPAddress hostIP = IPAddress.Parse(ConfigReader.BindIP); - IPEndPoint ep = new IPEndPoint(hostIP, ConfigReader.Port); - ServerSocket.Bind(ep); - ServerSocket.Listen(0xFFFF); - gameTimer = new Timer(new TimerCallback(onGameTick), null, gameTickSpeed, gameTickSpeed); - minuteTimer = new Timer(new TimerCallback(onMinuteTick), null, oneMinute, oneMinute); - Logger.InfoPrint("Binding to ip: " + ConfigReader.BindIP + " On port: " + ConfigReader.Port.ToString()); - - - SocketAsyncEventArgs e = new SocketAsyncEventArgs(); - e.Completed += GameClient.CreateClient; - GameClient.CreateClient(null, e); - } - - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Drawing; + +using HISP.Player; +using HISP.Game; +using HISP.Security; +using HISP.Game.Chat; +using HISP.Player.Equips; +using HISP.Game.Services; +using HISP.Game.Inventory; +using HISP.Game.SwfModules; +using HISP.Game.Horse; +using HISP.Game.Events; +using HISP.Game.Items; +using System.Diagnostics; + +namespace HISP.Server +{ + public class GameServer + { + + public static Socket ServerSocket; + + public static int IdleTimeout; + public static int IdleWarning; + + public static Random RandomNumberGenerator = new Random(); + + // Events + public static RealTimeRiddle RiddleEvent = RealTimeRiddle.GetRandomRiddle(); + public static TackShopGiveaway TackShopGiveawayEvent = null; + public static RealTimeQuiz QuizEvent = null; + public static WaterBalloonGame WaterBalloonEvent = new WaterBalloonGame(); + public static IsleCardTradingGame IsleCardTrading; + public static ModsRevenge ModsRevengeEvent = new ModsRevenge(); + + /* + * Private stuff + */ + private static int gameTickSpeed = 480; // Changing this to ANYTHING else will cause desync with the client. + private static int totalMinutesElapsed = 0; + private static int oneMinute = 1000 * 60; + private static Timer gameTimer; // Controls in-game time. + private static Timer minuteTimer; // ticks every real world minute. + private static int lastServerTime = 0; + private static void onGameTick(object state) + { + World.TickWorldClock(); + if(World.ServerTime.Minutes != lastServerTime) + { + lastServerTime = World.ServerTime.Minutes; + + // Start all events with this RaceEvery set. + Arena.StartArenas(World.ServerTime.Minutes); + + // Decrement horse train timer + Database.DecHorseTrainTimeout(); + + // Write time to database: + Database.SetServerTime(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years); + + // Ranch Windmill Payments + if (World.ServerTime.Minutes % 720 == 0) // every 12 hours + { + Logger.DebugPrint("Paying windmill owners . . . "); + foreach (Ranch ranch in Ranch.Ranches) + { + int ranchOwner = ranch.OwnerId; + if (ranchOwner != -1) + { + int moneyToAdd = 5000 * ranch.GetBuildingCount(8); // Windmill + if (GameServer.IsUserOnline(ranchOwner)) + GameServer.GetUserById(ranchOwner).AddMoney(moneyToAdd); + else + { + try + { + Database.SetPlayerMoney(Database.GetPlayerMoney(ranchOwner) + moneyToAdd, ranchOwner); + } + catch (OverflowException) + { + Database.SetPlayerMoney(2147483647, ranchOwner); + } + } + } + } + } + + if((World.StartDate != -1)) // Birthday tokens + { + int curTime = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + if (curTime >= World.StartDate + 378691200) + { + Logger.InfoPrint("Your server has been running for 12 years! Adding birthday tokens"); + Database.SetStartTime(-1); + World.StartDate = -1; + + + AddItemToAllUsersEvenOffline(Item.BirthdayToken, 10); + } + + } + + gameTimer.Change(gameTickSpeed, gameTickSpeed); + } + + } + private static void onMinuteTick(object state) + { + totalMinutesElapsed++; + + if (totalMinutesElapsed % 8 == 0) + { + Database.IncAllUsersFreeTime(1); + } + + if (totalMinutesElapsed % 25 == 0) + { + + Logger.DebugPrint("Randomizing Weather..."); + foreach (World.Town town in World.Towns) + { + if (RandomNumberGenerator.Next(0, 100) < 25) + { + town.Weather = town.SelectRandomWeather(); + } + } + + foreach (World.Isle isle in World.Isles) + { + if (RandomNumberGenerator.Next(0, 100) < 25) + { + isle.Weather = isle.SelectRandomWeather(); + } + } + } + + /* + * EVENTS + */ + + // Mods Revenge + if(totalMinutesElapsed % ((60*8)+15) == 0) + { + ModsRevengeEvent.StartEvent(); + } + + // Isle Card Trading Game + if(totalMinutesElapsed % (60 *2) == 0) + { + IsleCardTrading = new IsleCardTradingGame(); + IsleCardTrading.StartEvent(); + } + + // Water Balloon Game + if(totalMinutesElapsed % (60 * 2) == 0) + { + WaterBalloonEvent.StartEvent(); + } + + // Tack Shop Giveaway + if(totalMinutesElapsed % ((60 * 3)+5) == 0) + { + TackShopGiveawayEvent = new TackShopGiveaway(); + TackShopGiveawayEvent.StartEvent(); + } + + // Real Time Riddle + if(totalMinutesElapsed % (RealTimeRiddle.LastWon ? 20 : 15) == 0) + { + RiddleEvent = RealTimeRiddle.GetRandomRiddle(); + RiddleEvent.StartEvent(); + } + + // Real Time Quiz + if(totalMinutesElapsed % (60 + 30) == 0) + { + QuizEvent = new RealTimeQuiz(); + QuizEvent.StartEvent(); + } + + + if (totalMinutesElapsed % 60 == 0) // Do spoils + { + foreach (HorseInstance horse in Database.GetMostSpoiledHorses()) + { + horse.BasicStats.Health = 1000; + horse.BasicStats.Mood = 1000; + horse.BasicStats.Hunger = 1000; + horse.BasicStats.Thirst = 1000; + } + } + + if (totalMinutesElapsed % 5 == 0) + { + Treasure.AddValue(); + } + + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client == null) + continue; + + if (client.LoggedIn) + { + if (!client.LoggedinUser.MajorPriority) + if(!client.LoggedinUser.MinorPriority) + UpdateArea(client); + byte[] BaseStatsPacketData = PacketBuilder.CreatePlayerData(client.LoggedinUser.Money, GameServer.GetNumberOfPlayers(), client.LoggedinUser.MailBox.UnreadMailCount); + client.SendPacket(BaseStatsPacketData); + + UpdateWorld(client); + UpdatePlayer(client); + } + } + + foreach(Auction auction in Auction.AuctionRooms.ToArray()) + { + foreach(Auction.AuctionEntry entry in auction.AuctionEntries.ToArray()) + { + entry.TimeRemaining--; + if (entry.Completed) + auction.DeleteEntry(entry); + else if (entry.TimeRemaining <= 0) + entry.Completed = true; + + auction.UpdateAuctionRoom(); + } + } + + + + Database.IncPlayerTirednessForOfflineUsers(); + + // Offline player handling w sql black magic... + + Database.DecrementHorseLeaseTimeForOfflinePlayers(); + Database.TpOfflinePlayersBackToUniterForOfflinePlayers(); + Database.DeleteExpiredLeasedHorsesForOfflinePlayers(); + + DroppedItems.DespawnItems(); + DroppedItems.GenerateItems(); + + + WildHorse.Update(); + Npc.WanderNpcs(); + minuteTimer.Change(oneMinute, oneMinute); + } + + /* + * This section is where all the event handlers live, + * eg: OnMovementPacket is whenever the server receies a movement request from the client. + */ + + + public static void OnCrossdomainPolicyRequest(GameClient sender, byte[] packet) + { + if (Encoding.UTF8.GetString(packet).StartsWith("")) + { + Logger.DebugPrint("Cross-Domain-Policy request received from: " + sender.RemoteIp); + byte[] crossDomainPolicyResponse = CrossDomainPolicy.GetPolicy(); + sender.SendPacket(crossDomainPolicyResponse); + + } + } + + public static void OnPlayerInteration(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in."); + return; + } + byte method = packet[1]; + switch(method) + { + case PacketBuilder.PLAYER_INTERACTION_TRADE_REJECT: + if (sender.LoggedinUser.TradingWith != null) + sender.LoggedinUser.TradingWith.CancelTrade(); + break; + case PacketBuilder.PLAYER_INTERACTION_ACCEPT: + if (sender.LoggedinUser.TradingWith != null) + sender.LoggedinUser.TradingWith.AcceptTrade(); + break; + case PacketBuilder.PLAYER_INTERACTION_PROFILE: + string packetStr = Encoding.UTF8.GetString(packet); + string playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + int playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to view profile of User ID NaN."); + break; + } + + if(IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + sender.LoggedinUser.MajorPriority = true; + + byte[] metaTag = PacketBuilder.CreateMetaPacket(Meta.BuildStatsMenu(user, true)); + sender.SendPacket(metaTag); + } + break; + case PacketBuilder.PLAYER_INTERACTION_MUTE: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to MUTE User ID NaN."); + break; + } + + if (IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + if(!sender.LoggedinUser.MutePlayer.IsUserMuted(user)) + sender.LoggedinUser.MutePlayer.MuteUser(user); + + byte[] nowMuting = PacketBuilder.CreateChat(Messages.FormatNowMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(nowMuting); + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerListMenu(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + } + break; + case PacketBuilder.PLAYER_INTERACTION_UNMUTE: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to UNMUTE User ID NaN."); + break; + } + + if (IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + if (sender.LoggedinUser.MutePlayer.IsUserMuted(user)) + sender.LoggedinUser.MutePlayer.UnmuteUser(user); + + byte[] stoppedMuting = PacketBuilder.CreateChat(Messages.FormatStoppedMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(stoppedMuting); + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerListMenu(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + } + break; + case PacketBuilder.PLAYER_INTERACTION_REMOVE_BUDDY: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to remove User ID NaN as a buddy."); + break; + } + + + if(sender.LoggedinUser.Friends.IsFriend(playerId)) + { + sender.LoggedinUser.Friends.RemoveFriend(playerId); + + byte[] friendRemoved = PacketBuilder.CreateChat(Messages.FormatAddBuddyRemoveBuddy(Database.GetUsername(playerId)), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(friendRemoved); + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerListMenu(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + } + + break; + case PacketBuilder.PLAYER_INTERACTION_TAG: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to trade with User ID NaN."); + break; + } + + if (IsUserOnline(playerId)) + { + User user = GetUserById(playerId);; + string TAGYourIT = Messages.FormatTagYourIt(user.Username, sender.LoggedinUser.Username); + int totalBuds = 0; + foreach(int friendId in sender.LoggedinUser.Friends.List) + { + if (friendId == sender.LoggedinUser.Id) + continue; + + if(IsUserOnline(friendId)) + { + User buddy = GetUserById(friendId); + byte[] tagYourItPacket = PacketBuilder.CreateChat(TAGYourIT, PacketBuilder.CHAT_BOTTOM_RIGHT); + buddy.LoggedinClient.SendPacket(tagYourItPacket); + totalBuds++; + } + } + string budStr = Messages.FormatTagTotalBuddies(totalBuds); + + byte[] tagYouItPacket = PacketBuilder.CreateChat(TAGYourIT + budStr, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tagYouItPacket); + + } + break; + case PacketBuilder.PLAYER_INTERACTION_ADD_BUDDY: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to add friend with User ID NaN."); + break; + } + if (IsUserOnline(playerId)) + { + User userToAdd = GetUserById(playerId); + sender.LoggedinUser.Friends.AddFriend(userToAdd); + } + break; + case PacketBuilder.PLAYER_INTERACTION_ADD_ITEM: + if (sender.LoggedinUser.TradingWith == null) + break; + if (packet.Length < 5) + break; + + packetStr = Encoding.UTF8.GetString(packet); + string idStr = packetStr.Substring(2, packetStr.Length - 4); + char firstChar = idStr[0]; + switch(firstChar) + { + case '3': // Trade Money + + if (sender.LoggedinUser.Bids.Length > 0) + { + byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantBuyWhileAuctioning); + break; + } + + sender.LoggedinUser.TradeMenuPriority = true; + sender.LoggedinUser.AttemptingToOfferItem = -1; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddMoney(sender.LoggedinUser.TradingWith.MoneyOffered)); + sender.SendPacket(metaPacket); + + break; + case '2': // Trade Horse + string horseRandomIdStr = idStr.Substring(1); + int horseRandomId = -1; + try + { + horseRandomId = int.Parse(horseRandomIdStr); + } + catch (FormatException) + { + break; + } + + if (!sender.LoggedinUser.HorseInventory.HorseIdExist(horseRandomId)) + break; + + HorseInstance horse = sender.LoggedinUser.HorseInventory.GetHorseById(horseRandomId); + if(!sender.LoggedinUser.TradingWith.HorsesOffered.Contains(horse)) + sender.LoggedinUser.TradingWith.OfferHorse(horse); + + UpdateArea(sender); + + if (sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + + break; + case '1': // Trade Item + string itemIdStr = idStr.Substring(1); + int itemId = -1; + try + { + itemId = int.Parse(itemIdStr); + } + catch(FormatException) + { + break; + } + + if (!sender.LoggedinUser.Inventory.HasItemId(itemId)) + break; + + sender.LoggedinUser.TradeMenuPriority = true; + sender.LoggedinUser.AttemptingToOfferItem = itemId; + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); + byte[] addItemPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddItem(item.ItemInstances.Length)); + sender.SendPacket(addItemPacket); + break; + + } + break; + case PacketBuilder.PLAYER_INTERACTION_TRADE: + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to trade with User ID NaN."); + break; + } + if(IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + byte[] tradeMsg = PacketBuilder.CreateChat(Messages.TradeRequiresBothPlayersMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tradeMsg); + + sender.LoggedinUser.PendingTradeTo = user.Id; + + if (user.PendingTradeTo == sender.LoggedinUser.Id) + { + // Start Trade + Trade tradeWithYou = new Trade(sender.LoggedinUser); + Trade tradeWithOther = new Trade(user); + tradeWithYou.OtherTrade = tradeWithOther; + tradeWithOther.OtherTrade = tradeWithYou; + + sender.LoggedinUser.TradingWith = tradeWithYou; + user.TradingWith = tradeWithOther; + + UpdateArea(sender); + UpdateArea(user.LoggedinClient); + } + + } + break; + default: + Logger.DebugPrint("Unknown Player interaction Method: 0x" + method.ToString("X") + " Packet: "+BitConverter.ToString(packet).Replace("-", " ")); + break; + } + return; + } + public static void OnSocialPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Tried to be socialable, but has no account and therefor no friends."); + return; + } + byte method = packet[1]; + + switch (method) + { + case PacketBuilder.SOCIALS_MENU: + string packetStr = Encoding.UTF8.GetString(packet); + string playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + int playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to socialize with User ID NaN."); + break; + } + + if(IsUserOnline(playerId)) + { + sender.LoggedinUser.SocializingWith = GetUserById(playerId); + + sender.LoggedinUser.SocializingWith.AddSocailizedWith(sender.LoggedinUser); + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildSocialMenu(sender.LoggedinUser.CurrentlyRidingHorse != null)); + sender.SendPacket(metaPacket); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to socialize with User #"+playerId.ToString()+" but there not online."); + } + break; + case PacketBuilder.SOCIALS_USE: + int socialId = Convert.ToInt32(packet[2] - (byte)0x21); + SocialType.Social social = SocialType.GetSocial(socialId); + /* + * Check if player being socialed with + * is actually on this tile, not muted, etc + */ + if (sender.LoggedinUser.SocializingWith != null && social.BaseSocialType.Type != "GROUP") + { + if (sender.LoggedinUser.SocializingWith.MuteAll || sender.LoggedinUser.SocializingWith.MuteSocials) + { + byte[] cantSocialize = PacketBuilder.CreateChat(Messages.PlayerIgnoringAllSocials, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSocialize); + break; + } + + if (sender.LoggedinUser.SocializingWith.MutePlayer.IsUserMuted(sender.LoggedinUser)) + { + byte[] cantSocialize = PacketBuilder.CreateChat(Messages.PlayerIgnoringYourSocials, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSocialize); + break; + } + + if(sender.LoggedinUser.SocializingWith.X != sender.LoggedinUser.X && sender.LoggedinUser.SocializingWith.Y != sender.LoggedinUser.Y) + { + byte[] playerNotNearby = PacketBuilder.CreateChat(Messages.SocialPlayerNoLongerNearby, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(playerNotNearby); + break; + } + } + + + if(social.ForEveryone != null) + { + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true)) + { + if (social.BaseSocialType.Type != "GROUP") + if (user.Id == sender.LoggedinUser.SocializingWith.Id) + continue; + + if (user.Id == sender.LoggedinUser.Id) + continue; + + if (user.MuteAll || user.MuteSocials) + continue; + string socialTarget = ""; + if(sender.LoggedinUser.SocializingWith != null) + socialTarget = sender.LoggedinUser.SocializingWith.Username; + byte[] msgEveryone = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForEveryone, socialTarget, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(msgEveryone); + } + + } + if(social.ForTarget != null) + { + if(sender.LoggedinUser.SocializingWith != null) + { + if (social.BaseSocialType.Type != "GROUP") + { + byte[] msgTarget = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForTarget, sender.LoggedinUser.SocializingWith.Username, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.LoggedinUser.SocializingWith.LoggedinClient.SendPacket(msgTarget); + } + } + } + if(social.ForSender != null) + { + string socialTarget = ""; + if (sender.LoggedinUser.SocializingWith != null) + socialTarget = sender.LoggedinUser.SocializingWith.Username; + + byte[] msgSender = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForSender, socialTarget, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msgSender); + + + } + + if (social.SoundEffect != null) + { + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true)) + { + + if (user.MuteAll || user.MuteSocials) + continue; + + byte[] soundEffect = PacketBuilder.CreatePlaysoundPacket(social.SoundEffect); + user.LoggedinClient.SendPacket(soundEffect); + } + } + + break; + default: + Logger.ErrorPrint(sender.LoggedinUser.Username + " unknown social: " + method.ToString("X") + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); + break; + } + + } + public static void OnBirdMapRequested(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in."); + return; + } + + if(sender.LoggedinUser.Inventory.HasItemId(Item.Telescope)) + { + byte[] birdMapPacket = PacketBuilder.CreateBirdMap(sender.LoggedinUser.X, sender.LoggedinUser.Y); + sender.SendPacket(birdMapPacket); + } + else + { + byte[] noTelescopeMessage = PacketBuilder.CreateChat(Messages.NoTelescope, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(noTelescopeMessage); + } + } + + public static void OnAuctionPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent auction packet when not logged in."); + return; + } + if (packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized auction packet: " + BitConverter.ToString(packet).Replace("-", " ")); + return; + } + byte method = packet[1]; + int bidAmount = 0; + switch (method) + { + case PacketBuilder.AUCTION_BID_100: + bidAmount = 100; + goto doBids; + case PacketBuilder.AUCTION_BID_1K: + bidAmount = 1000; + goto doBids; + case PacketBuilder.AUCTION_BID_10K: + bidAmount = 10000; + goto doBids; + case PacketBuilder.AUCTION_BID_100K: + bidAmount = 100000; + goto doBids; + case PacketBuilder.AUCTION_BID_1M: + bidAmount = 1000000; + goto doBids; + case PacketBuilder.AUCTION_BID_10M: + bidAmount = 10000000; + goto doBids; + case PacketBuilder.AUCITON_BID_100M: + bidAmount = 100000000; + doBids:; + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if(tile.Code.StartsWith("AUCTION-")) + { + Auction auctionRoom = Auction.GetAuctionRoomById(int.Parse(tile.Code.Split('-')[1])); + int auctionEntryId = -1; + string packetStr = Encoding.UTF8.GetString(packet); + string auctionEntryStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + auctionEntryId = int.Parse(auctionEntryStr); + } + catch(FormatException) + { + Logger.ErrorPrint("Cant find auciton entry id NaN."); + break; + } + if (!auctionRoom.HasAuctionEntry(auctionEntryId)) + break; + + Auction.AuctionEntry entry = auctionRoom.GetAuctionEntry(auctionEntryId); + entry.Bid(sender.LoggedinUser, bidAmount); + + UpdateAreaForAll(tile.X, tile.Y, true, null); + } + } + } + break; + default: + Logger.ErrorPrint("Unknown method id: 0x" + method.ToString("X")); + break; + + } + + } + public static void OnHorseInteraction(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent horse interaction when not logged in."); + return; + } + + if(packet.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized horse interaction packet: " + BitConverter.ToString(packet).Replace("-", " ")); + return; + } + + byte method = packet[1]; + switch(method) + { + case PacketBuilder.HORSE_LIST: + sender.LoggedinUser.MajorPriority = true; + byte[] metaTags = PacketBuilder.CreateMetaPacket(Meta.BuildHorseInventory(sender.LoggedinUser)); + sender.SendPacket(metaTags); + break; + case PacketBuilder.HORSE_PROFILE: + byte methodProfileEdit = packet[2]; + if(methodProfileEdit == PacketBuilder.HORSE_PROFILE_EDIT) + { + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseDescriptionEditMeta(sender.LoggedinUser.LastViewedHorse)); + sender.SendPacket(metaPacket); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + "Trying to edit description of no horse"); + } + } + else + { + Logger.InfoPrint(BitConverter.ToString(packet).Replace("-", " ")); + } + break; + case PacketBuilder.HORSE_FEED: + int randomId = 0; + string packetStr = Encoding.UTF8.GetString(packet); + string randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseFeedInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + + sender.LoggedinUser.LastViewedHorse = horseFeedInst; + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseFeedMenu(horseFeedInst, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to feed at a non existant horse."); + break; + } + case PacketBuilder.HORSE_PET: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horsePetInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = horsePetInst; + int randMoodAddition = RandomNumberGenerator.Next(1, 20); + int randTiredMinus = RandomNumberGenerator.Next(1, 10); + + + + string msgs = ""; + if (horsePetInst.BasicStats.Mood + randMoodAddition >= 1000) + { + msgs += Messages.HorsePetTooHappy; + } + + if (horsePetInst.BasicStats.Tiredness - randTiredMinus <= 0) + { + msgs += Messages.HorsePetTooTired; + } + + horsePetInst.BasicStats.Tiredness -= randTiredMinus; + horsePetInst.BasicStats.Mood += randMoodAddition; + + byte[] petMessagePacket = PacketBuilder.CreateChat(Messages.FormatHorsePetMessage(msgs,randMoodAddition, randTiredMinus), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(petMessagePacket); + + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to feed at a non existant horse."); + break; + } + case PacketBuilder.HORSE_VET_SERVICE_ALL: + + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("VET-")) + { + string[] vetInfo = tile.Code.Split('-'); + int vetId = int.Parse(vetInfo[1]); + Vet vet = Vet.GetVetById(vetId); + int price = 0; + + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + price += vet.CalculatePrice(horse.BasicStats.Health); + if (price == 0) + { + byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.VetServicesNotNeededAll, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notNeededMessagePacket); + break; + } + else if (sender.LoggedinUser.Money >= price) + { + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + horse.BasicStats.Health = 1000; + + byte[] healedMessagePacket = PacketBuilder.CreateChat(Messages.VetAllFullHealthRecoveredMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(healedMessagePacket); + + sender.LoggedinUser.TakeMoney(price); + + } + else + { + byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.VetCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cannotAffordMessagePacket); + break; + } + UpdateArea(sender); + } + + } + } + break; + case PacketBuilder.HORSE_VET_SERVICE: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if (randomIdStr == "NaN") + break; + + try + { + randomId = int.Parse(randomIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseVetServiceInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = horseVetServiceInst; + + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("VET-")) + { + string[] vetInfo = tile.Code.Split('-'); + int vetId = int.Parse(vetInfo[1]); + + Vet vet = Vet.GetVetById(vetId); + int price = vet.CalculatePrice(horseVetServiceInst.BasicStats.Health); + if (sender.LoggedinUser.Money >= price) + { + horseVetServiceInst.BasicStats.Health = 1000; + sender.LoggedinUser.TakeMoney(price); + + byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatVetHorseAtFullHealthMessage(horseVetServiceInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(messagePacket); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.VetCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + UpdateArea(sender); + } + + } + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use vet services on a non existant horse."); + break; + } + case PacketBuilder.HORSE_SHOE_STEEL: + case PacketBuilder.HORSE_SHOE_IRON: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if (randomIdStr == "NaN") + break; + + try + { + randomId = int.Parse(randomIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseFarrierServiceInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = horseFarrierServiceInst; + + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("FARRIER-")) + { + string[] farrierInfo = tile.Code.Split('-'); + int farrierId = int.Parse(farrierInfo[1]); + + Farrier farrier = Farrier.GetFarrierById(farrierId); + int price = 0; + int incAmount = 0; + string msg = ""; + + if (method == PacketBuilder.HORSE_SHOE_STEEL) + { + price = farrier.SteelCost; + incAmount = farrier.SteelShoesAmount; + msg = Messages.FormatFarrierPutOnSteelShoesMessage(incAmount, 1000); + } + else + { + price = farrier.IronCost; + incAmount = farrier.IronShoesAmount; + msg = Messages.FormatFarrierPutOnIronShoesMessage(incAmount, 1000); + } + + if (sender.LoggedinUser.Money >= price) + { + horseFarrierServiceInst.BasicStats.Shoes = incAmount; + sender.LoggedinUser.TakeMoney(price); + + byte[] messagePacket = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(messagePacket); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.FarrierShoesCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + UpdateArea(sender); + } + + } + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use farrier services on a non existant horse."); + break; + } + case PacketBuilder.HORSE_SHOE_ALL: + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("FARRIER-")) + { + string[] farrierInfo = tile.Code.Split('-'); + int farrierId = int.Parse(farrierInfo[1]); + + Farrier farrier = Farrier.GetFarrierById(farrierId); + + int totalPrice = 0; + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + { + if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) + { + totalPrice += farrier.SteelCost; + } + } + + if (sender.LoggedinUser.Money >= totalPrice) + { + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + { + if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) + { + horse.BasicStats.Shoes = farrier.SteelShoesAmount; + } + } + sender.LoggedinUser.TakeMoney(totalPrice); + + byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatFarrierPutOnSteelShoesAllMesssage(farrier.SteelShoesAmount, 1000), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(messagePacket); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.FarrierShoesCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + UpdateArea(sender); + } + } + + } + break; + case PacketBuilder.HORSE_GROOM_SERVICE: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if (randomIdStr == "NaN") + break; + + try + { + randomId = int.Parse(randomIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance groomHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = groomHorseInst; + + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("GROOMER-")) + { + string[] groomerInfo = tile.Code.Split('-'); + int groomerId = int.Parse(groomerInfo[1]); + + Groomer groomer = Groomer.GetGroomerById(groomerId); + int price = groomer.CalculatePrice(groomHorseInst.BasicStats.Groom); + + + if (sender.LoggedinUser.Money >= price) + { + groomHorseInst.BasicStats.Groom = groomer.Max; + sender.LoggedinUser.TakeMoney(price); + + byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatHorseGroomedToBestAbilities(groomHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(messagePacket); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.GroomerCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + UpdateArea(sender); + } + + } + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use groomer services on a non existant horse."); + break; + } + case PacketBuilder.HORSE_GROOM_SERVICE_ALL: + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("GROOMER-")) + { + string[] groomerInfo = tile.Code.Split('-'); + int groomId = int.Parse(groomerInfo[1]); + Groomer groomer = Groomer.GetGroomerById(groomId); + int price = 0; + int count = 0; + + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + { + if (horse.BasicStats.Groom < groomer.Max) + { + price += groomer.CalculatePrice(horse.BasicStats.Groom); + count++; + } + } + if (count == 0) + { + byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.GroomerDontNeed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notNeededMessagePacket); + break; + } + else if (sender.LoggedinUser.Money >= price) + { + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + if (horse.BasicStats.Groom < groomer.Max) + horse.BasicStats.Groom = groomer.Max; + + byte[] groomedAllHorsesPacket = PacketBuilder.CreateChat(Messages.GroomerBestToHisAbilitiesALL, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(groomedAllHorsesPacket); + + sender.LoggedinUser.TakeMoney(price); + + } + else + { + byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.GroomerCannotAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cannotAffordMessagePacket); + break; + } + UpdateArea(sender); + } + + } + } + break; + case PacketBuilder.HORSE_BARN_SERVICE: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if (randomIdStr == "NaN") + break; + + try + { + randomId = int.Parse(randomIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance barnHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = barnHorseInst; + + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (tile.Code != null) + { + if (tile.Code.StartsWith("BARN-")) + { + string[] barnInfo = tile.Code.Split('-'); + int barnId = int.Parse(barnInfo[1]); + + Barn barn = Barn.GetBarnById(barnId); + int price = barn.CalculatePrice(barnHorseInst.BasicStats.Tiredness, barnHorseInst.BasicStats.Hunger, barnHorseInst.BasicStats.Thirst); ; + + + if (sender.LoggedinUser.Money >= price) + { + barnHorseInst.BasicStats.Tiredness = 1000; + barnHorseInst.BasicStats.Hunger = 1000; + barnHorseInst.BasicStats.Thirst = 1000; + sender.LoggedinUser.TakeMoney(price); + + byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatBarnHorseFullyFed(barnHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(messagePacket); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + UpdateArea(sender); + } + + } + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use groomer services on a non existant horse."); + break; + } + case PacketBuilder.HORSE_BARN_SERVICE_ALL: + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("BARN-")) + { + string[] barnInfo = tile.Code.Split('-'); + int barnId = int.Parse(barnInfo[1]); + Barn barn = Barn.GetBarnById(barnId); + int totalPrice = 0; + + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + { + int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); + if (price > 0) + totalPrice += price; + } + if (totalPrice == 0) + { + byte[] notNeededMessagePacket = PacketBuilder.CreateChat(Messages.BarnServiceNotNeeded, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notNeededMessagePacket); + break; + } + else if (sender.LoggedinUser.Money >= totalPrice) + { + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) + { + horse.BasicStats.Tiredness = 1000; + horse.BasicStats.Thirst = 1000; + horse.BasicStats.Hunger = 1000; + } + + byte[] barnedAllHorsesPacket = PacketBuilder.CreateChat(Messages.BarnAllHorsesFullyFed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(barnedAllHorsesPacket); + + sender.LoggedinUser.TakeMoney(totalPrice); + + } + else + { + byte[] cannotAffordMessagePacket = PacketBuilder.CreateChat(Messages.BarnCantAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cannotAffordMessagePacket); + break; + } + UpdateArea(sender); + } + + } + } + break; + case PacketBuilder.HORSE_TRAIN: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if (randomIdStr == "NaN") + break; + + try + { + randomId = int.Parse(randomIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance trainHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = trainHorseInst; + + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (tile.Code != null) + { + if (tile.Code.StartsWith("TRAINER-")) + { + if (trainHorseInst.TrainTimer > 0) + { + byte[] trainSuccessfulMessage = PacketBuilder.CreateChat(Messages.FormatTrainerCantTrainAgainIn(trainHorseInst.TrainTimer), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(trainSuccessfulMessage); + break; + } + string[] trainerInfo = tile.Code.Split('-'); + int trainerId = int.Parse(trainerInfo[1]); + + Trainer trainer = Trainer.GetTrainerById(trainerId); + + if (sender.LoggedinUser.Money >= trainer.MoneyCost) + { + sender.LoggedinUser.TakeMoney(trainer.MoneyCost); + trainHorseInst.BasicStats.Mood -= trainer.MoodCost; + trainHorseInst.BasicStats.Thirst -= trainer.ThirstCost; + trainHorseInst.BasicStats.Hunger -= trainer.HungerCost; + + + switch (trainer.ImprovesStat.ToUpper()) + { + case "SPEED": + trainHorseInst.AdvancedStats.Speed += trainer.ImprovesAmount; + break; + case "STRENGTH": + trainHorseInst.AdvancedStats.Strength += trainer.ImprovesAmount; + break; + case "AGILITY": + trainHorseInst.AdvancedStats.Agility += trainer.ImprovesAmount; + break; + case "ENDURANCE": + trainHorseInst.AdvancedStats.Endurance += trainer.ImprovesAmount; + break; + case "CONFORMATION": + trainHorseInst.AdvancedStats.Conformation += trainer.ImprovesAmount; + break; + default: + trainHorseInst.AdvancedStats.Speed += trainer.ImprovesAmount; + break; + } + trainHorseInst.BasicStats.Experience += trainer.ExperienceGained; + if (!sender.LoggedinUser.Subscribed) + trainHorseInst.TrainTimer = 1440; + else + trainHorseInst.TrainTimer = 720; + + byte[] trainSuccessfulMessage = PacketBuilder.CreateChat(Messages.FormatTrainedInStatFormat(trainHorseInst.Name, trainer.ImprovesStat), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(trainSuccessfulMessage); + + + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count++; + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(26)); // Pro Trainer + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(53)); // Top Trainer + + UpdateArea(sender); + } + else + { + byte[] cantAffordPacket = PacketBuilder.CreateChat(Messages.TrainerCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordPacket); + } + + } + + } + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use trauber services on a non existant horse."); + break; + } + case PacketBuilder.HORSE_GIVE_FEED: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if(sender.LoggedinUser.LastViewedHorse == null) + { + Logger.InfoPrint(sender.LoggedinUser.Username + " Tried to feed a non existant horse."); + break; + } + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + bool tooMuch = false; + bool changePersonality = false; + bool changeInteligence = false; + + foreach(Item.Effects effect in itemInfo.Effects) + { + switch(effect.EffectsWhat) + { + case "HEALTH": + if (horseInstance.BasicStats.Health + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Health += effect.EffectAmount; + break; + case "HUNGER": + if (horseInstance.BasicStats.Hunger + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Hunger += effect.EffectAmount; + break; + case "MOOD": + if (horseInstance.BasicStats.Mood + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Mood += effect.EffectAmount; + break; + case "GROOM": + if (horseInstance.BasicStats.Groom + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Groom += effect.EffectAmount; + break; + case "SHOES": + if (horseInstance.BasicStats.Shoes + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Shoes += effect.EffectAmount; + break; + case "THIRST": + if (horseInstance.BasicStats.Thirst + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Thirst += effect.EffectAmount; + break; + case "TIREDNESS": + if (horseInstance.BasicStats.Tiredness + effect.EffectAmount > 1000) + tooMuch = true; + horseInstance.BasicStats.Tiredness += effect.EffectAmount; + break; + case "INTELLIGENCEOFFSET": + horseInstance.AdvancedStats.Inteligence += effect.EffectAmount; + changeInteligence = true; + break; + case "PERSONALITYOFFSET": + horseInstance.AdvancedStats.Personality += effect.EffectAmount; + changePersonality = true; + + break; + case "SPOILED": + horseInstance.Spoiled += effect.EffectAmount; + break; + } + } + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); + + if(changePersonality) + { + byte[] personalityIncreased = PacketBuilder.CreateChat(Messages.HorseFeedPersonalityIncreased, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(personalityIncreased); + } + if (changeInteligence) + { + byte[] inteligenceIncreased = PacketBuilder.CreateChat(Messages.HorseFeedInteligenceIncreased, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inteligenceIncreased); + } + + if(item.ItemId == Item.MagicDroplet) + { + string oldColor = horseInstance.Color; + string newColor = horseInstance.Breed.Colors[RandomNumberGenerator.Next(0, horseInstance.Breed.Colors.Length)]; + + horseInstance.Color = newColor; + horseInstance.MagicUsed++; + + byte[] magicDropletUsed = PacketBuilder.CreateChat(Messages.FormatHorseFeedMagicDropletUsed(oldColor, newColor), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(magicDropletUsed); + } + + if(item.ItemId == Item.MagicBean) + { + double oldH = HorseInfo.CalculateHands(horseInstance.AdvancedStats.Height, false); + int newHeight = RandomNumberGenerator.Next(horseInstance.Breed.BaseStats.MinHeight, horseInstance.Breed.BaseStats.MaxHeight+1); + double newH = HorseInfo.CalculateHands(newHeight, false); + + horseInstance.AdvancedStats.Height = newHeight; + horseInstance.MagicUsed++; + + byte[] magicBeansUsed = PacketBuilder.CreateChat(Messages.FormatHorseFeedMagicBeanUsed(oldH, newH), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(magicBeansUsed); + } + + byte[] horseNeighThanksPacket = PacketBuilder.CreateChat(Messages.HorseNeighsThanks, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNeighThanksPacket); + + if (tooMuch) + { + byte[] horseCouldntFinishItAll = PacketBuilder.CreateChat(Messages.HorseCouldNotFinish, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseCouldntFinishItAll); + } + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseFeedMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + + + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to feed a non existant item to a horse."); + break; + } + case PacketBuilder.HORSE_ENTER_ARENA: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseInstance = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("ARENA-")) + { + string[] arenaInfo = tile.Code.Split('-'); + int arenaId = int.Parse(arenaInfo[1]); + Arena arena = Arena.GetAreaById(arenaId); + if (!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) + { + if (horseInstance.BasicStats.Thirst <= 200) + { + byte[] tooThirsty = PacketBuilder.CreateChat(Messages.ArenaTooThirsty, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooThirsty); + break; + } + else if (horseInstance.BasicStats.Hunger <= 200) + { + byte[] tooHungry = PacketBuilder.CreateChat(Messages.ArenaTooHungry, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooHungry); + break; + } + else if (horseInstance.BasicStats.Shoes <= 200) + { + byte[] needsFarrier = PacketBuilder.CreateChat(Messages.ArenaNeedsFarrier, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(needsFarrier); + break; + } + else if (horseInstance.BasicStats.Tiredness <= 200) + { + byte[] tooTired = PacketBuilder.CreateChat(Messages.ArenaTooTired, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooTired); + break; + } + else if (horseInstance.BasicStats.Health <= 200) + { + byte[] needsVet = PacketBuilder.CreateChat(Messages.ArenaNeedsVet, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(needsVet); + break; + } + + + + if (sender.LoggedinUser.Money >= arena.EntryCost) + { + arena.AddEntry(sender.LoggedinUser, horseInstance); + break; + } + else + { + byte[] cantAffordEntryFee = PacketBuilder.CreateChat(Messages.ArenaCantAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordEntryFee); + break; + } + } + else + { + byte[] allreadyEntered = PacketBuilder.CreateChat(Messages.ArenaAlreadyEntered, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(allreadyEntered); + } + } + + } + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to enter a non existant horse into a competition."); + break; + } + break; + case PacketBuilder.HORSE_RELEASE: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + if(World.InTown(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to reelease a horse while inside a town...."); + break; + } + + + HorseInstance horseReleaseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + if(sender.LoggedinUser.CurrentlyRidingHorse != null) + { + if(horseReleaseInst.RandomId == sender.LoggedinUser.CurrentlyRidingHorse.RandomId) + { + byte[] errorChatPacket = PacketBuilder.CreateChat(Messages.HorseCantReleaseTheHorseYourRidingOn, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorChatPacket); + break; + } + + } + + if (horseReleaseInst.Description == "") + horseReleaseInst.Description += Messages.FormatHorseReleasedBy(sender.LoggedinUser.Username); + + Logger.InfoPrint(sender.LoggedinUser.Username + " RELEASED HORSE: " + horseReleaseInst.Name + " (a " + horseReleaseInst.Breed.Name + ")."); + + sender.LoggedinUser.HorseInventory.DeleteHorse(horseReleaseInst); + new WildHorse(horseReleaseInst, sender.LoggedinUser.X, sender.LoggedinUser.Y, 60, true); + + sender.LoggedinUser.LastViewedHorse = horseReleaseInst; + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseReleased()); + sender.SendPacket(metaPacket); + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to release at a non existant horse."); + break; + } + case PacketBuilder.HORSE_TACK: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseTackInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + + sender.LoggedinUser.LastViewedHorse = horseTackInst; + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackMenu(horseTackInst, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to tack at a non existant horse."); + break; + } + case PacketBuilder.HORSE_DRINK: + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != "POND") + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to drink from a pond when not on one."); + break; + } + } + + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + HorseInstance horseDrinkInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + + if(horseDrinkInst.BasicStats.Health < 200) + { + byte[] hpToLow = PacketBuilder.CreateChat(Messages.FormatPondHpLowMessage(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(hpToLow); + break; + } + + if(horseDrinkInst.BasicStats.Thirst < 1000) + { + horseDrinkInst.BasicStats.Thirst = 1000; + byte[] drinkFull = PacketBuilder.CreateChat(Messages.FormatPondDrinkFull(horseDrinkInst.Name),PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(drinkFull); + + if(RandomNumberGenerator.Next(0, 100) < 25) + { + horseDrinkInst.BasicStats.Health -= 200; + byte[] ohNoes = PacketBuilder.CreateChat(Messages.FormatPondDrinkOhNoes(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ohNoes); + } + + UpdateArea(sender); + } + else + { + byte[] notThirsty = PacketBuilder.CreateChat(Messages.FormatPondNotThirsty(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notThirsty); + break; + } + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to tack at a non existant horse."); + break; + } + case PacketBuilder.HORSE_TACK_EQUIP: + + int itemId = 0; + packetStr = Encoding.UTF8.GetString(packet); + string itemIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + itemId = int.Parse(itemIdStr); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if(Item.ItemIdExist(itemId)) + { + if(sender.LoggedinUser.LastViewedHorse != null) + { + if(sender.LoggedinUser.LastViewedHorse.AutoSell > 0) + { + byte[] failMessagePacket = PacketBuilder.CreateChat(Messages.HorseTackFailAutoSell, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(failMessagePacket); + break; + } + + if(sender.LoggedinUser.Inventory.HasItemId(itemId)) + { + Item.ItemInformation itemInfo = Item.GetItemById(itemId); + if (itemInfo.Type == "TACK") + { + switch (itemInfo.GetMiscFlag(0)) + { + case 1: // Saddle + if(sender.LoggedinUser.LastViewedHorse.Equipment.Saddle != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Saddle.Id)); + Database.SetSaddle(sender.LoggedinUser.LastViewedHorse.RandomId, itemInfo.Id); + sender.LoggedinUser.LastViewedHorse.Equipment.Saddle = itemInfo; + break; + case 2: // Saddle Pad + if (sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad.Id)); + Database.SetSaddlePad(sender.LoggedinUser.LastViewedHorse.RandomId, itemInfo.Id); + sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad = itemInfo; + break; + case 3: // Bridle + if (sender.LoggedinUser.LastViewedHorse.Equipment.Bridle != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Bridle.Id)); + Database.SetBridle(sender.LoggedinUser.LastViewedHorse.RandomId, itemInfo.Id); + sender.LoggedinUser.LastViewedHorse.Equipment.Bridle = itemInfo; + break; + } + + + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + + byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatEquipTackMessage(itemInfo.Name, sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(equipMsgPacket); + + } + else if(itemInfo.Type == "COMPANION") + { + if (sender.LoggedinUser.LastViewedHorse.Equipment.Companion != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Companion.Id)); + Database.SetCompanion(sender.LoggedinUser.LastViewedHorse.RandomId, itemInfo.Id); + sender.LoggedinUser.LastViewedHorse.Equipment.Companion = itemInfo; + + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCompanionEquipMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + + byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatHorseCompanionEquipMessage(sender.LoggedinUser.LastViewedHorse.Name, itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(equipMsgPacket); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to equip a tack item to a hrose but that item was not of type \"TACK\"."); + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " tried to equip tack he doesnt have"); + break; + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to equip tack to a horse when not viewing one."); + break; + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " tried to equip tack he doesnt exist"); + break; + } + + break; + case PacketBuilder.HORSE_TACK_UNEQUIP: + if (sender.LoggedinUser.LastViewedHorse != null) + { + byte equipSlot = packet[2]; + switch(equipSlot) + { + case 0x31: // Saddle + if (sender.LoggedinUser.LastViewedHorse.Equipment.Saddle != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Saddle.Id)); + Database.ClearSaddle(sender.LoggedinUser.LastViewedHorse.RandomId); + sender.LoggedinUser.LastViewedHorse.Equipment.Saddle = null; + break; + case 0x32: // Saddle Pad + if (sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad.Id)); + Database.ClearSaddlePad(sender.LoggedinUser.LastViewedHorse.RandomId); + sender.LoggedinUser.LastViewedHorse.Equipment.SaddlePad = null; + break; + case 0x33: // Bridle + if (sender.LoggedinUser.LastViewedHorse.Equipment.Bridle != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Bridle.Id)); + Database.ClearBridle(sender.LoggedinUser.LastViewedHorse.RandomId); + sender.LoggedinUser.LastViewedHorse.Equipment.Bridle = null; + break; + case 0x34: // Companion + if (sender.LoggedinUser.LastViewedHorse.Equipment.Companion != null) + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(sender.LoggedinUser.LastViewedHorse.Equipment.Companion.Id)); + Database.ClearCompanion(sender.LoggedinUser.LastViewedHorse.RandomId); + sender.LoggedinUser.LastViewedHorse.Equipment.Companion = null; + goto companionRemove; + default: + Logger.ErrorPrint("Unknown equip slot: " + equipSlot.ToString("X")); + break; + } + byte[] itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatUnEquipTackMessage(sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemUnequipedMessage); + + if(sender.LoggedinUser.CurrentlyRidingHorse != null) + { + if(sender.LoggedinUser.CurrentlyRidingHorse.RandomId == sender.LoggedinUser.LastViewedHorse.RandomId) + { + byte[] disMounted = PacketBuilder.CreateChat(Messages.FormatHorseDismountedBecauseTackedMessage(sender.LoggedinUser.CurrentlyRidingHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.LoggedinUser.Facing %= 5; + sender.LoggedinUser.CurrentlyRidingHorse = null; + sender.SendPacket(disMounted); + } + } + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + companionRemove:; + itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatHorseCompanionRemoveMessage(sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemUnequipedMessage); + + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCompanionEquipMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to unequip items from non existnat horse"); + } + break; + case PacketBuilder.HORSE_DISMOUNT: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + + if(randomIdStr == "") // F7 Shortcut + { + if(sender.LoggedinUser.CurrentlyRidingHorse != null) + { + + byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(stopRidingHorseMessagePacket); + + StopRidingHorse(sender); + } + else + { + if(sender.LoggedinUser.HorseInventory.HorseIdExist(sender.LoggedinUser.LastRiddenHorse)) + StartRidingHorse(sender, sender.LoggedinUser.LastRiddenHorse); + } + break; + } + + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + + byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(stopRidingHorseMessagePacket); + + StopRidingHorse(sender); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to dismount at a non existant horse."); + break; + } + break; + case PacketBuilder.HORSE_MOUNT: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + StartRidingHorse(sender, randomId); + break; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to mount at a non existant horse."); + break; + } + case PacketBuilder.HORSE_LOOK: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + HorseInstance horseInst; + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + return; + } + if(sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) + { + horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + UpdateHorseMenu(sender, horseInst); + } + else + { + try + { // Not your horse? possibly viewed inside a ranch? + horseInst = Database.GetPlayerHorse(randomId); + UpdateHorseMenu(sender, horseInst); + break; + } + catch(Exception) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to look at a non existant horse."); + break; + } + } + + break; + case PacketBuilder.HORSE_ESCAPE: + if(WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId)) + { + WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId); + sender.LoggedinUser.CapturingHorseId = 0; + + if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y) + { + capturing.Escape(); + Logger.InfoPrint(sender.LoggedinUser.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y); + + } + } + sender.LoggedinUser.MajorPriority = true; + byte[] hoseEscaped = PacketBuilder.CreateMetaPacket(Meta.BuildHorseEscapedMessage()); + sender.SendPacket(hoseEscaped); + break; + case PacketBuilder.HORSE_CAUGHT: + if (WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId)) + { + WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId); + sender.LoggedinUser.CapturingHorseId = 0; + + if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y) + { + try + { + capturing.Capture(sender.LoggedinUser); + } + catch (InventoryFullException) + { + byte[] chatMsg = PacketBuilder.CreateChat(Messages.TooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMsg); + break; + } + + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count++; + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 100) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(24)); // Wrangler + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(25)); // Pro Wrangler + + Logger.InfoPrint(sender.LoggedinUser.Username + " Captured a: " + capturing.Instance.Breed.Name); + + sender.LoggedinUser.MajorPriority = true; + byte[] horseCaught = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCaughtMessage()); + sender.SendPacket(horseCaught); + + break; + } + } + sender.LoggedinUser.MajorPriority = true; + byte[] horseAllreadyCaught = PacketBuilder.CreateMetaPacket(Meta.BuildHorseEscapedAnyway()); + sender.SendPacket(horseAllreadyCaught); + break; + case PacketBuilder.HORSE_TRY_CAPTURE: + randomId = 0; + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); + try + { + randomId = int.Parse(randomIdStr); + + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); + return; + } + if (!WildHorse.DoesHorseExist(randomId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to catch a horse that doesnt exist."); + return; + } + + if(sender.LoggedinUser.HorseInventory.HorseList.Length >= sender.LoggedinUser.MaxHorses) + { + byte[] caughtTooManyHorses = PacketBuilder.CreateChat(Messages.HorseCatchTooManyHorsesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(caughtTooManyHorses); + return; + } + + sender.LoggedinUser.CapturingHorseId = randomId; + byte[] chatPacket = PacketBuilder.CreateChat(Messages.HorseCaptureTimer, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket("catchhorse", PacketBuilder.PACKET_SWF_MODULE_FORCE); + sender.SendPacket(swfModulePacket); + + break; + default: + Logger.DebugPrint("Unknown horse packet: " + BitConverter.ToString(packet).Replace("-", " ")); + break; + } + } + + public static void OnDynamicInputReceived(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent dyamic input when not logged in."); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string dynamicInputStr = packetStr.Substring(1, packetStr.Length - 3); + if(dynamicInputStr.Contains("|")) + { + string[] dynamicInput = dynamicInputStr.Split('|'); + if(dynamicInput.Length >= 1) + { + int inputId = 0; + try + { + inputId = int.Parse(dynamicInput[0]); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input "); + return; + } + + switch(inputId) + { + case 1: // Bank + if (dynamicInput.Length >= 2) + { + Int64 moneyDeposited = 0; + Int64 moneyWithdrawn = 0; + try + { + moneyDeposited = Int64.Parse(dynamicInput[1]); + moneyWithdrawn = Int64.Parse(dynamicInput[2]); + } + catch (Exception) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to deposit/witthdraw NaN money...."); + UpdateArea(sender); + break; + } + + // Check if trying to deposit more than can be held in the bank. + + if (Convert.ToInt64(sender.LoggedinUser.BankMoney) + moneyDeposited > 9999999999) + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.BankCantHoldThisMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + UpdateArea(sender); + break; + } + + // Check if trying to deposit more than 2.1B + + if (moneyWithdrawn > 2100000000) + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.BankYouCantHoldThisMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + UpdateArea(sender); + break; + } + + + + if((moneyDeposited <= sender.LoggedinUser.Money) && moneyDeposited != 0) + { + sender.LoggedinUser.TakeMoney(Convert.ToInt32(moneyDeposited)); + sender.LoggedinUser.BankMoney += moneyDeposited; + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatDepositedMoneyMessage(Convert.ToInt32(moneyDeposited)), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + + if ((moneyWithdrawn <= sender.LoggedinUser.BankMoney) && moneyWithdrawn != 0) + { + sender.LoggedinUser.BankMoney -= moneyWithdrawn; + sender.LoggedinUser.AddMoney(Convert.ToInt32(moneyWithdrawn)); + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatWithdrawMoneyMessage(Convert.ToInt32(moneyWithdrawn)), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + + UpdateArea(sender); + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + break; + } + case 2: // Send Mail + if(dynamicInput.Length >= 4) + { + string to = dynamicInput[1]; + string subject = dynamicInput[2]; + string message = dynamicInput[3]; + + if(sender.LoggedinUser.Money >= 3) + { + if(Database.CheckUserExist(to)) + { + int playerId = Database.GetUserid(to); + + sender.LoggedinUser.TakeMoney(3); + Mailbox.Mail mailMessage = new Mailbox.Mail(); + mailMessage.RandomId = RandomID.NextRandomId(); + mailMessage.FromUser = sender.LoggedinUser.Id; + mailMessage.ToUser = playerId; + mailMessage.Timestamp = Convert.ToInt32((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); + mailMessage.Read = false; + mailMessage.Subject = subject; + mailMessage.Message = message; + + if(IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + user.MailBox.AddMail(mailMessage); + + byte[] BaseStatsPacketData = PacketBuilder.CreatePlayerData(user.Money, GameServer.GetNumberOfPlayers(), user.MailBox.UnreadMailCount); + user.LoggedinClient.SendPacket(BaseStatsPacketData); + } + else + { + Database.AddMail(mailMessage.RandomId, mailMessage.ToUser, mailMessage.FromUser, mailMessage.Subject, mailMessage.Message, mailMessage.Timestamp, mailMessage.Read); + } + + byte[] mailMessageSent = PacketBuilder.CreateChat(Messages.FormatCityHallSendMailMessage(to.ToLower()),PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(mailMessageSent); + + UpdateArea(sender); + } + else + { + byte[] userDontExistFormat = PacketBuilder.CreateChat(Messages.FormatCityHallCantFindPlayerMessage(to), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(userDontExistFormat); + } + } + + } + break; + case 3: // Add Item or Money to Trade + { + if (dynamicInput.Length >= 2) + { + if(sender.LoggedinUser.AttemptingToOfferItem == -1) // Money + { + string answer = dynamicInput[1]; + int amountMoney = -1; + try + { + amountMoney = int.Parse(answer); + } + catch (Exception) + { + byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooMuchMoney); + break; + } + if(amountMoney < 0) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to trade less than 0$"); + } + if(amountMoney >= sender.LoggedinUser.Money) + { + byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooMuchMoney); + break; + } + + sender.LoggedinUser.TradingWith.MoneyOffered = amountMoney; + + UpdateArea(sender); + if(sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + break; + } + + + + if (Item.ItemIdExist(sender.LoggedinUser.AttemptingToOfferItem)) + { + string answer = dynamicInput[1]; + int itemCount = -1; + try + { + itemCount = int.Parse(answer); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Item TRADE, id is NaN)"); + } + + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(sender.LoggedinUser.AttemptingToOfferItem); + + if (itemCount <= 0) + { + byte[] MustBeAtleast1 = PacketBuilder.CreateChat(Messages.TradeItemOfferAtleast1, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(MustBeAtleast1); + break; + } + if(itemCount > item.ItemInstances.Length) + { + byte[] TooMuchItems = PacketBuilder.CreateChat(Messages.FormatTradeItemOfferTooMuch(item.ItemInstances.Length, itemCount), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(TooMuchItems); + break; + } + + foreach(ItemInstance[] existingItems in sender.LoggedinUser.TradingWith.ItemsOffered) + { + if(existingItems[0].ItemId == sender.LoggedinUser.AttemptingToOfferItem) + { + sender.LoggedinUser.TradingWith.RemoveOfferedItems(existingItems); + break; + } + } + + + + ItemInstance[] items = new ItemInstance[itemCount]; + for (int i = 0; i < itemCount; i++) + { + items[i] = item.ItemInstances[i]; + } + sender.LoggedinUser.TradingWith.OfferItems(items); + + UpdateArea(sender); + if (sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + } + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Item TRADE, wrong size)"); + break; + } + } + case 6: // Riddle Room + if (dynamicInput.Length >= 2) + { + if (sender.LoggedinUser.LastRiddle != null) + { + string answer = dynamicInput[1]; + if(sender.LoggedinUser.LastRiddle.CheckAnswer(sender.LoggedinUser, answer)) + sender.LoggedinUser.LastRiddle = null; + UpdateArea(sender); + } + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (LastRiddle, wrong size)"); + break; + } + case 5: // Horse Description + if (dynamicInput.Length >= 3) + { + if(sender.LoggedinUser.LastViewedHorse != null) + { + string desc = dynamicInput[2]; + string name = dynamicInput[1]; + name.Trim(); + desc.Trim(); + + if(name.Length > 50) + { + byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNameTooLongPacket); + break; + } + + if (desc.Length > 250) + { + byte[] horseNameTooLongPacket = PacketBuilder.CreateChat(Messages.HorseNameTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNameTooLongPacket); + break; + } + + object filterReason = Chat.FilterMessage(name); + if (filterReason != null) + { + byte[] msg = PacketBuilder.CreateChat(Messages.HorseNameViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + return; + } + + filterReason = Chat.FilterMessage(desc); + if (filterReason != null) + { + Chat.Reason reason = (Chat.Reason)filterReason; + byte[] msg = PacketBuilder.CreateChat(Messages.FormatHorseProfileBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + return; + } + + sender.LoggedinUser.MajorPriority = true; + sender.LoggedinUser.LastViewedHorse.Name = dynamicInput[1]; + sender.LoggedinUser.LastViewedHorse.Description = dynamicInput[2]; + byte[] horseProfileSavedPacket = PacketBuilder.CreateChat(Messages.FormatHorseSavedProfileMessage(sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseProfileSavedPacket); + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); + } + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); + break; + } + case 4: // NPC Search + if(dynamicInput.Length >= 2) + { + sender.LoggedinUser.MajorPriority = true; + string metaWindow = Meta.BuildNpcSearch(dynamicInput[1]); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(metaWindow); + sender.SendPacket(metaPacket); + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); + break; + } + case 7: // Private Notes + if (dynamicInput.Length >= 2) + { + sender.LoggedinUser.PrivateNotes = dynamicInput[1]; + UpdateStats(sender); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.PrivateNotesSavedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + break; + } + case 10: // Change auto sell price + if (dynamicInput.Length >= 2) + { + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + int newSellPrice = 0; + try + { + newSellPrice = int.Parse(dynamicInput[1]); + } + catch (Exception) + { + newSellPrice = 2147483647; // too high + } + + if(newSellPrice > 500000000 || newSellPrice < 0) + { + byte[] priceTooHigh = PacketBuilder.CreateChat(Messages.HorseAutoSellValueTooHigh, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(priceTooHigh); + break; + } + byte[] sellPricePacket; + if (newSellPrice > 0) + sellPricePacket = PacketBuilder.CreateChat(Messages.FormatAutoSellConfirmedMessage(newSellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); + else + sellPricePacket = PacketBuilder.CreateChat(Messages.HorseAutoSellRemoved, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(sellPricePacket); + horseInstance.AutoSell = newSellPrice; + + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (autosell, wrong size)"); + break; + } + break; + case 11: // Ranch Description Edit + if (dynamicInput.Length >= 2) + { + string title = dynamicInput[1]; + string desc = dynamicInput[2]; + if(sender.LoggedinUser.OwnedRanch != null) + { + title.Trim(); + desc.Trim(); + if(title.Length > 100) + { + byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLongPacket); + break; + } + if (desc.Length > 4000) + { + byte[] tooLongPacket = PacketBuilder.CreateChat(Messages.RanchSavedTitleTooLongError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLongPacket); + break; + } + + object filterReason = Chat.FilterMessage(title); + if (filterReason != null) + { + byte[] msg = PacketBuilder.CreateChat(Messages.RanchSavedTitleViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + return; + } + + filterReason = Chat.FilterMessage(desc); + if (filterReason != null) + { + Chat.Reason reason = (Chat.Reason)filterReason; + byte[] msg = PacketBuilder.CreateChat(Messages.FormatRanchDesriptionBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + return; + } + + + sender.LoggedinUser.OwnedRanch.Title = title; + sender.LoggedinUser.OwnedRanch.Description = desc; + } + byte[] descriptionEditedMessage = PacketBuilder.CreateChat(Messages.RanchSavedRanchDescripton, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(descriptionEditedMessage); + + /* + * Pinto bug: Saving ranch description will take you to the STATS menu + * instead of just back to your ranch. + */ + + if (ConfigReader.FixOfficalBugs) + UpdateArea(sender); + else + UpdateStats(sender); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (ranch description, wrong size)"); + break; + } + break; + case 12: // Abuse Report + if (dynamicInput.Length >= 2) + { + string userName = dynamicInput[1]; + string reason = dynamicInput[2]; + if(Database.CheckUserExist(userName)) + { + if(reason == "") + { + byte[] validReasonPlz = PacketBuilder.CreateChat(Messages.AbuseReportProvideValidReason, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(validReasonPlz); + break; + } + + Database.AddReport(sender.LoggedinUser.Username, userName, reason); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.AbuseReportFiled, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + UpdateArea(sender); + break; + } + else + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAbuseReportPlayerNotFound(userName), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + break; + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + break; + } + case 13: // Libary Ranch Search + if (dynamicInput.Length >= 2) + { + string searchQuery = dynamicInput[1]; + sender.LoggedinUser.MajorPriority = true; + byte[] serachResponse = PacketBuilder.CreateMetaPacket(Meta.BuildRanchSearchResults(searchQuery)); + sender.SendPacket(serachResponse); + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + break; + } + case 14: + if(dynamicInput.Length >= 1) + { + string password = dynamicInput[1]; + // Get current tile + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code != null) + { + if (tile.Code.StartsWith("PASSWORD-")) + { + string[] args = tile.Code.Replace("!", "-").Split('-'); + if (args.Length >= 3) + { + string expectedPassword = args[1]; + int questId = int.Parse(args[2]); + if (password.ToLower() == expectedPassword.ToLower()) + { + Quest.CompleteQuest(sender.LoggedinUser, Quest.GetQuestById(questId), false); + } + else + { + Quest.QuestResult result = Quest.FailQuest(sender.LoggedinUser, Quest.GetQuestById(questId), true); + if (result.NpcChat == null || result.NpcChat == "") + result.NpcChat = Messages.IncorrectPasswordMessage; + byte[] ChatPacket = PacketBuilder.CreateChat(result.NpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ChatPacket); + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Send invalid password input request. (Too few arguments!)"); + break; + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Send password input request. (Not on password tile!)"); + break; + } + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent a password while not in a special tile."); + break; + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid password request, (wrong size)"); + break; + } + + break; + case 15: // Real Time Quiz + if (dynamicInput.Length >= 2) + { + if(QuizEvent != null) + { + if (sender.LoggedinUser.InRealTimeQuiz) + { + RealTimeQuiz.Participent participent = QuizEvent.JoinEvent(sender.LoggedinUser); + string answer = dynamicInput[1]; + participent.CheckAnswer(answer); + } + } + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (RealTimeQuiz, wrong size)"); + break; + } + default: + Logger.ErrorPrint("Unknown dynamic input: " + inputId.ToString() + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); + break; + } + + + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (wrong size)"); + return; + } + } + + + } + + public static void OnPlayerInfoPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requests player info when not logged in."); + return; + } + if(packet.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent playerinfo packet of wrong size"); + } + + byte method = packet[1]; + switch(method) + { + case PacketBuilder.PLAYERINFO_PLAYER_LIST: + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerListMenu(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + } + + } + public static void OnDynamicButtonPressed(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Clicked dyamic button when not logged in."); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string buttonIdStr = packetStr.Substring(1, packetStr.Length - 3); + + switch(buttonIdStr) + { + case "2": // Compose Mail + if(sender.LoggedinUser.Money <= 3) + { + byte[] cantAffordPostage = PacketBuilder.CreateChat(Messages.CityHallCantAffordPostageMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordPostage); + break; + } + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildComposeMailMenu()); + sender.SendPacket(metaPacket); + break; + case "3": // Quest Log + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildQuestLog(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "4": // View Horse Breeds + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseBreedListLibary()); + sender.SendPacket(metaPacket); + break; + case "5": // Back to horse + if (sender.LoggedinUser.LastViewedHorse != null) + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); + break; + case "6": // Equip companion + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCompanionEquipMenu(horseInstance,sender.LoggedinUser)); + sender.SendPacket(metaPacket); + } + break; + case "7": // TP To nearest wagon (ranch) + if(sender.LoggedinUser.OwnedRanch != null) + { + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(7) > 0) // Wagon + { + int ranchX = sender.LoggedinUser.OwnedRanch.X; + int ranchY = sender.LoggedinUser.OwnedRanch.Y; + + double smallestDistance = Double.PositiveInfinity; + int smalestTransportPointId = 0; + for (int i = 0; i < Transport.TransportPoints.Count; i++) + { + Transport.TransportPoint tpPoint = Transport.TransportPoints[i]; + + if(Transport.GetTransportLocation(tpPoint.Locations[0]).Type == "WAGON") // is wagon? + { + double distance = Util.PointsToDistance(ranchX, ranchY, tpPoint.X, tpPoint.Y); + if(distance < smallestDistance) + { + smallestDistance = distance; + smalestTransportPointId = i; + } + } + } + Transport.TransportPoint newPoint = Transport.TransportPoints[smalestTransportPointId]; + + int newX = newPoint.X; + int newY = newPoint.Y; + + if (World.InSpecialTile(newX, newY)) + { + World.SpecialTile tile = World.GetSpecialTile(newX, newY); + if (tile.ExitX != 0) + newX = tile.ExitX; + if (tile.ExitY != 0) + newY = tile.ExitY; + } + + byte[] transported = PacketBuilder.CreateChat(Messages.RanchWagonDroppedYouOff, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(transported); + sender.LoggedinUser.Teleport(newX, newY); + } + } + break; + case "8": + if(sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseReleaseConfirmationMessage(horseInstance)); + sender.SendPacket(metaPacket); + } + break; + case "9": // View Tack (Libary) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackLibary()); + sender.SendPacket(metaPacket); + break; + case "10": // View Companions (Libary) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildCompanionLibary()); + sender.SendPacket(metaPacket); + break; + case "11": // Randomize horse name + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + horseInstance.ChangeNameWithoutUpdatingDatabase(HorseInfo.GenerateHorseName()); + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseDescriptionEditMeta(horseInstance)); + sender.SendPacket(metaPacket); + } + break; + case "12": // View Minigames (Libary) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigamesLibary()); + sender.SendPacket(metaPacket); + break; + case "13": // Train All (Ranch) + if (sender.LoggedinUser.OwnedRanch != null) + { + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(6) > 0) // Training Pen + { + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchTraining(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + } + } + break; + case "14": // Most Valued Ranches + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMostValuedRanches()); + sender.SendPacket(metaPacket); + break; + case "15": // Most Richest Players + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRichestPlayers()); + sender.SendPacket(metaPacket); + break; + case "16": // Most Adventurous Players + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAdventurousPlayers()); + sender.SendPacket(metaPacket); + break; + case "17": // Most Experienced Players + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildExperiencedPlayers()); + sender.SendPacket(metaPacket); + break; + case "18": // Best Minigame Players + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigamePlayers()); + sender.SendPacket(metaPacket); + break; + case "19": // Most Experienced Horses + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMostExperienedHoses()); + sender.SendPacket(metaPacket); + break; + case "20": // Minigame Rankings + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigameRankingsForUser(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "21": // Private Notes + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPrivateNotes(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "22": // View Locations (Libary) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildLocationsLibary()); + sender.SendPacket(metaPacket); + break; + case "23": // View Awards (Libary) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAwardsLibary()); + sender.SendPacket(metaPacket); + break; + case "26": // Buy Horse (Auto Sell) + if(sender.LoggedinUser.LastViewedHorseOther != null) + { + bool isOnRanch = false; + bool isOnPlayer = false; + HorseInstance horseToSell = sender.LoggedinUser.LastViewedHorseOther; + if (Ranch.IsRanchOwned(horseToSell.Owner)) + { + Ranch ranch = Ranch.GetRanchOwnedBy(horseToSell.Owner); + if(sender.LoggedinUser.X == ranch.X && sender.LoggedinUser.Y == ranch.Y) + { + isOnRanch = true; + } + + } + if(GameServer.IsUserOnline(horseToSell.Owner)) + { + User user = GameServer.GetUserById(horseToSell.Owner); + if (user.X == sender.LoggedinUser.X && user.Y == sender.LoggedinUser.Y) + { + isOnPlayer = true; + } + } + + if (isOnRanch || isOnPlayer) + { + + if (horseToSell.AutoSell == 0) + break; + if(sender.LoggedinUser.Money >= horseToSell.AutoSell) + { + if (sender.LoggedinUser.HorseInventory.HorseList.Length + 1 > sender.LoggedinUser.MaxHorses) + { + byte[] tooManyHorses = PacketBuilder.CreateChat(Messages.AutoSellTooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooManyHorses); + break; + } + + sender.LoggedinUser.TakeMoney(horseToSell.AutoSell); + + if (IsUserOnline(horseToSell.Owner)) + { + User seller = GetUserById(horseToSell.Owner); + seller.HorseInventory.DeleteHorse(horseToSell, false); + seller.AddMoney(horseToSell.AutoSell); + + byte[] horseBrought = PacketBuilder.CreateChat(Messages.FormatAutoSellSold(horseToSell.Name, horseToSell.AutoSell, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + seller.LoggedinClient.SendPacket(horseBrought); + } + else + { + Database.AddMessageToQueue(horseToSell.Owner, Messages.FormatAutoSellSoldOffline(horseToSell.Name, horseToSell.AutoSell, sender.LoggedinUser.Username)); + try + { + Database.SetPlayerMoney((Database.GetPlayerMoney(horseToSell.Owner) + horseToSell.AutoSell), horseToSell.Owner); + } + catch (OverflowException) + { + Database.SetPlayerMoney(2147483647, horseToSell.Owner); + } + } + + horseToSell.Owner = sender.LoggedinUser.Id; + horseToSell.AutoSell = 0; + sender.LoggedinUser.HorseInventory.AddHorse(horseToSell, false); + + byte[] success = PacketBuilder.CreateChat(Messages.FormatAutoSellSuccess(horseToSell.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(success); + + UpdateArea(sender); + break; + } + else + { + byte[] noMoney = PacketBuilder.CreateChat(Messages.AutoSellInsufficentFunds, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(noMoney); + break; + } + + } + else + { + byte[] notInRightPlace = PacketBuilder.CreateChat(Messages.AutoSellNotStandingInSamePlace, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notInRightPlace); + break; + } + + + } + break; + case "24": // Award List + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAwardList(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "27": // Ranch Edit + if(sender.LoggedinUser.OwnedRanch != null) + { + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchEdit(sender.LoggedinUser.OwnedRanch)); + sender.SendPacket(metaPacket); + } + break; + case "29": // Auto Sell Horses + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTopAutoSellHorses()); + sender.SendPacket(metaPacket); + break; + case "31": + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchSearchLibary()); + sender.SendPacket(metaPacket); + break; + case "35": // Buddy List + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildBuddyList(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "36": // Nearby list + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildNearbyList(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "37": // All Players List + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerList(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "40": // All Players Alphabetical + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPlayerListAlphabetical(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "30": // Find NPC + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildFindNpcMenu()); + sender.SendPacket(metaPacket); + break; + case "25": // Set auto sell price + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAutoSellMenu(horseInstance)); + sender.SendPacket(metaPacket); + } + break; + case "33": // View All stats (Horse) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAllBasicStats(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "34": // View Basic stats (Horse) + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAllStats(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "38": // Read Books + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildBooksLibary()); + sender.SendPacket(metaPacket); + break; + case "41": // Put horse into auction + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAuctionHorseList(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "47": + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderBreedList()); + sender.SendPacket(metaPacket); + break; + case "53": // Misc Stats / Tracked Items + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMiscStats(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case "58": // Add new item to trade + if(sender.LoggedinUser.TradingWith != null) + { + sender.LoggedinUser.TradeMenuPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAdd(sender.LoggedinUser.TradingWith)); + sender.SendPacket(metaPacket); + } + break; + case "59": // Done + if (sender.LoggedinUser.TradingWith != null) + { + sender.LoggedinUser.TradingWith.Stage = "DONE"; + + if (sender.LoggedinUser.TradingWith != null) + if (sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + UpdateArea(sender); + + } + break; + case "60": // Ranch Sell + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchSellConfirmation()); + sender.SendPacket(metaPacket); + break; + case "61": // Most Spoiled Horse + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMostSpoiledHorses()); + sender.SendPacket(metaPacket); + break; + case "28c1": // Abuse Report + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildAbuseReportPage()); + sender.SendPacket(metaPacket); + break; + case "52c1": // Horse set to KEEPER + string category = "KEEPER"; + goto setCategory; + case "52c2": // Horse set to TRAINING + category = "TRAINING"; + goto setCategory; + case "52c3": // Horse set to TRADING + category = "TRADING"; + goto setCategory; + case "52c4": // Horse set to RETIRED + category = "RETIRED"; + goto setCategory; + setCategory:; + if (sender.LoggedinUser.LastViewedHorse != null) + { + sender.LoggedinUser.LastViewedHorse.Category = category; + byte[] categoryChangedPacket = PacketBuilder.CreateChat(Messages.FormatHorseSetToNewCategory(category), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(categoryChangedPacket); + + sender.LoggedinUser.MajorPriority = true; + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); + } + break; + + default: + if(buttonIdStr.StartsWith("39c")) // Book Read + { + string idStr = buttonIdStr.Substring(3); + int bookId = -1; + try + { + bookId = int.Parse(idStr); + } + catch (FormatException) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to read a book of id NaN"); + break; + }; + + if(Book.BookExists(bookId)) + { + Book book = Book.GetBookById(bookId); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildBookReadLibary(book)); + sender.SendPacket(metaPacket); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + "Tried to read a book that doesnt exist."); + } + break; + } + if (buttonIdStr.StartsWith("32c")) // Horse Whisperer + { + string idStr = buttonIdStr.Substring(3); + int breedId = -1; + try + { + breedId = int.Parse(idStr); + } + catch (FormatException) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to whisper a horse with BreedId NaN."); + break; + }; + + if (sender.LoggedinUser.Money < 50000) + { + byte[] cannotAffordMessage = PacketBuilder.CreateChat(Messages.WhispererServiceCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cannotAffordMessage); + break; + } + + List horsesFound = new List(); + foreach (WildHorse horse in WildHorse.WildHorses) + { + if (horse.Instance.Breed.Id == breedId) + { + horsesFound.Add(horse); + } + } + int cost = 0; + if (horsesFound.Count >= 1) + { + cost = 50000; + } + else + { + cost = 10000; + } + sender.LoggedinUser.MajorPriority = true; + + byte[] pricingMessage = PacketBuilder.CreateChat(Messages.FormatWhispererPrice(cost), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(pricingMessage); + + byte[] serachResultMeta = PacketBuilder.CreateMetaPacket(Meta.BuildWhisperSearchResults(horsesFound.ToArray())); + sender.SendPacket(serachResultMeta); + + sender.LoggedinUser.TakeMoney(cost); + break; + } + else if (buttonIdStr.StartsWith("4c")) // Libary Breed Search + { + string idStr = buttonIdStr.Substring(2); + int breedId = -1; + HorseInfo.Breed horseBreed; + try + { + breedId = int.Parse(idStr); + horseBreed = HorseInfo.GetBreedById(breedId); + } + catch (Exception) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent invalid libary breed viewer request."); + break; + }; + sender.LoggedinUser.MajorPriority = true; + string metaTag = Meta.BuildBreedViewerLibary(horseBreed); + metaPacket = PacketBuilder.CreateMetaPacket(metaTag); + sender.SendPacket(metaPacket); + + string swf = "breedviewer.swf?terrain=book&breed=" + horseBreed.Swf + "&j="; + byte[] loadSwf = PacketBuilder.CreateSwfModulePacket(swf, PacketBuilder.PACKET_SWF_MODULE_FORCE); + sender.SendPacket(loadSwf); + + break; + + } + else if (buttonIdStr.StartsWith("50c")) + { + string gender = buttonIdStr.Substring(3); + if (sender.LoggedinUser.PawneerOrderBreed != null) + { + if (sender.LoggedinUser.PawneerOrderBreed.GenderTypes().Contains(gender)) + { + if (sender.LoggedinUser.Inventory.HasItemId(Item.PawneerOrder)) + { + sender.LoggedinUser.PawneerOrderGender = gender; + + HorseInstance horseInstance = new HorseInstance(sender.LoggedinUser.PawneerOrderBreed); + horseInstance.Color = sender.LoggedinUser.PawneerOrderColor; + horseInstance.Gender = sender.LoggedinUser.PawneerOrderGender; + horseInstance.Name = "Pawneer Order"; + + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(Item.PawneerOrder).ItemInstances[0]); + sender.LoggedinUser.HorseInventory.AddHorse(horseInstance, true, true); + + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderFound(horseInstance)); + sender.SendPacket(metaPacket); + break; + } + } + } + Logger.ErrorPrint(sender.LoggedinUser.Username + " Error occured when doing a Pawneer Order."); + break; + } + else if (buttonIdStr.StartsWith("49c")) + { + string color = buttonIdStr.Substring(3); + if (sender.LoggedinUser.PawneerOrderBreed != null) + { + if (sender.LoggedinUser.PawneerOrderBreed.Colors.Contains(color)) + { + sender.LoggedinUser.PawneerOrderColor = color; + + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderGenderList(sender.LoggedinUser.PawneerOrderBreed, color)); + sender.SendPacket(metaPacket); + break; + } + } + Logger.ErrorPrint(sender.LoggedinUser.Username + " Asked for a horse of an unknown color " + color); + break; + } + else if (buttonIdStr.StartsWith("48c")) // Pawneer Order Breed Select + { + string idStr = buttonIdStr.Substring(3); + int breedId = -1; + HorseInfo.Breed breed; + try + { + breedId = int.Parse(idStr); + breed = HorseInfo.GetBreedById(breedId); + } + catch (Exception) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawner order a horse with id NaN."); + break; + } + sender.LoggedinUser.PawneerOrderBreed = breed; + + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderColorList(breed)); + sender.SendPacket(metaPacket); + break; + } + else if (buttonIdStr.StartsWith("43c")) // Pawn Horse Confirm + { + string idStr = buttonIdStr.Substring(3); + int horseId = -1; + try + { + horseId = int.Parse(idStr); + } + catch (FormatException) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN."); + break; + } + + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) + { + HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId); + int price = Pawneer.CalculateTotalPrice(inst); + string name = inst.Name; + + sender.LoggedinUser.HorseInventory.DeleteHorse(inst); // 1000% a "distant land.." + sender.LoggedinUser.LastViewedHorse = null; + + sender.LoggedinUser.AddMoney(price); + byte[] soldHorseMessage = PacketBuilder.CreateChat(Messages.FormatPawneerSold(name, price), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(soldHorseMessage); + + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count++; + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 100) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(44)); // Vendor + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(45)); // Pro Vendor + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(52)); // Top Vendor + + UpdateArea(sender); + + break; + } + else + { + byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantFindHorse); + } + break; + } + else if (buttonIdStr.StartsWith("51c")) // Pawn Horse + { + string idStr = buttonIdStr.Substring(3); + int horseId = -1; + try + { + horseId = int.Parse(idStr); + } + catch (FormatException) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN."); + break; + } + + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) + { + HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId); + + sender.LoggedinUser.MajorPriority = true; + byte[] confirmScreen = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerConfimation(inst)); + sender.SendPacket(confirmScreen); + break; + } + else + { + byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantFindHorse); + } + break; + } + else if (buttonIdStr.StartsWith("42c")) + { + string idStr = buttonIdStr.Substring(3); + int horseId = -1; + try + { + horseId = int.Parse(idStr); + } + catch (FormatException) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to auction a horse with id NaN."); + break; + } + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) + { + HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId); + + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if(tile.Code == null || !tile.Code.StartsWith("AUCTION-")) + { + Logger.ErrorPrint("Cant find auction room that " + sender.LoggedinUser.Username + " Is trying to place a horse in."); + return; + } + Auction auctionRoom = Auction.GetAuctionRoomById(int.Parse(tile.Code.Split('-')[1])); + if(auctionRoom.HasUserPlacedAuctionAllready(sender.LoggedinUser)) + { + byte[] cantPlaceAuction = PacketBuilder.CreateChat(Messages.AuctionOneHorsePerPlayer, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantPlaceAuction); + break; + } + if (sender.LoggedinUser.Money >= 1000) + { + sender.LoggedinUser.TakeMoney(1000); + Auction.AuctionEntry entry = new Auction.AuctionEntry(8, 0, sender.LoggedinUser.Id); + entry.Horse = inst; + entry.OwnerId = sender.LoggedinUser.Id; + entry.Completed = false; + inst.Hidden = true; + auctionRoom.AddEntry(entry); + UpdateArea(sender); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + break; + } + else + { + byte[] cantAffordAuctionMsg = PacketBuilder.CreateChat(Messages.AuctionCantAffordAuctionFee, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordAuctionMsg); + } + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to auction a horse they did not have."); + break; + } + } + if (Leaser.LeaserButtonIdExists(buttonIdStr)) + { + Leaser horseLeaser = Leaser.GetLeaserByButtonId(buttonIdStr); + + if(sender.LoggedinUser.Money >= horseLeaser.Price) + { + if(sender.LoggedinUser.HorseInventory.HorseList.Length + 1 > sender.LoggedinUser.MaxHorses) + { + byte[] cantManageHorses = PacketBuilder.CreateChat(Messages.HorseLeaserHorsesFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantManageHorses); + break; + } + else + { + sender.LoggedinUser.MajorPriority = true; + sender.LoggedinUser.TakeMoney(horseLeaser.Price); + + HorseInstance leaseHorse = horseLeaser.GenerateLeaseHorse(); + + if(leaseHorse.Breed.Id == 170) // UniPeg + { + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnipegTeamup).Count++; + if(sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnipegTeamup).Count >= 5) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(55)); // UniPeg Friend + } + else if(leaseHorse.Breed.Type == "unicorn") + { + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnicornTeamup).Count++; + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.UnicornTeamup).Count >= 5) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(42)); // Unicorn Friend + } + else if(leaseHorse.Breed.Type == "pegasus") + { + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PegasusTeamup).Count++; + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.PegasusTeamup).Count >= 5) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(43)); // Pegasus Friend + } + + sender.LoggedinUser.HorseInventory.AddHorse(leaseHorse); + + byte[] addedHorseMeta = PacketBuilder.CreateMetaPacket(Meta.BuildLeaserOnLeaseInfo(horseLeaser)); + sender.SendPacket(addedHorseMeta); + + byte[] addedNewTempHorseMessage = PacketBuilder.CreateChat(Messages.HorseLeaserTemporaryHorseAdded, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(addedNewTempHorseMessage); + break; + + } + } + else + { + byte[] cantAffordLease = PacketBuilder.CreateChat(Messages.HorseLeaserCantAffordMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordLease); + break; + } + + } + if(AbuseReport.DoesReasonExist(buttonIdStr)) + { + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMetaPacket(AbuseReport.GetReasonById(buttonIdStr).Meta); + sender.SendPacket(metaPacket); + break; + } + + Logger.ErrorPrint("Dynamic button #" + buttonIdStr + " unknown... Packet Dump: "+BitConverter.ToString(packet).Replace("-", " ")); + break; + } + } + public static void OnArenaScored(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); + return; + } + if(packet.Length <= 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + "Sent invalid Arena Scored Packet."); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string scoreStr = packetStr.Substring(1, packet.Length - 3); + int score = -1; + try + { + score = int.Parse(scoreStr); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Scored NAN in an arena."); + return; + } + + if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) + { + byte[] waitingOnResults = PacketBuilder.CreateChat(Messages.FormatArenaYourScore(score), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(waitingOnResults); + + Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + enteredArena.SubmitScore(sender.LoggedinUser, score); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Scored in an arena while not in one"); + } + return; + + } + public static void OnUserInfoRequest(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); + return; + } + + // Prevent duplicate requests. + if (sender.LoggedinUser.UserInfoSend) + return; + + sender.LoggedinUser.UserInfoSend = true; + + // This allows the website to view that the player is online. + Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator, sender.LoggedinUser.Subscribed, sender.LoggedinUser.NewPlayer); + + Logger.DebugPrint(sender.LoggedinUser.Username + " Requested user information."); + User user = sender.LoggedinUser; + + // Send player current location & map data + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + sender.SendPacket(MovementPacket); + + // Send "Welcome to the Secret Land of Horses" message. + byte[] WelcomeMessage = PacketBuilder.CreateWelcomeMessage(user.Username); + sender.SendPacket(WelcomeMessage); + + // Send weather effects, and current server time. + byte[] WorldData = PacketBuilder.CreateWorldData(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, sender.LoggedinUser.GetWeatherSeen()); + sender.SendPacket(WorldData); + + // if the player is logging in for the first time, send Welcome newest rider of Horse Isle message. + if (sender.LoggedinUser.NewPlayer) + { + byte[] NewUserMessage = PacketBuilder.CreateChat(Messages.NewUserMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(NewUserMessage); + } + + // Send Security Codes, used (badly) to verify Minigame Rewards + byte[] SecCodePacket = PacketBuilder.CreateSecCode(user.SecCodeSeeds, user.SecCodeInc, user.Administrator, user.Moderator); + sender.SendPacket(SecCodePacket); + + // Send player money count, total players and total unread mail. + byte[] BaseStatsPacketData = PacketBuilder.CreatePlayerData(user.Money, GameServer.GetNumberOfPlayers(), user.MailBox.UnreadMailCount); + sender.SendPacket(BaseStatsPacketData); + + // Sends Meta Window information (Nearby, current tile, etc) + UpdateArea(sender); + + /* + * Send all nearby players locations to the client + * if there not nearby, say there at 1000,1000. + */ + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (client.LoggedinUser.Id != user.Id) + { + if(IsOnScreen(client.LoggedinUser.X, client.LoggedinUser.Y, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(client.LoggedinUser.X, client.LoggedinUser.Y, client.LoggedinUser.Facing, client.LoggedinUser.CharacterId, client.LoggedinUser.Username); + sender.SendPacket(PlayerInfo); + } + else + { + byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000+4, 1000+1, client.LoggedinUser.Facing, client.LoggedinUser.CharacterId, client.LoggedinUser.Username); + sender.SendPacket(PlayerInfo); + } + } + } + } + + /* + * Update all nearby users + * that the new player logged in. + */ + foreach (User nearbyUser in GameServer.GetNearbyUsers(sender.LoggedinUser.X, sender.LoggedinUser.Y, false, false)) + if (nearbyUser.Id != sender.LoggedinUser.Id) + if(!nearbyUser.MajorPriority) + if(!nearbyUser.MinorPriority) + UpdateArea(nearbyUser.LoggedinClient); + + /* + * Send a list of isles, towns and areas to the player + * This is used for the world map. + */ + + byte[] IsleData = PacketBuilder.CreatePlaceData(World.Isles.ToArray(), World.Towns.ToArray(), World.Areas.ToArray()); + sender.SendPacket(IsleData); + + // Tells the client which tiles are passable, which the player should appear ontop of and which it should be below. + byte[] TileFlags = PacketBuilder.CreateTileOverlayFlags(Map.OverlayTileDepth); + sender.SendPacket(TileFlags); + + // Send Todays Note: + byte[] MotdData = PacketBuilder.CreateMotd(); + sender.SendPacket(MotdData); + + // Send riddle annoucement + if (RiddleEvent != null) + if (RiddleEvent.Active) + RiddleEvent.ShowStartMessage(sender); + + /* + * Gives Queued Items + * When you buy a PO from the store on the website + * its added to this queued items list. + */ + DoItemPurchases(sender); + + // Send Queued Messages + string[] queuedMessages = Database.GetMessageQueue(sender.LoggedinUser.Id); + foreach(string queuedMessage in queuedMessages) + { + byte[] msg = PacketBuilder.CreateChat(Messages.MessageQueueHeader+queuedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + } + Database.ClearMessageQueue(sender.LoggedinUser.Id); + + // Send "Playername Logged in" message + byte[] loginMessageBytes = PacketBuilder.CreateChat(Messages.FormatLoginMessage(sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_LEFT); + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + if (!client.LoggedinUser.MuteLogins && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) + client.SendPacket(loginMessageBytes); + + + /* + * Send players nearby to you + * your position, otherwise just send 1000,1000 + */ + byte[] yourPlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.Facing, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Username); + byte[] yourPlayerInfoOffscreen = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, sender.LoggedinUser.Facing, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Username); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) + { + if (IsOnScreen(client.LoggedinUser.X, client.LoggedinUser.Y, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + client.SendPacket(yourPlayerInfo); + else + client.SendPacket(yourPlayerInfoOffscreen); + } + } + } + + + + } + + public static void OnSwfModuleCommunication(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " tried to send swf communication when not logged in."); + return; + } + if (packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid swf commmunication Packet"); + return; + } + + + byte module = packet[1]; + switch(module) + { + case PacketBuilder.SWFMODULE_INVITE: + if(packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid 2PLAYER INVITE Packet (WRONG SIZE)"); + break; + } + string packetStr = Encoding.UTF8.GetString(packet); + string playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + int playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (Exception) { }; + + if(IsUserOnline(playerId)) + { + User toInvite = GetUserById(playerId); + TwoPlayer twoPlayerGame = new TwoPlayer(toInvite, sender.LoggedinUser, false); + } + break; + case PacketBuilder.SWFMODULE_ACCEPT: + if (packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid 2PLAYER ACCEPT Packet (WRONG SIZE)"); + break; + } + packetStr = Encoding.UTF8.GetString(packet); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (Exception) { }; + + if (IsUserOnline(playerId)) + { + User toAccept = GetUserById(playerId); + if(TwoPlayer.IsPlayerInvitingPlayer(toAccept, sender.LoggedinUser)) + { + TwoPlayer twoPlayerGame = TwoPlayer.GetGameInvitingPlayer(toAccept, sender.LoggedinUser); + twoPlayerGame.Accept(sender.LoggedinUser); + } + } + break; + case PacketBuilder.SWFMODULE_DRAWINGROOM: + if(packet.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM packet (swf communication, WRONG SIZE)"); + break; + } + if(packet[2] == PacketBuilder.DRAWINGROOM_GET_DRAWING) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + break; + } + int roomId = packet[3] - 40; + Drawingroom room; + try + { + room = Drawingroom.GetDrawingRoomById(roomId); + } + catch(KeyNotFoundException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); + break; + } + + if(room.Drawing != "") + { + byte[] drawingPacket = PacketBuilder.CreateDrawingUpdatePacket(room.Drawing); + sender.SendPacket(drawingPacket); + } + + } + else if(packet[2] == PacketBuilder.DRAWINGROOM_SAVE) + { + if (packet.Length < 5) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + break; + } + + /* + * The lack of an if case for if the user isnt subscribed + * is NOT a bug thats just how pinto does it. + * you can save but not load if your subscribed. weird huh? + */ + + int roomId = packet[3] - 40; + Drawingroom room; + try + { + room = Drawingroom.GetDrawingRoomById(roomId); + } + catch (KeyNotFoundException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); + break; + } + + if (!Database.SavedDrawingsExist(sender.LoggedinUser.Id)) + Database.CreateSavedDrawings(sender.LoggedinUser.Id); + + int slotNo = 0; + byte slot = packet[4]; + switch (slot) + { + case 0x29: // Slot 1 + Database.SaveDrawingSlot1(sender.LoggedinUser.Id, room.Drawing); + slotNo = 1; + break; + case 0x2A: // Slot 2 + Database.SaveDrawingSlot2(sender.LoggedinUser.Id, room.Drawing); + slotNo = 2; + break; + case 0x2B: // Slot 3 + Database.SaveDrawingSlot3(sender.LoggedinUser.Id, room.Drawing); + slotNo = 3; + break; + } + + byte[] savedDrawingMessage = PacketBuilder.CreateChat(Messages.FormatDrawingRoomSaved(slotNo), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(savedDrawingMessage); + + break; + } + else if (packet[2] == PacketBuilder.DRAWINGROOM_LOAD) + { + if (packet.Length < 5) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + break; + } + + if(!sender.LoggedinUser.Subscribed) + { + byte[] notSubscribedCantLoad = PacketBuilder.CreateChat(Messages.DrawingCannotLoadNotSubscribed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notSubscribedCantLoad); + break; + } + + int roomId = packet[3] - 40; + Drawingroom room; + try{ + room = Drawingroom.GetDrawingRoomById(roomId); + } + catch (KeyNotFoundException){ + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); + break; + } + + if (!Database.SavedDrawingsExist(sender.LoggedinUser.Id)) + Database.CreateSavedDrawings(sender.LoggedinUser.Id); + + int slotNo = 0; + byte slot = packet[4]; + string drawingToAdd = ""; + switch (slot) + { + case 0x29: // Slot 1 + drawingToAdd = Database.LoadDrawingSlot1(sender.LoggedinUser.Id); + slotNo = 1; + break; + case 0x2A: // Slot 2 + drawingToAdd = Database.LoadDrawingSlot2(sender.LoggedinUser.Id); + slotNo = 2; + break; + case 0x2B: // Slot 3 + drawingToAdd = Database.LoadDrawingSlot3(sender.LoggedinUser.Id); + slotNo = 3; + break; + } + + try { + room.Drawing += drawingToAdd; + } + catch(DrawingroomFullException){ + byte[] roomFullMessage = PacketBuilder.CreateChat(Messages.DrawingPlzClearLoad, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(roomFullMessage); + break; + } + + Database.SetLastPlayer("D" + room.Id.ToString(), sender.LoggedinUser.Id); + UpdateDrawingForAll("D" + room.Id, sender, drawingToAdd, true); + + byte[] loadedDrawingMessage = PacketBuilder.CreateChat(Messages.FormatDrawingRoomLoaded(slotNo), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(loadedDrawingMessage); + + break; + } + else // Default action- draw line + { + if (packet.Length < 5) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + break; + } + + if(!sender.LoggedinUser.Subscribed) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to draw while not subscribed."); + byte[] notSubscribedMessage = PacketBuilder.CreateChat(Messages.DrawingNotSentNotSubscribed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notSubscribedMessage); + break; + } + + int roomId = packet[2] - 40; + Drawingroom room; + try + { + room = Drawingroom.GetDrawingRoomById(roomId); + } + catch (KeyNotFoundException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); + break; + } + + packetStr = Encoding.UTF8.GetString(packet); + + string drawing = packetStr.Substring(3, packetStr.Length - 5); + if (drawing.Contains("X!")) // Clear byte + { + room.Drawing = ""; + goto update; + } + + try { + room.Drawing += drawing; + } + catch (DrawingroomFullException) + { + byte[] roomFullMessage = PacketBuilder.CreateChat(Messages.DrawingPlzClearDraw, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(roomFullMessage); + break; + } + update:; + Database.SetLastPlayer("D" + room.Id.ToString(), sender.LoggedinUser.Id); + UpdateDrawingForAll("D" + room.Id, sender, drawing, false); + } + + break; + case PacketBuilder.SWFMODULE_BRICKPOET: + if(packet.Length < 5) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET packet (swf communication, WRONG SIZE)"); + break; + } + if(packet[2] == PacketBuilder.BRICKPOET_LIST_ALL) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET LIST ALL packet (swf communication, WRONG SIZE)"); + break; + } + + int roomId = packet[3] - 40; + Brickpoet.PoetryPeice[] room; + try // Make sure the room exists- + { + room = Brickpoet.GetPoetryRoom(roomId); + } + catch(KeyNotFoundException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid brickpoet room: " + roomId); + break; + } + // Send list of peices + byte[] poetPacket = PacketBuilder.CreateBrickPoetListPacket(room); + sender.SendPacket(poetPacket); + + } + else if(packet[3] == PacketBuilder.BRICKPOET_MOVE) + { + if (packet.Length < 0xB) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, WRONG SIZE)"); + break; + } + packetStr = Encoding.UTF8.GetString(packet); + if(!packetStr.Contains('|')) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, NO | SEPERATOR)"); + break; + } + string[] args = packetStr.Split('|'); + if(args.Length < 5) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET MOVE Packet (swf communication, NOT ENOUGH | SEPERATORS."); + break; + } + + int roomId = packet[2] - 40; + int peiceId; + int x; + int y; + Brickpoet.PoetryPeice[] room; + Brickpoet.PoetryPeice peice; + + try // Make sure these are acturally numbers! + { + peiceId = int.Parse(args[1]); + x = int.Parse(args[2]); + y = int.Parse(args[3]); + + + room = Brickpoet.GetPoetryRoom(roomId); + peice = Brickpoet.GetPoetryPeice(room, peiceId); + + } + catch (Exception e) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " brickpoet - "+e.ToString()); + break; + } + // Change location in Database + peice.X = x; + peice.Y = y; + + foreach(User user in GetUsersOnSpecialTileCode("MULTIROOM-" + "P" + roomId.ToString())) // Send to each user! + { + if (user.Id == sender.LoggedinUser.Id) + continue; + + byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMovePacket(peice); + user.LoggedinClient.SendPacket(updatePoetRoomPacket); + + } + + if (Database.GetLastPlayer("P" + roomId) != sender.LoggedinUser.Id) + { + Database.SetLastPlayer("P" + roomId, sender.LoggedinUser.Id); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + } + + break; + } + else + { + Logger.DebugPrint(" packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); + break; + } + + break; + case PacketBuilder.SWFMODULE_DRESSUPROOM: + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM packet (swf communication, WRONG SIZE)"); + break; + } + if (packet[2] == PacketBuilder.DRESSUPROOM_LIST_ALL) + { + int roomId = packet[3] - 40; + Dressup.DressupRoom room = Dressup.GetDressupRoom(roomId); + + if (room.DressupPeices.Length > 0) + { + byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceResponse(room.DressupPeices.ToArray()); + sender.SendPacket(allDressupsResponse); + } + + } + else // Move + { + if (packet.Length < 9) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, WRONG SIZE)"); + break; + } + + int roomId = packet[2] - 40; + if (roomId <= 0) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID ROOM)"); + break; + } + Dressup.DressupRoom room = Dressup.GetDressupRoom(roomId); + + packetStr = Encoding.UTF8.GetString(packet); + string moveStr = packetStr.Substring(3, packetStr.Length - 5); + + string[] moves = moveStr.Split('|'); + + if(moves.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, MOVES WRONG SIZE)"); + break; + } + + int peiceId; + double moveToX; + double moveToY; + bool active = true; + try // Make sure these are acturally numbers! + { + peiceId = int.Parse(moves[0]); + if (moves[1] == "D" || moves[2] == "D") + { + active = false; + moveToX = 0; + moveToY = 0; + } + else + { + moveToX = double.Parse(moves[1]); + moveToY = double.Parse(moves[2]); + } + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID LOCATION)"); + break; + } + + Dressup.DressupPeice peice = room.GetDressupPeice(peiceId); + // Update database entries + peice.X = Convert.ToInt32(Math.Round(moveToX)); + peice.Y = Convert.ToInt32(Math.Round(moveToY)); + peice.Active = active; + + // Forward to other users + byte[] movePeicePacket = PacketBuilder.CreateDressupRoomPeiceMove(peice.PeiceId, moveToX, moveToY, peice.Active); + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true); + foreach(User user in users) + { + if (user.Id != sender.LoggedinUser.Id) + user.LoggedinClient.SendPacket(movePeicePacket); + } + } + break; + case PacketBuilder.SWFMODULE_BANDHALL: + byte[] response = PacketBuilder.CreateForwardedSwfRequest(packet); + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + if (user.Id == sender.LoggedinUser.Id) + continue; + user.LoggedinClient.SendPacket(response); + } + break; + case PacketBuilder.SWFMODULE_2PLAYER: + if(TwoPlayer.IsPlayerInGame(sender.LoggedinUser)) + { + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.LoggedinUser); + + User otherUser = null; + if (twoPlayerGame.Invitee.Id == sender.LoggedinUser.Id) + otherUser = twoPlayerGame.Inviting; + else if (twoPlayerGame.Inviting.Id == sender.LoggedinUser.Id) + otherUser = twoPlayerGame.Invitee; + + response = PacketBuilder.CreateForwardedSwfRequest(packet); + otherUser.LoggedinClient.SendPacket(response); + } + break; + case PacketBuilder.SWFMODULE_CLOSE: + if (TwoPlayer.IsPlayerInGame(sender.LoggedinUser)) + { + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.LoggedinUser); + + User otherUser = null; + if (twoPlayerGame.Invitee.Id == sender.LoggedinUser.Id) + otherUser = twoPlayerGame.Inviting; + else if (twoPlayerGame.Inviting.Id == sender.LoggedinUser.Id) + otherUser = twoPlayerGame.Invitee; + + response = PacketBuilder.Create2PlayerClose(); + otherUser.LoggedinClient.SendPacket(response); + + twoPlayerGame.CloseGame(sender.LoggedinUser); + + + } + break; + case PacketBuilder.SWFMODULE_ARENA: + if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) + { + Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + response = PacketBuilder.CreateForwardedSwfRequest(packet); + foreach (Arena.ArenaEntry entry in arena.Entries.ToArray()) + { + if (entry.EnteredUser.Id == sender.LoggedinUser.Id) + continue; + if(entry.EnteredUser.LoggedinClient.LoggedIn) + entry.EnteredUser.LoggedinClient.SendPacket(response); + } + + } + break; + default: + Logger.DebugPrint("Unknown moduleid : " + module + " packet dump: " + BitConverter.ToString(packet).Replace("-"," ")); + break; + + } + + } + + public static void OnWish(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " tried to wish when not logged in."); + return; + } + + if(packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid wish Packet"); + return; + } + + if (!sender.LoggedinUser.Inventory.HasItemId(Item.WishingCoin)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use a wishing well while having 0 coins."); + return; + } + + InventoryItem wishingCoinInvItems = sender.LoggedinUser.Inventory.GetItemByItemId(Item.WishingCoin); + byte wishType = packet[1]; + string message = ""; + + byte[] chatMsg = PacketBuilder.CreateChat(Messages.TossedCoin, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMsg); + + switch(wishType) + { + case PacketBuilder.WISH_MONEY: + int gainMoney = RandomNumberGenerator.Next(500, 1000); + sender.LoggedinUser.AddMoney(gainMoney); + message = Messages.FormatWishMoneyMessage(gainMoney); + break; + case PacketBuilder.WISH_ITEMS: + Item.ItemInformation[] wishableItmes = Item.GetAllWishableItems(); + int item = RandomNumberGenerator.Next(0, wishableItmes.Length); + Item.ItemInformation itm = wishableItmes[item]; + item = RandomNumberGenerator.Next(0, wishableItmes.Length); + Item.ItemInformation itm2 = wishableItmes[item]; + + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm2.Id)); + + message = Messages.FormatWishThingsMessage(itm.Name, itm2.Name); + break; + case PacketBuilder.WISH_WORLDPEACE: + byte[] tooDeep = PacketBuilder.CreateChat(Messages.WorldPeaceOnlySoDeep, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooDeep); + + wishableItmes = Item.GetAllWishableItems(); + item = RandomNumberGenerator.Next(0, wishableItmes.Length); + int earnMoney = RandomNumberGenerator.Next(0, 500); + itm = wishableItmes[item]; + + + sender.LoggedinUser.AddMoney(earnMoney); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); + + message = Messages.FormatWishWorldPeaceMessage(earnMoney, itm.Name); + break; + default: + Logger.ErrorPrint("Unknnown Wish type: " + wishType.ToString("X")); + break; + } + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count++; + + if(sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 100) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(30)); // Well Wisher + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(31)); // Star Wisher + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(51)); // Extraordanary Wisher + + byte[] msg = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + + sender.LoggedinUser.Inventory.Remove(wishingCoinInvItems.ItemInstances[0]); + UpdateArea(sender); + } + public static void OnKeepAlive(GameClient sender, byte[] packet) + { + if (packet.Length < 2) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid update Packet"); + return; + } + + if (packet[1] == PacketBuilder.PACKET_CLIENT_TERMINATOR) + { + Logger.DebugPrint("Received KEEP_ALIVE from: " + sender.LoggedinUser.Username); + return; + } + } + public static void OnStatsPacket(GameClient sender, byte[] packet) + { + if(!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested stats when not logged in."); + return; + } + if(packet.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + "Sent an invalid Stats Packet"); + return; + } + + + } + public static void OnProfilePacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Requested to change profile page when not logged in."); + return; + } + if (packet.Length < 2) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid Profile Packet"); + return; + } + + byte method = packet[1]; + if (method == PacketBuilder.PACKET_CLIENT_TERMINATOR) + { + UpdateStats(sender); + } + if (method == PacketBuilder.VIEW_PROFILE) + { + sender.LoggedinUser.MajorPriority = true; + string profilePage = sender.LoggedinUser.ProfilePage; + byte[] profilePacket = PacketBuilder.CreateProfilePacket(profilePage); + sender.SendPacket(profilePacket); + } + else if (method == PacketBuilder.SAVE_PROFILE) + { + + string packetStr = Encoding.UTF8.GetString(packet); + if (packet.Length < 3 || !packetStr.Contains('|')) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid Profile SAVE Packet"); + return; + } + + int characterId = (packet[2] - 20) * 64 + (packet[3] - 20); + + string profilePage = packetStr.Split('|')[1]; + profilePage = profilePage.Substring(0, profilePage.Length - 2); + sender.LoggedinUser.CharacterId = characterId; + + + + if (profilePage.Length > 4000) + { + byte[] notSaved = PacketBuilder.CreateChat(Messages.ProfileTooLongMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(notSaved); + return; + } + + object filterReason = Chat.FilterMessage(profilePage); + if(filterReason != null) + { + Chat.Reason reason = (Chat.Reason)filterReason; + byte[] msg = PacketBuilder.CreateChat(Messages.FormatProfileSavedBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(msg); + return; + } + + sender.LoggedinUser.ProfilePage = profilePage; + + Logger.DebugPrint(sender.LoggedinUser.Username + " Changed to character id: " + characterId + " and set there Profile Description to '" + profilePage + "'"); + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.ProfileSavedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + + UpdateArea(sender); + UpdateUserFacingAndLocation(sender.LoggedinUser); + } + else if (method == PacketBuilder.SECCODE_AWARD) + { + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode AWARD request with invalid size"); + return; + } + + string packetStr = Encoding.UTF8.GetString(packet); + string awardIdStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + + int value = -1; + try + { + value = int.Parse(awardIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid awardid value"); + return; + } + + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(value)); + return; + } + else + { + byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorMessage); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); + return; + } + } + else if (method == PacketBuilder.SECCODE_SCORE || method == PacketBuilder.SECCODE_TIME || method == PacketBuilder.SECCODE_WINLOOSE) + { + bool time = (method == PacketBuilder.SECCODE_TIME); + bool winloose = (method == PacketBuilder.SECCODE_WINLOOSE); + + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode score/time/winloose request with invalid size"); + return; + } + + + string packetStr = Encoding.UTF8.GetString(packet); + string gameInfoStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + if (winloose) + { + string gameTitle = gameInfoStr.Substring(1); + byte pmethod = packet[6]; + if(pmethod == PacketBuilder.WINLOOSE_WIN) + { + sender.LoggedinUser.Highscores.Win(gameTitle); + byte[] winMsg = PacketBuilder.CreateChat(Messages.Format2PlayerRecordWin(gameTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(winMsg); + } + else if(pmethod == PacketBuilder.WINLOOSE_LOOSE) + { + sender.LoggedinUser.Highscores.Loose(gameTitle); + byte[] looseMsg = PacketBuilder.CreateChat(Messages.Format2PlayerRecordLose(gameTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(looseMsg); + } + + if (sender.LoggedinUser.Highscores.HighscoreList.Length >= 30) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player + + if (sender.LoggedinUser.Highscores.HighscoreList.Length >= 60) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master + + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut + + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy + return; + } + if (gameInfoStr.Contains("|")) + { + string[] gameInfo = gameInfoStr.Split('|'); + if (gameInfo.Length < 2) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid seccode score request"); + return; + } + + string gameTitle = gameInfo[0]; + string gameScoreStr = gameInfo[1]; + + int value = -1; + try + { + value = int.Parse(gameScoreStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid score value"); + return; + } + Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameTitle, 5, !time); + bool bestScoreEver = false; + if (scores.Length >= 1) + bestScoreEver = scores[0].Score <= value; + + bool newHighscore = sender.LoggedinUser.Highscores.UpdateHighscore(gameTitle, value, time); + if(bestScoreEver && !time) + { + byte[] bestScoreBeaten = PacketBuilder.CreateChat(Messages.BeatBestHighscore, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(bestScoreBeaten); + sender.LoggedinUser.AddMoney(2500); + } + else if (newHighscore) + { + if(time) + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatTimeBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + else + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatHighscoreBeatenMessage(value), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + + } + + if(sender.LoggedinUser.Highscores.HighscoreList.Length >= 30) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player + + if (sender.LoggedinUser.Highscores.HighscoreList.Length >= 60) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master + + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut + + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy + + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score."); + return; + } + + } + else + { + byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorMessage); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); + return; + } + } + else if (method == PacketBuilder.SECCODE_MONEY) + { + + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode money request with invalid size"); + return; + } + + string packetStr = Encoding.UTF8.GetString(packet); + string gameInfoStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + if (gameInfoStr.Contains("|")) + { + string[] moneyInfo = gameInfoStr.Split('|'); + if (moneyInfo.Length < 2) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid money score request"); + return; + } + + string id = moneyInfo[0]; // not sure what this is for? + + string moneyStr = moneyInfo[1]; + int value = -1; + try + { + value = int.Parse(moneyStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid money value"); + return; + } + + int moneyEarned = value * 10; + Logger.InfoPrint(sender.LoggedinUser.Username + " Earned $" + moneyEarned + " In: " + id); + + sender.LoggedinUser.AddMoney(moneyEarned); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatMoneyEarnedMessage(moneyEarned), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score."); + return; + } + + } + } + else if (method == PacketBuilder.SECCODE_GIVE_ITEM) + { + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode item request with invalid size"); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + int value = -1; + try + { + value = int.Parse(intStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); + return; + } + + + if (Item.ItemIdExist(value)) + { + ItemInstance itm = new ItemInstance(value); + + Item.ItemInformation itemInfo = Item.GetItemById(value); + string messageToSend = Messages.FormatYouEarnedAnItemMessage(itemInfo.Name); + try + { + sender.LoggedinUser.Inventory.Add(itm); + } + catch(InventoryException) + { + messageToSend = Messages.FormatYouEarnedAnItemButInventoryFullMessage(itemInfo.Name); + } + + byte[] earnedItemMessage = PacketBuilder.CreateChat(messageToSend, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(earnedItemMessage); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to give an non existant item"); + return; + } + + } + else + { + byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorMessage); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); + return; + } + } + else if (method == PacketBuilder.SECCODE_DELETE_ITEM) + { + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode item request with invalid size"); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + int value = -1; + try + { + value = int.Parse(intStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); + return; + } + + + if (sender.LoggedinUser.Inventory.HasItemId(value)) + { + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(value); + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); + + Item.ItemInformation itemInfo = Item.GetItemById(value); + byte[] lostItemMessage = PacketBuilder.CreateChat(Messages.FormatYouLostAnItemMessage(itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(lostItemMessage); + + UpdateArea(sender); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to delete an non existant item"); + return; + } + + } + else + { + byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorMessage); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); + return; + } + } + else if (method == PacketBuilder.SECCODE_QUEST) + { + byte[] ExpectedSecCode = sender.LoggedinUser.GenerateSecCode(); + byte[] GotSecCode = new byte[4]; + Array.ConstrainedCopy(packet, 2, GotSecCode, 0, GotSecCode.Length); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); + if (ExpectedSecCode.SequenceEqual(GotSecCode)) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a seccode quest request with invalid size"); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); + int value = -1; + try + { + value = int.Parse(intStr); + } + catch (FormatException) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); + return; + } + + + if (Quest.DoesQuestExist(value)) + { + Quest.QuestEntry questEntry = Quest.GetQuestById(value); + Quest.ActivateQuest(sender.LoggedinUser, questEntry); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to activate a non existant quest"); + return; + } + + + } + else + { + byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(errorMessage); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); + return; + } + } + else if (method == PacketBuilder.PROFILE_HIGHSCORES_LIST) + { + sender.LoggedinUser.MajorPriority = true; + string packetStr = Encoding.UTF8.GetString(packet); + string gameName = packetStr.Substring(2, packetStr.Length - 4); + byte[] metaTag = PacketBuilder.CreateMetaPacket(Meta.BuildTopHighscores(gameName)); + sender.SendPacket(metaTag); + } + else if (method == PacketBuilder.PROFILE_BESTTIMES_LIST) + { + sender.LoggedinUser.MajorPriority = true; + string packetStr = Encoding.UTF8.GetString(packet); + string gameName = packetStr.Substring(2, packetStr.Length - 4); + byte[] metaTag = PacketBuilder.CreateMetaPacket(Meta.BuildTopTimes(gameName)); + sender.SendPacket(metaTag); + } + else if (method == PacketBuilder.PROFILE_WINLOOSE_LIST) + { + sender.LoggedinUser.MajorPriority = true; + string packetStr = Encoding.UTF8.GetString(packet); + string gameName = packetStr.Substring(2, packetStr.Length - 4); + byte[] metaTag = PacketBuilder.CreateMetaPacket(Meta.BuildTopWinners(gameName)); + sender.SendPacket(metaTag); + } + else + { + Logger.DebugPrint("Unknown Profile Packet! " + BitConverter.ToString(packet).Replace("-", " ")); + } + } + public static void OnMovementPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent movement packet when not logged in."); + return; + } + + + User loggedInUser = sender.LoggedinUser; + + /* + * Player stuff + */ + + // Store this for later... do it now to avoid TOCTOU. + User[] onScreenBefore = GetOnScreenUsers(loggedInUser.X, loggedInUser.Y, true, true); + + // Leave Multirooms + Multiroom.LeaveAllMultirooms(loggedInUser); + + loggedInUser.PendingBuddyRequestTo = null; + + // Close Social Windows + foreach (User sUser in loggedInUser.BeingSocializedBy) + UpdateArea(sUser.LoggedinClient); + loggedInUser.ClearSocailizedWith(); + + + if (loggedInUser.CurrentlyRidingHorse != null) + { + if(loggedInUser.CurrentlyRidingHorse.BasicStats.Experience < 25) + { + if(GameServer.RandomNumberGenerator.Next(0, 100) >= 97 || sender.LoggedinUser.Username.ToLower() == "dream") + { + loggedInUser.CurrentlyRidingHorse.BasicStats.Experience++; + byte[] horseBuckedMessage; + if(loggedInUser.CurrentlyRidingHorse.Breed.Type == "llama") + horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseLlamaBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); + else if (loggedInUser.CurrentlyRidingHorse.Breed.Type == "camel") + horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseCamelBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); + else + horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); + + sender.LoggedinUser.CurrentlyRidingHorse = null; + sender.LoggedinUser.Facing %= 5; + sender.SendPacket(horseBuckedMessage); + } + } + } + + // Randomly move if thirst, hunger, tiredness too low- + + byte movementDirection = packet[1]; + + if (loggedInUser.Thirst <= 0 || loggedInUser.Hunger <= 0 || loggedInUser.Tiredness <= 0) + { + if (RandomNumberGenerator.Next(0, 10) == 7) + { + byte[] possibleDirections = new byte[] { PacketBuilder.MOVE_UP, PacketBuilder.MOVE_DOWN, PacketBuilder.MOVE_RIGHT, PacketBuilder.MOVE_LEFT }; + + if (possibleDirections.Contains(movementDirection)) + { + byte newDirection = possibleDirections[RandomNumberGenerator.Next(0, possibleDirections.Length)]; + if (newDirection != movementDirection) + { + movementDirection = newDirection; + if (loggedInUser.Thirst <= 0) + { + byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatThirst.ToUpper(), Messages.StatThirstDizzy), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMessage); + } + else if (loggedInUser.Hunger <= 0) + { + byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatHunger.ToUpper(), Messages.StatHungerStumble), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMessage); + } + /* + * Doesnt appear to acturally exist. + * + else if (loggedInUser.Tiredness <= 0) + { + byte[] chatMessage = PacketBuilder.CreateChat(Messages.FormatRandomMovementMessage(Messages.StatTired.ToUpper()), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMessage); + } + */ + } + } + } + } + + + + int onHorse = 0; + int facing = sender.LoggedinUser.Facing; + while (facing >= 5) + { + facing -= 5; + onHorse++; + } + byte direction = 0; + int newX = loggedInUser.X; + int newY = loggedInUser.Y; + + + bool moveTwo = false; + + if (movementDirection == PacketBuilder.MOVE_ESCAPE) // Exit this place / X Button + { + + byte Direction; + if (World.InSpecialTile(loggedInUser.X, loggedInUser.Y)) + { + + World.SpecialTile tile = World.GetSpecialTile(loggedInUser.X, loggedInUser.Y); + if (tile.ExitX != 0) + newX = tile.ExitX; + if (tile.ExitY != 0) + newY = tile.ExitY; + else + if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y + 1) || loggedInUser.NoClip) + newY += 1; + + + + if (loggedInUser.X + 1 == newX && loggedInUser.Y == newY) + Direction = PacketBuilder.DIRECTION_RIGHT; + else if (loggedInUser.X - 1 == newX && loggedInUser.Y == newY) + Direction = PacketBuilder.DIRECTION_LEFT; + else if (loggedInUser.Y + 1 == newY && loggedInUser.X == newX) + Direction = PacketBuilder.DIRECTION_DOWN; + else if (loggedInUser.Y - 1 == newY && loggedInUser.X == newX) + Direction = PacketBuilder.DIRECTION_UP; + else + Direction = PacketBuilder.DIRECTION_TELEPORT; + + loggedInUser.X = newX; + loggedInUser.Y = newY; + + + } + else + { + if (Map.CheckPassable(loggedInUser.X, loggedInUser.Y + 1) || loggedInUser.NoClip) + loggedInUser.Y += 1; + + Direction = PacketBuilder.DIRECTION_DOWN; + } + + loggedInUser.Facing = Direction + (onHorse * 5); + Logger.DebugPrint("Exiting player: " + loggedInUser.Username + " to: " + loggedInUser.X + "," + loggedInUser.Y); + byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true); + sender.SendPacket(moveResponse); + goto Complete; + } + + if (movementDirection == PacketBuilder.MOVE_UP) + { + direction = PacketBuilder.DIRECTION_UP; + if (Map.CheckPassable(newX, newY - 1) || loggedInUser.NoClip) + newY -= 1; + + + if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move + if (Map.CheckPassable(newX, newY - 1) || loggedInUser.NoClip) + { + newY -= 1; + moveTwo = true; + } + } + else if (movementDirection == PacketBuilder.MOVE_LEFT) + { + direction = PacketBuilder.DIRECTION_LEFT; + if (Map.CheckPassable(newX - 1, newY) || loggedInUser.NoClip) + newX -= 1; + + + if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move + if (Map.CheckPassable(newX - 1, newY) || loggedInUser.NoClip) + { + newX -= 1; + moveTwo = true; + } + } + else if (movementDirection == PacketBuilder.MOVE_RIGHT) + { + direction = PacketBuilder.DIRECTION_RIGHT; + if (Map.CheckPassable(newX + 1, newY) || loggedInUser.NoClip) + newX += 1; + + + if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move + if (Map.CheckPassable(newX + 1, newY) || loggedInUser.NoClip) + { + newX += 1; + moveTwo = true; + } + } + else if (movementDirection == PacketBuilder.MOVE_DOWN) + { + direction = PacketBuilder.DIRECTION_DOWN; + if (Map.CheckPassable(newX, newY + 1) || loggedInUser.NoClip) + newY += 1; + + + if (loggedInUser.Facing == (direction + (onHorse * 5)) && loggedInUser.CurrentlyRidingHorse != null && !World.InTown(loggedInUser.X, loggedInUser.Y)) // Double move + if (Map.CheckPassable(newX, newY + 1) || loggedInUser.NoClip) + { + newY += 1; + moveTwo = true; + } + } + else if(movementDirection == PacketBuilder.MOVE_UPDATE) + { + UpdateArea(sender); + return; + } + + + + loggedInUser.Facing = direction + (onHorse * 5); + if (loggedInUser.Y != newY || loggedInUser.X != newX) + { + if (moveTwo) + direction += 20; + + loggedInUser.Y = newY; + loggedInUser.X = newX; + + // Check Treasures + if (Treasure.IsTileTreasure(loggedInUser.X, loggedInUser.Y)) + { + Treasure treasure = Treasure.GetTreasureAt(loggedInUser.X, loggedInUser.Y); + if (treasure.Type == "RAINBOW") + { + treasure.CollectTreasure(loggedInUser); + goto Complete; + } + } + + byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true); + sender.SendPacket(moveResponse); + } + else + { + byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false); + sender.SendPacket(moveResponse); + } + Complete:; + + // Cancel Trades + if (loggedInUser.TradingWith != null) + if ((loggedInUser.TradingWith.Trader.X != loggedInUser.X) && (loggedInUser.TradingWith.Trader.Y != loggedInUser.Y)) + loggedInUser.TradingWith.CancelTradeMoved(); + + // Pac-man the world. + if (loggedInUser.X > Map.Width) + loggedInUser.Teleport(2, loggedInUser.Y); + else if (loggedInUser.X < 2) + loggedInUser.Teleport(Map.Width - 2, loggedInUser.Y); + else if (loggedInUser.Y > Map.Height - 2) + loggedInUser.Teleport(loggedInUser.X, 2); + else if (loggedInUser.Y < 2) + loggedInUser.Teleport(loggedInUser.X, Map.Height - 2); + + + User[] onScreenNow = GetOnScreenUsers(loggedInUser.X, loggedInUser.Y, true, true); + + User[] goneOffScreen = onScreenBefore.Except(onScreenNow).ToArray(); + User[] goneOnScreen = onScreenNow.Except(onScreenBefore).ToArray(); + + foreach (User offScreenUsers in goneOffScreen) + { + if (offScreenUsers.Id == loggedInUser.Id) + continue; + + byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, loggedInUser.Facing, loggedInUser.CharacterId, loggedInUser.Username); + offScreenUsers.LoggedinClient.SendPacket(playerInfoBytes); + } + + foreach (User onScreenUsers in goneOnScreen) + { + if (onScreenUsers.Id == loggedInUser.Id) + continue; + + byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(onScreenUsers.X, onScreenUsers.Y, onScreenUsers.Facing, onScreenUsers.CharacterId, onScreenUsers.Username); + loggedInUser.LoggedinClient.SendPacket(playerInfoBytes); + } + + Update(sender); + + } + public static void OnQuitPacket(GameClient sender, byte[] packet) + { + if(!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent quit packet when not logged in."); + return; + } + Logger.InfoPrint(sender.LoggedinUser.Username + " Clicked \"Quit Game\".. Disconnecting"); + sender.Disconnect(); + } + public static void OnNpcInteraction(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent npc interaction packet when not logged in."); + return; + } + if (packet.Length < 3) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid npc interaction packet."); + return; + } + byte action = packet[1]; + if (action == PacketBuilder.NPC_START_CHAT) + { + + string packetStr = Encoding.UTF8.GetString(packet); + string number = packetStr.Substring(2, packetStr.Length - 4); + int chatId = 0; + + try + { + chatId = int.Parse(number); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC with id that is NaN."); + return; + } + if(!Npc.NpcExists(chatId)) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC that doesnt exist."); + return; + } + sender.LoggedinUser.MajorPriority = true; + Npc.NpcEntry entry = Npc.GetNpcById(chatId); + + if(entry.Chatpoints.Length <= 0) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC with no chatpoints."); + return; + } + + int defaultChatpointId = Npc.GetDefaultChatpoint(sender.LoggedinUser, entry); + Npc.NpcChat startingChatpoint = Npc.GetNpcChatpoint(entry, defaultChatpointId); + + string metaInfo = Meta.BuildNpcChatpoint(sender.LoggedinUser, entry, startingChatpoint); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(metaInfo); + sender.SendPacket(metaPacket); + + sender.LoggedinUser.LastTalkedToNpc = entry; + } + else if (action == PacketBuilder.NPC_CONTINUE_CHAT) + { + string packetStr = Encoding.UTF8.GetString(packet); + string number = packetStr.Substring(2, packetStr.Length - 4); + int replyId = 0; + try + { + replyId = int.Parse(number); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to reply to an NPC with replyid that is NaN."); + return; + } + + Npc.NpcEntry lastNpc = sender.LoggedinUser.LastTalkedToNpc; + Npc.NpcReply reply; + try + { + reply = Npc.GetNpcReply(lastNpc, replyId); + } + catch(KeyNotFoundException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to reply with replyid that does not exist."); + return; + } + + if (reply.GotoChatpoint == -1) + { + UpdateArea(sender); + return; + } + sender.LoggedinUser.MajorPriority = true; + string metaInfo = Meta.BuildNpcChatpoint(sender.LoggedinUser, lastNpc, Npc.GetNpcChatpoint(lastNpc, reply.GotoChatpoint)); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(metaInfo); + sender.SendPacket(metaPacket); + return; + } + } + public static void OnTransportUsed(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent transport packet when not logged in."); + return; + } + if (packet.Length < 3) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid transport packet."); + return; + } + + + string packetStr = Encoding.UTF8.GetString(packet); + string number = packetStr.Substring(1, packetStr.Length - 3); + + int transportid; + try + { + transportid = Int32.Parse(number); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to use a transport with id that is NaN."); + return; + } + try + { + Transport.TransportPoint transportPoint = Transport.GetTransportPoint(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (transportPoint.X != sender.LoggedinUser.X && transportPoint.Y != sender.LoggedinUser.Y) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use transport id: " + transportid.ToString() + " while not the correct transport point!"); + return; + } + + Transport.TransportLocation transportLocation = Transport.GetTransportLocation(transportid); + int cost = transportLocation.Cost; + + if (transportLocation.Type == "WAGON") + { + if(sender.LoggedinUser.OwnedRanch != null) + { + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(7) > 0) // Wagon + { + cost = 0; + } + } + } + + if (sender.LoggedinUser.Bids.Length > 0) + { + byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantBuyWhileAuctioning); + return; + } + + + if (sender.LoggedinUser.Money >= cost) + { + string swfToLoad = Messages.BoatCutscene; + if (transportLocation.Type == "WAGON") + swfToLoad = Messages.WagonCutscene; + + if (transportLocation.Type != "ROWBOAT") + { + byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(swfToLoad, PacketBuilder.PACKET_SWF_CUTSCENE); + sender.SendPacket(swfModulePacket); + } + + sender.LoggedinUser.Teleport(transportLocation.GotoX, transportLocation.GotoY); + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count++; + + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count >= 500) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(27)); // Traveller + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count >= 5000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(28)); // Globetrotter + + byte[] welcomeToIslePacket = PacketBuilder.CreateChat(Messages.FormatWelcomeToAreaMessage(transportLocation.LocationTitle), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(welcomeToIslePacket); + + if(cost > 0) + sender.LoggedinUser.TakeMoney(cost); + } + else + { + byte[] cantAfford = PacketBuilder.CreateChat(Messages.CantAffordTransport, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAfford); + } + } + catch (KeyNotFoundException) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use transport id: " + transportid.ToString() + " while not on a transport point!"); + } + + + } + public static void OnRanchPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent ranch packet when not logged in."); + return; + } + if (packet.Length < 4) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid ranch packet."); + return; + } + string packetStr = Encoding.UTF8.GetString(packet); + byte method = packet[1]; + + if (method == PacketBuilder.RANCH_INFO) + { + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); + int buildingId = 0; + try + { + buildingId = int.Parse(buildingIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN"); + return; + } + if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) + { + Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); + + byte[] ranchBuild = PacketBuilder.CreateChat(Messages.FormatBuildingInformaton(building.Title, building.Description), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ranchBuild); + + return; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist."); + return; + } + } + else if (method == PacketBuilder.RANCH_SELL) + { + string NanSTR = packetStr.Substring(2, packetStr.Length - 4); + if (NanSTR == "NaN") + { + if (sender.LoggedinUser.OwnedRanch == null) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell there ranch when they didnt own one."); + return; + } + int sellPrice = sender.LoggedinUser.OwnedRanch.GetSellPrice(); + sender.LoggedinUser.AddMoney(sellPrice); + byte[] sellPacket = PacketBuilder.CreateChat(Messages.FormatRanchSoldMessage(sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.LoggedinUser.OwnedRanch.OwnerId = -1; + sender.SendPacket(sellPacket); + + // Change map sprite. + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true); + foreach (User user in users) + { + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + user.LoggedinClient.SendPacket(MovementPacket); + } + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to sell there ranch without sending NaN."); + return; + } + } + else if (method == PacketBuilder.RANCH_UPGRADE) + { + string NanSTR = packetStr.Substring(2, packetStr.Length - 4); + if (NanSTR == "NaN") + { + if (sender.LoggedinUser.OwnedRanch != null) + { + Ranch.RanchUpgrade currentUpgrade = sender.LoggedinUser.OwnedRanch.GetRanchUpgrade(); + + if (!Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1)) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch when it was max upgrade."); + return; + } + + Ranch.RanchUpgrade nextUpgrade = Ranch.RanchUpgrade.GetRanchUpgradeById(currentUpgrade.Id + 1); + if (sender.LoggedinUser.Money >= nextUpgrade.Cost) + { + sender.LoggedinUser.TakeMoney(nextUpgrade.Cost); + sender.LoggedinUser.OwnedRanch.InvestedMoney += nextUpgrade.Cost; + sender.LoggedinUser.OwnedRanch.UpgradedLevel++; + + byte[] upgraded = PacketBuilder.CreateChat(Messages.UpgradedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(upgraded); + + // Change map sprite. + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true); + foreach (User user in users) + { + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + user.LoggedinClient.SendPacket(MovementPacket); + } + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + } + else + { + byte[] cantAfford = PacketBuilder.CreateChat(Messages.UpgradeCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAfford); + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch when they didnt own one."); + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to upgrade there ranch without sending NaN."); + return; + } + } + else if (method == PacketBuilder.RANCH_REMOVE) + { + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); + int buildingId = 0; + try + { + buildingId = int.Parse(buildingIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN"); + return; + } + if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) + { + Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); + int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding; + if (ranchBuild <= 0) + return; + if (sender.LoggedinUser.OwnedRanch != null) + { + if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove more buildings than the limit."); + return; + } + + Ranch.RanchBuilding ranchBuilding = sender.LoggedinUser.OwnedRanch.GetBuilding(ranchBuild - 1); + + if (ranchBuilding == null) + return; + + if (ranchBuilding.Id == buildingId) + { + sender.LoggedinUser.OwnedRanch.SetBuilding(ranchBuild - 1, null); + sender.LoggedinUser.AddMoney(ranchBuilding.GetTeardownPrice()); + sender.LoggedinUser.OwnedRanch.InvestedMoney -= building.Cost; + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatBuildingTornDown(ranchBuilding.GetTeardownPrice()), PacketBuilder.CHAT_BOTTOM_RIGHT); + + sender.SendPacket(chatPacket); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + return; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to remove bulidingid: " + buildingId + " from building slot " + ranchBuild + " but the building was not found there."); + } + + } + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove in a ranch when they dont own one."); + return; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist."); + return; + } + } + else if (method == PacketBuilder.RANCH_BUILD) + { + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); + int buildingId = 0; + try + { + buildingId = int.Parse(buildingIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN"); + return; + } + if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) + { + Ranch.RanchBuilding building = Ranch.RanchBuilding.GetRanchBuildingById(buildingId); + int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding; + if (ranchBuild == 0) + return; + if (sender.LoggedinUser.OwnedRanch != null) + { + if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build more buildings than the limit."); + return; + } + + if (sender.LoggedinUser.Money >= building.Cost) + { + sender.LoggedinUser.OwnedRanch.SetBuilding(ranchBuild - 1, building); + sender.LoggedinUser.OwnedRanch.InvestedMoney += building.Cost; + sender.LoggedinUser.TakeMoney(building.Cost); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchBuildingComplete, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + return; + + } + else + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.RanchCantAffordThisBuilding, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + return; + } + } + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build in a ranch when they dont own one."); + return; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id that didnt exist."); + return; + } + } + else if (method == PacketBuilder.RANCH_BUY) + { + string nan = packetStr.Substring(2, packetStr.Length - 4); + if (nan == "NaN") + { + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (sender.LoggedinUser.Money >= ranch.Value) + { + byte[] broughtRanch = PacketBuilder.CreateChat(Messages.FormatRanchBroughtMessage(ranch.Value), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(broughtRanch); + sender.LoggedinUser.TakeMoney(ranch.Value); + ranch.OwnerId = sender.LoggedinUser.Id; + ranch.InvestedMoney += ranch.Value; + sender.LoggedinUser.OwnedRanch = ranch; + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(Item.DorothyShoes)); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + + } + else + { + byte[] cantAfford = PacketBuilder.CreateChat(Messages.RanchCantAffordRanch, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAfford); + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to buy a non existant ranch."); + return; + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent RANCH_BUY without \"NaN\"."); + return; + } + } + else if (method == PacketBuilder.RANCH_CLICK) + { + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid ranch click packet."); + return; + } + byte action = packet[2]; + if (action == PacketBuilder.RANCH_CLICK_BUILD) + { + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (sender.LoggedinUser.OwnedRanch != null) + { + if (sender.LoggedinUser.OwnedRanch.Id == ranch.Id) + { + int buildSlot = packet[3] - 40; + sender.LoggedinUser.LastClickedRanchBuilding = buildSlot; + sender.LoggedinUser.MajorPriority = true; + + if (buildSlot == 0) + { + byte[] buildingsAvalible = PacketBuilder.CreateMetaPacket(Meta.BuildRanchUpgrade(ranch)); + sender.SendPacket(buildingsAvalible); + + } + else + { + byte[] buildingsAvalible = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuildingsAvalible(ranch, buildSlot)); + sender.SendPacket(buildingsAvalible); + } + + + return; + } + } + } + + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build in a ranch they didnt own."); + return; + } + else if (action == PacketBuilder.RANCH_CLICK_NORM) + { + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); + int buildSlot = packet[3] - 40; + sender.LoggedinUser.MajorPriority = true; + + if (buildSlot == 0) // Main Building + { + byte[] upgradeDescription = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuilding(ranch, ranch.GetRanchUpgrade())); + sender.SendPacket(upgradeDescription); + } + else // Other Building + { + byte[] buildingDescription = PacketBuilder.CreateMetaPacket(Meta.BuildRanchBuilding(ranch, ranch.GetBuilding(buildSlot - 1))); + sender.SendPacket(buildingDescription); + } + return; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); + } + } + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); + } + } + public static void OnChatPacket(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent chat packet when not logged in."); + return; + } + + if (packet.Length < 4) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid chat packet."); + return; + } + + + string packetStr = Encoding.UTF8.GetString(packet); + + Chat.ChatChannel channel = (Chat.ChatChannel)packet[1]; + string message = packetStr.Substring(2, packetStr.Length - 4); + + Logger.DebugPrint(sender.LoggedinUser.Username + " Attempting to say '" + message + "' in channel: " + channel.ToString()); + + string nameTo = null; + if (channel == Chat.ChatChannel.Dm) + { + nameTo = Chat.GetDmRecipiant(message); + message = Chat.GetDmMessage(message); + } + + if (message == "") + return; + + if (message.StartsWith("/")) + { + string channelString = message.Split(' ')[0].ToLower(); + string newMessage = string.Join(' ', message.Split(' ').Skip(1)); + message = newMessage.Trim(); + + if (message == "") + channelString = "/"; + + switch (channelString) + { + case "/$": + case "/ads": + channel = Chat.ChatChannel.Ads; + break; + case "/a": + case "/all": + channel = Chat.ChatChannel.All; + break; + case "/h": + case "/here": + channel = Chat.ChatChannel.Here; + break; + case "/n": + case "/near": + channel = Chat.ChatChannel.Near; + break; + case "/b": + case "/buddy": + channel = Chat.ChatChannel.Buddies; + break; + case "/i": + case "/island": + channel = Chat.ChatChannel.Isle; + break; + case "/admin": + if (sender.LoggedinUser.Administrator) + channel = Chat.ChatChannel.Admin; + else + return; + break; + case "/mod": + if (sender.LoggedinUser.Moderator) + channel = Chat.ChatChannel.Mod; + else + return; + break; + default: + channel = Chat.ChatChannel.Dm; + nameTo = channelString.Substring(1).Trim(); + break; + } + + if (message == "") // this is how pinto does it, im serious. + { + channel = Chat.ChatChannel.Dm; + nameTo = ""; + } + } + + message = message.Trim(); + + if (channel == Chat.ChatChannel.All && message.Length > 150) + { + byte[] tooLong = PacketBuilder.CreateChat(Messages.GlobalChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLong); + return; + } + + if (channel == Chat.ChatChannel.Ads && message.Length > 150) + { + byte[] tooLong = PacketBuilder.CreateChat(Messages.AdsChatTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tooLong); + return; + } + if (Chat.ProcessCommand(sender.LoggedinUser, message)) + { + Logger.DebugPrint(sender.LoggedinUser.Username + " Attempting to run command '" + message + "' in channel: " + channel.ToString()); + return; + } + + // Check events + if (RiddleEvent.Active) + if(RiddleEvent.CheckRiddle(message)) + RiddleEvent.Win(sender.LoggedinUser); + + + + // Check if player is muting channel + + if( (sender.LoggedinUser.MuteGlobal && channel == Chat.ChatChannel.All) || (sender.LoggedinUser.MuteAds && channel == Chat.ChatChannel.Ads) || (sender.LoggedinUser.MuteHere && channel == Chat.ChatChannel.Here) && (sender.LoggedinUser.MuteBuddy && channel == Chat.ChatChannel.Buddies) && (sender.LoggedinUser.MuteNear && channel == Chat.ChatChannel.Near) && (sender.LoggedinUser.MuteIsland && channel == Chat.ChatChannel.Isle)) + { + byte[] cantSendMessage = PacketBuilder.CreateChat(Messages.CantSendInMutedChannel, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSendMessage); + return; + } + + if(sender.LoggedinUser.MutePrivateMessage && channel == Chat.ChatChannel.Dm) + { + byte[] cantSendDmMessage = PacketBuilder.CreateChat(Messages.CantSendPrivateMessageWhileMuted, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSendDmMessage); + return; + } + + Object violationReason = Chat.FilterMessage(message); + if (violationReason != null) + { + sender.LoggedinUser.ChatViolations += 1; + string chatViolationMessage = Messages.FormatGlobalChatViolationMessage((Chat.Reason)violationReason); + byte[] chatViolationPacket = PacketBuilder.CreateChat(chatViolationMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatViolationPacket); + return; + } + + byte chatSide = Chat.GetSide(channel); + message = Chat.DoCorrections(message); + message = Chat.EscapeMessage(message); + + string failedReason = Chat.NonViolationChecks(sender.LoggedinUser, message); + if (failedReason != null) + { + byte[] failedMessage = PacketBuilder.CreateChat(failedReason, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(failedMessage); + return; + } + + GameClient[] recipiants = Chat.GetRecipiants(sender.LoggedinUser, channel, nameTo); + + + if(channel == Chat.ChatChannel.Dm) + { + if(recipiants.Length <= 0) + { + byte[] cantFindPlayer = PacketBuilder.CreateChat(Messages.CantFindPlayerToPrivateMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantFindPlayer); + + return; + } + else + { + nameTo = recipiants[0].LoggedinUser.Username; + } + } + + // Spam filter + if(ConfigReader.EnableSpamFilter) + { + if (channel == Chat.ChatChannel.Ads) + { + if (!sender.LoggedinUser.CanUseAdsChat && !sender.LoggedinUser.Administrator) + { + byte[] cantSendInAds = PacketBuilder.CreateChat(Messages.AdsOnlyOncePerMinute, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSendInAds); + + return; + } + sender.LoggedinUser.CanUseAdsChat = false; + } + else if (channel == Chat.ChatChannel.All) + { + if (sender.LoggedinUser.TotalGlobalChatMessages <= 0 && !sender.LoggedinUser.Administrator) + { + byte[] globalLimited = PacketBuilder.CreateChat(Messages.GlobalChatLimited, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(globalLimited); + + return; + } + sender.LoggedinUser.TotalGlobalChatMessages--; + } + } + + + // Muted user checks + if(channel == Chat.ChatChannel.Dm) + { + try + { + User userTo = GetUserByNameStartswith(nameTo); + if (sender.LoggedinUser.MutePlayer.IsUserMuted(userTo)) + { + byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatCantSendYourIgnoringPlayer(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); + sender.SendPacket(dmWasBlocked); + return; + } + else if (userTo.MutePrivateMessage) + { + byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatPlayerIgnoringAllPms(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); + sender.SendPacket(dmWasBlocked); + return; + } + else if (userTo.MutePlayer.IsUserMuted(sender.LoggedinUser)) + { + byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatPlayerIgnoringYourPms(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); + sender.SendPacket(dmWasBlocked); + return; + } + } + catch (KeyNotFoundException) + { + return; + } + } + // Finally send chat message. + string formattedMessage = Chat.FormatChatForOthers(sender.LoggedinUser, channel, message); + string formattedMessageSender = Chat.FormatChatForSender(sender.LoggedinUser, channel, message, nameTo); + + + byte[] chatPacketOthers = PacketBuilder.CreateChat(formattedMessage, chatSide); + byte[] chatPacketSender = PacketBuilder.CreateChat(formattedMessageSender, chatSide); + byte[] playDmSound = PacketBuilder.CreatePlaysoundPacket(Chat.PrivateMessageSound); + + // Send to clients ... + foreach (GameClient recipiant in recipiants) + { + recipiant.SendPacket(chatPacketOthers); + + if (channel == Chat.ChatChannel.Dm) + recipiant.SendPacket(playDmSound); + } + + // Send to sender + sender.SendPacket(chatPacketSender); + + // AutoReply + if (channel == Chat.ChatChannel.Dm) + { + foreach (GameClient recipiant in recipiants) + { + if (recipiant.LoggedinUser.AutoReplyText != "") + { + string formattedMessageAuto = Chat.FormatChatForOthers(recipiant.LoggedinUser, channel, recipiant.LoggedinUser.AutoReplyText, true); + string formattedMessageSenderAuto = Chat.FormatChatForSender(recipiant.LoggedinUser, channel, recipiant.LoggedinUser.AutoReplyText, nameTo, true); + + byte[] chatPacketAutoOthers = PacketBuilder.CreateChat(formattedMessageAuto, chatSide); + sender.SendPacket(chatPacketAutoOthers); + + byte[] chatPacketAutoSender = PacketBuilder.CreateChat(formattedMessageSenderAuto, chatSide); + recipiant.SendPacket(chatPacketAutoSender); + } + } + + } + + } + public static void OnClickPacket(GameClient sender, byte[] packet) + { + + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Send click packet when not logged in."); + return; + } + if (packet.Length < 6) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid Click Packet"); + return; + } + + string packetStr = Encoding.UTF8.GetString(packet); + if(packetStr.Contains("|")) + { + string packetContents = packetStr.Substring(1, packetStr.Length - 3); + string[] xy = packetContents.Split('|'); + int x = 0; + int y = 0; + + try + { + x = int.Parse(xy[0])+4; + y = int.Parse(xy[1])+1; + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a click packet with non-string xy value."); + return; + } + + Logger.DebugPrint(sender.LoggedinUser.Username + " Clicked on tile: " + Map.GetTileId(x, y, false).ToString() + "(overlay: " + Map.GetTileId(x, y, true).ToString() + ") at " + x.ToString() + "," + y.ToString()); + + + // Get description of tile + string returnedMsg = Messages.NothingInterestingHere; + if(World.InSpecialTile(x, y)) + { + World.SpecialTile tile = World.GetSpecialTile(x, y); + if (tile.Title != null) + returnedMsg = tile.Title; + } + if(Ranch.IsRanchHere(x, y)) // Ranch here? + { + Ranch ranch = Ranch.GetRanchAt(x, y); + if(ranch.OwnerId == -1) + { + returnedMsg = Messages.RanchUnownedRanchClicked; + } + else + { + string title = ranch.Title; + if (title == null || title == "") + title = Messages.RanchDefaultRanchTitle; + returnedMsg = Messages.FormatRanchClickMessage(Database.GetUsername(ranch.OwnerId), title); + } + } + User[] users = GetUsersAt(x, y, false, true); + if (users.Length > 0) // Player here? + { + string usernameStr = ""; + + for(int i = 0; i < users.Length; i++) + { + usernameStr += users[i].Username; + if (i + 1 < users.Length) + usernameStr += ", "; + } + + returnedMsg = Messages.FormatPlayerHereMessage(usernameStr); + } + + byte[] tileInfoPacket = PacketBuilder.CreateClickTileInfoPacket(returnedMsg); + sender.SendPacket(tileInfoPacket); + } + } + public static void OnItemInteraction(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent object interaction packet when not logged in."); + return; + } + if (packet.Length < 3) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + byte action = packet[1]; + switch(action) + { + case PacketBuilder.ITEM_PICKUP_ALL: + string chatMsg = Messages.GrabAllItemsMessage; + DroppedItems.DroppedItem[] droppedItems = DroppedItems.GetItemsAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); + + foreach (DroppedItems.DroppedItem item in droppedItems) + { + try + { + sender.LoggedinUser.Inventory.Add(item.Instance); + DroppedItems.RemoveDroppedItem(item); + } + catch (InventoryException) + { + chatMsg = Messages.GrabbedAllItemsButInventoryFull; + } + } + + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y); + + byte[] chatMessage = PacketBuilder.CreateChat(chatMsg, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMessage); + + break; + case PacketBuilder.ITEM_PICKUP: + string packetStr = Encoding.UTF8.GetString(packet); + string randomIdStr = packetStr.Substring(2, packet.Length - 4); + int randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + try + { + DroppedItems.DroppedItem item = DroppedItems.GetDroppedItemById(randomId); + try + { + sender.LoggedinUser.Inventory.Add(item.Instance); + } + catch (InventoryException) + { + byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.GrabbedItemButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inventoryFullMessage); + break; + } + + + DroppedItems.RemoveDroppedItem(item); + + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y); + + chatMessage = PacketBuilder.CreateChat(Messages.GrabbedItemMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatMessage); + } + catch(KeyNotFoundException) + { + byte[] pickedUp = PacketBuilder.CreateChat(Messages.DroppedItemCouldntPickup, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(pickedUp); + + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to grab a non existing object."); + return; + } + + break; + case PacketBuilder.ITEM_REMOVE: + char toRemove = (char)packet[2]; + switch(toRemove) + { + case '1': + if(sender.LoggedinUser.EquipedCompetitionGear.Head != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Head.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Head = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); + } + break; + case '2': + if (sender.LoggedinUser.EquipedCompetitionGear.Body != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Body.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Body = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); + } + break; + case '3': + if (sender.LoggedinUser.EquipedCompetitionGear.Legs != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Legs.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Legs = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); + } + break; + case '4': + if (sender.LoggedinUser.EquipedCompetitionGear.Feet != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Feet.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Feet = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); + } + break; + case '5': + if (sender.LoggedinUser.EquipedJewelry.Slot1 != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedJewelry.Slot1.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedJewelry.Slot1 = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); + } + break; + case '6': + if (sender.LoggedinUser.EquipedJewelry.Slot2 != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedJewelry.Slot2.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedJewelry.Slot2 = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); + } + break; + case '7': + if (sender.LoggedinUser.EquipedJewelry.Slot3 != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedJewelry.Slot3.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedJewelry.Slot3 = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); + } + break; + case '8': + if (sender.LoggedinUser.EquipedJewelry.Slot4 != null) + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedJewelry.Slot4.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedJewelry.Slot4 = null; + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); + } + break; + default: + Logger.InfoPrint(sender.LoggedinUser.Username + "Unimplemented \"remove worn item\" ItemInteraction packet: " + BitConverter.ToString(packet).Replace("-", " ")); + break; + } + + UpdateStats(sender); + if(toRemove >= '1' && toRemove <= '4') + { + byte[] itemRemovedMessage = PacketBuilder.CreateChat(Messages.RemoveCompetitionGear, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemRemovedMessage); + } + else if (toRemove >= '5' && toRemove <= '8') + { + byte[] itemRemovedMessage = PacketBuilder.CreateChat(Messages.RemoveJewelry, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemRemovedMessage); + } + + break; + case PacketBuilder.ITEM_THROW: + packetStr = Encoding.UTF8.GetString(packet); + string itemidStr = packetStr.Substring(2, packet.Length - 2); + int itemId = 0; + + try + { + itemId = Int32.Parse(itemidStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. (THROW) " + BitConverter.ToString(packet)); + return; + } + if (sender.LoggedinUser.Inventory.HasItemId(itemId)) + { + if (!Item.IsThrowable(itemId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to throw an item that isnt throwable."); + return; + } + + ItemInstance curItem = sender.LoggedinUser.Inventory.GetItemByItemId(itemId).ItemInstances[0]; + User[] userAt = GetReallyNearbyUsers(sender.LoggedinUser.X, sender.LoggedinUser.Y); + + while (true) + { + int userIndx = RandomNumberGenerator.Next(0, userAt.Length); + + if (userAt.Length > 1) + if (userAt[userIndx].Id == sender.LoggedinUser.Id) + continue; + + Item.ThrowableItem throwableItem = Item.GetThrowableItem(curItem.ItemId); + + if (userAt[userIndx].Id == sender.LoggedinUser.Id) + { + byte[] thrownHitYourself = PacketBuilder.CreateChat(throwableItem.HitYourselfMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(thrownHitYourself); + break; + } + if(itemId == Item.WaterBalloon) + { + if (WaterBalloonEvent != null) + if (WaterBalloonEvent.Active) + WaterBalloonEvent.AddWaterBallon(userAt[userIndx]); + } + if(itemId == Item.ModSplatterball) + { + ModsRevengeEvent.Payout(sender.LoggedinUser, userAt[userIndx]); + } + + byte[] thrownForYou = PacketBuilder.CreateChat(Messages.FormatThrownItemMessage(throwableItem.ThrowMessage, userAt[userIndx].Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + byte[] thrownForOthers = PacketBuilder.CreateChat(Messages.FormatThrownItemMessage(throwableItem.HitMessage, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + + sender.SendPacket(thrownForYou); + userAt[userIndx].LoggedinClient.SendPacket(thrownForOthers); + + break; + } + + sender.LoggedinUser.Inventory.Remove(curItem); + UpdateInventory(sender); + + } + break; + case PacketBuilder.ITEM_WRAP: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + ItemInstance curItem = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId).ItemInstances[0]; + ItemInstance wrappedItem = new ItemInstance(Item.Present, -1, curItem.ItemId); + + try + { + sender.LoggedinUser.Inventory.Add(wrappedItem); + sender.LoggedinUser.Inventory.Remove(curItem); + } + catch(InventoryException) + { + byte[] cantWrapPresent = PacketBuilder.CreateChat(Messages.SantaCantWrapInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantWrapPresent); + UpdateArea(sender); + break; + } + } + byte[] wrappedObjectMessage = PacketBuilder.CreateChat(Messages.SantaWrappedObjectMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(wrappedObjectMessage); + UpdateArea(sender); + break; + case PacketBuilder.ITEM_OPEN: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + int newItem = item.ItemInstances[0].Data; + if(newItem == 0) + { + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); + + byte[] itemOpenFailedNothingInside = PacketBuilder.CreateChat(Messages.SantaCantOpenNothingInside, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemOpenFailedNothingInside); + + UpdateInventory(sender); + + break; + } + + try + { + sender.LoggedinUser.Inventory.Add(new ItemInstance(newItem)); + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); + } + catch(InventoryException) + { + byte[] cantOpenInvFull = PacketBuilder.CreateChat(Messages.SantaItemCantOpenInvFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantOpenInvFull); + break; + } + byte[] itemOpened = PacketBuilder.CreateChat(Messages.FormatSantaOpenPresent(Item.GetItemById(newItem).Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemOpened); + UpdateInventory(sender); + } + break; + case PacketBuilder.ITEM_USE: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 4); + + if(randomIdStr == "") // f12 ranch shortcut + { + if (sender.LoggedinUser.Inventory.HasItemId(Item.DorothyShoes)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByItemId(Item.DorothyShoes); + Item.UseItem(sender.LoggedinUser, itm.ItemInstances[0]); + return; + } + else + { + byte[] noShoesMessage = PacketBuilder.CreateChat(Messages.RanchNoDorothyShoesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(noShoesMessage); + return; + } + } + + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + Item.UseItem(sender.LoggedinUser, itm.ItemInstances[0]); + } + break; + case PacketBuilder.ITEM_WEAR: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + ItemInstance instance = itm.ItemInstances[0]; + + Item.ItemInformation itemInf = instance.GetItemInfo(); + if(itemInf.Type == "CLOTHES") + { + switch (itemInf.GetMiscFlag(0)) + { + case CompetitionGear.MISC_FLAG_HEAD: + if (sender.LoggedinUser.EquipedCompetitionGear.Head == null) + sender.LoggedinUser.EquipedCompetitionGear.Head = itemInf; + else + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Head.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Head = itemInf; + } + break; + case CompetitionGear.MISC_FLAG_BODY: + if (sender.LoggedinUser.EquipedCompetitionGear.Body == null) + sender.LoggedinUser.EquipedCompetitionGear.Body = itemInf; + else + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Body.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Body = itemInf; + } + break; + case CompetitionGear.MISC_FLAG_LEGS: + if (sender.LoggedinUser.EquipedCompetitionGear.Legs == null) + sender.LoggedinUser.EquipedCompetitionGear.Legs = itemInf; + else + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Legs.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Legs = itemInf; + } + break; + case CompetitionGear.MISC_FLAG_FEET: + if (sender.LoggedinUser.EquipedCompetitionGear.Feet == null) + sender.LoggedinUser.EquipedCompetitionGear.Feet = itemInf; + else + { + ItemInstance itemInstance = new ItemInstance(sender.LoggedinUser.EquipedCompetitionGear.Feet.Id); + sender.LoggedinUser.Inventory.AddIgnoringFull(itemInstance); + sender.LoggedinUser.EquipedCompetitionGear.Feet = itemInf; + } + break; + default: + Logger.ErrorPrint(itemInf.Name + " Has unknown misc flags."); + return; + } + sender.LoggedinUser.Inventory.Remove(instance); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatEquipCompetitionGearMessage(itemInf.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + else if(itemInf.Type == "JEWELRY") + { + bool addedJewelry = false; + if (sender.LoggedinUser.EquipedJewelry.Slot1 == null) + { + sender.LoggedinUser.EquipedJewelry.Slot1 = itemInf; + addedJewelry = true; + } + else if (sender.LoggedinUser.EquipedJewelry.Slot2 == null) + { + sender.LoggedinUser.EquipedJewelry.Slot2 = itemInf; + addedJewelry = true; + } + else if (sender.LoggedinUser.EquipedJewelry.Slot3 == null) + { + sender.LoggedinUser.EquipedJewelry.Slot3 = itemInf; + addedJewelry = true; + } + else if (sender.LoggedinUser.EquipedJewelry.Slot4 == null) + { + sender.LoggedinUser.EquipedJewelry.Slot4 = itemInf; + addedJewelry = true; + } + + if(addedJewelry) + { + sender.LoggedinUser.Inventory.Remove(instance); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatJewerlyEquipMessage(itemInf.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + else + { + byte[] chatPacket = PacketBuilder.CreateChat(Messages.MaxJewelryMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + } + + UpdateInventory(sender); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to wear an item they did not have."); + } + break; + case PacketBuilder.ITEM_DRINK: + packetStr = Encoding.UTF8.GetString(packet); + string idStr = packetStr.Substring(2, packet.Length - 4); + if(idStr == "NaN") // Fountain + { + string msg = Messages.FountainDrankYourFull; + bool looseMoney = RandomNumberGenerator.Next(0, 20) == 18; + if(looseMoney) + { + int looseAmount = RandomNumberGenerator.Next(0, 100); + if (looseAmount > sender.LoggedinUser.Money) + looseAmount = sender.LoggedinUser.Money; + sender.LoggedinUser.TakeMoney(looseAmount); + msg = Messages.FormatDroppedMoneyMessage(looseAmount); + } + + sender.LoggedinUser.Thirst = 1000; + byte[] drankFromFountainMessage = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(drankFromFountainMessage); + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + "Sent unknown ITEM_DRINK command id: " + idStr); + } + break; + case PacketBuilder.ITEM_CONSUME: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 3); + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + ItemInstance instance = itm.ItemInstances[0]; + sender.LoggedinUser.Inventory.Remove(instance); + Item.ItemInformation itmInfo = instance.GetItemInfo(); + bool toMuch = Item.ConsumeItem(sender.LoggedinUser, itmInfo); + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatConsumeItemMessaege(itmInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + if (toMuch) + { + chatPacket = PacketBuilder.CreateChat(Messages.ConsumedButMaxReached, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + + UpdateInventory(sender); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to consume an item they did not have."); + } + break; + case PacketBuilder.ITEM_DROP: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. (drop)"+BitConverter.ToString(packet)); + return; + } + + if(sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + ItemInstance instance = itm.ItemInstances[0]; + if(DroppedItems.GetItemsAt(sender.LoggedinUser.X, sender.LoggedinUser.Y).Length > 25) + { + byte[] tileIsFullPacket = PacketBuilder.CreateChat(Messages.DroppedItemTileIsFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(tileIsFullPacket); + break; + } + DroppedItems.AddItem(instance, sender.LoggedinUser.X, sender.LoggedinUser.Y); + sender.LoggedinUser.Inventory.Remove(instance); + byte[] chatPacket = PacketBuilder.CreateChat(Messages.DroppedAnItemMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + UpdateInventory(sender); + + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, false, sender.LoggedinUser); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to drop an item they did not have."); + } + break; + case PacketBuilder.ITEM_SHOVEL: + if (packet[2] != 0x14) + Logger.HackerPrint(sender.LoggedinUser.Username + " Used ITEM_SHOVEL with 3rd byte not 0x14."); + if (!Quest.UseTool(sender.LoggedinUser, Quest.Shovel, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + byte[] ChatPacket = PacketBuilder.CreateChat(Messages.ShovelNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ChatPacket); + } + break; + case PacketBuilder.ITEM_RAKE: + if (packet[2] != 0x14) + Logger.HackerPrint(sender.LoggedinUser.Username + " Used ITEM_RAKE with 3rd byte not 0x14."); + if (!Quest.UseTool(sender.LoggedinUser, Quest.Rake, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + byte[] ChatPacket = PacketBuilder.CreateChat(Messages.RakeNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ChatPacket); + } + break; + case PacketBuilder.ITEM_MAGNIFYING: + if (packet[2] != 0x14) + Logger.HackerPrint(sender.LoggedinUser.Username + " Used ITEM_MAGNIFYING with 3rd byte not 0x14."); + if (!Quest.UseTool(sender.LoggedinUser, Quest.MagnifyingGlass, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + byte[] ChatPacket = PacketBuilder.CreateChat(Messages.MagnifyNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ChatPacket); + } + break; + case PacketBuilder.ITEM_BINOCULARS: + if (packet[2] != 0x14) + Logger.HackerPrint(sender.LoggedinUser.Username + " Used ITEM_BINOCULARS with 3rd byte not 0x14."); + if(!Quest.UseTool(sender.LoggedinUser, Quest.Binoculars, sender.LoggedinUser.X, sender.LoggedinUser.Y)) + { + byte[] ChatPacket = PacketBuilder.CreateChat(Messages.BinocularsNothing, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ChatPacket); + } + break; + case PacketBuilder.ITEM_CRAFT: + packetStr = Encoding.UTF8.GetString(packet); + string craftIdStr = packetStr.Substring(2, packet.Length - 2); + int craftId = 0; + // Prevent crashing on non-int string. + try + { + craftId = Int32.Parse(craftIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to craft using craft id NaN."); + return; + } + if(Workshop.CraftIdExists(craftId)) + { + Workshop.CraftableItem itm = Workshop.GetCraftId(craftId); + if(itm.MoneyCost <= sender.LoggedinUser.Money) // Check money + { + foreach(Workshop.RequiredItem reqItem in itm.RequiredItems) + { + if (sender.LoggedinUser.Inventory.HasItemId(reqItem.RequiredItemId)) + { + if (sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances.Length < reqItem.RequiredItemCount) + goto failMissingItem; + } + else + goto failMissingItem; + } + + // Finally create the items + try + { + sender.LoggedinUser.Inventory.Add(new ItemInstance(itm.GiveItemId)); + } + catch(InventoryException) + { + byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.WorkshopNoRoomInInventory, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inventoryFullMessage); + break; + } + sender.LoggedinUser.TakeMoney(itm.MoneyCost); + + // Remove the required items.. + foreach(Workshop.RequiredItem reqItem in itm.RequiredItems) + for(int i = 0; i < reqItem.RequiredItemCount; i++) + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances[0]); + + sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count++; + + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count >= 100) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(22)); // Craftiness + if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(23)); // Workmanship + + byte[] itemCraftSuccess = PacketBuilder.CreateChat(Messages.WorkshopCraftingSuccess, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(itemCraftSuccess); + break; + + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.WorkshopCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + break; + } + + failMissingItem: + { + byte[] missingItemMessage = PacketBuilder.CreateChat(Messages.WorkshopMissingRequiredItem, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(missingItemMessage); + break; + } + } + + break; + case PacketBuilder.ITEM_SELL: // Handles selling an item. + int totalSold = 1; + int message = 1; + + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + // Prevent crashing on non-int string. + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet."); + return; + } + + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell a item that they doesnt have in there inventory"); + return; + } + + InventoryItem invItem = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + itemId = invItem.ItemId; + goto doSell; + case PacketBuilder.ITEM_SELL_ALL: + packetStr = Encoding.UTF8.GetString(packet); + string itemIdStr = packetStr.Substring(2, packet.Length - 2); + itemId = 0; + // Prevent crashing on non-int string. + try + { + itemId = Int32.Parse(itemIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet."); + return; + } + + if (!sender.LoggedinUser.Inventory.HasItemId(itemId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell a item that they doesnt have in there inventory"); + return; + } + invItem = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); + + totalSold = invItem.ItemInstances.Length; + message = 2; + goto doSell; + doSell:; + + Item.ItemInformation itemInfo = Item.GetItemById(itemId); + Shop shop = sender.LoggedinUser.LastShoppedAt; + if (shop != null) + { + UInt64 sellPrice = Convert.ToUInt64(shop.CalculateSellCost(itemInfo) * Convert.ToUInt64(totalSold)); + if (shop.CanSell(itemInfo)) + { + // Check if goes over 2.1b + if (Convert.ToUInt64(sender.LoggedinUser.Money) + sellPrice > 2100000000) + { + byte[] cantSellMoneyCapCheck = PacketBuilder.CreateChat(Messages.CannotSellYoudGetTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantSellMoneyCapCheck); + break; + } + + // Remove items + for (int i = 0; i < totalSold; i++) + { + ItemInstance itemInstance = invItem.ItemInstances[0]; + sender.LoggedinUser.Inventory.Remove(itemInstance); + shop.Inventory.Add(itemInstance); + } + + if (sellPrice < 2147483647) // Sanity Check (yes i checked it earlier) + sender.LoggedinUser.AddMoney(Convert.ToInt32(sellPrice)); + + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + if(message == 1) + { + byte[] soldItemMessage = PacketBuilder.CreateChat(Messages.FormatSellMessage(itemInfo.Name, sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(soldItemMessage); + } + if(message == 2) + { + string name = itemInfo.Name; + + if (totalSold > 1) + name = itemInfo.PluralName; + + byte[] soldItemMessage = PacketBuilder.CreateChat(Messages.FormatSellAllMessage(name, sellPrice, totalSold), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(soldItemMessage); + } + + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell a item that was not avalible to be sold."); + } + } + break; + + case PacketBuilder.ITEM_BUY_AND_CONSUME: + packetStr = Encoding.UTF8.GetString(packet); + itemIdStr = packetStr.Substring(2, packet.Length - 3); + itemId = 0; + // Prevent crashing on non-int string. + try + { + itemId = Int32.Parse(itemIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object buy and consume packet."); + return; + } + if (!Item.ItemIdExist(itemId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an itemid that doesnt even exist."); + break; + } + + Inn lastInn = sender.LoggedinUser.LastVisitedInn; + if (lastInn != null) + { + try + { + itemInfo = lastInn.GetStockedItem(itemId); + int price = lastInn.CalculateBuyCost(itemInfo); + if(sender.LoggedinUser.Money >= price) + { + sender.LoggedinUser.TakeMoney(price); + bool toMuch = Item.ConsumeItem(sender.LoggedinUser, itemInfo); + + string tooMuchMessage = Messages.ConsumedButMaxReached; + if (itemInfo.Effects.Length > 0) + if (itemInfo.Effects[0].EffectsWhat == "TIREDNESS") + tooMuchMessage = Messages.InnFullyRested; + if (itemInfo.Effects.Length > 1) + if (itemInfo.Effects[1].EffectsWhat == "TIREDNESS") + tooMuchMessage = Messages.InnFullyRested; + + byte[] enjoyedServiceMessage = PacketBuilder.CreateChat(Messages.FormatInnEnjoyedServiceMessage(itemInfo.Name, price), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(enjoyedServiceMessage); + + if(toMuch) + { + byte[] toMuchMessage = PacketBuilder.CreateChat(tooMuchMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(toMuchMessage); + } + + UpdateArea(sender); + } + else + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.InnCannotAffordService, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + } + } + catch(KeyNotFoundException) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy and consume an item not stocked by the inn there standing on."); + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy and consume item while not in a inn."); + } + break; + + case PacketBuilder.ITEM_BUY: // Handles buying an item. + message = 1; + int count = 1; + goto doPurchase; + case PacketBuilder.ITEM_BUY_5: + message = 2; + count = 5; + goto doPurchase; + case PacketBuilder.ITEM_BUY_25: + message = 3; + count = 25; + doPurchase:; + packetStr = Encoding.UTF8.GetString(packet); + itemIdStr = packetStr.Substring(2, packet.Length - 3); + itemId = 0; + // Prevent crashing on non-int string. + try + { + itemId = Int32.Parse(itemIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object buy packet."); + return; + } + + if(!Item.ItemIdExist(itemId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an itemid that doesnt even exist."); + break; + } + + itemInfo = Item.GetItemById(itemId); + shop = sender.LoggedinUser.LastShoppedAt; + if (shop != null) + { + UInt64 buyCost = Convert.ToUInt64(shop.CalculateBuyCost(itemInfo) * Convert.ToUInt64(count)); + if (sender.LoggedinUser.Bids.Length > 0) + { + byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantBuyWhileAuctioning); + return; + } + + if (Convert.ToUInt64(sender.LoggedinUser.Money) < buyCost) + { + byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.CantAfford1, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(cantAffordMessage); + return; + } + if (shop.Inventory.HasItemId(itemId)) + { + if (shop.Inventory.GetItemByItemId(itemId).ItemInstances.Length < count) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy more of an item than is in stock."); + break; + } + + + // Check we wont overflow the inventory + if (sender.LoggedinUser.Inventory.HasItemId(itemId)) + { + InventoryItem items = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); + if (items.ItemInstances.Length + count > Item.MAX_STACK) + { + goto showError; + } + + } + else if(sender.LoggedinUser.Inventory.Count + 1 > sender.LoggedinUser.MaxItems) + { + goto showError; + } + + for (int i = 0; i < count; i++) + { + ItemInstance itemInstance = shop.Inventory.GetItemByItemId(itemId).ItemInstances[0]; + try + { + sender.LoggedinUser.Inventory.Add(itemInstance); + } + catch (InventoryException) + { + Logger.ErrorPrint("Failed to add: " + itemInfo.Name + " to " + sender.LoggedinUser.Username + " inventory."); + break; + } + shop.Inventory.Remove(itemInstance); + } + + if(buyCost < 2147483647) // Sanity Check (yes i checked it earlier) + sender.LoggedinUser.TakeMoney(Convert.ToInt32(buyCost)); + + + // Send chat message to client. + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); + if (message == 1) + { + byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuyMessage(itemInfo.Name, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(broughtItemMessage); + } + else if (message == 2) + { + byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuy5Message(itemInfo.PluralName, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(broughtItemMessage); + } + else if (message == 3) + { + byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuy25Message(itemInfo.PluralName, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(broughtItemMessage); + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy a item that was not for sale."); + } + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an item while not in a store."); + } + + + break; + + showError:; + if (message == 1) + { + byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought1ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inventoryFullMessage); + } + else if (message == 2) + { + + byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought5ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inventoryFullMessage); + } + else if (message == 3) + { + + byte[] inventoryFullMessage = PacketBuilder.CreateChat(Messages.Brought25ButInventoryFull, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(inventoryFullMessage); + } + break; + case PacketBuilder.ITEM_RIP: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to rip someone elses mail. " + randomId.ToString()); + return; + } + + InventoryItem ripItems = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + foreach (ItemInstance item in ripItems.ItemInstances) + { + if (item.RandomId == randomId) + { + if (item.Data == 0) + continue; + sender.LoggedinUser.MailBox.RipUpMessage(sender.LoggedinUser.MailBox.GetMessageByRandomId(item.Data)); + break; + } + } + break; + case PacketBuilder.ITEM_VIEW: + byte method = packet[2]; + if (method == PacketBuilder.ITEM_LOOK) + { + packetStr = Encoding.UTF8.GetString(packet); + itemIdStr = packetStr.Substring(3, packet.Length - 3); + itemId = 0; + try + { + itemId = Int32.Parse(itemIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + if (itemId == Item.MailMessage) + { + if (!sender.LoggedinUser.Inventory.HasItemId(Item.MailMessage)) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to view a mail message when they didnt have one."); + return; + } + + sender.LoggedinUser.MajorPriority = true; + byte[] mailList = PacketBuilder.CreateMetaPacket(Meta.BuildMailList(sender.LoggedinUser, sender.LoggedinUser.Inventory.GetItemByItemId(Item.MailMessage))); + sender.SendPacket(mailList); + break; + } + } + else if(method == PacketBuilder.ITEM_READ) + { + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(3, packet.Length - 3); + randomId = 0; + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + return; + } + + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to view someone elses mail. " + randomId.ToString()); + return; + } + + InventoryItem items = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + foreach (ItemInstance item in items.ItemInstances) + { + if (item.RandomId == randomId) + { + if (item.Data == 0) + continue; + + sender.LoggedinUser.MajorPriority = true; + byte[] readMail = PacketBuilder.CreateMetaPacket(Meta.BuildMailLetter(sender.LoggedinUser.MailBox.GetMessageByRandomId(item.Data), randomId)); + sender.SendPacket(readMail); + break; + } + } + break; + + } + + + Logger.ErrorPrint(sender.LoggedinUser.Username + " Unknown Method- " + method.ToString("X") + " " + BitConverter.ToString(packet).Replace("-", " ")); + break; + case PacketBuilder.PACKET_INFORMATION: + packetStr = Encoding.UTF8.GetString(packet); + string valueStr = packetStr.Substring(3, packet.Length - 3); + int value = 0; + try + { + value = Int32.Parse(valueStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. "+BitConverter.ToString(packet)); + return; + } + if (packet[2] == PacketBuilder.ITEM_INFORMATON) + { + itemId = -1; + if (sender.LoggedinUser.Inventory.HasItem(value)) + itemId = sender.LoggedinUser.Inventory.GetItemByRandomid(value).ItemId; + else if (DroppedItems.IsDroppedItemExist(value)) + itemId = DroppedItems.GetDroppedItemById(value).Instance.ItemId; + if (itemId == -1) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item."); + return; + } + sender.LoggedinUser.MajorPriority = true; + Item.ItemInformation info = Item.GetItemById(itemId); + string infoMessage = Meta.BuildItemInfo(info); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(infoMessage); + sender.SendPacket(metaPacket); + } + if (packet[2] == PacketBuilder.ITEM_INFORMATON_ID) + { + sender.LoggedinUser.MajorPriority = true; + if (!Item.ItemIdExist(value)) + { + Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item."); + return; + } + + Item.ItemInformation info = Item.GetItemById(value); + string infoMessage = Meta.BuildItemInfo(info); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(infoMessage); + sender.SendPacket(metaPacket); + } + else if(packet[2] == PacketBuilder.NPC_INFORMATION) + { + if(Npc.NpcExists(value)) + { + sender.LoggedinUser.MajorPriority = true; + Npc.NpcEntry npc = Npc.GetNpcById(value); + string infoMessage = Meta.BuildNpcInfo(npc); + byte[] metaPacket = PacketBuilder.CreateMetaPacket(infoMessage); + sender.SendPacket(metaPacket); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant npc."); + return; + } + } + + break; + default: + Logger.WarnPrint(sender.LoggedinUser.Username + " Sent an unknown Item Interaction Packet type: " + action.ToString() + ", Packet Dump: " + BitConverter.ToString(packet).Replace('-', ' ')); + break; + } + + } + public static void OnInventoryRequested(GameClient sender, byte[] packet) + { + if (!sender.LoggedIn) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent chat packet when not logged in."); + return; + } + + if (packet.Length < 2) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid inventory request packet."); + return; + } + + UpdateInventory(sender); + } + public static void OnLoginRequest(GameClient sender, byte[] packet) + { + Logger.DebugPrint("Login request received from: " + sender.RemoteIp); + + string loginRequestString = Encoding.UTF8.GetString(packet).Substring(1); + + if (!loginRequestString.Contains('|') || packet.Length < 3) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid login request"); + return; + } + + if (packet[1] != PacketBuilder.PACKET_CLIENT_TERMINATOR) + { + string[] loginParts = loginRequestString.Split('|'); + if (loginParts.Length < 3) + { + Logger.ErrorPrint(sender.RemoteIp + " Sent a login request of invalid length. " + loginRequestString); + return; + } + + int version = int.Parse(loginParts[0]); + string encryptedUsername = loginParts[1]; + string encryptedPassword = loginParts[2]; + string username = Authentication.DecryptLogin(encryptedUsername); + string password = Authentication.DecryptLogin(encryptedPassword); + + if (Authentication.CheckPassword(username, password)) + { + // Obtain user information + int userId = Database.GetUserid(username); + + if(Database.IsUserBanned(userId)) + { + Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the account was banned."); + byte[] userBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.LoginFailedReasonBanned); + sender.SendPacket(userBannedPacket); + return; + } + + if(Database.IsIpBanned(sender.RemoteIp)) + { + Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the IP was banned."); + byte[] ipBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.FormatIpBannedMessage(sender.RemoteIp)); + sender.SendPacket(ipBannedPacket); + return; + } + + + + + sender.Login(userId); + sender.LoggedinUser.Password = password; + + byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(true); + sender.SendPacket(ResponsePacket); + + Logger.DebugPrint(sender.RemoteIp + " Logged into : " + sender.LoggedinUser.Username + " (ADMIN: " + sender.LoggedinUser.Administrator + " MOD: " + sender.LoggedinUser.Moderator + ")"); + + } + else + { + Logger.WarnPrint(sender.RemoteIp + " Attempted to login to: " + username + " with incorrect password "); + byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(false); + sender.SendPacket(ResponsePacket); + } + } + + } + + public static void OnDisconnect(GameClient sender) + { + if (sender.LoggedIn) + { + Database.SetPlayerLastLogin(Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()), sender.LoggedinUser.Id); // Set last login date + Database.RemoveOnlineUser(sender.LoggedinUser.Id); + + // Leave multirooms + Multiroom.LeaveAllMultirooms(sender.LoggedinUser); + TwoPlayer.TwoPlayerRemove(sender.LoggedinUser); + + // Remove Trade Reference + sender.LoggedinUser.TradingWith = null; + sender.LoggedinUser.PendingTradeTo = 0; + + // Leave open water balloon game + if (WaterBalloonEvent != null) + if(WaterBalloonEvent.Active) + WaterBalloonEvent.LeaveEvent(sender.LoggedinUser); + + // Leave open quiz. + if (QuizEvent != null) + QuizEvent.LeaveEvent(sender.LoggedinUser); + + ModsRevengeEvent.LeaveEvent(sender.LoggedinUser); + + // Delete Arena Entries + if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) + { + Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + arena.DeleteEntry(sender.LoggedinUser); + } + + + // Send disconnect message + byte[] logoutMessageBytes = PacketBuilder.CreateChat(Messages.FormatLogoutMessage(sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_LEFT); + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + if (!client.LoggedinUser.MuteLogins && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) + client.SendPacket(logoutMessageBytes); + + // Tell clients of diconnect (remove from chat) + byte[] playerRemovePacket = PacketBuilder.CreatePlayerLeavePacket(sender.LoggedinUser.Username); + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) + client.SendPacket(playerRemovePacket); + } + + } + + /* + * Get(Some Information) + */ + + + public static bool IsUserOnline(int id) + { + try + { + GetUserById(id); + return true; + } + catch (KeyNotFoundException) + { + return false; + } + } + + public static User[] GetUsersInTown(World.Town town, bool includeStealth = false, bool includeMuted = false) + { + List usersInTown = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!includeMuted && client.LoggedinUser.MuteIsland) + continue; + if (World.InTown(client.LoggedinUser.X, client.LoggedinUser.Y)) + if (World.GetIsle(client.LoggedinUser.X, client.LoggedinUser.Y).Name == town.Name) + usersInTown.Add(client.LoggedinUser); + } + + return usersInTown.ToArray(); + } + public static User[] GetUsersInIsle(World.Isle isle, bool includeStealth = false, bool includeMuted = false) + { + List usersInIsle = new List(); + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!includeMuted && client.LoggedinUser.MuteIsland) + continue; + if (World.InIsle(client.LoggedinUser.X, client.LoggedinUser.Y)) + if (World.GetIsle(client.LoggedinUser.X, client.LoggedinUser.Y).Name == isle.Name) + usersInIsle.Add(client.LoggedinUser); + } + + return usersInIsle.ToArray(); + } + + public static User[] GetUsersOnSpecialTileCode(string code) + { + List userList = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + + if (World.InSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y)) + { + World.SpecialTile tile = World.GetSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y); + + if (tile.Code == code) + { + userList.Add(client.LoggedinUser); + } + } + } + } + return userList.ToArray(); + } + public static User[] GetUsersAt(int x, int y, bool includeStealth = false, bool includeMuted = false) + { + List usersHere = new List(); + foreach(GameClient client in GameClient.ConnectedClients) + { + if(client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!includeMuted && client.LoggedinUser.MuteNear) + continue; + if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y) + usersHere.Add(client.LoggedinUser); + } + } + return usersHere.ToArray(); + } + public static User GetUserByNameStartswith(string username) + { + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (client.LoggedinUser.Username.ToLower().StartsWith(username.ToLower())) + return client.LoggedinUser; + } + } + throw new KeyNotFoundException("User was not found."); + } + + public static User GetUserByName(string username) + { + foreach(GameClient client in GameClient.ConnectedClients) + { + if(client.LoggedIn) + { + if (client.LoggedinUser.Username.ToLower() == username.ToLower()) + return client.LoggedinUser; + } + } + throw new KeyNotFoundException("User was not found."); + } + + public static User GetUserById(int id) + { + foreach(GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (client.LoggedinUser.Id == id) + return client.LoggedinUser; + } + + throw new KeyNotFoundException("User not found (not online?)"); + } + + public static User[] GetReallyNearbyUsers(int x, int y) + { + int startX = x - 3; + int endX = x + 3; + int startY = y - 3; + int endY = y + 3; + List usersNearby = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) + usersNearby.Add(client.LoggedinUser); + } + } + + return usersNearby.ToArray(); + } + + + public static bool IsOnScreen(int screenX, int screenY, int playerX, int playerY) + { + int startX = screenX - 9; + int endX = screenX + 9; + int startY = screenY - 8; + int endY = screenY + 9; + if (startX <= playerX && endX >= playerX && startY <= playerY && endY >= playerY) + return true; + else + return false; + } + public static User[] GetOnScreenUsers(int x, int y, bool includeStealth = false, bool includeMuted = false) + { + + List usersOnScreen = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!includeMuted && client.LoggedinUser.MuteNear) + continue; + if (IsOnScreen(x,y,client.LoggedinUser.X, client.LoggedinUser.Y)) + usersOnScreen.Add(client.LoggedinUser); + } + + return usersOnScreen.ToArray(); + } + + public static User[] GetNearbyUsers(int x, int y, bool includeStealth=false, bool includeMuted=false) + { + int startX = x - 15; + int endX = x + 15; + int startY = y - 19; + int endY = y + 19; + List usersNearby = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!includeMuted && client.LoggedinUser.MuteNear) + continue; + if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) + usersNearby.Add(client.LoggedinUser); + } + } + + return usersNearby.ToArray(); + } + public static int GetNumberOfPlayers(bool includeStealth=false) + { + int count = 0; + foreach(GameClient client in GameClient.ConnectedClients) + if (client.LoggedIn) + { + if (!includeStealth && client.LoggedinUser.Stealth) + continue; + if (!client.LoggedinUser.Stealth) + count++; + } + + return count; + } + + public static Point[] GetAllBuddyLocations(User caller) + { + List allLocations = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + + if (!caller.Friends.List.Contains(client.LoggedinUser.Id)) + continue; + + + if (!client.LoggedinUser.Stealth) + allLocations.Add(new Point(client.LoggedinUser.X, client.LoggedinUser.Y)); + + } + } + + return allLocations.ToArray(); + } + + public static Point[] GetAllPlayerLocations(User caller) + { + List allLocations = new List(); + + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + { + + if (client.LoggedinUser.Id == caller.Id) + continue; + + if (!client.LoggedinUser.Stealth) + allLocations.Add(new Point(client.LoggedinUser.X, client.LoggedinUser.Y)); + + } + + + } + return allLocations.ToArray(); + } + public static int GetNumberOfPlayersListeningToAdsChat() + { + int count = 0; + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (!client.LoggedinUser.MuteAds) + count++; + } + return count; + } + + public static void CheckMail(User user) + { + if (user.MailBox.UnreadMailCount > 0) + { + + byte[] RipOffAOLSound = PacketBuilder.CreatePlaysoundPacket(Messages.MailSe); + user.LoggedinClient.SendPacket(RipOffAOLSound); + + byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + user.LoggedinClient.SendPacket(mailReceivedText); + + user.MailBox.ReadAllMail(); + } + } + public static int GetNumberOfModsOnline() + { + int count = 0; + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if(client.LoggedinUser.Moderator) + count++; + } + return count; + } + + public static int GetNumberOfBuddiesOnline(User user) + { + int total = 0; + foreach(int bud in user.Friends.List.ToArray()) + { + if (IsUserOnline(bud)) + { + total++; + } + } + return total; + } + + public static int GetNumberOfAdminsOnline() + { + int count = 0; + foreach (GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (client.LoggedinUser.Administrator) + count++; + } + return count; + } + + /* + * Update game state functions. + */ + + public static void Update(GameClient client) + { + UpdateArea(client); + foreach (User nearbyUser in GameServer.GetNearbyUsers(client.LoggedinUser.X, client.LoggedinUser.Y, false, false)) + if (nearbyUser.Id != client.LoggedinUser.Id) + if(!nearbyUser.MajorPriority) + if(!nearbyUser.MinorPriority) + UpdateArea(nearbyUser.LoggedinClient); + + UpdateUserFacingAndLocation(client.LoggedinUser); + } + + public static void UpdateDrawingForAll(string id, GameClient sender, string drawing, bool includingSender=false) + { + World.SpecialTile[] tiles = World.GetSpecialTilesByCode("MULTIROOM-" + id); + foreach (World.SpecialTile tile in tiles) + { + UpdateAreaForAll(tile.X, tile.Y, true, null); + User[] usersHere = GameServer.GetUsersAt(tile.X, tile.Y, true, true); + foreach (User user in usersHere) + { + if (!includingSender) + if (user.Id == sender.LoggedinUser.Id) + continue; + + byte[] patchDrawing = PacketBuilder.CreateDrawingUpdatePacket(drawing); + user.LoggedinClient.SendPacket(patchDrawing); + } + } + } + public static void UpdateHorseMenu(GameClient forClient, HorseInstance horseInst) + { + + forClient.LoggedinUser.MajorPriority = true; + + int TileID = Map.GetTileId(forClient.LoggedinUser.X, forClient.LoggedinUser.Y, false); + string type = Map.TerrainTiles[TileID - 1].Type; + + if (horseInst.Owner == forClient.LoggedinUser.Id) + forClient.LoggedinUser.LastViewedHorse = horseInst; + else + forClient.LoggedinUser.LastViewedHorseOther = horseInst; + + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseInformation(horseInst, forClient.LoggedinUser)); + forClient.SendPacket(metaPacket); + + string loadSwf = HorseInfo.BreedViewerSwf(horseInst, type); + byte[] swfPacket = PacketBuilder.CreateSwfModulePacket(loadSwf, PacketBuilder.PACKET_SWF_MODULE_FORCE); + forClient.SendPacket(swfPacket); + } + public static void UpdateInventory(GameClient forClient) + { + if (!forClient.LoggedIn) + return; + forClient.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildInventoryInfo(forClient.LoggedinUser.Inventory)); + forClient.SendPacket(metaPacket); + } + + public static void UpdateWeather(GameClient forClient) + { + if (!forClient.LoggedIn) + { + Logger.ErrorPrint(forClient.RemoteIp + "tried to update weather information when not logged in."); + return; + } + + string lastWeather = forClient.LoggedinUser.LastSeenWeather; + string weather = forClient.LoggedinUser.GetWeatherSeen(); + if (lastWeather != weather) + { + byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdatePacket(weather); + forClient.SendPacket(WeatherUpdate); + } + } + public static void UpdateWorld(GameClient forClient) + { + if (!forClient.LoggedIn) + { + Logger.ErrorPrint(forClient.RemoteIp + "tried to update world information when not logged in."); + return; + } + + byte[] WorldData = PacketBuilder.CreateWorldData(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, forClient.LoggedinUser.GetWeatherSeen()); + forClient.SendPacket(WorldData); + } + public static void UpdatePlayer(GameClient forClient) + { + if (!forClient.LoggedIn) + { + Logger.ErrorPrint(forClient.RemoteIp + "tried to update player information when not logged in."); + return; + } + byte[] PlayerData = PacketBuilder.CreatePlayerData(forClient.LoggedinUser.Money, GameServer.GetNumberOfPlayers(), forClient.LoggedinUser.MailBox.UnreadMailCount); + forClient.SendPacket(PlayerData); + } + + public static void UpdateUserFacingAndLocation(User user) + { + byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(user.X, user.Y, user.Facing, user.CharacterId, user.Username); + + foreach (User onScreenUser in GetOnScreenUsers(user.X, user.Y, true, true)) + if (onScreenUser.Id != user.Id) + onScreenUser.LoggedinClient.SendPacket(playerInfoBytes); + } + public static void UpdateAreaForAll(int x, int y, bool ignoreMetaPrio=false, User exceptMe=null) + { + foreach(GameClient client in GameClient.ConnectedClients) + { + if (client.LoggedIn) + if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y) + if(!client.LoggedinUser.MinorPriority || ignoreMetaPrio) + if(!client.LoggedinUser.MajorPriority) + if(client.LoggedinUser != exceptMe) + UpdateArea(client); + } + } + + public static void UpdateArea(GameClient forClient) + { + if(forClient == null) + { + Logger.ErrorPrint(forClient.RemoteIp + "tried to update tile information when not connected."); + return; + } + if (!forClient.LoggedIn) + { + Logger.ErrorPrint(forClient.RemoteIp + "tried to update tile information when not logged in."); + return; + } + + if(forClient.LoggedinUser.TradingWith != null) + { + if (!forClient.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient.LoggedIn) + { + forClient.LoggedinUser.TradingWith.InteruptTrade(); + return; + } + + if (forClient.LoggedinUser.TradingWith.OtherTrade.Trader.TradingWith == null) + { + forClient.LoggedinUser.TradingWith.InteruptTrade(); + return; + } + + forClient.LoggedinUser.MajorPriority = true; + forClient.LoggedinUser.TradeMenuPriority = false; + byte[] tradeMeta = PacketBuilder.CreateMetaPacket(Meta.BuildTrade(forClient.LoggedinUser.TradingWith)); + forClient.SendPacket(tradeMeta); + return; + } + + forClient.LoggedinUser.MajorPriority = false; + forClient.LoggedinUser.MinorPriority = false; + + string LocationStr = ""; + int tileX = forClient.LoggedinUser.X; + int tileY = forClient.LoggedinUser.Y; + if (!World.InSpecialTile(tileX, tileY)) + { + if (forClient.LoggedinUser.InRealTimeQuiz) + return; + LocationStr = Meta.BuildMetaInfo(forClient.LoggedinUser, tileX, tileY); + } + else + { + World.SpecialTile specialTile = World.GetSpecialTile(tileX, tileY); + if (specialTile.AutoplaySwf != null && specialTile.AutoplaySwf != "") + { + byte[] swfModulePacket = PacketBuilder.CreateSwfModulePacket(specialTile.AutoplaySwf,PacketBuilder.PACKET_SWF_MODULE_GENTLE); + forClient.SendPacket(swfModulePacket); + } + + if (forClient.LoggedinUser.InRealTimeQuiz && QuizEvent != null) + { + QuizEvent.JoinEvent(forClient.LoggedinUser).UpdateParticipent(); + return; + } + + if (specialTile.Code != null) + if (!ProcessMapCodeWithArg(forClient, specialTile)) + return; + LocationStr = Meta.BuildSpecialTileInfo(forClient.LoggedinUser, specialTile); + } + + + byte[] AreaMessage = PacketBuilder.CreateMetaPacket(LocationStr); + forClient.SendPacket(AreaMessage); + + } + public static void UpdateStats(GameClient client) + { + if (!client.LoggedIn) + return; + + client.LoggedinUser.MajorPriority = true; + string metaWind = Meta.BuildStatsMenu(client.LoggedinUser); + byte[] statsPacket = PacketBuilder.CreateMetaPacket(metaWind); + client.SendPacket(statsPacket); + + } + + /* + * Other... + */ + + public static void AddItemToAllUsersEvenOffline(int itemId, int itemCount) + { + int[] allUsers = Database.GetUsers(); + foreach (int userid in allUsers) + { + for (int i = 0; i < itemCount; i++) + { + ItemInstance itm = new ItemInstance(itemId); + + if (GameServer.IsUserOnline(userid)) + GameServer.GetUserById(userid).Inventory.AddWithoutDatabase(itm); + + Database.AddItemToInventory(userid, itm); + } + } + } + + public static void RemoveAllItemsOfIdInTheGame(int id) + { + // Remove from all online players + foreach (GameClient connectedClient in GameClient.ConnectedClients) + { + if (connectedClient.LoggedIn) + { + if (connectedClient.LoggedinUser.Inventory.HasItemId(id)) + { + InventoryItem invItm = connectedClient.LoggedinUser.Inventory.GetItemByItemId(id); + foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) + connectedClient.LoggedinUser.Inventory.Remove(itm); + } + } + } + + // Remove from shops + foreach(Shop shop in Shop.ShopList) + { + if (shop.Inventory.HasItemId(id)) + { + InventoryItem invItm = shop.Inventory.GetItemByItemId(id); + foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) + shop.Inventory.Remove(itm); + } + + } + DroppedItems.DeleteAllItemsWithId(id); // Delete all dropped items + Database.DeleteAllItemsFromUsers(id); // Delete from offline players + } + + public static void StartRidingHorse(GameClient sender, int horseRandomId) + { + HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(horseRandomId); + + if (horseMountInst.Breed.Type != "unicorn" && horseMountInst.Breed.Type != "pegasus") + { + if (horseMountInst.Equipment.Saddle == null || horseMountInst.Equipment.SaddlePad == null || horseMountInst.Equipment.Bridle == null) + { + byte[] horseNotTackedMessage = PacketBuilder.CreateChat(Messages.HorseCannotMountUntilTackedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(horseNotTackedMessage); + return; + } + } + + + string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseMountInst.Name); + byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(ridingHorseMessagePacket); + + sender.LoggedinUser.CurrentlyRidingHorse = horseMountInst; + + // Determine what sprite to use; + int incBy = 0; + switch (horseMountInst.Color) + { + case "brown": + incBy = 1; + break; + case "cremello": + case "white": + incBy = 2; + break; + case "black": + incBy = 3; + break; + case "chestnut": + incBy = 4; + break; + case "bay": + incBy = 5; + break; + case "grey": + incBy = 6; + break; + case "dun": + incBy = 7; + break; + case "palomino": + incBy = 8; + break; + case "roan": + incBy = 9; + break; + case "pinto": + incBy = 10; + break; + } + + + if (horseMountInst.Breed.Type == "zebra") + { + incBy = 11; + } + if (horseMountInst.Breed.Id == 5) // Appaloosa + { + if (horseMountInst.Color == "cremello") + incBy = 12; + } + if (horseMountInst.Breed.Type == "camel") + { + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(40)); // Camel Rider + + incBy = 13; + } + if(horseMountInst.Breed.Type == "llama") + { + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(41)); // Llama Rider + + incBy = 14; + } + if (horseMountInst.Breed.Type == "unicorn") + { + incBy = 15; + } + if (horseMountInst.Breed.Type == "pegasus") + { + incBy = 16; + } + if (horseMountInst.Breed.Id == 170) // Unipeg + { + incBy = 17; + } + + incBy *= 5; + sender.LoggedinUser.Facing %= 5; + sender.LoggedinUser.Facing += incBy; + sender.LoggedinUser.LastRiddenHorse = horseRandomId; + + UpdateUserFacingAndLocation(sender.LoggedinUser); + + byte[] updatePlayer = PacketBuilder.CreateMovementPacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true); + sender.SendPacket(updatePlayer); + + if (sender.LoggedinUser.HorseWindowOpen) + UpdateArea(sender); + } + public static void DoItemPurchases(GameClient sender) + { + if (!sender.LoggedIn) + return; + + Item.ItemPurchaseQueueItem[] queueItems = Database.GetItemPurchaseQueue(sender.LoggedinUser.Id); + foreach (Item.ItemPurchaseQueueItem queueItem in queueItems) + { + for (int i = 0; i < queueItem.ItemCount; i++) + { + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(queueItem.ItemId)); + } + } + Database.ClearItemPurchaseQueue(sender.LoggedinUser.Id); + + } + public static void StopRidingHorse(GameClient sender) + { + sender.LoggedinUser.CurrentlyRidingHorse = null; + + sender.LoggedinUser.Facing %= 5; + UpdateUserFacingAndLocation(sender.LoggedinUser); + + byte[] updatePlayer = PacketBuilder.CreateMovementPacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true); + sender.SendPacket(updatePlayer); + + if (sender.LoggedinUser.HorseWindowOpen) + UpdateArea(sender); + } + public static bool ProcessMapCodeWithArg(GameClient forClient, World.SpecialTile tile) + { + string mapCode = tile.Code; + if (mapCode == null) + return false; + if(mapCode.Contains('-')) + { + string[] codeInfo = mapCode.Split('-'); + string command = codeInfo[0]; + string paramaters = codeInfo[1]; + + if(command == "JUMP") + { + if(paramaters.Contains(',')) + { + string[] args = paramaters.Split(','); + try + { + int newX = int.Parse(args[0]); + int newY = int.Parse(args[1]); + forClient.LoggedinUser.Teleport(newX, newY); + if (World.InIsle(tile.X, tile.Y)) + { + World.Isle isle = World.GetIsle(tile.X, tile.Y); + int tileset = isle.Tileset; + int overlay = Map.GetTileId(tile.X, tile.Y, true); + if (tileset == 6 && overlay == 249) // warp point + { + byte[] swfPacket = PacketBuilder.CreateSwfModulePacket("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE); + forClient.SendPacket(swfPacket); + } + } + return false; + } + catch(Exception) + { + return true; + } + } + } + } + if(mapCode == "HAMMOCK") + { + byte[] hammockText = PacketBuilder.CreateChat(Messages.HammockText, PacketBuilder.CHAT_BOTTOM_RIGHT); + forClient.SendPacket(hammockText); + + forClient.LoggedinUser.Tiredness = 1000; + foreach(HorseInstance horse in forClient.LoggedinUser.HorseInventory.HorseList) + { + horse.BasicStats.Tiredness = 1000; + } + } + return true; + } + public static void OnShutdown() + { + ServerSocket.Dispose(); + gameTimer.Dispose(); + minuteTimer.Dispose(); + } + public static void ShutdownServer() + { + GameClient.OnShutdown(); + GameServer.OnShutdown(); + Database.OnShutdown(); + Entry.OnShutdown(); + } + + public static void StartServer() + { + ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + IPAddress hostIP = IPAddress.Parse(ConfigReader.BindIP); + IPEndPoint ep = new IPEndPoint(hostIP, ConfigReader.Port); + ServerSocket.Bind(ep); + ServerSocket.Listen(0x7fffffff); + gameTimer = new Timer(new TimerCallback(onGameTick), null, gameTickSpeed, gameTickSpeed); + minuteTimer = new Timer(new TimerCallback(onMinuteTick), null, oneMinute, oneMinute); + Logger.InfoPrint("Binding to ip: " + ConfigReader.BindIP + " On port: " + ConfigReader.Port.ToString()); + + SocketAsyncEventArgs e = new SocketAsyncEventArgs(); + e.Completed += GameClient.CreateClient; + GameClient.CreateClient(null, e); + } + + } +} diff --git a/HorseIsleServer/LibHISP/Server/Logger.cs b/HorseIsleServer/LibHISP/Server/Logger.cs old mode 100755 new mode 100644 index 8f13c38..2f1eb7d --- a/HorseIsleServer/LibHISP/Server/Logger.cs +++ b/HorseIsleServer/LibHISP/Server/Logger.cs @@ -1,58 +1,46 @@ -using System; - -namespace HISP.Server -{ - public class Logger - { - private static void defaultCallbackFunc(bool error, string type, string text) - { - return; - } - - private static Action logFunction = defaultCallbackFunc; - - private static void log(bool error, string type, string text) - { - string[] msgs = text.Replace("\r", "").Split("\n"); - foreach(string msg in msgs) - { - logFunction(error, type, msg); - } - } - - public static void SetCallback(Action callback) - { - logFunction = callback; - } - - public static void ErrorPrint(string text) - { - if (ConfigReader.LogLevel >= 1) - log(true, "ERROR", text); - } - public static void WarnPrint(string text) - { - if (ConfigReader.LogLevel >= 2) - log(false, "WARN", text); - } - public static void HackerPrint(string text) - { - if (ConfigReader.LogLevel >= 3) - log(false, "HACK", text); - } - public static void InfoPrint(string text) - { - if (ConfigReader.LogLevel >= 4) - log(false, "INFO", text); - } - public static void DebugPrint(string text) - { - if (ConfigReader.LogLevel >= 5) - log(false, "DEBUG", text); - } - public static void CrashPrint(string text) - { - log(true, "CRASH", text); - } - } -} +using System; + +namespace HISP.Server +{ + public class Logger + { + private static void defaultCallbackFunc(string txt) + { + return; + } + + private static Action logFunction = defaultCallbackFunc; + + + public static void SetCallback(Action callback) + { + logFunction = callback; + } + + public static void ErrorPrint(string text) + { + if (ConfigReader.LogLevel >= 1) + logFunction("[ERROR] " + text); + } + public static void WarnPrint(string text) + { + if (ConfigReader.LogLevel >= 2) + logFunction("[WARN] " + text); + } + public static void HackerPrint(string text) + { + if (ConfigReader.LogLevel >= 3) + logFunction("[HACK] " + text); + } + public static void InfoPrint(string text) + { + if (ConfigReader.LogLevel >= 4) + logFunction("[INFO] " + text); + } + public static void DebugPrint(string text) + { + if (ConfigReader.LogLevel >= 5) + logFunction("[DEBUG] " + text); + } + } +} diff --git a/HorseIsleServer/LibHISP/Server/Network/Hybrid.cs b/HorseIsleServer/LibHISP/Server/Network/Hybrid.cs deleted file mode 100644 index f700be2..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/Hybrid.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Net.Sockets; - -namespace HISP.Server.Network -{ - public class Hybrid : Transport - { - Transport actualTransport = null; - - - public override string Name - { - get - { - if(actualTransport == null) - return "Hybrid"; - else - return actualTransport.Name; - } - } - - - public override bool Disconnected - { - get - { - if (actualTransport == null) - return base.Disconnected; - else - return actualTransport.Disconnected; - } - } - - public override string Ip - { - get - { - if (actualTransport == null) - return base.Ip; - else - return actualTransport.Ip; - } - } - - - public override void Disconnect() - { - if (actualTransport == null) - { - base.Disconnect(); - } - else - { - actualTransport.Disconnect(); - } - } - - public override void ProcessReceivedPackets(int available, byte[] buffer) - { - - if (ConfigReader.EnableWebSocket && WebSocket.IsStartOfHandshake(buffer)) - { - Logger.DebugPrint(this.Ip + " Switching to WebSocket"); - actualTransport = new WebSocket(); - - actualTransport.passObjects(this.socket, this.onReceiveCallback, this.onDisconnectCallback); - actualTransport.ProcessReceivedPackets(available, buffer); - actualTransport.Accept(base.socket, base.onReceiveCallback, base.onDisconnectCallback); - } - else - { - Logger.DebugPrint(this.Ip + " Switching to XmlSocket"); - actualTransport = new XmlSocket(); - - actualTransport.passObjects(this.socket, this.onReceiveCallback, this.onDisconnectCallback); - actualTransport.ProcessReceivedPackets(available, buffer); - actualTransport.Accept(base.socket, base.onReceiveCallback, base.onDisconnectCallback); - } - } - - internal override void receivePackets(object sender, SocketAsyncEventArgs e) - { - try - { - if(base.checkForError(e)) return; - ProcessReceivedPackets(e.BytesTransferred, e.Buffer); - if (base.checkForError(e)) return; - } - catch (Exception ex) - { - Logger.ErrorPrint(ex.StackTrace); - try { this.Disconnect(); } catch (Exception) { }; - }; - } - - public override void Send(byte[] data) - { - if(actualTransport == null) - base.Send(data); - else - actualTransport.Send(data); - } - } -} diff --git a/HorseIsleServer/LibHISP/Server/Network/ITransport.cs b/HorseIsleServer/LibHISP/Server/Network/ITransport.cs deleted file mode 100644 index 0326b10..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/ITransport.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Net.Sockets; - -namespace HISP.Server.Network -{ - public interface ITransport - { - public string Name { get; } - public bool Disconnected { get; } - public string Ip { get; } - - public void Accept(Socket socket, Action onReceive, Action onDisconnect); - public void Send(byte[] data); - public void Disconnect(); - } -} diff --git a/HorseIsleServer/LibHISP/Server/Network/NullSocket.cs b/HorseIsleServer/LibHISP/Server/Network/NullSocket.cs deleted file mode 100644 index 04a7982..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/NullSocket.cs +++ /dev/null @@ -1,55 +0,0 @@ -// A transport that does absolutely nothing. -// only use this for testing. - -using System; -using System.Net; -using System.Net.Sockets; - -namespace HISP.Server.Network -{ - public class NullSocket : ITransport - { - private bool disconnected = false; - public string Name - { - get - { - return "NullSocket"; - } - } - public bool Disconnected - { - get - { - return disconnected; - } - set - { - disconnected = value; - } - } - - public string Ip - { - get - { - return IPAddress.Loopback.MapToIPv4().ToString(); - } - } - public void Accept(Socket socket, Action onReceive, Action onDisconnect) - { - return; - } - - public void Disconnect() - { - disconnected = true; - return; - } - - public void Send(byte[] data) - { - return; - } - } -} diff --git a/HorseIsleServer/LibHISP/Server/Network/Transport.cs b/HorseIsleServer/LibHISP/Server/Network/Transport.cs deleted file mode 100644 index 9302341..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/Transport.cs +++ /dev/null @@ -1,132 +0,0 @@ -using HISP.Util; -using System; -using System.Collections.Generic; -using System.Net.Sockets; - -namespace HISP.Server.Network -{ - public abstract class Transport : ITransport - { - internal Socket socket; - internal string remoteIp; - - internal Action onReceiveCallback; - internal Action onDisconnectCallback; - - internal byte[] workBuffer = new byte[0xFFFF]; - - internal bool isDisconnecting = false; - - public abstract void ProcessReceivedPackets(int available, byte[] buffer); - public abstract string Name { get; } - - internal virtual bool checkForError(SocketAsyncEventArgs e) - { - if (isDisconnecting || socket == null || e.BytesTransferred <= 0 || !socket.Connected || e.SocketError != SocketError.Success) - { - Disconnect(); - return true; - } - else - { - return false; - } - } - internal virtual void receivePackets(object sender, SocketAsyncEventArgs e) - { - try - { - do - { - if (checkForError(e)) break; - ProcessReceivedPackets(e.BytesTransferred, e.Buffer); - if (checkForError(e)) break; - - } while (!socket.ReceiveAsync(e)); - } - catch (Exception ex) { - Logger.ErrorPrint(ex.StackTrace); - try { this.Disconnect(); } catch (Exception) { }; - }; - - } - - public virtual string Ip - { - get - { - return this.remoteIp; - } - } - - public virtual bool Disconnected - { - get - { - return this.isDisconnecting; - } - } - - internal virtual void passObjects(Socket socket, Action onReceive, Action onDisconnect) - { - socket.SendTimeout = 10 * 1000; // 10sec - socket.ReceiveTimeout = 10 * 1000; // 10sec - - this.socket = socket; - this.onReceiveCallback = onReceive; - this.onDisconnectCallback = onDisconnect; - this.remoteIp = Helper.GetIp(socket.RemoteEndPoint); - } - - public virtual void Accept(Socket socket, Action onReceive, Action onDisconnect) - { - passObjects(socket, onReceive, onDisconnect); - - SocketAsyncEventArgs e = new SocketAsyncEventArgs(); - e.Completed += receivePackets; - e.SetBuffer(workBuffer, 0, workBuffer.Length); - if (!socket.ReceiveAsync(e)) - receivePackets(null, e); - } - - public virtual void Disconnect() - { - if (this.isDisconnecting) - return; - this.isDisconnecting = true; - - // Close Socket - if (socket != null) - { - try - { - socket.Disconnect(false); - socket.Dispose(); - socket = null; - - } - catch (SocketException) { } - catch (ObjectDisposedException) { }; - } - - onDisconnectCallback(); - } - - public virtual void Send(byte[] data) - { - if (Disconnected) return; - if (data == null) return; - - try - { - socket.Send(data); - } - catch (ObjectDisposedException) - { - if (!Disconnected) - Disconnect(); - } - } - } -} - diff --git a/HorseIsleServer/LibHISP/Server/Network/WebSocket.cs b/HorseIsleServer/LibHISP/Server/Network/WebSocket.cs deleted file mode 100644 index 8a41178..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/WebSocket.cs +++ /dev/null @@ -1,417 +0,0 @@ -#define WEBSOCKET_DEBUG -using HISP.Security; -using HISP.Util; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace HISP.Server.Network -{ - public class WebSocket : Transport - { - private const string WEBSOCKET_SEED = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - - private const byte WEBSOCKET_CONTINUE = 0x0; - private const byte WEBSOCKET_TEXT = 0x1; - private const byte WEBSOCKET_BINARY = 0x2; - private const byte WEBSOCKET_CLOSE = 0x8; - - private const byte WEBSOCKET_PING = 0x9; - private const byte WEBSOCKET_PONG = 0xA; - - private const byte WEBSOCKET_LENGTH_INT16 = 0x7E; - private const byte WEBSOCKET_LENGTH_INT64 = 0x7F; - - private const int WEBSOCKET_EXPECTED_SIZE_SET = 0; - private const int WEBSOCKET_EXPECTED_SIZE_UNSET = -1; - - private byte[] currentMessage = new byte[0]; - private byte[] currentPacket = new byte[0]; - - private byte lastOpcode; - private Int64 expectedLength = -1; - private bool handshakeDone = false; - private void webSocketLog(string msg) - { -#if WEBSOCKET_DEBUG - foreach(string str in msg.Replace("\r", "").Split("\n")) - Logger.InfoPrint("[WEBSOCKET] " + str); -#endif - } - - private Dictionary parseHttpHeaders(string httpResponse) - { - Dictionary httpHeaders = new Dictionary(); - string[] parts = httpResponse.Replace("\r", "").Split("\n"); - foreach (string part in parts) - { - if (part.StartsWith("GET")) continue; - - if (part.Contains(":")) - { - string[] keyValuePairs = part.Split(":"); - if (keyValuePairs.Length >= 2) - httpHeaders.Add(keyValuePairs[0].Trim().ToLower(), keyValuePairs[1].Trim()); - } - else - { - continue; - } - } - - return httpHeaders; - } - - private string deriveWebsocketSecKey(string webSocketKey) - { - byte[] derivedKey = Authentication.Sha1Digest(Encoding.UTF8.GetBytes(webSocketKey.Trim() + WEBSOCKET_SEED.Trim())); - return Convert.ToBase64String(derivedKey); - } - private byte[] createHandshakeResponse(string secWebsocketKey) - { - string msg = String.Join("\r\n", new string[] { - "HTTP/1.1 101 Switching Protocols", - "Connection: Upgrade", - "Upgrade: websocket", - "Sec-WebSocket-Accept: " + secWebsocketKey, - "", - "" - }); - webSocketLog(msg); - return Encoding.UTF8.GetBytes(msg); - } - - private byte[] parseHandshake(string handshakeResponse) - { - webSocketLog(handshakeResponse); - Dictionary headers = parseHttpHeaders(handshakeResponse); - - string webSocketKey = null; - headers.TryGetValue("sec-websocket-key", out webSocketKey); - - if (webSocketKey != null) - { - string secWebsocketKey = deriveWebsocketSecKey(webSocketKey); - return createHandshakeResponse(secWebsocketKey); - } - - return createHandshakeResponse(""); - } - - public static bool IsStartOfHandshake(byte[] data) - { - return Helper.ByteArrayStartsWith(data, Encoding.UTF8.GetBytes("GET")); - } - - public static bool IsEndOfHandshake(byte[] data) - { - return Helper.ByteArrayEndsWith(data, Encoding.UTF8.GetBytes("\r\n\r\n")); - } - - private bool isExpectedSizeSet() - { - return (this.expectedLength > WEBSOCKET_EXPECTED_SIZE_SET); - } - private void setUnknownExpectedLength() - { - this.expectedLength = WEBSOCKET_EXPECTED_SIZE_UNSET; - } - - private bool isCurrentPacketLengthLessThanExpectedLength() - { - if (!isExpectedSizeSet()) return false; - return (currentPacket.LongCount() < this.expectedLength); - } - - public override void ProcessReceivedPackets(int available, byte[] buffer) - { - // add to current packet - // if current packet is less than size of an expected incoming message - // then keep receiving until full message received. - int oldLength = currentPacket.Length; - Array.Resize(ref currentPacket, oldLength + available); - Array.ConstrainedCopy(buffer, 0, currentPacket, oldLength, available); - - if (isCurrentPacketLengthLessThanExpectedLength()) - return; - else - setUnknownExpectedLength(); - - //byte[] webSocketMsg = currentPacket.ToArray(); - - if (!handshakeDone) - { - - if (IsStartOfHandshake(currentPacket) && IsEndOfHandshake(currentPacket)) - { - string httpHandshake = Encoding.UTF8.GetString(currentPacket); - byte[] handshakeResponse = parseHandshake(httpHandshake); - base.Send(handshakeResponse); - - Array.Resize(ref currentPacket, 0); - handshakeDone = true; - } - } - else if(currentPacket.Length > 2) // else, begin parsing websocket message - { - - byte[] unmaskKey = new byte[4]; - - bool finished = (currentPacket[0] & 0b10000000) != 0; - - bool rsv1 = (currentPacket[0] & 0b01000000) != 0; - bool rsv2 = (currentPacket[0] & 0b00100000) != 0; - bool rsv3 = (currentPacket[0] & 0b00010000) != 0; - - byte opcode = Convert.ToByte(currentPacket[0] & 0b00001111); - - bool mask = (currentPacket[1] & 0b10000000) != 0; - Int64 messageLength = Convert.ToInt64(currentPacket[1] & 0b01111111); - - int offset = 2; - - - if (messageLength == WEBSOCKET_LENGTH_INT16) - { - if (currentPacket.LongLength >= offset + 2) - { - byte[] uint16Bytes = new byte[2]; - Array.ConstrainedCopy(currentPacket, offset, uint16Bytes, 0, uint16Bytes.Length); - uint16Bytes = uint16Bytes.Reverse().ToArray(); - messageLength = BitConverter.ToUInt16(uint16Bytes); - - offset += uint16Bytes.Length; - } - } - else if (messageLength == WEBSOCKET_LENGTH_INT64) - { - if (currentPacket.LongLength >= offset + 8) - { - byte[] int64Bytes = new byte[8]; - Array.ConstrainedCopy(currentPacket, offset, int64Bytes, 0, int64Bytes.Length); - int64Bytes = int64Bytes.Reverse().ToArray(); - messageLength = BitConverter.ToInt64(int64Bytes); - - offset += int64Bytes.Length; - } - } - - if (mask) - { - Array.ConstrainedCopy(currentPacket, offset, unmaskKey, 0, unmaskKey.Length); - offset += unmaskKey.Length; - } - - // Handle tcp fragmentation - - Int64 actualLength = (currentPacket.LongLength - offset); - - // check if full message received, if not then set expected length - // and return, thus entering the loop at the beginning - if (actualLength < messageLength) - { - expectedLength = messageLength + offset; // set expected length and return - webSocketLog("Partial websocket frame received, expected size: " + messageLength + " got size: " + actualLength); - return; - } - - // clone current packet array - byte[] currentPacketCopy = currentPacket.ToArray(); - - // set current packet array size back to 0 - setUnknownExpectedLength(); - Array.Resize(ref currentPacket, 0); - - // dont care about extensions - if (rsv1 || rsv2 || rsv3) return; - - webSocketLog("Finished: " + finished + "\nRsv1: " + rsv1 + "\nRsv2: " + rsv2 + "\nRsv3: " + rsv3 + "\nOpcode: " + opcode + "\nMask: " + mask + "\nMesssageLength: " + messageLength); - - if (opcode != WEBSOCKET_CONTINUE) - lastOpcode = opcode; - - // do the thing the websocket frame says to do - switch (opcode) - { - case WEBSOCKET_CONTINUE: - case WEBSOCKET_BINARY: - case WEBSOCKET_TEXT: - case WEBSOCKET_PING: - oldLength = currentMessage.Length; - Array.Resize(ref currentMessage, oldLength + Convert.ToInt32(messageLength)); - if (mask) - { - for (int i = 0; i < Convert.ToInt32(messageLength); i++) - currentMessage[oldLength + i] = Convert.ToByte(currentPacketCopy[offset + i] ^ unmaskKey[i % unmaskKey.Length]); - } - else - { - Array.ConstrainedCopy(currentPacketCopy, offset, currentMessage, oldLength, Convert.ToInt32(messageLength)); - } - break; - case WEBSOCKET_CLOSE: - this.Disconnect(); - return; - } - - // handle end of websocket message. - if (finished) - { - - if (lastOpcode != WEBSOCKET_PING && currentMessage.LongLength > 0) - onReceiveCallback(currentMessage); - else - Send(currentMessage); - - Array.Resize(ref currentMessage, 0); - Array.Resize(ref currentPacket, 0); - } - - - // is there another frame after this one? - // buffer remaining data back to ProcessReceivedPackets - if(actualLength > messageLength) - { - Int64 left = (actualLength - messageLength); - - Int64 loc = messageLength + offset; - int total = buffer.Length; - - for (Int64 totalSent = left; totalSent > 0; totalSent -= total) - { - if (totalSent <= total) - total = Convert.ToInt32(totalSent); - - - Array.ConstrainedCopy(currentPacketCopy, Convert.ToInt32(loc), buffer, 0, total); - - webSocketLog("Found another frame at the end of this one, processing!"); - ProcessReceivedPackets(total, buffer); - - loc += total; - } - } - - } - - - } - - // specify transport name is "WebSocket" - public override string Name - { - get - { - return "WebSocket"; - } - } - - - - // encode data into websocket frames and send over network - public override void Send(byte[] data) - { - if(this.Disconnected) return; - if (data == null) return; - - // apparently you cant mask responses? chrome gets mad when i do it, - // so dont set this to true. - bool mask = false; - - int maxLength = this.workBuffer.Length; - int toSend = maxLength; - - byte opcode = ((lastOpcode == WEBSOCKET_PING) ? WEBSOCKET_PONG : WEBSOCKET_BINARY); - - Int64 totalData = data.LongLength; - - bool finish = false; - - // despite its name, this has nothing to do with graphics - // rather this is for WebSocket frames - List frameHeader = new List(); - - for (Int64 remain = totalData; remain > 0; remain -= toSend) - { - // Is this the first frame? - // if so; send opcode binary - // otherwise, were continuing out last one - if (remain != totalData) - opcode = WEBSOCKET_CONTINUE; - - if(remain <= maxLength) - { - toSend = Convert.ToInt32(remain); - finish = true; - } - - frameHeader.Add(Convert.ToByte((0x00) | (finish ? 0b10000000 : 0b00000000) | opcode)); - - // do special length encoding - byte maskAndLength = Convert.ToByte((0x00) | (mask ? 0b10000000 : 0b00000000)); - byte[] additionalLengthData = new byte[0]; - if (toSend >= WEBSOCKET_LENGTH_INT16) - { - if(toSend < UInt16.MaxValue) - { - maskAndLength |= WEBSOCKET_LENGTH_INT16; - additionalLengthData = BitConverter.GetBytes(Convert.ToUInt16(toSend)).Reverse().ToArray(); - - } - else if(Convert.ToInt64(toSend) < Int64.MaxValue) - { - maskAndLength |= WEBSOCKET_LENGTH_INT64; - additionalLengthData = BitConverter.GetBytes(Convert.ToInt64(toSend)).Reverse().ToArray(); - } - - } - else - { - maskAndLength |= Convert.ToByte(toSend); - } - - // Add to buffer - frameHeader.Add(maskAndLength); - Helper.ByteArrayToByteList(additionalLengthData, frameHeader); - - // Generate masking key; - byte[] maskingKey = new byte[4]; - - if (mask) - { - GameServer.RandomNumberGenerator.NextBytes(maskingKey); - Helper.ByteArrayToByteList(maskingKey, frameHeader); - } - - int headerSize = frameHeader.Count; - - byte[] frame = new byte[toSend + headerSize]; - Array.Copy(frameHeader.ToArray(), frame, headerSize); - frameHeader.Clear(); - - Int64 totalSent = (totalData - remain); - - if (mask) // are we masking this response? - { - // Mask data using key. - for (int i = 0; i < toSend; i++) - frame[i + headerSize] = Convert.ToByte(data[i + totalSent] ^ maskingKey[i % maskingKey.Length]); - } - else if(data.LongLength < Int32.MaxValue) // is out packet *really* bigger than 32 max int?? - { - Array.ConstrainedCopy(data, Convert.ToInt32(totalSent), frame, headerSize, toSend); - } - - // Finally send complete frame over the network - base.Send(frame); - - if (this.Disconnected) return; // are we still here? - } - - - } - - - } -} diff --git a/HorseIsleServer/LibHISP/Server/Network/XmlSocket.cs b/HorseIsleServer/LibHISP/Server/Network/XmlSocket.cs deleted file mode 100644 index bb44959..0000000 --- a/HorseIsleServer/LibHISP/Server/Network/XmlSocket.cs +++ /dev/null @@ -1,61 +0,0 @@ -using HISP.Security; -using HISP.Util; -using System; -using System.Collections.Generic; -using System.Text; - -namespace HISP.Server.Network -{ - public class XmlSocket : Transport - { - private List currentPacket = new List(); - private const byte XMLSOCKET_PACKET_TERMINATOR = 0x00; - private static byte[] XMLSOCKET_POLICY_FILE = Encoding.UTF8.GetBytes(""); - public override void ProcessReceivedPackets(int available, byte[] buffer) - { - // In XmlSocket Packets are terminates by 0x00 so we have to read until we receive that terminator - - for (int i = 0; i < available; i++) - { - if (buffer[i] == XMLSOCKET_PACKET_TERMINATOR) // Read until \0... - { - byte[] packet = currentPacket.ToArray(); - - if (Helper.ByteArrayStartsWith(packet, XMLSOCKET_POLICY_FILE)) - this.Send(CrossDomainPolicy.GetPolicyFile()); - else - onReceiveCallback(packet); - - - currentPacket.Clear(); - continue; - } - currentPacket.Add(buffer[i]); - } - - } - - public override string Name - { - get - { - return "XmlSocket"; - } - } - - public override void Send(byte[] data) - { - int oldLength = data.Length; - - // Resize the array to be 1 extra byte in size; - Array.Resize(ref data, oldLength + 1); - - // add \0 to the end of the buffer - data[oldLength] = XMLSOCKET_PACKET_TERMINATOR; - - // send to the server - base.Send(data); - } - - } -} diff --git a/HorseIsleServer/LibHISP/Server/PacketBuilder.cs b/HorseIsleServer/LibHISP/Server/PacketBuilder.cs old mode 100755 new mode 100644 index 5cacf18..81be215 --- a/HorseIsleServer/LibHISP/Server/PacketBuilder.cs +++ b/HorseIsleServer/LibHISP/Server/PacketBuilder.cs @@ -1,899 +1,1005 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; - -using HISP.Game; -using HISP.Game.SwfModules; -using HISP.Util; -namespace HISP.Server -{ - public class PacketBuilder - { - public const int PACKET_CLIENT_TERMINATOR_LENGTH = 1; - public const byte PACKET_CLIENT_TERMINATOR = 0x0A; - - // hi1 packets - public const byte PACKET_LOGIN = 0x7F; - public const byte PACKET_CHAT = 0x14; - public const byte PACKET_MOVE = 0x15; - public const byte PACKET_CLICK = 0x77; - public const byte PACKET_SEC_CODE = 0x81; - public const byte PACKET_WORLD = 0x7A; - public const byte PACKET_BASE_STATS = 0x7B; - public const byte PACKET_RANCH = 0x23; - public const byte PACKET_SWF_MODULE_CUTSCENE = 0x29; - public const byte PACKET_SWF_MODULE_FORCE = 0x28; - public const byte PACKET_SWF_MODULE_GENTLE = 0x2A; - public const byte PACKET_META = 0x1E; - public const byte PACKET_BIRDMAP = 0x76; - public const byte PACKET_HORSE = 0x19; - public const byte PACKET_AREA_DEFS = 0x79; - public const byte PACKET_ITEM_INTERACTION = 0x1E; - public const byte PACKET_ANNOUNCEMENT = 0x7E; - public const byte PACKET_TILE_FLAGS = 0x75; - public const byte PACKET_PLAYSOUND = 0x23; - public const byte PACKET_KEEP_ALIVE = 0x7C; - public const byte PACKET_DYNAMIC_BUTTON = 0x45; - public const byte PACKET_DYNAMIC_INPUT = 0x46; - public const byte PACKET_ARENA_SCORE = 0x2D; - public const byte PACKET_PLAYER = 0x18; - public const byte PACKET_INVENTORY = 0x17; - public const byte PACKET_TRANSPORT = 0x29; - public const byte PACKET_KICK = 0x80; - public const byte PACKET_LEAVE = 0x7D; - public const byte PACKET_NPC = 0x28; - public const byte PACKET_QUIT = 0x7D; - public const byte PACKET_PLAYERINFO = 0x16; - public const byte PACKET_INFORMATION = 0x28; - public const byte PACKET_WISH = 0x2C; - public const byte PACKET_SWFMODULE = 0x50; - public const byte PACKET_AUCTION = 0x24; - public const byte PACKET_PLAYER_INTERACTION = 0x2A; - public const byte PACKET_SOCIALS = 0x5A; - - public const byte SOCIALS_MENU = 0x14; - public const byte SOCIALS_USE = 0x15; - - public const byte PLAYER_INTERACTION_PROFILE = 0x14; - public const byte PLAYER_INTERACTION_TAG = 0x23; - public const byte PLAYER_INTERACTION_TRADE = 0x28; - public const byte PLAYER_INTERACTION_ADD_ITEM = 0x29; - public const byte PLAYER_INTERACTION_ACCEPT = 0x2A; - public const byte PLAYER_INTERACTION_TRADE_REJECT = 0x2B; - public const byte PLAYER_INTERACTION_ADD_BUDDY = 0x1E; - public const byte PLAYER_INTERACTION_REMOVE_BUDDY = 0x1F; - public const byte PLAYER_INTERACTION_MUTE = 0x32; - public const byte PLAYER_INTERACTION_UNMUTE = 0x33; - - public const byte AUCTION_BID_100 = 0x29; - public const byte AUCTION_BID_1K = 0x2A; - public const byte AUCTION_BID_10K = 0x2B; - public const byte AUCTION_BID_100K = 0x2C; - public const byte AUCTION_BID_1M = 0x2D; - public const byte AUCTION_BID_10M = 0x2E; - public const byte AUCITON_BID_100M = 0x2F; - - public const byte RANCH_BUY = 0x14; - public const byte RANCH_INFO = 0x16; - public const byte RANCH_CLICK = 0x17; - public const byte RANCH_UPGRADE = 0x18; - public const byte RANCH_SELL = 0x15; - public const byte RANCH_BUILD = 0x19; - public const byte RANCH_REMOVE = 0x1A; - public const byte RANCH_CLICK_NORM = 0x14; - public const byte RANCH_CLICK_BUILD = 0x15; - - public const byte HORSE_LIST = 0x0A; - public const byte HORSE_LOOK = 0x14; - public const byte HORSE_FEED = 0x15; - public const byte HORSE_ENTER_ARENA = 0x2D; - public const byte HORSE_PET = 0x18; - public const byte HORSE_PROFILE = 0x2C; - public const byte HORSE_PROFILE_EDIT = 0x14; - public const byte HORSE_TRY_CAPTURE = 0x1C; - public const byte HORSE_RELEASE = 0x19; - public const byte HORSE_TACK = 0x16; - public const byte HORSE_DRINK = 0x2B; - public const byte HORSE_GIVE_FEED = 0x1B; - public const byte HORSE_TACK_EQUIP = 0x3C; - public const byte HORSE_TACK_UNEQUIP = 0x3D; - public const byte HORSE_VET_SERVICE = 0x2A; - public const byte HORSE_VET_SERVICE_ALL = 0x2F; - public const byte HORSE_GROOM_SERVICE_ALL = 0x33; - public const byte HORSE_GROOM_SERVICE = 0x32; - public const byte HORSE_BARN_SERVICE = 0x37; - public const byte HORSE_BARN_SERVICE_ALL = 0x38; - public const byte HORSE_SHOE_IRON = 0x28; - public const byte HORSE_SHOE_STEEL = 0x29; - public const byte HORSE_SHOE_ALL = 0x2E; - public const byte HORSE_TRAIN = 0x1A; - public const byte HORSE_MOUNT = 0x46; - public const byte HORSE_DISMOUNT = 0x47; - public const byte HORSE_ESCAPE = 0x1E; - public const byte HORSE_CAUGHT = 0x1D; - - public const byte SWFMODULE_INVITE = 0x14; - public const byte SWFMODULE_ACCEPT = 0x15; - public const byte SWFMODULE_CLOSE = 0x16; - - public const byte SWFMODULE_2PLAYER_CLOSED = 0x58; - public const byte SWFMODULE_OPPONENT = 0x50; - public const byte SWFMODULE_ARENA = 0x52; - public const byte SWFMODULE_BRICKPOET = 0x5A; - public const byte SWFMODULE_DRAWINGROOM = 0x5B; - public const byte SWFMODULE_DRESSUPROOM = 0x5C; - public const byte SWFMODULE_BROADCAST = 0x51; - - public const byte DRAWINGROOM_GET_DRAWING = 0x14; - public const byte DRAWINGROOM_SAVE = 0x15; - public const byte DRAWINGROOM_LOAD = 0x16; - - public const byte BRICKPOET_LIST_ALL = 0x14; - public const byte BRICKPOET_MOVE = 0x55; - - public const byte DRESSUPROOM_LIST_ALL = 0x14; - - public const byte WISH_MONEY = 0x31; - public const byte WISH_ITEMS = 0x32; - public const byte WISH_WORLDPEACE = 0x33; - - public const byte SECCODE_QUEST = 0x32; - public const byte SECCODE_GIVE_ITEM = 0x28; - public const byte SECCODE_DELETE_ITEM = 0x29; - public const byte SECCODE_SCORE = 0x3D; - public const byte SECCODE_WINLOOSE = 0x3C; - public const byte SECCODE_TIME = 0x3E; - public const byte SECCODE_MONEY = 0x1E; - public const byte SECCODE_AWARD = 0x33; - - public const byte WINLOOSE_WIN = 0x14; - public const byte WINLOOSE_LOOSE = 0x15; - - public const byte NPC_START_CHAT = 0x14; - public const byte NPC_CONTINUE_CHAT = 0x15; - - public const byte PLAYERINFO_LEAVE = 0x16; - public const byte PLAYERINFO_UPDATE_OR_CREATE = 0x15; - public const byte PLAYERINFO_PLAYER_LIST = 0x14; - - public const byte PROFILE_WINLOOSE_LIST = 0x50; - public const byte PROFILE_HIGHSCORES_LIST = 0x51; - public const byte PROFILE_BESTTIMES_LIST = 0x52; - - public const byte VIEW_PROFILE = 0x14; - public const byte SAVE_PROFILE = 0x15; - - public const byte AREA_SEPERATOR = 0x5E; - public const byte AREA_TOWN = 0x54; - public const byte AREA_AREA = 0x41; - public const byte AREA_ISLE = 0x49; - - public const byte MOVE_UP = 0x14; - public const byte MOVE_DOWN = 0x15; - public const byte MOVE_RIGHT = 0x16; - public const byte MOVE_LEFT = 0x17; - public const byte MOVE_ESCAPE = 0x18; - public const byte MOVE_UPDATE = 0x0A; - - - public const byte CHAT_BOTTOM_LEFT = 0x14; - public const byte CHAT_BOTTOM_RIGHT = 0x15; - public const byte CHAT_DM_RIGHT = 0x16; - - public const byte ITEM_INFORMATON = 0x14; - public const byte ITEM_INFORMATON_ID = 0x15; - public const byte NPC_INFORMATION = 0x16; - - public const byte ITEM_DROP = 0x1E; - public const byte ITEM_PICKUP = 0x14; - public const byte ITEM_PICKUP_ALL = 0x15; - public const byte ITEM_BUY = 0x33; - public const byte ITEM_BUY_AND_CONSUME = 0x34; - public const byte ITEM_BUY_5 = 0x35; - public const byte ITEM_BUY_25 = 0x37; - public const byte ITEM_SELL = 0x3C; - public const byte ITEM_WRAP = 0x17; - public const byte ITEM_SELL_ALL = 0x3D; - public const byte ITEM_VIEW = 0x2A; - public const byte ITEM_LOOK = 0x4C; - public const byte ITEM_READ = 0x52; - public const byte ITEM_RIP = 0x2B; - public const byte ITEM_OPEN = 0x16; - public const byte ITEM_WEAR = 0x46; - public const byte ITEM_REMOVE = 0x47; - public const byte ITEM_CONSUME = 0x51; - public const byte ITEM_DRINK = 0x52; - public const byte ITEM_BINOCULARS = 0x5C; - public const byte ITEM_THROW = 0x1F; - public const byte ITEM_MAGNIFYING = 0x5D; - public const byte ITEM_CRAFT = 0x64; - public const byte ITEM_USE = 0x5F; - public const byte ITEM_RAKE = 0x5B; - public const byte ITEM_SHOVEL = 0x5A; - - public const byte LOGIN_INVALID_USER_PASS = 0x15; - public const byte LOGIN_CUSTOM_MESSAGE = 0x16; - public const byte LOGIN_SUCCESS = 0x14; - - public const byte WEATHER_UPDATE = 0x13; - - public const byte DIRECTION_UP = 0; - public const byte DIRECTION_RIGHT = 1; - public const byte DIRECTION_DOWN = 2; - public const byte DIRECTION_LEFT = 3; - public const byte DIRECTION_TELEPORT = 4; - public const byte DIRECTION_NONE = 10; - - // Helper function for packets that return map data, (eg CreateMovement or CreateBirdMap) - // To encode tile data and add it to a given packet represented as a List. - private static void encodeTileDataAndAddToPacket(List packet, int tileId, int otileId) - { - if (tileId >= 190) - { - packet.Add((byte)190); - tileId -= 100; - } - packet.Add((byte)tileId); - - if (otileId >= 190) - { - packet.Add((byte)190); - otileId -= 100; - } - packet.Add((byte)otileId); - } - - // Creates a byte array of a packet to inform the client that Player 2 in the current 2Player game - // has actually left / quit the game. - public static byte[] Create2PlayerClose() - { - byte[] packet = new byte[2]; - packet[0] = PACKET_SWFMODULE; - packet[1] = SWFMODULE_2PLAYER_CLOSED; - - return packet; - } - - // Creates a byte array of a packet to inform the client that a peice in a dressup room - // was moved to another location. - public static byte[] CreateDressupRoomPeiceMove(int peiceId, double x, double y, bool active) - { - string peiceMoveStr = ""; - peiceMoveStr += peiceId.ToString() + "|"; - if (active) - { - peiceMoveStr += x.ToString() + "|"; - peiceMoveStr += y.ToString() + "|"; - } - else - { - peiceMoveStr += "D|D|"; - } - peiceMoveStr += "^"; - byte[] peiceMoveBytes = Encoding.UTF8.GetBytes(peiceMoveStr); - - byte[] packet = new byte[1 + peiceMoveBytes.Length]; - - packet[0] = PACKET_SWFMODULE; - Array.Copy(peiceMoveBytes, 0, packet, 1, peiceMoveBytes.Length); - - return packet; - } - // Creates a byte array of a packet to inform the client of all the peices - // in a given dressup room. - public static byte[] CreateDressupRoomPeiceLoad(Dressup.DressupPeice[] dressupPeices) - { - string peiceLoadStr = ""; - foreach(Dressup.DressupPeice peice in dressupPeices) - { - if (!peice.Active) - continue; - - peiceLoadStr += peice.PeiceId.ToString() + "|"; - peiceLoadStr += peice.X.ToString() + "|"; - peiceLoadStr += peice.Y.ToString() + "|"; - peiceLoadStr += "^"; - } - - byte[] peiceLoadBytes = Encoding.UTF8.GetBytes(peiceLoadStr); - byte[] packet = new byte[1 + peiceLoadBytes.Length]; - - packet[0] = PACKET_SWFMODULE; - Array.Copy(peiceLoadBytes, 0, packet, 1, peiceLoadBytes.Length); - - return packet; - } - // Creates a byte array that contains the contents of a request byte array - // as the response, it basically just forwards it onwards - // this is used for *most* SwfModule - public static byte[] CreateForwardedSwfModule(byte[] request) - { - byte[] packet = new byte[1 + (request.Length-3)]; - packet[0] = PACKET_SWFMODULE; - Array.Copy(request, 2, packet, 1, (request.Length-3)); - return packet; - } - // Creates a byte array that contains "Bird Map" data - // From a given X/Y Position, this is primarily used to handle - // using the telescope item in game - public static byte[] CreateBirdMap(int X, int Y) - { - // The size is always fixed in this case, but i still have to use a List because - // encodeTileDataAndAddToPacket expects packet as a List. - List packet = new List(); - - // Calculate top left corner of BirdMap viewport - // from given X/Y position. - int startX = X - 24; - int startY = Y - 15; - - packet.Add(PACKET_BIRDMAP); - - for (int rely = 0; rely <= 30; rely++) - { - for (int relx = 0; relx <= 48; relx++) - { - int tileId = Map.GetTileId(startX + relx, startY + rely, false); - int otileId = Map.GetTileId(startX + relx, startY + rely, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - } - } - - return packet.ToArray(); - } - // Creates a byte array for a packet to inform the client that the image in a drawing room has changed. - public static byte[] CreateDrawingUpdate(string Drawing) - { - byte[] drawingBytes = Encoding.UTF8.GetBytes(Drawing); - byte[] packet = new byte[1 + drawingBytes.Length]; - - packet[0] = PACKET_SWFMODULE; - Array.Copy(drawingBytes, 0, packet, 1, drawingBytes.Length); - - return packet; - } - // Creates a byte array for a packet to inform the client that a poetry peice in a brick poet room has moved. - public static byte[] CreateBrickPoetMove(Brickpoet.PoetryPeice peice) - { - string peiceUpdateStr = "|"; - peiceUpdateStr += peice.Id + "|"; - peiceUpdateStr += peice.X + "|"; - peiceUpdateStr += peice.Y + "|"; - peiceUpdateStr += "^"; - - byte[] infoBytes = Encoding.UTF8.GetBytes(peiceUpdateStr); - byte[] packet = new byte[(1 * 2) + infoBytes.Length]; - - packet[0] = PACKET_SWFMODULE; - packet[1] = BRICKPOET_MOVE; - - Array.Copy(infoBytes, 0, packet, 2, infoBytes.Length); - - - return packet; - } - // Creates a byte array for a packet to inform the client of all all Poetry Peices in a Brick Poet room - public static byte[] CreateBrickPoetList(Brickpoet.PoetryPeice[] room) - { - string peicesStr = ""; - foreach(Brickpoet.PoetryPeice peice in room) - { - peicesStr += "A"; - peicesStr += "|"; - peicesStr += peice.Id; - peicesStr += "|"; - peicesStr += peice.Word.ToUpper(); - peicesStr += "|"; - peicesStr += peice.X; - peicesStr += "|"; - peicesStr += peice.Y; - peicesStr += "|"; - peicesStr += "^"; - } - byte[] peicesBytes = Encoding.UTF8.GetBytes(peicesStr); - byte[] packet = new byte[1 + peicesBytes.Length]; - - packet[0] = PACKET_SWFMODULE; - - Array.Copy(peicesBytes, 0, packet, 1, peicesBytes.Length); - - return packet; - } - // Creates a byte array of a packet requesting the client to play a sound effect. - public static byte[] CreatePlaySound(string sound) - { - byte[] soundBytes = Encoding.UTF8.GetBytes(sound); - byte[] packet = new byte[1 + soundBytes.Length]; - - packet[0] = PACKET_PLAYSOUND; - - Array.Copy(soundBytes, 0, packet, 1, soundBytes.Length); - - - return packet; - } - // Creates a byte array of a packet informing the client that a given user has left the game - // So they can be removed from the chat list - public static byte[] CreatePlayerLeave(string username) - { - byte[] userBytes = Encoding.UTF8.GetBytes(username); - byte[] packet = new byte[(1 * 2) + userBytes.Length]; - - packet[0] = PACKET_PLAYERINFO; - packet[1] = PLAYERINFO_LEAVE; - - Array.Copy(userBytes, 0, packet, 2, userBytes.Length); - - return packet; - } - // Creates a byte array of a packet informing the client that a given player has changed position, - // changed direction, or changed character sprites - public static byte[] CreatePlayerInfoUpdateOrCreate(int x, int y, int facing, int charId, string username) - { - byte[] userBytes = Encoding.UTF8.GetBytes(username); - byte[] packet = new byte[(1 * 9) + userBytes.Length]; - - packet[0] = PACKET_PLAYERINFO; - packet[1] = PLAYERINFO_UPDATE_OR_CREATE; - - packet[2] = (byte)(((x - 4) / 64) + 20); - packet[3] = (byte)(((x - 4) % 64) + 20); - - packet[4] = (byte)(((y - 1) / 64) + 20); - packet[5] = (byte)(((y - 1) % 64) + 20); - - packet[6] = (byte)(facing + 20); - - packet[7] = (byte)((charId / 64) + 20); - packet[8] = (byte)((charId % 64) + 20); - - Array.Copy(userBytes, 0, packet, 9, userBytes.Length); - - - return packet; - } - // Creates a byte array of a packet to inform the client - // if a given Login Attempt was successful or not - public static byte[] CreateLogin(bool Success, string ErrorMessage="") - { - byte[] loginFailMessage = Encoding.UTF8.GetBytes(ErrorMessage); - byte[] packet = new byte[(1 * 2) + loginFailMessage.Length]; - - packet[0] = PACKET_LOGIN; - if (ErrorMessage != "") - packet[1] = LOGIN_CUSTOM_MESSAGE; - else if (Success) - packet[1] = LOGIN_SUCCESS; - else - packet[1] = LOGIN_INVALID_USER_PASS; - - Array.Copy(loginFailMessage, 0, packet, 2, loginFailMessage.Length); - - return packet; - } - // Creates a byte array of a packet to inform the client of - // the users current profile page, or "about me" - // This is for the the "Profile" button - public static byte[] CreateProfilePage(string userProfile) - { - byte[] profileBytes = Encoding.UTF8.GetBytes(userProfile); - byte[] packet = new byte[1 + profileBytes.Length]; - - packet[0] = PACKET_PLAYER; - Array.Copy(profileBytes, 0, packet, 1, profileBytes.Length); - - return packet; - } - // Creates a byte array of a packet to inform the client of the players - // new X/Y position, there character id, facing direction, and Tile Data for their position in the map. - public static byte[] CreateMovement(int x, int y, int charId, int facing, int direction, bool walk) - { - - /* Packet HEADER */ - - // Packet size varries too much and so using a dynamically sized list of bytes instead of a byte[] - List packet = new List(); - - packet.Add(PACKET_MOVE); // 0x0 - - packet.Add((byte)(((x-4) / 64) + 20)); //0x1 - packet.Add((byte)(((x-4) % 64) + 20)); //0x2 - - packet.Add((byte)(((y-1) / 64) + 20)); //0x3 - packet.Add((byte)(((y-1) % 64) + 20)); //0x4 - - packet.Add((byte)(facing + 20)); //0x5 - - packet.Add((byte)((charId / 64) + 20)); //0x6 - packet.Add((byte)((charId % 64) + 20)); //0x7 - packet.Add((byte)(direction + 20)); //0x8 - packet.Add((byte)(Convert.ToInt32(walk) + 20)); //0x9 - - /* Packet PAYLOAD */ - bool moveTwo = false; - if(direction >= 20) // is the player riding a horse? - { - direction -= 20; - moveTwo = true; - } - - - // Calculate start of the client's viewport start offset from top-left origin - int startY = y - 4; - int startX = x - 6; - int endX = startX + 12; - int endY = startY + 9; - - // This giant if case logic essentially - // Pulls the missing tile data portion from map file - // And encodes it into packet data - if (direction == DIRECTION_UP) - { - int totalY = 0; - if (moveTwo) - { - startY++; - totalY = 1; - } - - for (int curY = startY; curY >= startY - totalY; curY--) - { - for (int curX = startX; curX <= endX; curX++) - { - int tileId = Map.GetTileId(curX, curY, false); - int otileId = Map.GetTileId(curX, curY, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - } - } - } - else if (direction == DIRECTION_LEFT) - { - int totalX = 0; - if (moveTwo) - { - startX++; - totalX = 1; - } - - for (int curX = startX; curX >= startX - totalX; curX--) - { - for (int curY = startY; curY <= endY; curY++) - { - int tileId = Map.GetTileId(curX, curY, false); - int otileId = Map.GetTileId(curX, curY, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - } - } - } - else if (direction == DIRECTION_RIGHT) - { - int totalX = 0; - if (moveTwo) - { - endX--; - totalX = 1; - } - - for (int curX = endX; curX <= endX + totalX; curX++) - { - - for (int curY = startY; curY <= endY; curY++) - { - int tileId = Map.GetTileId(curX, curY, false); - int otileId = Map.GetTileId(curX, curY, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - - } - } - } - else if (direction == DIRECTION_DOWN) - { - int totalY = 0; - if (moveTwo) - { - endY--; - totalY = 1; - } - - for (int curY = endY; curY <= endY + totalY; curY++) - { - - for (int curX = startX; curX <= endX; curX++) - { - int tileId = Map.GetTileId(curX, curY, false); - int otileId = Map.GetTileId(curX, curY, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - } - } - - } - else if (direction == DIRECTION_TELEPORT) - { - for(int rely = 0; rely <= 9; rely++) - { - for (int relx = 0; relx <= 12; relx++) - { - int tileId = Map.GetTileId(startX + relx, startY + rely, false); - int otileId = Map.GetTileId(startX + relx, startY + rely, true); - encodeTileDataAndAddToPacket(packet, tileId, otileId); - } - } - - } - - return packet.ToArray(); - } - // Creates a byte array of a packet containing Information about a specific tile - // used when you click on a tile in the client, it gives you some extra info about it. - public static byte[] CreateTileClickInfo(string text) - { - byte[] strBytes = Encoding.UTF8.GetBytes(text); - byte[] packet = new byte[1 + strBytes.Length]; - packet[0] = PACKET_CLICK; - Array.Copy(strBytes, 0, packet, 1, strBytes.Length); - return packet; - } - - // Creates a byte array of a packet containing information to be displayed in the "Meta" window - // (Thats the one on the top-right corner of the screent hat contains buttons and other widgets) - public static byte[] CreateMeta(string formattedText) - { - byte[] formattedBytes = Encoding.UTF8.GetBytes(formattedText); - byte[] packet = new byte[1 + formattedBytes.Length]; - - packet[0] = PACKET_META; - Array.Copy(formattedBytes, 0, packet, 1, formattedBytes.Length); - - return packet; - } - // Creates a byte array of a packet informing the client to display a chat message - // And which of the two chat windows to include it in. - public static byte[] CreateChat(string formattedText, byte chatWindow) - { - byte[] formattedBytes = Encoding.UTF8.GetBytes(formattedText); - byte[] packet = new byte[(1 * 2) + formattedBytes.Length]; - packet[0] = PACKET_CHAT; - packet[1] = chatWindow; - Array.Copy(formattedBytes, 0, packet, 2, formattedBytes.Length); - return packet; - } - - // Creates a byte array of a packet informing the client to change the current Weather Effect. - public static byte[] CreateWeatherUpdate(string newWeather) - { - byte[] weatherBytes = Encoding.UTF8.GetBytes(newWeather); - byte[] packet = new byte[(1 * 2) + weatherBytes.Length]; - packet[0] = PACKET_WORLD; - packet[1] = WEATHER_UPDATE; - Array.Copy(weatherBytes, 0, packet, 2, weatherBytes.Length); - return packet; - } - // Creates a byte array of a packet informing the client of the current game time, and weather effect. - public static byte[] CreateTimeAndWeatherUpdate(int gameTime, int gameDay, int gameYear, string weather) - { - byte[] weatherBytes = Encoding.UTF8.GetBytes(weather); - - byte[] packet = new byte[(1 * 7) + weatherBytes.Length]; - - packet[0] = PACKET_WORLD; - // Encode current time - packet[1] = (byte)((gameTime / 64) + 20); - packet[2] = (byte)((gameTime % 64) + 20); - // Encode current day - packet[3] = (byte)((gameDay / 64) + 20); - packet[4] = (byte)((gameDay % 64) + 20); - // Encode current year - packet[5] = (byte)((gameYear / 64) + 20); - packet[6] = (byte)((gameYear % 64) + 20); - - // Copy weather information to packet - Array.Copy(weatherBytes, 0, packet, 7, weatherBytes.Length); - - return packet; - } - // Creates a byte array of a "keep alive" packet, to check if the client is still connected - // and to inform the client the server is still here too and has not crashed / disconnected the client. - public static byte[] CreateKeepAlive() - { - byte[] packet = new byte[1]; - packet[0] = PACKET_KEEP_ALIVE; - return packet; - } - // Creates a byte array of a packet to inform the client of all "Places" that exist in the world - // (as defined by gamedata json) This is used in the map view when you hover over certain areas - public static byte[] CreatePlaceData(World.Isle[] isles, World.Town[] towns, World.Area[] areas) - { - // As this information is defined by gamedata.json file - // the size of it can vary alot, so im using a List instead of a byte[] here. - List packet = new List(); - packet.Add(PACKET_AREA_DEFS); - - // Encode Towns - - foreach (World.Town town in towns) - { - byte[] townBytes = Encoding.UTF8.GetBytes(town.Name); - - packet.Add(AREA_SEPERATOR); - packet.Add(AREA_TOWN); - - packet.Add((byte)(((town.StartX - 4) / 64) + 20)); - packet.Add((byte)(((town.StartX - 4) % 64) + 20)); - - packet.Add((byte)(((town.EndX - 4) / 64) + 20)); - packet.Add((byte)(((town.EndX - 4) % 64) + 20)); - - packet.Add((byte)(((town.StartY - 1) / 64) + 20)); - packet.Add((byte)(((town.StartY - 1) % 64) + 20)); - - packet.Add((byte)(((town.EndY - 1) / 64) + 20)); - packet.Add((byte)(((town.EndY - 1) % 64) + 20)); - - - Helper.ByteArrayToByteList(townBytes, packet); - } - - // Encode Areas - - foreach (World.Area area in areas) - { - byte[] areaBytes = Encoding.UTF8.GetBytes(area.Name); - - packet.Add(AREA_SEPERATOR); - packet.Add(AREA_AREA); - - packet.Add((byte)(((area.StartX - 4) / 64) + 20)); - packet.Add((byte)(((area.StartX - 4) % 64) + 20)); - - packet.Add((byte)(((area.EndX - 4) / 64) + 20)); - packet.Add((byte)(((area.EndX - 4) % 64) + 20)); - - packet.Add((byte)(((area.StartY - 1) / 64) + 20)); - packet.Add((byte)(((area.StartY - 1) % 64) + 20)); - - packet.Add((byte)(((area.EndY - 1) / 64) + 20)); - packet.Add((byte)(((area.EndY - 1) % 64) + 20)); - - - Helper.ByteArrayToByteList(areaBytes, packet); - } - - // Encode Isles - - foreach (World.Isle isle in isles) - { - byte[] isleBytes = Encoding.UTF8.GetBytes(isle.Name); - - packet.Add(AREA_SEPERATOR); - packet.Add(AREA_ISLE); - - packet.Add((byte)(((isle.StartX - 4) / 64) + 20)); - packet.Add((byte)(((isle.StartX - 4) % 64) + 20)); - - packet.Add((byte)(((isle.EndX - 4) / 64) + 20)); - packet.Add((byte)(((isle.EndX - 4) % 64) + 20)); - - packet.Add((byte)(((isle.StartY - 1) / 64) + 20)); - packet.Add((byte)(((isle.StartY - 1) % 64) + 20)); - - packet.Add((byte)(((isle.EndY - 1) / 64) + 20)); - packet.Add((byte)(((isle.EndY - 1) % 64) + 20)); - - packet.Add((byte)isle.Tileset.ToString()[0]); - - Helper.ByteArrayToByteList(isleBytes, packet); - } - - return packet.ToArray(); - } - // Creates a byte array of a packet informing the client of the players money, total player count and, - // how many mail messages they have. - public static byte[] CreateMoneyPlayerCountAndMail(int money, int playerCount, int mail) - { - byte[] playerDataBytes = Encoding.UTF8.GetBytes(money.ToString("N0", CultureInfo.InvariantCulture) + "|" + - playerCount.ToString("N0", CultureInfo.InvariantCulture) + "|" + - mail.ToString("N0", CultureInfo.InvariantCulture) + "|"); - byte[] packet = new byte[1 + playerDataBytes.Length]; - packet[0] = PACKET_BASE_STATS; - Array.Copy(playerDataBytes, 0, packet, 1, playerDataBytes.Length); - return packet; - } - // Creates a byte array of a packet informing the client of Tile Overlay flags - // these tell the client what tiles are and are not passable, which ones the player - // should appear ontop of or under, and stuff like that. - public static byte[] CreateTileOverlayFlags(Map.TileDepth[] tileDepthFlags) - { - byte[] packet = new byte[1 + tileDepthFlags.Length]; - packet[0] = PACKET_TILE_FLAGS; - - for(int i = 0; i < tileDepthFlags.Length; i++) - { - int flag; - - if (!tileDepthFlags[i].ShowPlayer && !tileDepthFlags[i].Passable) - flag = 0; - else if (tileDepthFlags[i].ShowPlayer && !tileDepthFlags[i].Passable) - flag = 1; - else if (!tileDepthFlags[i].ShowPlayer && tileDepthFlags[i].Passable) - flag = 2; - else if (tileDepthFlags[i].ShowPlayer && tileDepthFlags[i].Passable) - flag = 3; - else - throw new Exception("Somehow, showplayers was not true or false, and passable was not true or false, this should be impossible"); - - packet[1 + i] = Convert.ToByte(flag.ToString()[0]); - } - - return packet; - } - // Creates a byte array of a packet informing the client of its current Sec Code seed and Inc values, - // Some client packets (eg minigame rewards) require this special Message Authentication Code to validate them - // Its not at all secure, you can easily just forge these packets by just implementing sec codes, but i didnt make it -- - public static byte[] CreateSecCode(byte[] SecCodeSeed, int SecCodeInc, bool Admin, bool Moderator) - { - - char userType = 'N'; // Normal? - - if (Moderator) - userType = 'M'; // Moderator - - if (Admin) - userType = 'A'; // Admin - - byte[] packet = new byte[6]; - - packet[0] = PACKET_SEC_CODE; - - packet[1] = (byte)(SecCodeSeed[0] + '!'); - packet[2] = (byte)(SecCodeSeed[1] + '!'); - packet[3] = (byte)(SecCodeSeed[2] + '!'); - packet[4] = (byte)(SecCodeInc + '!'); - - - packet[5] = (byte)userType; - - return packet; - } - // Creates a byte array of a packet to tell the client to please GET - // a certain SWF in the mod/ directory on web, and then load it as a MovieClip - // into the actual game client. - public static byte[] CreateSwfModule(string swf,byte headerByte) - { - byte[] swfBytes = Encoding.UTF8.GetBytes(swf); - byte[] packet = new byte[1 + swfBytes.Length]; - - packet[0] = headerByte; - Array.Copy(swfBytes, 0, packet, 1, swfBytes.Length); - - return packet; - } - // Creates a byte array of a packet to show the client an "Annoucement" message - // This has the exact same effect as CreateChat with CHAT_BOTTOM_RIGHT but for some reason - // the header byte is different, - // This is basically only used for MOTD. - public static byte[] CreateMotd(string announcement) - { - byte[] annouceBytes = Encoding.UTF8.GetBytes(announcement); - byte[] packet = new byte[1 + annouceBytes.Length]; - - packet[0] = PACKET_ANNOUNCEMENT; - Array.Copy(annouceBytes, 0, packet, 1, annouceBytes.Length); - - return packet; - } - // Creates a byte array of a packet informing the clent that they have been kicked from the server - // and includes a reason for them being kicked, - public static byte[] CreateKickMessage(string reason) - { - byte[] kickMsgBytes = Encoding.UTF8.GetBytes(reason); - byte[] packet = new byte[1 + kickMsgBytes.Length]; - - packet[0] = PACKET_KICK; - Array.Copy(kickMsgBytes, 0, packet, 1, kickMsgBytes.Length); - - return packet; - } - - } -} +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using HISP.Game; +using HISP.Game.SwfModules; + +namespace HISP.Server +{ + public class PacketBuilder + { + + public const byte PACKET_TERMINATOR = 0x00; + public const byte PACKET_CLIENT_TERMINATOR = 0x0A; + + public const byte PACKET_FLASH_XML_CROSSDOMAIN = 0x3C; + + public const byte PACKET_LOGIN = 0x7F; + public const byte PACKET_CHAT = 0x14; + public const byte PACKET_MOVE = 0x15; + public const byte PACKET_CLICK = 0x77; + public const byte PACKET_USERINFO = 0x81; + public const byte PACKET_WORLD = 0x7A; + public const byte PACKET_BASE_STATS = 0x7B; + public const byte PACKET_RANCH = 0x23; + public const byte PACKET_SWF_CUTSCENE = 0x29; + public const byte PACKET_SWF_MODULE_FORCE = 0x28; + public const byte PACKET_SWF_MODULE_GENTLE = 0x2A; + public const byte PACKET_PLACE_INFO = 0x1E; + public const byte PACKET_BIRDMAP = 0x76; + public const byte PACKET_HORSE = 0x19; + public const byte PACKET_AREA_DEFS = 0x79; + public const byte PACKET_ITEM_INTERACTION = 0x1E; + public const byte PACKET_ANNOUNCEMENT = 0x7E; + public const byte PACKET_TILE_FLAGS = 0x75; + public const byte PACKET_PLAYSOUND = 0x23; + public const byte PACKET_KEEP_ALIVE = 0x7C; + public const byte PACKET_DYNAMIC_BUTTON = 0x45; + public const byte PACKET_DYNAMIC_INPUT = 0x46; + public const byte PACKET_ARENA_SCORE = 0x2D; + public const byte PACKET_PLAYER = 0x18; + public const byte PACKET_INVENTORY = 0x17; + public const byte PACKET_TRANSPORT = 0x29; + public const byte PACKET_KICK = 0x80; + public const byte PACKET_LEAVE = 0x7D; + public const byte PACKET_NPC = 0x28; + public const byte PACKET_QUIT = 0x7D; + public const byte PACKET_PLAYERINFO = 0x16; + public const byte PACKET_INFORMATION = 0x28; + public const byte PACKET_WISH = 0x2C; + public const byte PACKET_SWFMODULE = 0x50; + public const byte PACKET_AUCTION = 0x24; + public const byte PACKET_PLAYER_INTERACTION = 0x2A; + public const byte PACKET_SOCIALS = 0x5A; + + public const byte SOCIALS_MENU = 0x14; + public const byte SOCIALS_USE = 0x15; + + public const byte PLAYER_INTERACTION_PROFILE = 0x14; + public const byte PLAYER_INTERACTION_TAG = 0x23; + public const byte PLAYER_INTERACTION_TRADE = 0x28; + public const byte PLAYER_INTERACTION_ADD_ITEM = 0x29; + public const byte PLAYER_INTERACTION_ACCEPT = 0x2A; + public const byte PLAYER_INTERACTION_TRADE_REJECT = 0x2B; + public const byte PLAYER_INTERACTION_ADD_BUDDY = 0x1E; + public const byte PLAYER_INTERACTION_REMOVE_BUDDY = 0x1F; + public const byte PLAYER_INTERACTION_MUTE = 0x32; + public const byte PLAYER_INTERACTION_UNMUTE = 0x33; + + public const byte AUCTION_BID_100 = 0x29; + public const byte AUCTION_BID_1K = 0x2A; + public const byte AUCTION_BID_10K = 0x2B; + public const byte AUCTION_BID_100K = 0x2C; + public const byte AUCTION_BID_1M = 0x2D; + public const byte AUCTION_BID_10M = 0x2E; + public const byte AUCITON_BID_100M = 0x2F; + + public const byte RANCH_BUY = 0x14; + public const byte RANCH_INFO = 0x16; + public const byte RANCH_CLICK = 0x17; + public const byte RANCH_UPGRADE = 0x18; + public const byte RANCH_SELL = 0x15; + public const byte RANCH_BUILD = 0x19; + public const byte RANCH_REMOVE = 0x1A; + public const byte RANCH_CLICK_NORM = 0x14; + public const byte RANCH_CLICK_BUILD = 0x15; + + public const byte HORSE_LIST = 0x0A; + public const byte HORSE_LOOK = 0x14; + public const byte HORSE_FEED = 0x15; + public const byte HORSE_ENTER_ARENA = 0x2D; + public const byte HORSE_PET = 0x18; + public const byte HORSE_PROFILE = 0x2C; + public const byte HORSE_PROFILE_EDIT = 0x14; + public const byte HORSE_TRY_CAPTURE = 0x1C; + public const byte HORSE_RELEASE = 0x19; + public const byte HORSE_TACK = 0x16; + public const byte HORSE_DRINK = 0x2B; + public const byte HORSE_GIVE_FEED = 0x1B; + public const byte HORSE_TACK_EQUIP = 0x3C; + public const byte HORSE_TACK_UNEQUIP = 0x3D; + public const byte HORSE_VET_SERVICE = 0x2A; + public const byte HORSE_VET_SERVICE_ALL = 0x2F; + public const byte HORSE_GROOM_SERVICE_ALL = 0x33; + public const byte HORSE_GROOM_SERVICE = 0x32; + public const byte HORSE_BARN_SERVICE = 0x37; + public const byte HORSE_BARN_SERVICE_ALL = 0x38; + public const byte HORSE_SHOE_IRON = 0x28; + public const byte HORSE_SHOE_STEEL = 0x29; + public const byte HORSE_SHOE_ALL = 0x2E; + public const byte HORSE_TRAIN = 0x1A; + public const byte HORSE_MOUNT = 0x46; + public const byte HORSE_DISMOUNT = 0x47; + public const byte HORSE_ESCAPE = 0x1E; + public const byte HORSE_CAUGHT = 0x1D; + + public const byte SWFMODULE_INVITE = 0x14; + public const byte SWFMODULE_ACCEPT = 0x15; + public const byte SWFMODULE_CLOSE = 0x16; + + public const byte SWFMODULE_2PLAYER_CLOSED = 0x58; + public const byte SWFMODULE_2PLAYER = 0x50; + public const byte SWFMODULE_ARENA = 0x52; + public const byte SWFMODULE_BRICKPOET = 0x5A; + public const byte SWFMODULE_DRAWINGROOM = 0x5B; + public const byte SWFMODULE_DRESSUPROOM = 0x5C; + public const byte SWFMODULE_BANDHALL = 0x51; + + public const byte DRAWINGROOM_GET_DRAWING = 0x14; + public const byte DRAWINGROOM_SAVE = 0x15; + public const byte DRAWINGROOM_LOAD = 0x16; + + public const byte BRICKPOET_LIST_ALL = 0x14; + public const byte BRICKPOET_MOVE = 0x55; + + public const byte DRESSUPROOM_LIST_ALL = 0x14; + + public const byte WISH_MONEY = 0x31; + public const byte WISH_ITEMS = 0x32; + public const byte WISH_WORLDPEACE = 0x33; + + public const byte SECCODE_QUEST = 0x32; + public const byte SECCODE_GIVE_ITEM = 0x28; + public const byte SECCODE_DELETE_ITEM = 0x29; + public const byte SECCODE_SCORE = 0x3D; + public const byte SECCODE_WINLOOSE = 0x3C; + public const byte SECCODE_TIME = 0x3E; + public const byte SECCODE_MONEY = 0x1E; + public const byte SECCODE_AWARD = 0x33; + + public const byte WINLOOSE_WIN = 0x14; + public const byte WINLOOSE_LOOSE = 0x15; + + public const byte NPC_START_CHAT = 0x14; + public const byte NPC_CONTINUE_CHAT = 0x15; + + public const byte PLAYERINFO_LEAVE = 0x16; + public const byte PLAYERINFO_UPDATE_OR_CREATE = 0x15; + public const byte PLAYERINFO_PLAYER_LIST = 0x14; + + public const byte PROFILE_WINLOOSE_LIST = 0x50; + public const byte PROFILE_HIGHSCORES_LIST = 0x51; + public const byte PROFILE_BESTTIMES_LIST = 0x52; + + public const byte VIEW_PROFILE = 0x14; + public const byte SAVE_PROFILE = 0x15; + + public const byte AREA_SEPERATOR = 0x5E; + public const byte AREA_TOWN = 0x54; + public const byte AREA_AREA = 0x41; + public const byte AREA_ISLE = 0x49; + + public const byte MOVE_UP = 0x14; + public const byte MOVE_DOWN = 0x15; + public const byte MOVE_RIGHT = 0x16; + public const byte MOVE_LEFT = 0x17; + public const byte MOVE_ESCAPE = 0x18; + public const byte MOVE_UPDATE = 0x0A; + + + public const byte CHAT_BOTTOM_LEFT = 0x14; + public const byte CHAT_BOTTOM_RIGHT = 0x15; + public const byte CHAT_DM_RIGHT = 0x16; + + public const byte ITEM_INFORMATON = 0x14; + public const byte ITEM_INFORMATON_ID = 0x15; + public const byte NPC_INFORMATION = 0x16; + + public const byte ITEM_DROP = 0x1E; + public const byte ITEM_PICKUP = 0x14; + public const byte ITEM_PICKUP_ALL = 0x15; + public const byte ITEM_BUY = 0x33; + public const byte ITEM_BUY_AND_CONSUME = 0x34; + public const byte ITEM_BUY_5 = 0x35; + public const byte ITEM_BUY_25 = 0x37; + public const byte ITEM_SELL = 0x3C; + public const byte ITEM_WRAP = 0x17; + public const byte ITEM_SELL_ALL = 0x3D; + public const byte ITEM_VIEW = 0x2A; + public const byte ITEM_LOOK = 0x4C; + public const byte ITEM_READ = 0x52; + public const byte ITEM_RIP = 0x2B; + public const byte ITEM_OPEN = 0x16; + public const byte ITEM_WEAR = 0x46; + public const byte ITEM_REMOVE = 0x47; + public const byte ITEM_CONSUME = 0x51; + public const byte ITEM_DRINK = 0x52; + public const byte ITEM_BINOCULARS = 0x5C; + public const byte ITEM_THROW = 0x1F; + public const byte ITEM_MAGNIFYING = 0x5D; + public const byte ITEM_CRAFT = 0x64; + public const byte ITEM_USE = 0x5F; + public const byte ITEM_RAKE = 0x5B; + public const byte ITEM_SHOVEL = 0x5A; + + public const byte LOGIN_INVALID_USER_PASS = 0x15; + public const byte LOGIN_CUSTOM_MESSAGE = 0x16; + public const byte LOGIN_SUCCESS = 0x14; + + public const byte WEATHER_UPDATE = 0x13; + + public const byte DIRECTION_UP = 0; + public const byte DIRECTION_RIGHT = 1; + public const byte DIRECTION_DOWN = 2; + public const byte DIRECTION_LEFT = 3; + public const byte DIRECTION_TELEPORT = 4; + public const byte DIRECTION_NONE = 10; + + public static byte[] Create2PlayerClose() + { + byte[] packet = new byte[3]; + packet[0] = PACKET_SWFMODULE; + packet[1] = SWFMODULE_2PLAYER_CLOSED; + packet[2] = PACKET_TERMINATOR; + + return packet; + } + public static byte[] CreateDressupRoomPeiceMove(int peiceId, double x, double y, bool active) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_SWFMODULE); + string packetStr = ""; + packetStr += peiceId.ToString() + "|"; + if (active) + { + packetStr += x.ToString() + "|"; + packetStr += y.ToString() + "|"; + } + else + { + packetStr += "D|D|"; + } + packetStr += "^"; + + byte[] packetBytes = Encoding.UTF8.GetBytes(packetStr); + ms.Write(packetBytes, 0x00, packetBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + ms.Seek(0x00, SeekOrigin.Begin); + byte[] response = ms.ToArray(); + ms.Dispose(); + return response; + } + public static byte[] CreateDressupRoomPeiceResponse(Dressup.DressupPeice[] dressupPeices) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_SWFMODULE); + string packetStr = ""; + foreach(Dressup.DressupPeice peice in dressupPeices) + { + if (!peice.Active) + continue; + + packetStr += peice.PeiceId.ToString() + "|"; + packetStr += peice.X.ToString() + "|"; + packetStr += peice.Y.ToString() + "|"; + packetStr += "^"; + } + + byte[] packetBytes = Encoding.UTF8.GetBytes(packetStr); + ms.Write(packetBytes, 0x00, packetBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + ms.Seek(0x00, SeekOrigin.Begin); + byte[] response = ms.ToArray(); + ms.Dispose(); + return response; + } + + public static byte[] CreateForwardedSwfRequest(byte[] request) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_SWFMODULE); + ms.Write(request, 0x2, request.Length - 0x4); + ms.WriteByte(PACKET_TERMINATOR); + ms.Seek(0x00, SeekOrigin.Begin); + byte[] response = ms.ToArray(); + ms.Dispose(); + return response; + } + + public static byte[] CreateBirdMap(int playerX, int playerY) + { + MemoryStream ms = new MemoryStream(); + + int xstart = playerX - 24; + int ystart = playerY - 15; + + ms.WriteByte(PACKET_BIRDMAP); + + for (int rely = 0; rely <= 30; rely++) + { + for (int relx = 0; relx <= 48; relx++) + { + int tileId = Map.GetTileId(xstart + relx, ystart + rely, false); + int otileId = Map.GetTileId(xstart + relx, ystart + rely, true); + + if (tileId >= 190) + { + ms.WriteByte((byte)190); + tileId -= 100; + } + ms.WriteByte((byte)tileId); + + if (otileId >= 190) + { + ms.WriteByte((byte)190); + otileId -= 100; + } + ms.WriteByte((byte)otileId); + + } + } + + ms.WriteByte(PACKET_TERMINATOR); + ms.Seek(0x00, SeekOrigin.Begin); + return ms.ToArray(); + } + public static byte[] CreateDrawingUpdatePacket(string Drawing) + { + byte[] drawingBytes = Encoding.UTF8.GetBytes(Drawing); + byte[] packet = new byte[(1 * 2) + drawingBytes.Length]; + + packet[0] = PACKET_SWFMODULE; + Array.Copy(drawingBytes, 0, packet, 1, drawingBytes.Length); + packet[packet.Length-1] = PACKET_TERMINATOR; + + return packet; + } + public static byte[] CreateBrickPoetMovePacket(Brickpoet.PoetryPeice peice) + { + string packetStr = "|"; + packetStr += peice.Id + "|"; + packetStr += peice.X + "|"; + packetStr += peice.Y + "|"; + packetStr += "^"; + + byte[] infoBytes = Encoding.UTF8.GetBytes(packetStr); + byte[] packet = new byte[(1 * 3) + infoBytes.Length]; + + packet[0] = PACKET_SWFMODULE; + packet[1] = BRICKPOET_MOVE; + + Array.Copy(infoBytes, 0, packet, 2, infoBytes.Length); + + packet[packet.Length-1] = PACKET_TERMINATOR; + + return packet; + } + public static byte[] CreateBrickPoetListPacket(Brickpoet.PoetryPeice[] room) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_SWFMODULE); + string packetStr = ""; + foreach(Brickpoet.PoetryPeice peice in room) + { + packetStr += "A"; + packetStr += "|"; + packetStr += peice.Id; + packetStr += "|"; + packetStr += peice.Word.ToUpper(); + packetStr += "|"; + packetStr += peice.X; + packetStr += "|"; + packetStr += peice.Y; + packetStr += "|"; + packetStr += "^"; + } + byte[] packetBytes = Encoding.UTF8.GetBytes(packetStr); + ms.Write(packetBytes, 0x00, packetBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + return ms.ToArray(); + } + public static byte[] CreatePlaysoundPacket(string sound) + { + byte[] soundBytes = Encoding.UTF8.GetBytes(sound); + byte[] packet = new byte[(1 * 2) + soundBytes.Length]; + + packet[0] = PACKET_PLAYSOUND; + + Array.Copy(soundBytes, 0, packet, 1, soundBytes.Length); + + packet[packet.Length - 1] = PACKET_TERMINATOR; + + return packet; + } + public static byte[] CreatePlayerLeavePacket(string username) + { + byte[] userBytes = Encoding.UTF8.GetBytes(username); + byte[] packet = new byte[(1 * 3) + userBytes.Length]; + + packet[0] = PACKET_PLAYERINFO; + packet[1] = PLAYERINFO_LEAVE; + + Array.Copy(userBytes, 0, packet, 2, userBytes.Length); + + packet[packet.Length - 1] = PACKET_TERMINATOR; + + return packet; + } + public static byte[] CreatePlayerInfoUpdateOrCreate(int x, int y, int facing, int charId, string username) + { + byte[] userBytes = Encoding.UTF8.GetBytes(username); + byte[] packet = new byte[(1 * 10) + userBytes.Length]; + + packet[0] = PACKET_PLAYERINFO; + packet[1] = PLAYERINFO_UPDATE_OR_CREATE; + + packet[2] = (byte)(((x - 4) / 64) + 20); + packet[3] = (byte)(((x - 4) % 64) + 20); + + packet[4] = (byte)(((y - 1) / 64) + 20); + packet[5] = (byte)(((y - 1) % 64) + 20); + + packet[6] = (byte)(facing + 20); + + packet[7] = (byte)((charId / 64) + 20); + packet[8] = (byte)((charId % 64) + 20); + + Array.Copy(userBytes, 0, packet, 9, userBytes.Length); + + packet[packet.Length-1] = PACKET_TERMINATOR; + + return packet; + } + + public static byte[] CreateLoginPacket(bool Success, string message="") + { + byte[] loginFailMessage = Encoding.UTF8.GetBytes(message); + byte[] packet = new byte[(1 * 3) + loginFailMessage.Length]; + + packet[0] = PACKET_LOGIN; + if (message != "") + packet[1] = LOGIN_CUSTOM_MESSAGE; + else if (Success) + packet[1] = LOGIN_SUCCESS; + else + packet[1] = LOGIN_INVALID_USER_PASS; + + Array.Copy(loginFailMessage, 0, packet, 2, loginFailMessage.Length); + + packet[packet.Length-1] = PACKET_TERMINATOR; + + return packet; + } + + public static byte[] CreateProfilePacket(string userProfile) + { + byte[] profileBytes = Encoding.UTF8.GetBytes(userProfile); + byte[] packet = new byte[(1 * 2) + profileBytes.Length]; + + packet[0] = PACKET_PLAYER; + Array.Copy(profileBytes, 0, packet, 1, profileBytes.Length); + packet[packet.Length-1] = PACKET_TERMINATOR; + + return packet; + } + + public static byte[] CreateMovementPacket(int x, int y, int charId, int facing, int direction, bool walk) + { + // Header information + List packet = new List(); + + packet.Add(PACKET_MOVE); + + packet.Add((byte)(((x-4) / 64) + 20)); //1 + packet.Add((byte)(((x-4) % 64) + 20)); //2 + + packet.Add((byte)(((y-1) / 64) + 20)); //3 + packet.Add((byte)(((y-1) % 64) + 20)); //4 + + packet.Add((byte)(facing + 20)); //5 + + packet.Add((byte)((charId / 64) + 20)); //6 + packet.Add((byte)((charId % 64) + 20)); //7 + packet.Add((byte)(direction + 20)); //8 + packet.Add((byte)(Convert.ToInt32(walk) + 20)); //9 + + + // Map Data + bool moveTwo = false; + if(direction >= 20) + { + direction -= 20; + moveTwo = true; + } + + int ystart = y - 4; + int xstart = x - 6; + int xend = xstart + 12; + int yend = ystart + 9; + + if (direction == DIRECTION_UP) + { + int totalY = 0; + if (moveTwo) + { + ystart++; + totalY = 1; + } + + for (int yy = ystart; yy >= ystart - totalY; yy--) + { + for (int xx = xstart; xx <= xend; xx++) + { + int tileId = Map.GetTileId(xx, yy, false); + int otileId = Map.GetTileId(xx, yy, true); + + if (tileId >= 190) + { + packet.Add((byte)190); + tileId -= 100; + } + packet.Add((byte)tileId); + + if (otileId >= 190) + { + packet.Add((byte)190); + otileId -= 100; + } + packet.Add((byte)otileId); + } + } + } + + if (direction == DIRECTION_LEFT) + { + int totalX = 0; + if (moveTwo) + { + xstart++; + totalX = 1; + } + + for (int xx = xstart; xx >= xstart - totalX; xx--) + { + for (int yy = ystart; yy <= yend; yy++) + { + int tileId = Map.GetTileId(xx, yy, false); + int otileId = Map.GetTileId(xx, yy, true); + + + + if (tileId >= 190) + { + packet.Add((byte)190); + tileId -= 100; + } + packet.Add((byte)tileId); + + if (otileId >= 190) + { + packet.Add((byte)190); + otileId -= 100; + } + packet.Add((byte)otileId); + } + } + } + + + if (direction == DIRECTION_RIGHT) + { + int totalX = 0; + if (moveTwo) + { + xend--; + totalX = 1; + } + + for (int xx = xend; xx <= xend + totalX; xx++) + { + + for (int yy = ystart; yy <= yend; yy++) + { + int tileId = Map.GetTileId(xx, yy, false); + int otileId = Map.GetTileId(xx, yy, true); + + + if (tileId >= 190) + { + packet.Add((byte)190); + tileId -= 100; + } + packet.Add((byte)tileId); + + if (otileId >= 190) + { + packet.Add((byte)190); + otileId -= 100; + } + packet.Add((byte)otileId); + + } + } + } + + if (direction == DIRECTION_DOWN) + { + int totalY = 0; + if (moveTwo) + { + yend--; + totalY = 1; + } + + for (int yy = yend; yy <= yend + totalY; yy++) + { + + for (int xx = xstart; xx <= xend; xx++) + { + int tileId = Map.GetTileId(xx, yy, false); + int otileId = Map.GetTileId(xx, yy, true); + + + if (tileId >= 190) + { + packet.Add((byte)190); + tileId -= 100; + } + packet.Add((byte)tileId); + + if (otileId >= 190) + { + packet.Add((byte)190); + otileId -= 100; + } + packet.Add((byte)otileId); + + } + } + + } + if (direction == DIRECTION_TELEPORT) + { + for(int rely = 0; rely <= 9; rely++) + { + for (int relx = 0; relx <= 12; relx++) + { + int tileId = Map.GetTileId(xstart + relx, ystart + rely, false); + int otileId = Map.GetTileId(xstart + relx, ystart + rely, true); + + if(tileId >= 190) + { + packet.Add((byte)190); + tileId -= 100; + } + packet.Add((byte)tileId); + + if (otileId >= 190) + { + packet.Add((byte)190); + otileId -= 100; + } + packet.Add((byte)otileId); + + } + } + + } + packet.Add(PACKET_TERMINATOR); + + return packet.ToArray(); + } + + public static byte[] CreateClickTileInfoPacket(string text) + { + byte[] strBytes = Encoding.UTF8.GetBytes(text); + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_CLICK); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateMetaPacket(string formattedText) + { + byte[] strBytes = Encoding.UTF8.GetBytes(formattedText); + + MemoryStream ms = new MemoryStream(); + + ms.WriteByte(PACKET_PLACE_INFO); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + public static byte[] CreateChat(string formattedText, byte chatWindow) + { + byte[] strBytes = Encoding.UTF8.GetBytes(formattedText); + + MemoryStream ms = new MemoryStream(); + + ms.WriteByte(PACKET_CHAT); + ms.WriteByte(chatWindow); + + ms.Write(strBytes, 0x00, strBytes.Length); + + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateWeatherUpdatePacket(string newWeather) + { + byte[] strBytes = Encoding.UTF8.GetBytes(newWeather); + + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_WORLD); + ms.WriteByte(WEATHER_UPDATE); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateWorldData(int gameTime, int gameDay, int gameYear, string weather) + { + byte[] strBytes = Encoding.UTF8.GetBytes(weather); + + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_WORLD); + + ms.WriteByte((byte)((gameTime / 64) + 20)); + ms.WriteByte((byte)((gameTime % 64) + 20)); + + ms.WriteByte((byte)((gameDay / 64) + 20)); + ms.WriteByte((byte)((gameDay % 64) + 20)); + + ms.WriteByte((byte)((gameYear / 64) + 20)); + ms.WriteByte((byte)((gameYear % 64) + 20)); + + ms.Write(strBytes,0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateKeepAlive() + { + MemoryStream ms = new MemoryStream(); + + ms.WriteByte(PACKET_KEEP_ALIVE); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + public static byte[] CreatePlaceData(World.Isle[] isles, World.Town[] towns, World.Area[] areas) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_AREA_DEFS); + + // Write Towns + + foreach (World.Town town in towns) + { + byte[] strBytes = Encoding.UTF8.GetBytes(town.Name); + + ms.WriteByte(AREA_SEPERATOR); + ms.WriteByte(AREA_TOWN); + + ms.WriteByte((byte)(((town.StartX - 4) / 64) + 20)); + ms.WriteByte((byte)(((town.StartX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((town.EndX - 4) / 64) + 20)); + ms.WriteByte((byte)(((town.EndX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((town.StartY - 1) / 64) + 20)); + ms.WriteByte((byte)(((town.StartY - 1) % 64) + 20)); + + ms.WriteByte((byte)(((town.EndY - 1) / 64) + 20)); + ms.WriteByte((byte)(((town.EndY - 1) % 64) + 20)); + + + ms.Write(strBytes, 0x00, strBytes.Length); + } + + // Write Areas + + foreach (World.Area area in areas) + { + byte[] strBytes = Encoding.UTF8.GetBytes(area.Name); + + ms.WriteByte(AREA_SEPERATOR); + ms.WriteByte(AREA_AREA); + + ms.WriteByte((byte)(((area.StartX - 4) / 64) + 20)); + ms.WriteByte((byte)(((area.StartX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((area.EndX - 4) / 64) + 20)); + ms.WriteByte((byte)(((area.EndX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((area.StartY - 1) / 64) + 20)); + ms.WriteByte((byte)(((area.StartY - 1) % 64) + 20)); + + ms.WriteByte((byte)(((area.EndY - 1) / 64) + 20)); + ms.WriteByte((byte)(((area.EndY - 1) % 64) + 20)); + + + ms.Write(strBytes, 0x00, strBytes.Length); + } + + // Write Isles + + foreach (World.Isle isle in isles) + { + byte[] strBytes = Encoding.UTF8.GetBytes(isle.Name); + + ms.WriteByte(AREA_SEPERATOR); + ms.WriteByte(AREA_ISLE); + + ms.WriteByte((byte)(((isle.StartX - 4) / 64) + 20)); + ms.WriteByte((byte)(((isle.StartX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((isle.EndX - 4) / 64) + 20)); + ms.WriteByte((byte)(((isle.EndX - 4) % 64) + 20)); + + ms.WriteByte((byte)(((isle.StartY - 1) / 64) + 20)); + ms.WriteByte((byte)(((isle.StartY - 1) % 64) + 20)); + + ms.WriteByte((byte)(((isle.EndY - 1) / 64) + 20)); + ms.WriteByte((byte)(((isle.EndY - 1) % 64) + 20)); + + ms.WriteByte((byte)isle.Tileset.ToString()[0]); + + ms.Write(strBytes, 0x00, strBytes.Length); + } + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreatePlayerData(int money, int playerCount, int mail) + { + byte[] moneyStrBytes = Encoding.UTF8.GetBytes(money.ToString("N0", CultureInfo.InvariantCulture)); + byte[] playerStrBytes = Encoding.UTF8.GetBytes(playerCount.ToString("N0", CultureInfo.InvariantCulture)); + byte[] mailStrBytes = Encoding.UTF8.GetBytes(mail.ToString("N0", CultureInfo.InvariantCulture)); + + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_BASE_STATS); + ms.Write(moneyStrBytes, 0x00, moneyStrBytes.Length); + ms.WriteByte((byte)'|'); + ms.Write(playerStrBytes, 0x00, playerStrBytes.Length); + ms.WriteByte((byte)'|'); + ms.Write(mailStrBytes, 0x00, mailStrBytes.Length); + ms.WriteByte((byte)'|'); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateTileOverlayFlags(int[] tileDepthFlags) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_TILE_FLAGS); + + foreach(int tileDepthFlag in tileDepthFlags) + { + ms.WriteByte((byte)tileDepthFlag.ToString()[0]); + } + + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateSecCode(byte[] SecCodeSeed, int SecCodeInc, bool Admin, bool Moderator) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_USERINFO); + + ms.WriteByte((byte)(SecCodeSeed[0] + 33)); + ms.WriteByte((byte)(SecCodeSeed[1] + 33)); + ms.WriteByte((byte)(SecCodeSeed[2] + 33)); + ms.WriteByte((byte)(SecCodeInc + 33)); + + char userType = 'N'; // Normal? + if (Moderator) + userType = 'M'; + if (Admin) + userType = 'A'; + + ms.WriteByte((byte)userType); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + public static byte[] CreateSwfModulePacket(string swf,byte type) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(type); + byte[] strBytes = Encoding.UTF8.GetBytes(swf); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + return Packet; + } + public static byte[] CreateAnnouncement(string announcement) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_ANNOUNCEMENT); + byte[] strBytes = Encoding.UTF8.GetBytes(announcement); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateKickMessage(string reason) + { + MemoryStream ms = new MemoryStream(); + ms.WriteByte(PACKET_KICK); + byte[] strBytes = Encoding.UTF8.GetBytes(reason); + ms.Write(strBytes, 0x00, strBytes.Length); + ms.WriteByte(PACKET_TERMINATOR); + + ms.Seek(0x00, SeekOrigin.Begin); + byte[] Packet = ms.ToArray(); + ms.Dispose(); + + return Packet; + } + + public static byte[] CreateMotd() + { + string formattedMotd = Messages.FormatMOTD(); + return CreateAnnouncement(formattedMotd); + } + public static byte[] CreateWelcomeMessage(string username) + { + string formattedStr = Messages.FormatWelcomeMessage(username); + return CreateChat(formattedStr, CHAT_BOTTOM_RIGHT); + } + + } +} diff --git a/HorseIsleServer/LibHISP/Server/ServerVersion.cs b/HorseIsleServer/LibHISP/Server/ServerVersion.cs old mode 100755 new mode 100644 index 305affc..1131528 --- a/HorseIsleServer/LibHISP/Server/ServerVersion.cs +++ b/HorseIsleServer/LibHISP/Server/ServerVersion.cs @@ -1,78 +1,68 @@ -using System; -using System.Globalization; -using HISP.Properties; - -namespace HISP.Server -{ - public class ServerVersion - { - - public static string PRODUCT = "HISP"; - - public static string GetArchitecture() - { -#if ARCH_ANYCPU - return "ANYCPU"; -#elif ARCH_X86_64 - return "x86_64"; -#elif ARCH_X86 - return "x86"; -#elif ARCH_ARM - return "ARM"; -#elif ARCH_ARM64 - return "ARM64"; -#else - return "UNK_ARCH"; -#endif - } - public static string GetPlatform() - { -#if OS_DEBUG - return "DEBUG"; -#elif OS_WINDOWS - return "WINDOWS"; -#elif OS_ANDROID - return "ANDROID"; -#elif OS_IOS - return "IOS"; -#elif OS_LINUX - return "LINUX"; -#elif OS_MACOS - return "MACOS"; -#else - return "UNKNWON"; -#endif - - } - public static string GetVersionString() - { - return Resources.GitTag.Replace("\r", "").Replace("\n", "").ToString().Trim(); - } - public static string GetBranch() - { - return Resources.GitBranch.Replace("\r", "").Replace("\n", "").ToString().Trim(); - } - public static string GetBuildDate() - { - return Resources.BuildDate.Replace("\r", "").Replace("\n", "").ToString().Trim(); - } - public static string GetBuildTime() - { - return Resources.BuildTime.Replace("\r", "").Replace("\n", "").ToString().Trim(); - } - - public static string GetCommitHashVersion() - { - return UInt16.Parse(Resources.GitCommit.Substring(0, 4), NumberStyles.HexNumber).ToString(); - } - - public static string GetCommitHash(int TotalBytes) - { - return Resources.GitCommit.Substring(0, TotalBytes).Replace("\r", "").Replace("\n", "").ToString().Trim(); - } - public static string GetBuildString() - { - return PRODUCT + " " + GetVersionString() + " " + GetBranch() + "@" + GetCommitHash(6) + " (" + GetArchitecture() + "; " + GetPlatform() + "); Built @ " + GetBuildDate() + " " + GetBuildTime(); - } - } -} +using HISP.Properties; + +namespace HISP.Server +{ + public class ServerVersion + { + + public static string PRODUCT = "HISP"; + + public static string GetArchitecture() + { +#if ARCH_ANYCPU + return "ANYCPU"; +#elif ARCH_X86_64 + return "x86_64"; +#elif ARCH_X86 + return "x86"; +#elif ARCH_ARM + return "ARM"; +#elif ARCH_ARM64 + return "ARM64"; +#else + return "UNK_ARCH"; +#endif + } + public static string GetPlatform() + { +#if OS_DEBUG + return "DEBUG"; +#elif OS_WINDOWS + return "WINDOWS"; +#elif OS_ANDROID + return "ANDROID"; +#elif OS_LINUX + return "LINUX"; +#elif OS_MACOS + return "MACOS"; +#else + return "UNK_PLATFORM"; +#endif + + } + public static string GetVersionString() + { + return Resources.GitTag.Replace("\r", "").Replace("\n", ""); + } + public static string GetBranch() + { + return Resources.GitBranch.Replace("\r", "").Replace("\n", ""); + } + public static string GetBuildDate() + { + return Resources.BuildDate.Replace("\r", "").Replace("\n", ""); + } + public static string GetBuildTime() + { + return Resources.BuildTime.Replace("\r", "").Replace("\n", ""); + } + public static string GetCommitHash(int TotalBytes) + { + return Resources.GitCommit.Substring(0, TotalBytes).Replace("\r", "").Replace("\n", ""); + } + public static string GetBuildString() + { + return PRODUCT + " " + GetVersionString() + " `" + GetBranch() + "@" + GetCommitHash(7) + "`; (" + GetArchitecture() + "; " + GetPlatform() + "); Built on " + GetBuildDate() + " at " + GetBuildTime(); + } + } +} diff --git a/HorseIsleServer/LibHISP/Server/Util.cs b/HorseIsleServer/LibHISP/Server/Util.cs new file mode 100644 index 0000000..db8bb22 --- /dev/null +++ b/HorseIsleServer/LibHISP/Server/Util.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace HISP.Server +{ + public class Util + { + // Thanks Stackoverflow (https://stackoverflow.com/questions/321370/how-can-i-convert-a-hex-string-to-a-byte-array) + private static int getHexVal(char hex) + { + int val = (int)hex; + return val - (val < 58 ? 48 : (val < 97 ? 55 : 87)); + } + public static byte[] StringToByteArray(string hex) + { + if (hex.Length % 2 == 1) + throw new ArgumentException("The binary key cannot have an odd number of digits"); + + byte[] arr = new byte[hex.Length >> 1]; + + for (int i = 0; i < hex.Length >> 1; ++i) + { + arr[i] = (byte)((getHexVal(hex[i << 1]) << 4) + (getHexVal(hex[(i << 1) + 1]))); + } + + return arr; + } + + + + public static double PointsToDistance(int x1, int y1, int x2, int y2) + { + return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)); + } + public static string CapitalizeFirstLetter(string str) + { + char firstChar = char.ToUpper(str[0]); + return firstChar + str.Substring(1); + } + public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) + { + // Unix timestamp is seconds past epoch + System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToUniversalTime(); + return dtDateTime; + } + + public static void ByteArrayToByteList(byte[] byteArray, List byteList) + { + byteList.AddRange(byteArray.ToList()); + } + } +} diff --git a/HorseIsleServer/LibHISP/Util/Helper.cs b/HorseIsleServer/LibHISP/Util/Helper.cs deleted file mode 100644 index a3a49a9..0000000 --- a/HorseIsleServer/LibHISP/Util/Helper.cs +++ /dev/null @@ -1,108 +0,0 @@ -using HISP.Server; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Sockets; - -namespace HISP.Util -{ - public class Helper - { - // Thanks Stackoverflow (https://stackoverflow.com/questions/321370/how-can-i-convert-a-hex-string-to-a-byte-array) - private static int getHexVal(char hex) - { - int val = (int)hex; - return val - (val < 58 ? 48 : (val < 97 ? 55 : 87)); - } - public static byte[] StringToByteArray(string hex) - { - if (hex.Length % 2 == 1) - throw new ArgumentException("The binary key cannot have an odd number of digits"); - - byte[] arr = new byte[hex.Length >> 1]; - - for (int i = 0; i < hex.Length >> 1; ++i) - { - arr[i] = (byte)((getHexVal(hex[i << 1]) << 4) + (getHexVal(hex[(i << 1) + 1]))); - } - - return arr; - } - - public static double PointsToDistance(int x1, int y1, int x2, int y2) - { - return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2)); - } - public static string CapitalizeFirstLetter(string str) - { - char firstChar = char.ToUpper(str[0]); - return firstChar + str.Substring(1); - } - public static int GetMonthsBetweenTwoDateTimes(DateTime from, DateTime to) - { - if (from > to) return GetMonthsBetweenTwoDateTimes(to, from); - int monthDiff = Math.Abs((to.Year * 12 + (to.Month)) - (from.Year * 12 + (from.Month))); - return monthDiff; - - } - public static DateTime UnixTimeStampToDateTime(double unixTimeStamp) - { - // Unix timestamp is seconds past epoch - DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - dtDateTime = dtDateTime.AddSeconds(unixTimeStamp).ToUniversalTime(); - return dtDateTime; - } - - public static bool ByteArrayStartsWith(byte[] byteArray, byte[] searchValue) - { - if (byteArray.Length < searchValue.Length) return false; - - byte[] buffer = new byte[searchValue.Length]; - Array.ConstrainedCopy(byteArray, 0, buffer, 0, searchValue.Length); - - return buffer.SequenceEqual(searchValue); - } - - public static bool ByteArrayEndsWith(byte[] byteArray, byte[] searchValue) - { - if (searchValue.Length > byteArray.Length) return false; - - byte[] buffer = new byte[searchValue.Length]; - Array.ConstrainedCopy(byteArray, (byteArray.Length - searchValue.Length), buffer, 0, searchValue.Length); - - return buffer.SequenceEqual(searchValue); - } - - public static void ByteArrayToByteList(byte[] byteArray, List byteList) - { - byteList.AddRange(byteArray.ToList()); - } - - public static string RandomString(string allowedCharacters) - { - int length = GameServer.RandomNumberGenerator.Next(7, 16); - string str = ""; - for (int i = 0; i < length; i++) - str += allowedCharacters[GameServer.RandomNumberGenerator.Next(0, allowedCharacters.Length - 1)]; - - return str; - } - public static string ReverseString(string str) - { - char[] charArray = str.ToCharArray(); - Array.Reverse(charArray); - string newStr = new string(charArray); - - return newStr; - } - - public static string GetIp(EndPoint ep) - { - string endPointIp = ep.ToString(); - if (endPointIp.Contains(":")) - endPointIp = endPointIp.Substring(0, endPointIp.IndexOf(":")); - return endPointIp; - } - } -} diff --git a/HorseIsleServer/LibHISP/Util/ThreadSafeList.cs b/HorseIsleServer/LibHISP/Util/ThreadSafeList.cs deleted file mode 100644 index 67e27ed..0000000 --- a/HorseIsleServer/LibHISP/Util/ThreadSafeList.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Threading; - -namespace HISP.Util -{ - public class ThreadSafeList : List - { - private Mutex listLock = new Mutex(); - new public void AddRange(IEnumerable collection) - { - listLock.WaitOne(); - base.AddRange(collection); - listLock.ReleaseMutex(); - } - new public void Add(T value) - { - listLock.WaitOne(); - base.Add(value); - listLock.ReleaseMutex(); - } - new public void Clear() - { - listLock.WaitOne(); - base.Clear(); - listLock.ReleaseMutex(); - } - - new public bool Contains(T value) - { - listLock.WaitOne(); - bool test = base.Contains(value); - listLock.ReleaseMutex(); - - return test; - } - new public IEnumerator GetEnumerator() - { - listLock.WaitOne(); - IEnumerator res = base.ToArray().GetEnumerator(); - listLock.ReleaseMutex(); - return res; - } - - new public void Insert(int index, T value) - { - listLock.WaitOne(); - base.Insert(index, value); - listLock.ReleaseMutex(); - } - - new public void Remove(T value) - { - listLock.WaitOne(); - base.Remove(value); - listLock.ReleaseMutex(); - } - - new public void RemoveAt(int index) - { - listLock.WaitOne(); - base.RemoveAt(index); - listLock.ReleaseMutex(); - } - - } -} diff --git a/HorseIsleServer/LibHISP/prebuild.csx b/HorseIsleServer/LibHISP/prebuild.csx deleted file mode 100644 index 6dcc796..0000000 --- a/HorseIsleServer/LibHISP/prebuild.csx +++ /dev/null @@ -1,139 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; - - -// Set Working Directory -private static string SOLUTION_DIR = Path.GetDirectoryName(Path.GetDirectoryName(GetSourceFile())); -Directory.SetCurrentDirectory(SOLUTION_DIR); - -private static string VERSIONING_FOLDER = Path.Combine("LibHISP", "Resources", "Versioning"); - -// Defaults (for if git isn't installed) -private static string COMMIT_HASH = "0000000000000000000000000000000000000000"; -private static string COMMIT_TAG = "v0.0.0"; -private static string COMMIT_BRANCH = "master"; - - -// Get Build Date -private static string COMMIT_DATE = DateTime.UtcNow.ToString("dd/MM/yyyyy"); -private static string COMMIT_TIME = DateTime.UtcNow.ToString("H:M:s"); - -// IDK how this works, found it on stackoverflow, but it returns the path to the prebuild.csx -private static string GetSourceFile([CallerFilePath] string file = "") -{ - return file; -} - -// Updates version inside a AssemblyInfo.cs file -private static void UpdateAsmInfo(string assemblyInfoFile) -{ - string assembly_version = DetermineAssemblyVersion(); - - Console.WriteLine("Updating Verson inside: " + assemblyInfoFile); - string[] lines = File.ReadAllLines(assemblyInfoFile); - for(int i = 0; i < lines.Length; i++) - { - if (lines[i].StartsWith("[assembly: AssemblyVersion(\"")) - { - lines[i] = "[assembly: AssemblyVersion(\"" + assembly_version + "\")]"; - } - - else if (lines[i].StartsWith("[assembly: AssemblyFileVersion(\"")) - { - lines[i] = "[assembly: AssemblyFileVersion(\"" + assembly_version + "\")]"; - } - } - - File.WriteAllLines(assemblyInfoFile, lines); -} - - -// Create "versioning" folder -public static void CreateVersioningFolder() -{ - if (!Directory.Exists(VERSIONING_FOLDER)) - { - Directory.CreateDirectory(VERSIONING_FOLDER); - } -} - -// Function for running a process -public static string StartProcess(string[] cmd) -{ - using (Process proc = new Process()) - { - proc.StartInfo.FileName = cmd[0]; - proc.StartInfo.RedirectStandardOutput = true; - proc.StartInfo.RedirectStandardError = true; - proc.StartInfo.UseShellExecute = false; - proc.StartInfo.CreateNoWindow = true; - proc.StartInfo.Arguments = String.Join(" ", cmd.Skip(1).ToArray()); - proc.Start(); - string output = proc.StandardOutput.ReadToEnd().Replace("\r", "").Replace("\n", ""); - return output; - } -} - -// Run git to determine version -private static void RunGit() -{ - try - { - COMMIT_HASH = StartProcess(new string[] { "git", "rev-parse", "--verify", "HEAD" }); - COMMIT_TAG = StartProcess(new string[] { "git", "describe", "--abbrev=0", "--tags" }); - COMMIT_TAG += "." + StartProcess(new string[] { "git", "rev-list", COMMIT_TAG + "..HEAD", "--count" }); - COMMIT_BRANCH = StartProcess(new string[] { "git", "branch", "--show-current" }); - } catch (Exception e) { Console.Error.WriteLine(e.Message); } -} - -// Write Resources to Versioning Folder -private static void WriteResources() -{ - File.WriteAllText(Path.Combine(VERSIONING_FOLDER, "GitCommit"), COMMIT_HASH); - File.WriteAllText(Path.Combine(VERSIONING_FOLDER, "GitTag" ), COMMIT_TAG); - File.WriteAllText(Path.Combine(VERSIONING_FOLDER, "GitBranch"), COMMIT_BRANCH); - File.WriteAllText(Path.Combine(VERSIONING_FOLDER, "BuildDate"), COMMIT_DATE); - File.WriteAllText(Path.Combine(VERSIONING_FOLDER, "BuildTime"), COMMIT_TIME); - -} - -// Find assembly version based on commit tag -private static string DetermineAssemblyVersion() -{ - List points = COMMIT_TAG.Replace("v", "").Split('.').ToList(); - while(points.Count < 4) - { - points.Add("0"); - } - return String.Join(".", points.ToArray()); -} - -private static void UpdateVersionInControlFile(string controlFile) -{ - Console.WriteLine("Updating Verson inside: " + controlFile); - string[] lines = File.ReadAllLines(controlFile); - for (int i = 0; i < lines.Length; i++) - { - if (lines[i].StartsWith("Version: ")) - { - lines[i] = "Version: " + COMMIT_TAG.Replace("v", ""); - } - } - File.WriteAllLines(controlFile, lines); -} - -CreateVersioningFolder(); -RunGit(); -WriteResources(); - -// Update AssemblyInfo.cs files -UpdateAsmInfo(Path.Combine("LibHISP", "Properties", "AssemblyInfo.cs")); -UpdateAsmInfo(Path.Combine("MPN00BS", "Properties", "AssemblyInfo.cs")); -UpdateAsmInfo(Path.Combine("HISPd", "Properties", "AssemblyInfo.cs")); - -// Update control file in dpkg. -UpdateVersionInControlFile(Path.Combine("HISPd", "Resources", "DEBIAN", "control")); \ No newline at end of file diff --git a/HorseIsleServer/LibHISP/prebuild.py b/HorseIsleServer/LibHISP/prebuild.py deleted file mode 100644 index 2e1294c..0000000 --- a/HorseIsleServer/LibHISP/prebuild.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/python3 - -import os -import subprocess -import time -import datetime -import binascii - -os.chdir(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) - -# Updates version inside a AssemblyInfo.cs file -def update_asm_info(assemblyinfofile): - global commit_hash - global commit_tag - global commit_branch - global assembly_version - print("Updating Verson inside: "+assemblyinfofile) - lines = open(assemblyinfofile, "rb").readlines() - for i in range(0,len(lines)): - if lines[i].startswith(b"[assembly: AssemblyVersion(\""): - lines[i] = b"[assembly: AssemblyVersion(\""+bytes(assembly_version, "UTF-8")+b"\")]\r\n" - if lines[i].startswith(b"[assembly: AssemblyFileVersion(\""): - lines[i] = b"[assembly: AssemblyFileVersion(\""+bytes(assembly_version, "UTF-8")+b"\")]\r\n" - open(assemblyinfofile, "wb").writelines(lines) - - -# Create "versioning" folder -try: - versioning_folder = os.path.join("LibHISP", "Resources", "Versioning") - if not os.path.exists(versioning_folder): - os.mkdir(versioning_folder) -except FileExistsError: - pass - -# Defaults (for if git isn't installed) - -commit_hash = "0"*40 -commit_tag = "v0.0.0" -commit_branch = "master" - -# Run git to determine version info -try: - commit_hash = subprocess.run(['git', 'rev-parse', '--verify', 'HEAD'], stdout=subprocess.PIPE).stdout.replace(b"\r", b"").replace(b"\n", b"").decode("UTF-8") - commit_tag = subprocess.run(['git', 'describe', '--abbrev=0', '--tags'], stdout=subprocess.PIPE).stdout.replace(b"\r", b"").replace(b"\n", b"").decode("UTF-8") - commit_tag += "." + subprocess.run(['git', 'rev-list', commit_tag+'..HEAD', '--count'], stdout=subprocess.PIPE).stdout.replace(b"\r", b"").replace(b"\n", b"").decode("UTF-8") - commit_branch = subprocess.run(['git', 'branch', '--show-current'], stdout=subprocess.PIPE).stdout.replace(b"\r", b"").replace(b"\n", b"").decode("UTF-8") -except FileNotFoundError: - pass - -# Get current time and date of this build -commit_date = datetime.datetime.now().strftime("%d/%m/%Y") -commit_time = datetime.datetime.now().strftime("%H:%M:%S") - -# Write resources -open(os.path.join(versioning_folder, "GitCommit"), "w").write(commit_hash) -open(os.path.join(versioning_folder, "GitTag" ), "w").write(commit_tag) -open(os.path.join(versioning_folder, "GitBranch"), "w").write(commit_branch) -open(os.path.join(versioning_folder, "BuildDate"), "w").write(commit_date) -open(os.path.join(versioning_folder, "BuildTime"), "w").write(commit_time) - -# Get assembly version -points = commit_tag.replace("v", "").split(".") -while len(points) < 4: - points.append("0") -assembly_version = ".".join(points) - -# Update AssemblyInfo.cs files -update_asm_info(os.path.join("LibHISP", "Properties", "AssemblyInfo.cs")) -update_asm_info(os.path.join("MPN00BS", "Properties", "AssemblyInfo.cs")) -update_asm_info(os.path.join("HISPd" , "Properties", "AssemblyInfo.cs")) - -# Update control file in dpkg -control_file = os.path.join("HISPd", "Resources", "DEBIAN", "control") -print("Updating Verson inside: "+control_file) -lines = open(control_file, "rb").readlines() -for i in range(0,len(lines)): - if lines[i].startswith(b"Version: "): - lines[i] = b"Version: "+bytes(commit_tag.replace("v", ""), "UTF-8")+b"\n" -open(control_file, "wb").writelines(lines) \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/App.axaml b/HorseIsleServer/MPN00BS/App.axaml deleted file mode 100755 index a27ce8a..0000000 --- a/HorseIsleServer/MPN00BS/App.axaml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/HorseIsleServer/MPN00BS/App.axaml.cs b/HorseIsleServer/MPN00BS/App.axaml.cs deleted file mode 100755 index 285bc65..0000000 --- a/HorseIsleServer/MPN00BS/App.axaml.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Avalonia; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Markup.Xaml; -using MPN00BS.ViewModels; -using System.IO; -using System.Runtime.InteropServices; - -namespace MPN00BS -{ - public partial class App : Application - { -#if OS_LINUX - [DllImport("libc", SetLastError = true)] - private static extern int chmod(string pathname, int mode); - -#endif - public App() - { - this.DataContext = new HispViewModel(); - } - - public override void Initialize() - { - AvaloniaXamlLoader.Load(this); -#if OS_LINUX - chmod(Path.Combine(Directory.GetCurrentDirectory(), "flashplayer", "LINUX", "flash.elf"), 511); -#endif - } - - public override void OnFrameworkInitializationCompleted() - { - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - desktop.MainWindow = new MpOrSp(); - } - - base.OnFrameworkInitializationCompleted(); - } - } -} diff --git a/HorseIsleServer/MPN00BS/CrossDomainPolicy.xml b/HorseIsleServer/MPN00BS/CrossDomainPolicy.xml deleted file mode 100755 index b9c7e79..0000000 --- a/HorseIsleServer/MPN00BS/CrossDomainPolicy.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/HispLogo.gif b/HorseIsleServer/MPN00BS/HispLogo.gif deleted file mode 100755 index c14afbf..0000000 Binary files a/HorseIsleServer/MPN00BS/HispLogo.gif and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/HispViewModel.cs b/HorseIsleServer/MPN00BS/HispViewModel.cs deleted file mode 100755 index 2a82fe9..0000000 --- a/HorseIsleServer/MPN00BS/HispViewModel.cs +++ /dev/null @@ -1,242 +0,0 @@ -using HISP.Server; -using MiniMvvm; -using System; -using System.Diagnostics; -using System.IO; - -namespace MPN00BS.ViewModels -{ - public class HispViewModel : ViewModelBase - { - - public void RefreshNames() - { - swearFilterHeader = (ConfigReader.EnableSwearFilter ? "Disable" : "Enable") + " Swear Filter"; - correctionsHeader = (ConfigReader.EnableCorrections ? "Disable" : "Enable") + " Corrections"; - vioChecksHeader = (ConfigReader.EnableNonViolations ? "Disable" : "Enable") + " Non-Vio Checks"; - spamFilterHeader = (ConfigReader.EnableSpamFilter ? "Disable" : "Enable") + " Spam Filter"; - allUsersSubbedHeader = (ConfigReader.AllUsersSubbed ? "Disable" : "Enable") + " All Users Subscribed"; - fixOfficalBugsHeader = (ConfigReader.FixOfficalBugs ? "Disable" : "Enable") + " Fixing Offical Bugs"; - } - public bool CheckServerRunningAndShowMessage() - { - if (!ServerStarter.HasServerStarted) - { - MessageBox.Show(null, "There is no Horse Isle Server running yet.", "Server not Started.", MessageBox.MessageBoxButtons.Ok); - return true; - } - return false; - } - - public HispViewModel() - { - ServerStarter.ReadServerProperties(); - RefreshNames(); - - createAccountCommand = MiniCommand.Create(() => - { - - new RegisterWindow().Show(); - }); - - resetPasswordCommand = MiniCommand.Create(() => - { - if (!ServerStarter.HasServerStarted) - { - if (CheckServerRunningAndShowMessage()) return; - MessageBox.Show(null, "There is no Horse Isle Server running yet.", "Server not Started.", MessageBox.MessageBoxButtons.Ok); - return; - } - - new ResetWindow().Show(); - }); - - editServerPropertiesCommand = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - Process p = new Process(); - p.StartInfo.FileName = Path.Combine(ServerStarter.BaseDir, "server.properties"); - p.StartInfo.UseShellExecute = true; - p.Start(); - - }); - - openServerFolderCommand = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - Process p = new Process(); - p.StartInfo.FileName = ServerStarter.BaseDir; - p.StartInfo.UseShellExecute = true; - p.Start(); - }); - - shutdownServerCommand = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - GameServer.ShutdownServer(); - }); - - - toggleSwearFilter = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.EnableSwearFilter; - ServerStarter.ModifyConfig("enable_word_filter", enab.ToString().ToLowerInvariant()); - ConfigReader.EnableSwearFilter = enab; - RefreshNames(); - }); - - toggleCorrections = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.EnableCorrections; - ServerStarter.ModifyConfig("enable_corrections", enab.ToString().ToLowerInvariant()); - ConfigReader.EnableCorrections = enab; - RefreshNames(); - }); - - toggleNonVioChecks = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.EnableNonViolations; - ServerStarter.ModifyConfig("enable_non_violation_check", enab.ToString().ToLowerInvariant()); - ConfigReader.EnableNonViolations = enab; - RefreshNames(); - }); - - toggleSpamFilter = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.EnableSpamFilter; - ServerStarter.ModifyConfig("enable_spam_filter", enab.ToString().ToLowerInvariant()); - ConfigReader.EnableSpamFilter = enab; - RefreshNames(); - }); - - - toggleAllUsersSubbed = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.AllUsersSubbed; - ServerStarter.ModifyConfig("all_users_subscribed", enab.ToString().ToLowerInvariant()); - ConfigReader.AllUsersSubbed = enab; - RefreshNames(); - }); - - - toggleFixOfficalBugs = MiniCommand.Create(() => - { - if (CheckServerRunningAndShowMessage()) return; - - bool enab = !ConfigReader.FixOfficalBugs; - ServerStarter.ModifyConfig("fix_offical_bugs", enab.ToString().ToLowerInvariant()); - ConfigReader.FixOfficalBugs = enab; - RefreshNames(); - }); - } - - - // Binding variables - - private String _swearFilterHeader; - public String swearFilterHeader - { - get - { - return _swearFilterHeader; - } - set - { - RaiseAndSetIfChanged(ref _swearFilterHeader, value); - } - } - - private String _correctionsHeader; - public String correctionsHeader - { - get - { - return _correctionsHeader; - } - set - { - RaiseAndSetIfChanged(ref _correctionsHeader, value); - } - } - private String _vioChecksHeader; - public String vioChecksHeader - { - get - { - return _vioChecksHeader; - } - set - { - RaiseAndSetIfChanged(ref _vioChecksHeader, value); - } - } - - private String _spamFilterHeader; - public String spamFilterHeader - { - get - { - return _spamFilterHeader; - } - set - { - RaiseAndSetIfChanged(ref _spamFilterHeader, value); - } - } - - private String _allUsersSubbedHeader; - public String allUsersSubbedHeader - { - get - { - return _allUsersSubbedHeader; - } - set - { - RaiseAndSetIfChanged(ref _allUsersSubbedHeader, value); - } - } - - private String _fixOfficalBugsHeader; - public String fixOfficalBugsHeader - { - get - { - return _fixOfficalBugsHeader; - } - set - { - RaiseAndSetIfChanged(ref _fixOfficalBugsHeader, value); - } - } - // Commands - public MiniCommand shutdownServerCommand { get; } - public MiniCommand createAccountCommand { get; } - public MiniCommand editServerPropertiesCommand { get; } - public MiniCommand openServerFolderCommand { get; } - public MiniCommand resetPasswordCommand { get; } - - public MiniCommand toggleSwearFilter { get; } - public MiniCommand toggleCorrections { get; } - public MiniCommand toggleNonVioChecks { get; } - public MiniCommand toggleSpamFilter { get; } - - public MiniCommand toggleAllUsersSubbed { get; } - public MiniCommand toggleFixOfficalBugs { get; } - - - } -} \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/LoadingWindow.axaml b/HorseIsleServer/MPN00BS/LoadingWindow.axaml deleted file mode 100755 index 7e71e01..0000000 --- a/HorseIsleServer/MPN00BS/LoadingWindow.axaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/HorseIsleServer/MPN00BS/LoadingWindow.axaml.cs b/HorseIsleServer/MPN00BS/LoadingWindow.axaml.cs deleted file mode 100755 index 08a2bcb..0000000 --- a/HorseIsleServer/MPN00BS/LoadingWindow.axaml.cs +++ /dev/null @@ -1,71 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Markup.Xaml; -using Avalonia.Threading; -using HISP.Server; -using System; -using System.ComponentModel; -using System.Threading.Tasks; - -namespace MPN00BS -{ - public partial class LoadingWindow : Window - { - private void OnClientExit() - { - try - { - GameServer.ShutdownServer(); - }catch(Exception) { } - } - public void OnServerStarted() - { - Dispatcher.UIThread.InvokeAsync(() => - { - this.Hide(); - ServerStarter.StartHorseIsleClient(OnClientExit, "127.0.0.1", 12321); - }); - } - public void OnNoUsersFound() - { - Dispatcher.UIThread.InvokeAsync(() => - { - new RegisterWindow().Show(); - }); - } - - private void OnShutdown() - { - Dispatcher.UIThread.InvokeAsync(() => - { - ServerStarter.CloseHorseIsleClient(); - ServerStarter.ShutdownHTTPServer(); - this.Close(); - }); - } - - public void ProgressUpdate() - { - Dispatcher.UIThread.InvokeAsync(() => - { - startupProgress.Value++; - }); - } - public LoadingWindow() - { - InitializeComponent(); - ServerStarter.StartHttpServer(); - new Task( () => ServerStarter.StartHispServer(ProgressUpdate, OnNoUsersFound, OnServerStarted, OnShutdown)).Start(); - } - - private void OnServerClose(object sender, CancelEventArgs e) - { - GameServer.ShutdownServer(); - } - - private void InitializeComponent() - { - AvaloniaXamlLoader.Load(this); - startupProgress = this.FindControl("startupProgress"); - } - } -} diff --git a/HorseIsleServer/MPN00BS/MPN00BS.csproj b/HorseIsleServer/MPN00BS/MPN00BS.csproj deleted file mode 100755 index c6fc819..0000000 --- a/HorseIsleServer/MPN00BS/MPN00BS.csproj +++ /dev/null @@ -1,261 +0,0 @@ - - - WinExe - - copyused - true - x64;x86;ARM;ARM64;AnyCPU - Debug;Windows;Linux;MacOS;Android;iOS - 3 - 1701;1702;2026;IL2026 - icon.ico - - - - partial - false - true - - - - win-x86 - true - x86 - x86 - OS_WINDOWS;ARCH_X86 - none - - - win-x64 - true - x64 - x64 - OS_WINDOWS;ARCH_X86_64 - portable - - - win-arm - true - ARM - OS_WINDOWS;ARCH_ARM - none - - - win-arm64 - true - ARM64 - OS_WINDOWS;ARCH_ARM64 - none - - - - - android-arm - true - ARM - OS_ANDROID;ARCH_ARM - 3 - - none - - - android-arm64 - true - ARM64 - OS_ANDROID;ARCH_ARM64 - none - - - - net8.0 - false - true - OnBuildSuccess - none - False - none - False - Public Domain, 2022 - https://islehorse.com - https://github.com/islehorse/HISP - git - 3 - 1701;1702;2026;IL2026 - - - - linux-x64 - true - x64 - OS_LINUX;ARCH_X86_64 - portable - - - linux-arm - ARM - true - OS_LINUX;ARCH_ARM - none - - - linux-arm64 - ARM64 - true - OS_LINUX;ARCH_ARM64 - none - - - true - OS_LINUX;ARCH_ANYCPU - none - - - - osx-x64 - true - x64 - OS_MACOS;ARCH_X86_64 - - - - osx-arm64 - true - OS_MACOS;ARCH_ARM64 - none - - - - ios-arm - true - ARM - OS_IOS;ARCH_ARM - none - - - ios-arm64 - true - ARM64 - OS_IOS;ARCH_ARM64 - - - - win-x86;win-x64;win-arm;win-arm64;linux-x64;linux-arm;linux-arm64;osx-x64;osx-arm64 - True - OS_ALL;ARCH_ANYCPU - - - - portable - - - - portable - - - - portable - - - - - - - - - - - - - - MpOrSp.axaml - - - - - - PreserveNewest - client\%(Filename)%(Extension) - - - - - - PreserveNewest - client\map750.png - - - - - - PreserveNewest - client\mod\%(Filename)%(Extension) - - - - - - PreserveNewest - client\tack\%(Filename)%(Extension) - - - - - - - PreserveNewest - client\breed\%(Filename)%(Extension) - - - - - - PreserveNewest - client\resource\%(Filename)%(Extension) - - - - - - Never - - - - - - - - - - - - - - - - - - - - PreserveNewest - flashplayer/LINUX/flash.elf - - - - - - PreserveNewest - flashplayer\WINDOWS\flash.exe - - - - - - PreserveNewest - flashplayer\MACOS\%(RecursiveDir)%(Filename)%(Extension) - - - - - diff --git a/HorseIsleServer/MPN00BS/MessageBox.axaml b/HorseIsleServer/MPN00BS/MessageBox.axaml deleted file mode 100755 index 5ad85b2..0000000 --- a/HorseIsleServer/MPN00BS/MessageBox.axaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - diff --git a/HorseIsleServer/MPN00BS/MessageBox.axaml.cs b/HorseIsleServer/MPN00BS/MessageBox.axaml.cs deleted file mode 100755 index c51f3bd..0000000 --- a/HorseIsleServer/MPN00BS/MessageBox.axaml.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Threading.Tasks; -using Avalonia.Controls; -using Avalonia.Markup.Xaml; - -namespace MPN00BS -{ - public partial class MessageBox : Window - { - public enum MessageBoxButtons - { - Ok, - OkCancel, - YesNo, - YesNoCancel - } - - public enum MessageBoxResult - { - Ok, - Cancel, - Yes, - No - } - - public MessageBox() - { - AvaloniaXamlLoader.Load(this); - } - - public static Task Show(Window parent, string text, string title, MessageBoxButtons buttons) - { - var msgbox = new MessageBox() - { - Title = title - }; - msgbox.FindControl("Text").Text = text; - var buttonPanel = msgbox.FindControl("Buttons"); - - var res = MessageBoxResult.Ok; - - void AddButton(string caption, MessageBoxResult r, bool def = false) - { - var btn = new Button { Content = caption }; - btn.Click += (_, __) => { - res = r; - msgbox.Close(); - }; - buttonPanel.Children.Add(btn); - if (def) - res = r; - } - - if (buttons == MessageBoxButtons.Ok || buttons == MessageBoxButtons.OkCancel) - AddButton("Ok", MessageBoxResult.Ok, true); - if (buttons == MessageBoxButtons.YesNo || buttons == MessageBoxButtons.YesNoCancel) - { - AddButton("Yes", MessageBoxResult.Yes); - AddButton("No", MessageBoxResult.No, true); - } - - if (buttons == MessageBoxButtons.OkCancel || buttons == MessageBoxButtons.YesNoCancel) - AddButton("Cancel", MessageBoxResult.Cancel, true); - - - var tcs = new TaskCompletionSource(); - msgbox.Closed += delegate { tcs.TrySetResult(res); }; - if (parent != null) - msgbox.ShowDialog(parent); - else msgbox.Show(); - return tcs.Task; - } - - - } - -} \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/MiniMvvm/MiniCommand.cs b/HorseIsleServer/MPN00BS/MiniMvvm/MiniCommand.cs deleted file mode 100755 index 0d93c92..0000000 --- a/HorseIsleServer/MPN00BS/MiniMvvm/MiniCommand.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Threading.Tasks; -using System.Windows.Input; - -namespace MiniMvvm -{ - public sealed class MiniCommand : MiniCommand, ICommand - { - private readonly Action _cb; - private bool _busy; - private Func _acb; - - public MiniCommand(Action cb) - { - _cb = cb; - } - - public MiniCommand(Func cb) - { - _acb = cb; - } - - private bool Busy - { - get => _busy; - set - { - _busy = value; - CanExecuteChanged?.Invoke(this, EventArgs.Empty); - } - } - - - public override event EventHandler CanExecuteChanged; - public override bool CanExecute(object parameter) => !_busy; - - public override async void Execute(object parameter) - { - if (Busy) - return; - try - { - Busy = true; - if (_cb != null) - _cb((T)parameter); - else - await _acb((T)parameter); - } - finally - { - Busy = false; - } - } - } - - public abstract class MiniCommand : ICommand - { - public static MiniCommand Create(Action cb) => new MiniCommand(_ => cb()); - public static MiniCommand Create(Action cb) => new MiniCommand(cb); - public static MiniCommand CreateFromTask(Func cb) => new MiniCommand(_ => cb()); - - public abstract bool CanExecute(object parameter); - public abstract void Execute(object parameter); - public abstract event EventHandler CanExecuteChanged; - } -} diff --git a/HorseIsleServer/MPN00BS/MiniMvvm/PropertyChangedExtensions.cs b/HorseIsleServer/MPN00BS/MiniMvvm/PropertyChangedExtensions.cs deleted file mode 100755 index 873f7b0..0000000 --- a/HorseIsleServer/MPN00BS/MiniMvvm/PropertyChangedExtensions.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.ComponentModel; -using System.Linq.Expressions; -using System.Reactive.Linq; -using System.Reflection; - -namespace MiniMvvm -{ - public static class PropertyChangedExtensions - { - class PropertyObservable : IObservable - { - private readonly INotifyPropertyChanged _target; - private readonly PropertyInfo _info; - - public PropertyObservable(INotifyPropertyChanged target, PropertyInfo info) - { - _target = target; - _info = info; - } - - class Subscription : IDisposable - { - private readonly INotifyPropertyChanged _target; - private readonly PropertyInfo _info; - private readonly IObserver _observer; - - public Subscription(INotifyPropertyChanged target, PropertyInfo info, IObserver observer) - { - _target = target; - _info = info; - _observer = observer; - _target.PropertyChanged += OnPropertyChanged; - _observer.OnNext((T)_info.GetValue(_target)); - } - - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) - { - if (e.PropertyName == _info.Name) - _observer.OnNext((T)_info.GetValue(_target)); - } - - public void Dispose() - { - _target.PropertyChanged -= OnPropertyChanged; - _observer.OnCompleted(); - } - } - - public IDisposable Subscribe(IObserver observer) - { - return new Subscription(_target, _info, observer); - } - } - - public static IObservable WhenAnyValue(this TModel model, - Expression> expr) where TModel : INotifyPropertyChanged - { - var l = (LambdaExpression)expr; - var ma = (MemberExpression)l.Body; - var prop = (PropertyInfo)ma.Member; - return new PropertyObservable(model, prop); - } - - public static IObservable WhenAnyValue(this TModel model, - Expression> v1, - Func cb - ) where TModel : INotifyPropertyChanged - { - return model.WhenAnyValue(v1).Select(cb); - } - - public static IObservable WhenAnyValue(this TModel model, - Expression> v1, - Expression> v2, - Func cb - ) where TModel : INotifyPropertyChanged => - Observable.CombineLatest( - model.WhenAnyValue(v1), - model.WhenAnyValue(v2), - cb); - - public static IObservable> WhenAnyValue(this TModel model, - Expression> v1, - Expression> v2 - ) where TModel : INotifyPropertyChanged => - model.WhenAnyValue(v1, v2, (a1, a2) => (a1, a2)); - - public static IObservable WhenAnyValue(this TModel model, - Expression> v1, - Expression> v2, - Expression> v3, - Func cb - ) where TModel : INotifyPropertyChanged => - Observable.CombineLatest( - model.WhenAnyValue(v1), - model.WhenAnyValue(v2), - model.WhenAnyValue(v3), - cb); - - public static IObservable> WhenAnyValue(this TModel model, - Expression> v1, - Expression> v2, - Expression> v3 - ) where TModel : INotifyPropertyChanged => - model.WhenAnyValue(v1, v2, v3, (a1, a2, a3) => (a1, a2, a3)); - } -} diff --git a/HorseIsleServer/MPN00BS/MiniMvvm/ViewModelBase.cs b/HorseIsleServer/MPN00BS/MiniMvvm/ViewModelBase.cs deleted file mode 100755 index c4dd16b..0000000 --- a/HorseIsleServer/MPN00BS/MiniMvvm/ViewModelBase.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Reactive.Joins; -using System.Runtime.CompilerServices; - -namespace MiniMvvm -{ - public class ViewModelBase : INotifyPropertyChanged - { - public event PropertyChangedEventHandler PropertyChanged; - protected bool RaiseAndSetIfChanged(ref T field, T value, [CallerMemberName] string propertyName = null) - { - if (!EqualityComparer.Default.Equals(field, value)) - { - field = value; - RaisePropertyChanged(propertyName); - return true; - } - return false; - } - - - protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) - => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } -} diff --git a/HorseIsleServer/MPN00BS/MpOrSp.axaml b/HorseIsleServer/MPN00BS/MpOrSp.axaml deleted file mode 100755 index 1af9da9..0000000 --- a/HorseIsleServer/MPN00BS/MpOrSp.axaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - -