diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1ee7dd..65ccdc2 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,8 +10,6 @@ defaults: jobs: build-linux: runs-on: ubuntu-latest - env: - AUTHENTICATION_TOKEN: ${{ secrets.SILICA_CODES_AUTH }} steps: - uses: actions/checkout@v2 with: @@ -23,8 +21,8 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v1 with: - dotnet-version: 8.0.x - include-prerelease: false + dotnet-version: 7.0.100-preview.5.22307.18 + include-prerelease: true - name: Install utils run: | sudo apt update @@ -35,7 +33,7 @@ jobs: run: | dotnet restore LibHISP dotnet restore HISPd -# linux x64 +# nativeaot linux x54 - name: Build linux-x64 continue-on-error: false run: | @@ -46,14 +44,27 @@ jobs: dotnet publish -p:PublishProfile=Linux64.pubxml cd .. -# linux arm +# Currently broken ... + +# dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease +# cd HISPd +# dotnet publish -r linux-x64 -c Linux /p:Platform=x64 --self-contained +# cd .. +# mkdir -p HISPd/bin/x64/Linux/net7.0/linux-x64/native/gamedata +# cp -r HISPd/bin/x64/Linux/net7.0/linux-x64/gamedata/* HISPd/bin/x64/Linux/net7.0/linux-x64/native/gamedata +# cp HISPd/bin/x64/Linux/net7.0/linux-x64/HI1.MAP HISPd/bin/x64/Linux/net7.0/linux-x64/native/HI1.MAP +# cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/libe_sqlite3.so HISPd/bin/x64/Linux/net7.0/linux-x64/native/libe_sqlite3.so +# rm -f HISPd/bin/x64/Linux/net7.0/linux-x64/native/HISPd.dbg +# dotnet remove HISPd package Microsoft.DotNet.ILCompiler + + - name: Build linux-arm continue-on-error: false run: | cd HISPd dotnet publish -p:PublishProfile=LinuxARM.pubxml cd .. -# linux arm64 +# nativeaot linux arm64 - name: Build linux-arm64 continue-on-error: false run: | @@ -61,6 +72,18 @@ jobs: dotnet publish -p:PublishProfile=LinuxARM64.pubxml cd .. +# dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease +# dotnet add HISPd package runtime.linux-x64.Microsoft.DotNet.ILCompiler --prerelease +# cd HISPd +# dotnet publish -r linux-arm64 -c Linux /p:Platform=ARM64 --self-contained +# cd .. +# mkdir -p HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/gamedata +# cp -r HISPd/bin/ARM64/Linux/net7.0/linux-arm64/gamedata/* HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/gamedata +# cp HISPd/bin/ARM64/Linux/net7.0/linux-arm64/HI1.MAP HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/HI1.MAP +# cp HISPd/bin/ARM64/Linux/net7.0/linux-arm64/publish/libe_sqlite3.so HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/libe_sqlite3.so +# rm -f HISPd/bin/ARM64/Linux/net7.0/linux-arm64/native/HISPd.dbg +# dotnet remove HISPd package Microsoft.DotNet.ILCompiler +# dotnet remove HISPd package runtime.linux-x64.Microsoft.DotNet.ILCompiler - name: Build deb package continue-on-error: false @@ -79,10 +102,10 @@ jobs: 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 -r HISPd/bin/x64/Linux/net7.0/linux-x64/publish/gamedata/* /tmp/debpkg/Debian64/etc/hisp/gamedata + cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/libe_sqlite3.so /tmp/debpkg/Debian64/usr/lib/libe_sqlite3.so + cp HISPd/bin/x64/Linux/net7.0/linux-x64/publish/HI1.MAP /tmp/debpkg/Debian64/etc/hisp/HI1.MAP + cp HISPd/bin/x64/Linux/net7.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 @@ -96,35 +119,61 @@ jobs: mkdir debpackage dpkg-deb --build /tmp/debpkg/Debian64 mv /tmp/debpkg/Debian64.deb debpackage/HISP-Debian-AMD64.deb - curl --user $AUTHENTICATION_TOKEN --upload-file debpackage/HISP-Debian-AMD64.deb https://silica.codes/api/packages/islehorse/debian/pool/debian/main/upload + +#android .. maybe someday + +# - 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 android-arm +# uses: actions/upload-artifact@v2 +# with: +# name: HISP-AndroidARM +# path: HorseIsleServer/HISPd/bin/arm/Android/net7.0/android-arm/publish/ + +# - name: Upload android-arm64 +# uses: actions/upload-artifact@v2 +# with: +# name: HISP-AndroidARM64 +# path: HorseIsleServer/HISPd/bin/arm64/Android/net7.0/android-arm64/publish/ + + # Upload LINUX - name: Upload linux-x64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Linux64 - path: HorseIsleServer/HISPd/bin/x64/Linux/net8.0/linux-x64/publish/ + path: HorseIsleServer/HISPd/bin/x64/Linux/net7.0/linux-x64/publish/ - name: Upload linux-x64-noobs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Linux64-Noobs - path: HorseIsleServer/MPN00BS/bin/x64/Linux/net8.0/linux-x64/publish/ + path: HorseIsleServer/MPN00BS/bin/x64/Linux/net7.0/linux-x64/publish/ - name: Upload linux-arm - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-LinuxARM - path: HorseIsleServer/HISPd/bin/ARM/Linux/net8.0/linux-arm/publish/ + path: HorseIsleServer/HISPd/bin/ARM/Linux/net7.0/linux-arm/publish/ - name: Upload linux-arm64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-LinuxARM64 - path: HorseIsleServer/HISPd/bin/ARM64/Linux/net8.0/linux-arm64/publish/ + path: HorseIsleServer/HISPd/bin/ARM64/Linux/net7.0/linux-arm64/publish/ - name: Upload deb package - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-DebianPackage path: HorseIsleServer/debpackage @@ -142,8 +191,8 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v1 with: - dotnet-version: 8.0.x - include-prerelease: false + dotnet-version: 7.0.100-preview.5.22307.18 + include-prerelease: true - name: Install utils run: dotnet tool install -g dotnet-script @@ -151,7 +200,7 @@ jobs: - name: Restore dependencies run: dotnet restore -# x64 build +#nativeaot x64 build - name: Build win-x64 continue-on-error: false run: | @@ -162,6 +211,21 @@ jobs: dotnet publish -p:PublishProfile=Win64.pubxml cd .. +# dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease +# cd HISPd +# dotnet publish -r win-x64 -c Windows /p:Platform=x64 --self-contained +# cd .. +# mkdir "HISPd\bin\x64\Windows\net7.0\win-x64\native\gamedata" +# copy "..\HorseIsleData\gamedata\*" "HISPd\bin\x64\Windows\net7.0\win-x64\native\gamedata" +# copy "..\HorseIsleData\HI1.MAP" "HISPd\bin\x64\Windows\net7.0\win-x64\native\HI1.MAP" +# copy "HISPd\bin\x64\Windows\net7.0\win-x64\publish\e_sqlite3.dll" "HISPd\bin\x64\Windows\net7.0\win-x64\native\e_sqlite3.dll" +# del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.pdb" +# del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.lib" +# del "HISPd\bin\x64\Windows\net7.0\win-x64\native\HISPd.exp" +# dotnet remove HISPd package Microsoft.DotNet.ILCompiler +# cd N00BS +# dotnet publish -p:PublishProfile=Win64.pubxml +# cd .. - name: Build win-x86 continue-on-error: false run: | @@ -171,46 +235,72 @@ jobs: cd MPN00BS dotnet publish -p:PublishProfile=Win32.pubxml cd .. - -# arm64 build + - name: Build win-arm + continue-on-error: false + run: | + cd HISPd + dotnet publish -p:PublishProfile=WinARM.pubxml + cd .. +#nativeaot arm64 build - name: Build win-arm64 continue-on-error: false run: | cd HISPd dotnet publish -p:PublishProfile=WinARM64.pubxml cd .. +# dotnet add HISPd package Microsoft.DotNet.ILCompiler --prerelease +# dotnet add HISPd package runtime.win-x64.Microsoft.DotNet.ILCompiler --prerelease +# cd HISPd +# dotnet publish -r win-arm64 -c Windows /p:Platform=ARM64 --self-contained +# cd .. +# mkdir "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\gamedata" +# copy "..\HorseIsleData\gamedata\*" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\gamedata" +# copy "..\HorseIsleData\HI1.MAP" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HI1.MAP" +# copy "HISPd\bin\ARM64\Windows\net7.0\win-arm64\publish\e_sqlite3.dll" "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\e_sqlite3.dll" +# del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.pdb" +# del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.lib" +# del "HISPd\bin\ARM64\Windows\net7.0\win-arm64\native\HISPd.exp" +# dotnet remove HISPd package Microsoft.DotNet.ILCompiler +# dotnet remove HISPd package runtime.win-x64.Microsoft.DotNet.ILCompiler + # Upload WINDOWS - name: Upload win-x64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Win64 - path: HorseIsleServer/HISPd/bin/x64/Windows/net8.0/win-x64/publish/ + path: HorseIsleServer/HISPd/bin/x64/Windows/net7.0/win-x64/publish/ - name: Upload win-x86 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Win32 - path: HorseIsleServer/HISPd/bin/x86/Windows/net8.0/win-x86/publish/ + path: HorseIsleServer/HISPd/bin/x86/Windows/net7.0/win-x86/publish/ + - name: Upload win-arm + uses: actions/upload-artifact@v2 + with: + name: HISP-WinARM + path: HorseIsleServer/HISPd/bin/arm/Windows/net7.0/win-arm/publish/ + - name: Upload win-arm64 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-WinARM64 - path: HorseIsleServer/HISPd/bin/arm64/Windows/net8.0/win-arm64/publish/ + path: HorseIsleServer/HISPd/bin/arm64/Windows/net7.0/win-arm64/publish/ - name: Upload win-x86-noobs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Win32-Noobs - path: HorseIsleServer/MPN00BS/bin/x86/Windows/net8.0/win-x86/publish/ + path: HorseIsleServer/MPN00BS/bin/x86/Windows/net7.0/win-x86/publish/ - name: Upload win-x64-noobs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v2 with: name: HISP-Win64-Noobs - path: HorseIsleServer/MPN00BS/bin/x64/Windows/net8.0/win-x64/publish/ + path: HorseIsleServer/MPN00BS/bin/x64/Windows/net7.0/win-x64/publish/ build-mac: runs-on: ubuntu-latest @@ -225,8 +315,8 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v1 with: - dotnet-version: 8.0.x - include-prerelease: false + dotnet-version: 7.0.100-preview.5.22307.18 + include-prerelease: true - name: Install utils run: dotnet tool install -g dotnet-script @@ -242,9 +332,6 @@ jobs: 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: | @@ -252,23 +339,17 @@ jobs: dotnet publish -p:PublishProfile=OsxARM64.pubxml cd .. - 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/HISPd/bin/x64/MacOS/net7.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/ + path: HorseIsleServer/HISPd/bin/arm64/MacOS/net7.0/osx-arm64/publish/ - - name: Upload mac-x64-noobs - uses: actions/upload-artifact@v4 - with: - name: HISP-Mac-Noobs - path: HorseIsleServer/MPN00BS/bin/x64/MacOS/net8.0/osx-x64/publish/ - build-web: runs-on: ubuntu-latest steps: @@ -279,16 +360,16 @@ jobs: - name: Git Submodule update run: git submodule update --init --recursive - # UPLOAD WEBSERVER + # 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..7124db1 100755 --- a/.gitignore +++ b/.gitignore @@ -4,12 +4,6 @@ *.log *.suo *.csproj.user -*.pubxml.user -*.user -*.idb - -*Thumbs.db -*.DS_Store HorseIsleServer/N00BS/obj/* HorseIsleServer/N00BS/bin/* @@ -20,15 +14,10 @@ HorseIsleServer/MPN00BS/bin/* HorseIsleServer/HISPd/obj/* HorseIsleServer/HISPd/bin/* -HorseIsleServer/HISPtests/obj/* -HorseIsleServer/HISPtests/bin/* - +HorseIsleServer/Installer/Windows/* HorseIsleServer/LibHISP/obj/* HorseIsleServer/LibHISP/bin/* HorseIsleServer/LibHISP/Resources/Versioning/* -HorseIsleServer/Installer/Windows/* - - HorseIsleServer/.vs/* diff --git a/HorseIsleData b/HorseIsleData index e9c09c7..0afb592 160000 --- a/HorseIsleData +++ b/HorseIsleData @@ -1 +1 @@ -Subproject commit e9c09c77cd0dd99eb12e16b679478fb0e3742b55 +Subproject commit 0afb5924fd3d0b83e6a1369789b1b98255374183 diff --git a/HorseIsleServer/HISP.sln b/HorseIsleServer/HISP.sln index 1bda296..075fa0c 100755 --- a/HorseIsleServer/HISP.sln +++ b/HorseIsleServer/HISP.sln @@ -8,8 +8,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPN00BS", "MPN00BS\MPN00BS.csproj", "{72EF95FC-03DB-4E61-A696-E0095DD42A4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPtests", "HISPtests\HISPtests.csproj", "{689FB972-1612-440E-817D-BE290F655AA8}" + ProjectSection(ProjectDependencies) = postProject + {C48CBD82-AB30-494A-8FFA-4DE7069B5827} = {C48CBD82-AB30-494A-8FFA-4DE7069B5827} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -38,11 +39,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 @@ -99,16 +95,6 @@ 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|ARM.ActiveCfg = Windows|ARM @@ -168,16 +154,6 @@ 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 @@ -238,16 +214,6 @@ Global {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 @@ -258,76 +224,6 @@ Global {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.Build.0 = Windows|x64 {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.ActiveCfg = Windows|x86 {72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.Build.0 = Windows|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Android|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.ActiveCfg = Debug|ARM - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM.Build.0 = Debug|ARM - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|ARM64.Build.0 = Debug|ARM64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.ActiveCfg = Debug|x64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x64.Build.0 = Debug|x64 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.ActiveCfg = Debug|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.Debug|x86.Build.0 = Debug|x86 - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.iOS|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Linux|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.MacOS|x86.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|Any CPU.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|ARM64.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x64.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.ActiveCfg = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Release|x86.Build.0 = Release|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|Any CPU.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|ARM64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x64.Build.0 = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.ActiveCfg = Debug|Any CPU - {689FB972-1612-440E-817D-BE290F655AA8}.Windows|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/HorseIsleServer/HISPd/HISPd.csproj b/HorseIsleServer/HISPd/HISPd.csproj index b280073..57d1e0d 100755 --- a/HorseIsleServer/HISPd/HISPd.csproj +++ b/HorseIsleServer/HISPd/HISPd.csproj @@ -27,7 +27,7 @@ false - net8.0 + net7.0 false true icon.ico @@ -44,13 +44,7 @@ 3 1701;1702;2026;IL2026 - - - partial - false - true - - + win-x86 true @@ -158,12 +152,112 @@ - + + ARM False - DEBUG;TRACE;OS_DEBUG - full + DEBUG;TRACE;OS_DEBUG;ARCH_ARM + none + + ARM64 + False + DEBUG;TRACE;OS_DEBUG;ARCH_ARM64 + none + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86_64 + none + + + + + False + DEBUG;TRACE;OS_DEBUG;ARCH_X86 + none + + + + + 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 + + + + + 3 + none + + + + + none + + + + + none + + + + + none + + + + + none + + + + + none + + + + + none + + diff --git a/HorseIsleServer/HISPd/Program.cs b/HorseIsleServer/HISPd/Program.cs index 2f5ca20..fb7e67b 100755 --- a/HorseIsleServer/HISPd/Program.cs +++ b/HorseIsleServer/HISPd/Program.cs @@ -11,7 +11,7 @@ namespace HISP.Cli private static StreamWriter sw = null; private static FileStream fs = null; private static string logFile; - private static EventWaitHandle shutdownHandle = null; + private static EventWaitHandle shutdownHandle; public static bool ShuttingDown = false; public static string BaseDir; @@ -44,95 +44,46 @@ namespace HISP.Cli 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(); + 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(); + sw.WriteLineAsync(DateTime.Now.ToString("MM-dd-YYYY HH:mm:dd") + ": [" + type + "] " + text + sw.NewLine); } 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) { }; + + if (error) + Console.Error.WriteAsync(DateTime.Now.ToString("MM-dd-YYYY HH:mm:dd")+": [" + type + "] " + text + Console.Error.NewLine); + else + Console.Out.WriteAsync(DateTime.Now.ToString("MM-dd-YYYY HH:mm:dd") + ": [" + type + "] " + text + Console.Out.NewLine); + } public static void Main(string[] args) { AppDomain.CurrentDomain.ProcessExit += ProcessQuitHandler; - string baseDir = Directory.GetCurrentDirectory(); + 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"); + 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 + #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 + #else LogStdout(true, "ERROR", "Installing as a service unsupported on this platform"); -#endif + #endif break; default: if (arg.Contains("=")) @@ -150,8 +101,8 @@ namespace HISP.Cli Logger.SetCallback(LogToFile); break; case "--base-directory": - baseDir = argu[1]; - Directory.SetCurrentDirectory(baseDir); + BaseDir = argu[1]; + Directory.SetCurrentDirectory(BaseDir); break; default: continue; @@ -162,27 +113,28 @@ namespace HISP.Cli } } - if (hispConfVar != null) + if (HispConfVar != null) { - ConfigReader.ConfigurationFileName = hispConfVar; + ConfigReader.ConfigurationFileName = HispConfVar; } - if (hispLogVar != null) + if (HispLogVar != null) { - LogFile = hispLogVar; + LogFile = HispLogVar; Logger.SetCallback(LogToFile); } else { - LogFile = Path.Combine(baseDir, "crash.log"); + LogFile = Path.Combine(BaseDir, "crash.log"); } - if (hispBaseDir != null) + if (HispBaseDir != null) { - baseDir = hispBaseDir; - Directory.SetCurrentDirectory(baseDir); + BaseDir = HispBaseDir; + Directory.SetCurrentDirectory(BaseDir); } + Entry.SetShutdownCallback(OnShutdown); Entry.Start(); shutdownHandle = new EventWaitHandle(false, EventResetMode.ManualReset); @@ -191,7 +143,7 @@ namespace HISP.Cli private static void ProcessQuitHandler(object sender, EventArgs e) { - GameServer.ShutdownServer("HISPd process quitting."); + GameServer.ShutdownServer(); } } } diff --git a/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs b/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs index a40e782..b81aecc 100755 --- a/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs +++ b/HorseIsleServer/HISPd/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // 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")] +[assembly: AssemblyVersion("1.7.140.0")] +[assembly: AssemblyFileVersion("1.7.140.0")] diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml index 4c08f3e..e1eff10 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\android-arm\publish\ FileSystem - net8.0 + net7.0 android-arm True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml index e9b3839..59f44f0 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/AndroidARM64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\android-arm64\publish\ FileSystem - net8.0 + net7.0 android-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml index acb8a96..c5f1582 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Linux64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\linux-x64\publish\ FileSystem - net8.0 + net7.0 linux-x64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml index fdccff1..06bcf27 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\linux-arm\publish\ FileSystem - net8.0 + net7.0 linux-arm True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml index f387011..b4cdb5b 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/LinuxARM64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\linux-arm64\publish\ FileSystem - net8.0 + net7.0 linux-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml index f6e810f..ced4af4 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Osx64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\osx-x64\publish\ FileSystem - net8.0 + net7.0 osx-x64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml index 6d6a41d..cc18457 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/OsxARM64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\osx-arm64\publish\ FileSystem - net8.0 + net7.0 osx-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml index 0608a65..2763365 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win32.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\win-x86\publish\ FileSystem - net8.0 + net7.0 win-x86 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/Win64.pubxml index 79a4c04..f23270c 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/Win64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\win-x64\publish\ FileSystem - net8.0 + net7.0 win-x64 True - True True True + True OS_WINDOWS;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml index f6cc04e..a64c8c0 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\win-arm\publish\ FileSystem - net8.0 + net7.0 win-arm True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml index 10dfe10..0ce204c 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/WinARM64.pubxml +++ b/HorseIsleServer/HISPd/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\net7.0\win-arm64\publish\ FileSystem - net8.0 + net7.0 win-arm64 True True diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml index 077cfed..3312d3f 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml +++ b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM - bin\arm\iOS\net8.0\ios-arm\publish\ + bin\arm\iOS\net7.0\ios-arm\publish\ FileSystem - net8.0 + net7.0 ios-arm True False diff --git a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml index ec7144e..14fe938 100755 --- a/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml +++ b/HorseIsleServer/HISPd/Properties/PublishProfiles/iOSARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ + bin\arm64\iOS\net7.0\ios-arm64\publish\ FileSystem - net8.0 + net7.0 ios-arm64 True False diff --git a/HorseIsleServer/HISPd/Resources/DEBIAN/control b/HorseIsleServer/HISPd/Resources/DEBIAN/control index 1350d9e..84d6c1d 100755 --- a/HorseIsleServer/HISPd/Resources/DEBIAN/control +++ b/HorseIsleServer/HISPd/Resources/DEBIAN/control @@ -1,5 +1,5 @@ Package: hisp -Version: 1.8.73 +Version: 1.7.140 Depends: coreutils,systemd,mariadb-server,libsqlite3-dev,zlib1g-dev,libicu-dev,libkrb5-dev Maintainer: Li Homepage: https://islehorse.com diff --git a/HorseIsleServer/HISPd/Resources/HISP.service b/HorseIsleServer/HISPd/Resources/HISP.service index 2292353..360db4f 100755 --- a/HorseIsleServer/HISPd/Resources/HISP.service +++ b/HorseIsleServer/HISPd/Resources/HISP.service @@ -16,8 +16,8 @@ Type=simple ProtectSystem=full PrivateDevices=true -StandardError=journal+console -StandardOutput=journal+console +StandardError=syslog+console +StandardOutput=syslog+console User=horseisle Group=horseisle 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/AssemblyInfo.cs b/HorseIsleServer/HISPtests/Properties/AssemblyInfo.cs deleted file mode 100644 index aa433bd..0000000 --- a/HorseIsleServer/HISPtests/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.30.0")] -[assembly: AssemblyFileVersion("1.8.30.0")] 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/Linux64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/Linux64.pubxml deleted file mode 100644 index acb8a96..0000000 --- a/HorseIsleServer/HISPtests/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/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/Win32.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win32.pubxml deleted file mode 100644 index 0608a65..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win32.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - x86 - bin\x86\Windows\net8.0\win-x86\publish\ - FileSystem - net8.0 - win-x86 - True - True - True - True - OS_WINDOWS;ARCH_X86 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml deleted file mode 100644 index 79a4c04..0000000 --- a/HorseIsleServer/HISPtests/Properties/PublishProfiles/Win64.pubxml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Windows - x64 - bin\x64\Windows\net8.0\win-x64\publish\ - FileSystem - net8.0 - win-x64 - 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/HISPtests/Properties/PublishProfiles/WinARM.pubxml deleted file mode 100644 index f6cc04e..0000000 --- a/HorseIsleServer/HISPtests/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/HISPtests/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/HISPtests/Properties/PublishProfiles/WinARM64.pubxml deleted file mode 100644 index 10dfe10..0000000 --- a/HorseIsleServer/HISPtests/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/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/Properties/Resources.resx b/HorseIsleServer/HISPtests/Properties/Resources.resx deleted file mode 100644 index 6e82436..0000000 --- a/HorseIsleServer/HISPtests/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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\PacketTestDataSet.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - \ No newline at end of file diff --git a/HorseIsleServer/HISPtests/Properties/launchSettings.json b/HorseIsleServer/HISPtests/Properties/launchSettings.json deleted file mode 100644 index 6cef0b0..0000000 --- a/HorseIsleServer/HISPtests/Properties/launchSettings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "profiles": { - "HISPtests": { - "commandName": "Project" - } - } -} \ No newline at end of file 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/HISPtests/icon.ico b/HorseIsleServer/HISPtests/icon.ico deleted file mode 100644 index 1c3ca8d..0000000 Binary files a/HorseIsleServer/HISPtests/icon.ico and /dev/null differ diff --git a/HorseIsleServer/LibHISP/Game/Arena.cs b/HorseIsleServer/LibHISP/Game/Arena.cs index 8b5acc0..3a22eff 100755 --- a/HorseIsleServer/LibHISP/Game/Arena.cs +++ b/HorseIsleServer/LibHISP/Game/Arena.cs @@ -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.CreateSwfModule(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/Chat/ChatMsg.cs b/HorseIsleServer/LibHISP/Game/Chat/Chat.cs old mode 100644 new mode 100755 similarity index 89% rename from HorseIsleServer/LibHISP/Game/Chat/ChatMsg.cs rename to HorseIsleServer/LibHISP/Game/Chat/Chat.cs index fecd2a7..69d6579 --- a/HorseIsleServer/LibHISP/Game/Chat/ChatMsg.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/Chat.cs @@ -8,7 +8,7 @@ using HISP.Server; namespace HISP.Game.Chat { - public class ChatMsg + public class Chat { public struct Correction { @@ -102,7 +102,7 @@ namespace HISP.Game.Chat if (parsedMessage.ToUpper(CultureInfo.InvariantCulture).StartsWith(cmd.CmdName)) { string[] args = parsedMessage.Substring(cmd.CmdName.Length).Trim().Split(' '); - return cmd.Execute(messageToGive, args, user); + return cmd.CmdCallback(messageToGive, args, user); } } } @@ -197,9 +197,9 @@ namespace HISP.Game.Chat 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)) + 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(); @@ -211,9 +211,9 @@ namespace HISP.Game.Chat 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)) + 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(); @@ -225,10 +225,10 @@ namespace HISP.Game.Chat 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)) + 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(); @@ -245,7 +245,7 @@ namespace HISP.Game.Chat if (user.Id != userInIsle.Id) if(!userInIsle.MuteAll && !userInIsle.MuteIsland) if(!userInIsle.MutePlayer.IsUserMuted(user)) - recipiants.Add(userInIsle.Client); + recipiants.Add(userInIsle.LoggedinClient); } return recipiants.ToArray(); } @@ -265,7 +265,7 @@ namespace HISP.Game.Chat if (user.Id != userHere.Id) if (!userHere.MuteAll && !userHere.MuteHere) if (!userHere.MutePlayer.IsUserMuted(user)) - recipiants.Add(userHere.Client); + recipiants.Add(userHere.LoggedinClient); } return recipiants.ToArray(); } @@ -279,7 +279,7 @@ namespace HISP.Game.Chat if (user.Id != nearbyUser.Id) if (!nearbyUser.MuteAll && !nearbyUser.MuteNear) if (!nearbyUser.MutePlayer.IsUserMuted(user)) - recipiants.Add(nearbyUser.Client); + recipiants.Add(nearbyUser.LoggedinClient); } return recipiants.ToArray(); } @@ -296,8 +296,8 @@ namespace HISP.Game.Chat foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (client.User.Moderator) - if (client.User.Id != user.Id) + if (client.LoggedinUser.Moderator) + if (client.LoggedinUser.Id != user.Id) recipiants.Add(client); } return recipiants.ToArray(); @@ -316,8 +316,8 @@ namespace HISP.Game.Chat foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (client.User.Administrator) - if (client.User.Id != user.Id) + if (client.LoggedinUser.Administrator) + if (client.LoggedinUser.Id != user.Id) recipiants.Add(client); } return recipiants.ToArray(); @@ -332,9 +332,9 @@ namespace HISP.Game.Chat { if (client.LoggedIn) { - if (!client.User.MutePrivateMessage && !client.User.MuteAll) + if (!client.LoggedinUser.MutePrivateMessage && !client.LoggedinUser.MuteAll) { - if (client.User.Username.ToLower().StartsWith(to.ToLower())) + if (client.LoggedinUser.Username.ToLower().StartsWith(to.ToLower())) { recipiants.Add(client); break; diff --git a/HorseIsleServer/LibHISP/Game/Chat/Command.cs b/HorseIsleServer/LibHISP/Game/Chat/Command.cs index 463696b..32ecdc6 100755 --- a/HorseIsleServer/LibHISP/Game/Chat/Command.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/Command.cs @@ -8,7 +8,6 @@ using HISP.Game.Inventory; using System.Linq; using System; using System.Collections.Generic; -using Newtonsoft.Json.Linq; namespace HISP.Game.Chat { @@ -22,9 +21,9 @@ namespace HISP.Game.Chat continue; if (client.LoggedIn) { - if (client.User.Username.ToLower().StartsWith(name.ToLower())) + if (client.LoggedinUser.Username.ToLower().StartsWith(name.ToLower())) { - return client.User; + return client.LoggedinUser; } } } @@ -34,124 +33,41 @@ namespace HISP.Game.Chat 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); + new CommandRegister('%', "GIVE", "OBJECT [username / ALL]\nMONEY [username]\nHORSE [username]\nQUEST [FORCE]\nAWARD [username]", Command.Give); + new CommandRegister('%', "SWF", " [username / ALL]", Command.Swf); + new CommandRegister('%', "GOTO", ",\nPLAYER \nAREA \nNPC ", Command.Goto); + new CommandRegister('%', "JUMP", " HERE", Command.Jump); + new CommandRegister('%', "KICK" , " [reason]", Command.Kick); + new CommandRegister('%', "NOCLIP", "", Command.NoClip); + new CommandRegister('%', "MODHORSE", " ", Command.ModHorse); + new CommandRegister('%', "DELITEM", " [username]", Command.DelItem); + new CommandRegister('%', "SHUTDOWN", "", Command.Shutdown); + new CommandRegister('%', "CALL", "HORSE", Command.CallHorse); + new CommandRegister('%', "MESSAGE", "", Command.Message); // 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); + new CommandRegister('%', "RULES", "", Command.Rules); + new CommandRegister('%', "PRISON", "", Command.Prison); + new CommandRegister('%', "STEALTH", "", Command.Stealth); + new CommandRegister('%', "BAN", " [reason]", Command.Ban); + new CommandRegister('%', "UNBAN", "", Command.UnBan); + new CommandRegister('%', "ESCAPE", "", Command.Escape); // 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; + new CommandRegister('!', "MUTE", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.Mute); + new CommandRegister('!', "UNMUTE", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.UnMute); + new CommandRegister('!', "HEAR", "ALL\nGLOBAL\nISLAND\nNEAR\nHERE\nBUDDY\nPM\nBR\nSOCIALS\nLOGINS", Command.UnMute); + new CommandRegister('!', "AUTOREPLY", "[message]", Command.AutoReply); + new CommandRegister('!', "QUIZ", "", Command.Quiz); + new CommandRegister('!', "WARP", "", Command.Warp); + new CommandRegister('!', "DANCE", "", Command.Dance); + new CommandRegister('!', "VERSION", "", Command.Version); } public static bool Message(string message, string[] args, User user) { + if (!user.Administrator) + return false; string serverAnnoucement = String.Join(" ", args); @@ -170,12 +86,13 @@ namespace HISP.Game.Chat return true; } public static bool Shutdown(string message, string[] args, User user) - { + { + if (!user.Administrator) + return false; byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); - - GameServer.ShutdownServer("Administrator initiated"); + user.LoggedinClient.SendPacket(chatPacket); + GameServer.ShutdownServer(); return true; } @@ -183,6 +100,8 @@ namespace HISP.Game.Chat { if (args.Length <= 0) return false; + if (!user.Administrator) + return false; if(args[0].ToUpper() == "OBJECT") { int itemId = 0; @@ -217,7 +136,7 @@ namespace HISP.Game.Chat if (itemId == Item.Present) itmInstance.Data = Item.GetRandomItem().Id; - client.User.Inventory.AddIgnoringFull(itmInstance); + client.LoggedinUser.Inventory.AddIgnoringFull(itmInstance); } } } @@ -326,7 +245,7 @@ namespace HISP.Game.Chat } msg:; byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -335,6 +254,8 @@ namespace HISP.Game.Chat if (args.Length <= 0) return false; + if (!user.Administrator && !user.Moderator) + return false; try { @@ -355,7 +276,7 @@ namespace HISP.Game.Chat else { User player = findNamePartial(swfUser); - player.Client.SendPacket(packetBytes); + player.LoggedinClient.SendPacket(packetBytes); } } catch (Exception) @@ -364,7 +285,7 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -373,6 +294,8 @@ namespace HISP.Game.Chat { if(args.Length <= 0) return false; + if(!user.Administrator && !user.Moderator) + return false; try{ string userName = args[0]; @@ -386,7 +309,7 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -395,17 +318,18 @@ namespace HISP.Game.Chat { // Get current version and send to client byte[] versionPacket = PacketBuilder.CreateChat(ServerVersion.GetBuildString(), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(versionPacket); + user.LoggedinClient.SendPacket(versionPacket); byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatPlayerCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); 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]; @@ -425,43 +349,53 @@ namespace HISP.Game.Chat } try{ User bannedUser = GameServer.GetUserByName(args[0]); - bannedUser.Client.Kick(Messages.KickReasonBanned); + bannedUser.LoggedinClient.Kick(Messages.KickReasonBanned); } catch(KeyNotFoundException){}; byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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) + Messages.ModIsleMessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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; @@ -471,7 +405,7 @@ namespace HISP.Game.Chat toSend.Teleport(Map.RulesIsleX, Map.RulesIsleY); byte[] studyTheRulesMsg = PacketBuilder.CreateChat(Messages.RulesIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - toSend.Client.SendPacket(studyTheRulesMsg); + toSend.LoggedinClient.SendPacket(studyTheRulesMsg); } catch (KeyNotFoundException) { @@ -479,12 +413,14 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message)+Messages.FormatRulesCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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; @@ -495,7 +431,7 @@ namespace HISP.Game.Chat toSend.Teleport(Map.PrisonIsleX, Map.PrisonIsleY); byte[] dontDoTheTime = PacketBuilder.CreateChat(Messages.PrisonIsleSentMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - toSend.Client.SendPacket(dontDoTheTime); + toSend.LoggedinClient.SendPacket(dontDoTheTime); } catch (KeyNotFoundException) { @@ -503,12 +439,14 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message) + Messages.FormatPrisonCommandMessage(args[0]), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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; @@ -520,11 +458,11 @@ namespace HISP.Game.Chat if (args.Length >= 2) { string reason = string.Join(" ", args, 1, args.Length - 1); - toKick.Client.Kick(reason); + toKick.LoggedinClient.Kick(reason); } else { - toKick.Client.Kick(Messages.KickReasonKicked); + toKick.LoggedinClient.Kick(Messages.KickReasonKicked); } } catch (KeyNotFoundException) @@ -533,13 +471,15 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } public static bool Jump(string message, string[] args, User user) { - if (args.Length < 2) + if (args.Length <= 2) + return false; + if (!user.Administrator) return false; @@ -555,7 +495,7 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -563,6 +503,8 @@ namespace HISP.Game.Chat { if (args.Length <= 0) return false; + if (!user.Administrator) + return false; int itemId = 0; try @@ -588,7 +530,7 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -596,6 +538,8 @@ namespace HISP.Game.Chat { if (args.Length <= 0) return false; + if (!user.Administrator) + return false; if(args[0].ToUpper() == "PLAYER") { if(args.Length < 2) @@ -684,13 +628,16 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + 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; @@ -761,7 +708,7 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatAdminCommandCompleteMessage(message), PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -819,19 +766,21 @@ namespace HISP.Game.Chat } playSwf:; - byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - user.Client.SendPacket(swfPacket); + byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE); + user.LoggedinClient.SendPacket(swfPacket); sendText:; byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } public static bool CallHorse(string message, string[] args, User user) { + if (!user.Administrator) + return false; if (args.Length <= 0) return false; @@ -856,7 +805,7 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -870,16 +819,16 @@ namespace HISP.Game.Chat if (replyMessage.Length > 1024) { byte[] tooLong = PacketBuilder.CreateChat(Messages.AutoReplyTooLong, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(tooLong); + user.LoggedinClient.SendPacket(tooLong); return false; } - Object violationReason = ChatMsg.FilterMessage(replyMessage); + Object violationReason = Chat.FilterMessage(replyMessage); if (violationReason != null) { byte[] hasVios = PacketBuilder.CreateChat(Messages.AutoReplyHasViolations, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(hasVios); + user.LoggedinClient.SendPacket(hasVios); return false; } @@ -887,7 +836,7 @@ namespace HISP.Game.Chat user.AutoReplyText = replyMessage; byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } public static bool Dance(string message, string[] args, User user) @@ -901,7 +850,7 @@ namespace HISP.Game.Chat user.ActiveDance = new Dance(user, moves); byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -912,7 +861,7 @@ namespace HISP.Game.Chat if(user.InRealTimeQuiz) { byte[] cantEnterRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventAlreadyEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(cantEnterRealTimeQuiz); + user.LoggedinClient.SendPacket(cantEnterRealTimeQuiz); return false; } if (quizActive) @@ -924,24 +873,24 @@ namespace HISP.Game.Chat if(participent.Quit) { byte[] quizQuit = PacketBuilder.CreateChat(Messages.EventQuitRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(quizQuit); + user.LoggedinClient.SendPacket(quizQuit); return false; } participent.UpdateParticipent(); byte[] enteredRealTimeQuiz = PacketBuilder.CreateChat(Messages.EventEnteredRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(enteredRealTimeQuiz); + user.LoggedinClient.SendPacket(enteredRealTimeQuiz); byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } else { byte[] quizUnavailable = PacketBuilder.CreateChat(Messages.EventUnavailableRealTimeQuiz, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(quizUnavailable); + user.LoggedinClient.SendPacket(quizUnavailable); return false; } @@ -1020,7 +969,7 @@ namespace HISP.Game.Chat } byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } @@ -1098,7 +1047,7 @@ namespace HISP.Game.Chat byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT); - user.Client.SendPacket(chatPacket); + user.LoggedinClient.SendPacket(chatPacket); return true; } diff --git a/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs b/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs index 9868011..d92496f 100755 --- a/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs +++ b/HorseIsleServer/LibHISP/Game/Chat/CommandRegister.cs @@ -15,43 +15,19 @@ namespace HISP.Game.Chat 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) + public Func CmdCallback; + public CommandRegister(char cmdLetter, string cmdName, string cmdUsage, Func cmdCallback) { - this.CmdLetter = cmdLetter; - this.CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture).Trim(); - this.CmdUsage = cmdUsage; - - this.CmdRequiresMod = cmdRequiresMod; - this.CmdRequiresAdmin = cmdRequiresAdmin; - - this.commandCallback = cmdCallback; + CmdLetter = cmdLetter; + CmdName = cmdName.ToUpper(CultureInfo.InvariantCulture); + CmdCallback = cmdCallback; + CmdUsage = cmdUsage; 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/Events/IsleCardTradingGame.cs b/HorseIsleServer/LibHISP/Game/Events/IsleCardTradingGame.cs index 2c9812b..288669d 100755 --- 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 index d49c8fd..71819a2 100755 --- a/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs +++ b/HorseIsleServer/LibHISP/Game/Events/ModsRevenge.cs @@ -148,8 +148,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 index 63a6dee..6807f25 100755 --- 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 index f172557..6dd2a86 100755 --- a/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs +++ b/HorseIsleServer/LibHISP/Game/Events/RealTimeQuiz.cs @@ -48,7 +48,7 @@ namespace HISP.Game.Events return; byte[] realTimeQuizQuestion = PacketBuilder.CreateMeta(Meta.BuildRealTimeQuiz(this)); - this.UserInstance.Client.SendPacket(realTimeQuizQuestion); + this.UserInstance.LoggedinClient.SendPacket(realTimeQuizQuestion); } public void CheckAnswer(string answer) @@ -160,7 +160,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 +219,7 @@ namespace HISP.Game.Events participent.UserInstance.InRealTimeQuiz = false; - GameServer.UpdateArea(participent.UserInstance.Client); + GameServer.UpdateArea(participent.UserInstance.LoggedinClient); int money = 0; @@ -238,12 +238,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 index 45f82db..0049830 100755 --- 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/WaterBalloonGame.cs b/HorseIsleServer/LibHISP/Game/Events/WaterBalloonGame.cs index 2d0752e..e6f0765 100755 --- 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/Items/Item.cs b/HorseIsleServer/LibHISP/Game/Items/Item.cs index 12dc35f..771c2e6 100755 --- 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/Map.cs b/HorseIsleServer/LibHISP/Game/Map.cs index 8d3b926..25ddf74 100755 --- 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 index 1b93c88..c00f83a 100755 --- a/HorseIsleServer/LibHISP/Game/Messages.cs +++ b/HorseIsleServer/LibHISP/Game/Messages.cs @@ -1,3051 +1,3039 @@ -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 +using System; +using System.Drawing; +using System.Globalization; + +using HISP.Security; +using HISP.Server; +using HISP.Util; + +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; + + // 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; + + // 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.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); + } + // 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() + { + return MotdFormat.Replace("%MOTD%", ConfigReader.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()); - } - - } -} + } + + // 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 index dcd0d4d..7039ea6 100755 --- a/HorseIsleServer/LibHISP/Game/Meta.cs +++ b/HorseIsleServer/LibHISP/Game/Meta.cs @@ -1154,9 +1154,9 @@ namespace HISP.Game { if (client.LoggedIn) { - if (client.User.Stealth) + if (client.LoggedinUser.Stealth) continue; - onlineUsers.Add(client.User); + onlineUsers.Add(client.LoggedinUser); } } @@ -1189,17 +1189,17 @@ namespace HISP.Game { if (client.LoggedIn) { - if (client.User.Stealth) + if (client.LoggedinUser.Stealth) continue; - bool isYou = (client.User.Id == currentUser.Id); + bool isYou = (client.LoggedinUser.Id == currentUser.Id); - int icon = client.User.GetPlayerListIcon(); + int icon = client.LoggedinUser.GetPlayerListIcon(); string iconFormat = ""; 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.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); } } @@ -1735,7 +1735,7 @@ namespace HISP.Game string swfModule = ranch.GetSwf(mine); byte[] moduleSwf = PacketBuilder.CreateSwfModule(swfModule, PacketBuilder.PACKET_SWF_MODULE_FORCE); - user.Client.SendPacket(moduleSwf); + user.LoggedinClient.SendPacket(moduleSwf); if (mine) // This is My DS. { diff --git a/HorseIsleServer/LibHISP/Game/Multiroom.cs b/HorseIsleServer/LibHISP/Game/Multiroom.cs index 085138a..b4937db 100755 --- a/HorseIsleServer/LibHISP/Game/Multiroom.cs +++ b/HorseIsleServer/LibHISP/Game/Multiroom.cs @@ -84,7 +84,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 +101,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/Quest.cs b/HorseIsleServer/LibHISP/Game/Quest.cs index 4d2ad55..9104f6f 100755 --- a/HorseIsleServer/LibHISP/Game/Quest.cs +++ b/HorseIsleServer/LibHISP/Game/Quest.cs @@ -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); } } @@ -264,8 +264,8 @@ namespace HISP.Game // Is cloud isles quest? if (quest.Id == CloudIslesQuest) { - byte[] swfLoadPacket = PacketBuilder.CreateSwfModule("ballooncutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); - user.Client.SendPacket(swfLoadPacket); + byte[] swfLoadPacket = PacketBuilder.CreateSwfModule("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 index 372acf7..5a768a9 100755 --- a/HorseIsleServer/LibHISP/Game/Ranch.cs +++ b/HorseIsleServer/LibHISP/Game/Ranch.cs @@ -1,500 +1,489 @@ -using HISP.Game.Inventory; -using HISP.Game.Items; -using HISP.Player; -using HISP.Server; +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 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 = 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); + } + } + + 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 index cc154ed..3bed926 100755 --- 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 index a56f712..f008fb4 100755 --- a/HorseIsleServer/LibHISP/Game/Services/Auction.cs +++ b/HorseIsleServer/LibHISP/Game/Services/Auction.cs @@ -38,7 +38,7 @@ namespace HISP.Game.Services if(BidUser.HorseInventory.HorseList.Length >= BidUser.MaxHorses) { byte[] tooManyHorses = PacketBuilder.CreateChat(Messages.AuctionYouHaveTooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(tooManyHorses); + BidUser.LoggedinClient.SendPacket(tooManyHorses); return; } @@ -47,7 +47,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 +56,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 +78,7 @@ namespace HISP.Game.Services if(entry.RandomId != AuctionItem.RandomId && entry.HighestBidder == BidUser.Id) { byte[] cantWinTooMuch = PacketBuilder.CreateChat(Messages.AuctionOnlyOneWinningBidAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(cantWinTooMuch); + BidUser.LoggedinClient.SendPacket(cantWinTooMuch); return; } } @@ -92,7 +92,7 @@ namespace HISP.Game.Services { User oldBidder = GameServer.GetUserById(AuctionItem.HighestBidder); byte[] outbidMessage = PacketBuilder.CreateChat(Messages.FormatAuctionYourOutbidBy(BidUser.Username, AuctionItem.HighestBid), PacketBuilder.CHAT_BOTTOM_RIGHT); - oldBidder.Client.SendPacket(outbidMessage); + oldBidder.LoggedinClient.SendPacket(outbidMessage); } } @@ -105,7 +105,7 @@ namespace HISP.Game.Services } byte[] bidPlacedMsg = PacketBuilder.CreateChat(yourBidRaisedTo, PacketBuilder.CHAT_BOTTOM_RIGHT); - BidUser.Client.SendPacket(bidPlacedMsg); + BidUser.LoggedinClient.SendPacket(bidPlacedMsg); } @@ -152,7 +152,7 @@ namespace HISP.Game.Services User auctionRunner = GameServer.GetUserById(highestBidder); auctionRunner.HorseInventory.UnHide(Horse.RandomId); byte[] notSold = PacketBuilder.CreateChat(Messages.AuctionNoHorseBrought, PacketBuilder.CHAT_BOTTOM_RIGHT); - auctionRunner.Client.SendPacket(notSold); + auctionRunner.LoggedinClient.SendPacket(notSold); } return; } @@ -162,7 +162,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 +175,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); } diff --git a/HorseIsleServer/LibHISP/Game/Services/Shop.cs b/HorseIsleServer/LibHISP/Game/Services/Shop.cs index a29485a..c8216cd 100755 --- 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/SwfModules/Brickpoet.cs b/HorseIsleServer/LibHISP/Game/SwfModules/Brickpoet.cs index a207306..d95c123 100755 --- 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/Treasure.cs b/HorseIsleServer/LibHISP/Game/Treasure.cs index 7035b9f..71ab958 100755 --- 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 index 6b03254..c8705b1 100755 --- 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); - 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 index 60190d3..cd783b1 100755 --- 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); } } diff --git a/HorseIsleServer/LibHISP/LibHISP.csproj b/HorseIsleServer/LibHISP/LibHISP.csproj index fec083e..0d9798f 100755 --- a/HorseIsleServer/LibHISP/LibHISP.csproj +++ b/HorseIsleServer/LibHISP/LibHISP.csproj @@ -28,9 +28,9 @@ - - - + + + @@ -42,7 +42,7 @@ false
- net8.0 + net7.0 false true OnBuildSuccess @@ -57,13 +57,7 @@ 3 1701;1702;2026;IL2026 - - - partial - false - true - - + win-x86 true diff --git a/HorseIsleServer/LibHISP/Player/Award.cs b/HorseIsleServer/LibHISP/Player/Award.cs index be049de..cc6e32e 100755 --- a/HorseIsleServer/LibHISP/Player/Award.cs +++ b/HorseIsleServer/LibHISP/Player/Award.cs @@ -1,100 +1,100 @@ -using HISP.Server; +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 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.LoggedinClient.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); + } + + } + + + + } +} diff --git a/HorseIsleServer/LibHISP/Player/Dance.cs b/HorseIsleServer/LibHISP/Player/Dance.cs index e688ad4..9ce152c 100755 --- 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/Friends.cs b/HorseIsleServer/LibHISP/Player/Friends.cs index bada4a4..d6abe2c 100755 --- a/HorseIsleServer/LibHISP/Player/Friends.cs +++ b/HorseIsleServer/LibHISP/Player/Friends.cs @@ -77,19 +77,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 +102,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/Mailbox.cs b/HorseIsleServer/LibHISP/Player/Mailbox.cs index 8b6c726..377172e 100755 --- a/HorseIsleServer/LibHISP/Player/Mailbox.cs +++ b/HorseIsleServer/LibHISP/Player/Mailbox.cs @@ -68,8 +68,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 +87,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/Trade.cs b/HorseIsleServer/LibHISP/Player/Trade.cs index c978364..ec6790e 100755 --- 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 index 802f76f..2471f49 100755 --- a/HorseIsleServer/LibHISP/Player/User.cs +++ b/HorseIsleServer/LibHISP/Player/User.cs @@ -1,633 +1,587 @@ -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); +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 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 Helper.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); } // Insert LGBT Patch here @@ -639,117 +593,118 @@ namespace HISP.Player 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); - } - - } - } - } - - } - } -} + } + + 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 index cb52358..3cdb542 100755 --- a/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs +++ b/HorseIsleServer/LibHISP/Properties/AssemblyInfo.cs @@ -30,8 +30,8 @@ using System.Runtime.InteropServices; // // 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")] +[assembly: AssemblyVersion("1.7.140.0")] +[assembly: AssemblyFileVersion("1.7.140.0")] diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM.pubxml index e757f4e..d798936 100755 --- 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\Android\net7.0\android-arm\publish\ FileSystem - net8.0 + net7.0 android-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml index a379f96..9bbd80a 100755 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/AndroidARM64.pubxml +++ b/HorseIsleServer/LibHISP/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\net7.0\android-arm64\publish\ FileSystem - net8.0 + net7.0 android-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Linux64.pubxml index 0a28cea..d5e9a4b 100755 --- 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\net7.0\linux-x64\publish\ FileSystem - net8.0 + net7.0 linux-x64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM.pubxml index 3be6fc1..f73fd7d 100755 --- 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\net7.0\linux-arm\publish\ FileSystem - net8.0 + net7.0 linux-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/LinuxARM64.pubxml index 2ebd582..856d1c9 100755 --- 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\net7.0\linux-arm64\publish\ FileSystem - net8.0 + net7.0 linux-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Osx64.pubxml index da4bed5..e81e62c 100755 --- 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\net7.0\osx-x64\publish\ FileSystem - net8.0 + net7.0 osx-x64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/OsxARM64.pubxml index 49b7a87..d2dea28 100755 --- 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\net7.0\osx-arm64\publish\ FileSystem - net8.0 + net7.0 osx-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win32.pubxml index 400c86c..232eba4 100755 --- 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\net7.0\win-x86\publish\ FileSystem - net8.0 + net7.0 win-x86 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/Win64.pubxml index b1a750a..98a5535 100755 --- 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\net7.0\win-x64\publish\ FileSystem - net8.0 + net7.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 index 1960b28..da50e60 100755 --- 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\net7.0\win-arm\publish\ FileSystem - net8.0 + net7.0 win-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/WinARM64.pubxml index 8dca620..92a8fd5 100755 --- 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\net7.0\win-arm64\publish\ FileSystem - net8.0 + net7.0 win-arm64 True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml index 0673054..d1b7b51 100755 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM - bin\arm\iOS\net8.0\ios-arm\publish\ + bin\arm\iOS\net7.0\ios-arm\publish\ FileSystem - net8.0 + net7.0 ios-arm True diff --git a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml index 83b9e1d..6e41855 100755 --- a/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml +++ b/HorseIsleServer/LibHISP/Properties/PublishProfiles/iOSARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ + bin\arm64\iOS\net7.0\ios-arm64\publish\ FileSystem - net8.0 + net7.0 ios-arm64 True diff --git a/HorseIsleServer/LibHISP/Resources/server.properties b/HorseIsleServer/LibHISP/Resources/server.properties index 8797574..b7a6ff6 100755 --- a/HorseIsleServer/LibHISP/Resources/server.properties +++ b/HorseIsleServer/LibHISP/Resources/server.properties @@ -2,15 +2,11 @@ # Horse Isle Server Configuration # ======================= # -# HISP was Created and Developed by Li / SilicaAndPina +# HISP was Created and Developed by SilicaAndPina # However it is NOT COPYRIGHTED! This software is in the Public Domain! # - -# ======================= -# Network -# ======================= - # 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 defaults: (on beta.horseisle.com: 12321, on pinto.horseisle.com: 443) @@ -18,15 +14,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 +26,16 @@ 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 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 + + # ======================= # Security # ======================= @@ -74,15 +71,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 index 0fb02bf..b74cce3 100755 --- 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/CrossDomainPolicy.cs b/HorseIsleServer/LibHISP/Security/CrossDomainPolicy.cs index 75ab62a..ef84fe1 100755 --- 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 index d64d203..20e1da5 100755 --- a/HorseIsleServer/LibHISP/Security/RandomID.cs +++ b/HorseIsleServer/LibHISP/Security/RandomID.cs @@ -1,27 +1,27 @@ 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) +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; - } - } -} + rndmIdMutex.ReleaseMutex(); + + return rndmId; + } + } +} diff --git a/HorseIsleServer/LibHISP/Server/ConfigReader.cs b/HorseIsleServer/LibHISP/Server/ConfigReader.cs index e0cf3fc..224377e 100755 --- a/HorseIsleServer/LibHISP/Server/ConfigReader.cs +++ b/HorseIsleServer/LibHISP/Server/ConfigReader.cs @@ -1,142 +1,141 @@ -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); +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 string ModsFolder = "mods"; + 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 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 "fix_offical_bugs": + FixOfficalBugs = data == "true"; + break; + case "enable_word_filter": + EnableSwearFilter = data == "true"; 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; - } - - - - } - - - } - - } -} + case "mods_folder": + ModsFolder = data; + 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 index eae0151..c2d73a3 100755 --- a/HorseIsleServer/LibHISP/Server/DataFixerUpper.cs +++ b/HorseIsleServer/LibHISP/Server/DataFixerUpper.cs @@ -39,6 +39,7 @@ namespace HISP.Server Database.TryExecuteSqlQuery("UPDATE World SET LastLoadedInVersion=\"v1.7.20\";"); } + public static void FixUpDb() { string lastVersionStr = Database.GetLastLoadedVersion(); diff --git a/HorseIsleServer/LibHISP/Server/Database.cs b/HorseIsleServer/LibHISP/Server/Database.cs index a90d761..f038bc1 100755 --- a/HorseIsleServer/LibHISP/Server/Database.cs +++ b/HorseIsleServer/LibHISP/Server/Database.cs @@ -3545,6 +3545,8 @@ namespace HISP.Server } } + + public static void SetJewelrySlot1(int playerId, int itemId) { using (DbConnection db = connectDb()) @@ -4126,41 +4128,7 @@ namespace HISP.Server 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) + public static bool IsUserAdmin(int playerId) { using (DbConnection db = connectDb()) { @@ -4176,7 +4144,7 @@ namespace HISP.Server return admin; } } - public static bool GetUserSubscribed(int playerId) + public static bool IsUserSubscribed(int playerId) { if (ConfigReader.AllUsersSubbed) return true; @@ -4471,38 +4439,6 @@ namespace HISP.Server } } - 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()) @@ -4901,7 +4837,7 @@ namespace HISP.Server } - public static bool CheckUsernameIsModerator(string username) + public static bool CheckUserIsModerator(string username) { using (DbConnection db = connectDb()) { @@ -4925,7 +4861,7 @@ namespace HISP.Server } - public static bool CheckUsernameIsAdmin(string username) + public static bool CheckUserIsAdmin(string username) { using (DbConnection db = connectDb()) { diff --git a/HorseIsleServer/LibHISP/Server/Entry.cs b/HorseIsleServer/LibHISP/Server/Entry.cs index 5f1e530..9d73d60 100755 --- a/HorseIsleServer/LibHISP/Server/Entry.cs +++ b/HorseIsleServer/LibHISP/Server/Entry.cs @@ -29,7 +29,7 @@ namespace HISP.Server public static void RegisterCrashHandler() { -#if (!OS_DEBUG) +#if (!DEBUG) AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(HispCrashHandler); #endif } @@ -39,7 +39,7 @@ namespace HISP.Server RegisterCrashHandler(); Console.Title = ServerVersion.GetBuildString(); ConfigReader.OpenConfig(); - CrossDomainPolicy.GetPolicyFile(); + CrossDomainPolicy.GetPolicy(); Database.OpenDatabase(); GameDataJson.ReadGamedata(); @@ -77,14 +77,14 @@ namespace HISP.Server 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"; + string crashMsg = becauseRustWont[execpt.GetHashCode() % becauseRustWont.Length] + "\r\n"; + crashMsg += "HISP HAS CRASHED" + "\r\n"; + crashMsg += "Build: " + ServerVersion.GetBuildString() + "\r\n"; + crashMsg += "Unhandled Exception: " + execpt.Message + "\r\n"; + crashMsg += execpt.StackTrace + "\r\n"; Logger.CrashPrint(crashMsg); - + } } } diff --git a/HorseIsleServer/LibHISP/Server/GameClient.cs b/HorseIsleServer/LibHISP/Server/GameClient.cs index 749c1c3..581b62a 100755 --- a/HorseIsleServer/LibHISP/Server/GameClient.cs +++ b/HorseIsleServer/LibHISP/Server/GameClient.cs @@ -1,13 +1,13 @@ 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.Util; -using HISP.Server.Network; namespace HISP.Server { @@ -22,25 +22,17 @@ namespace HISP.Server } } - private ITransport networkTransport; - + public Socket ClientSocket; + public string RemoteIp; private bool loggedIn = false; - - public string RemoteIp - { - get - { - return networkTransport.Ip; - } - } public bool LoggedIn { get { bool login = loggedIn; - if (User == null) + if (LoggedinUser == null) return false; - if (User.Client == null) + if (LoggedinUser.LoggedinClient == null) return false; return login; } @@ -49,7 +41,7 @@ namespace HISP.Server loggedIn = value; } } - public User User; + public User LoggedinUser; private Timer keepAliveTimer; private Timer timeoutTimer; @@ -58,7 +50,7 @@ namespace HISP.Server private Timer kickTimer; private Timer minuteTimer; - + private bool isDisconnecting = false; private int timeoutInterval = 95 * 1000; private int totalMinutesElapsed = 0; @@ -66,22 +58,36 @@ namespace HISP.Server 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); - networkTransport = new Hybrid(); - networkTransport.Accept(clientSocket, parsePackets, disconnectHandler); - Logger.DebugPrint(networkTransport.Name + " : Client connected @ " + networkTransport.Ip); - + 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(string reason) + public static void OnShutdown() { try { @@ -93,43 +99,32 @@ namespace HISP.Server for (int i = 0; i < 2; i++) { ItemInstance rubyItem = new ItemInstance(Item.Ruby); - client.User.Inventory.AddIgnoringFull(rubyItem); + client.LoggedinUser.Inventory.AddIgnoringFull(rubyItem); } - client.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; - Logger.DebugPrint("Kicking: " + client.User.Username); + client.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.GameUpdates).Count++; + Logger.DebugPrint("Kicking: " + client.LoggedinUser.Username); } - client.Kick("Server shutdown: "+reason); + client.Kick("Server shutdown."); + } } 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)); + try{ + do + { + Socket eSocket = e.AcceptSocket; + if(eSocket != null) + new GameClient(eSocket); + e.AcceptSocket = null; + + if(GameServer.ServerSocket == null) + return; + } while (!GameServer.ServerSocket.AcceptAsync(e)); + }catch(ObjectDisposedException) {} // server shutdown } private void timeoutTimerTick(object state) { @@ -139,8 +134,20 @@ namespace HISP.Server } } - private void disconnectHandler() + 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) @@ -165,23 +172,63 @@ namespace HISP.Server } // Call OnDisconnect - + connectedClients.Remove(this); GameServer.OnDisconnect(this); LoggedIn = false; + } - public void Disconnect() + + + private void receivePackets(object sender, SocketAsyncEventArgs e) { - if(!networkTransport.Disconnected) - networkTransport.Disconnect(); + 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 " + User.Username); + Logger.DebugPrint("Sending keep-alive packet to " + LoggedinUser.Username); byte[] updatePacket = PacketBuilder.CreateKeepAlive(); SendPacket(updatePacket); - keepAliveTimer.Change(oneMinute, oneMinute); + if(!isDisconnecting && keepAliveTimer != null) // wtf how is this still a problem? + keepAliveTimer.Change(oneMinute, oneMinute); } private void minuteTimerTick(object state) { @@ -191,20 +238,20 @@ namespace HISP.Server GameServer.UpdatePlayer(this); - User.CanUseAdsChat = true; - User.FreeMinutes -= 1; + LoggedinUser.CanUseAdsChat = true; + LoggedinUser.FreeMinutes -= 1; GameServer.DoItemPurchases(this); if (totalMinutesElapsed % 2 == 0) { - User.TotalGlobalChatMessages++; + LoggedinUser.TotalGlobalChatMessages++; } - if (User.FreeMinutes <= 0) + if (LoggedinUser.FreeMinutes <= 0) { - User.FreeMinutes = 0; - if (!User.Subscribed && !User.Moderator && !User.Administrator) + LoggedinUser.FreeMinutes = 0; + if (!LoggedinUser.Subscribed && !LoggedinUser.Moderator && !LoggedinUser.Administrator) { Kick(Messages.KickReasonNoTime); return; @@ -223,11 +270,11 @@ namespace HISP.Server if (GameServer.RandomNumberGenerator.Next(0, 100) == 59) // RANDOM EVENT HAS OCCURED! { - RandomEvent.ExecuteRandomEvent(User); + RandomEvent.ExecuteRandomEvent(LoggedinUser); } bool gotoPrision = false; - foreach(HorseInstance horse in User.HorseInventory.HorseList) + foreach(HorseInstance horse in LoggedinUser.HorseInventory.HorseList) { if (totalMinutesElapsed % 2 == 0) { @@ -299,28 +346,28 @@ namespace HISP.Server SendPacket(horseReturned); if(tpX != 0 && tpY != 0) - User.Teleport(tpX, tpY); + LoggedinUser.Teleport(tpX, tpY); - if (User.CurrentlyRidingHorse != null) + if (LoggedinUser.CurrentlyRidingHorse != null) { - if(User.CurrentlyRidingHorse.RandomId == horse.RandomId) + if(LoggedinUser.CurrentlyRidingHorse.RandomId == horse.RandomId) { GameServer.StopRidingHorse(this); } } - if(User.LastViewedHorse != null) + if(LoggedinUser.LastViewedHorse != null) { - if(User.LastViewedHorse.RandomId == horse.RandomId) + if(LoggedinUser.LastViewedHorse.RandomId == horse.RandomId) { - User.LastViewedHorse = null; + LoggedinUser.LastViewedHorse = null; } } - User.HorseInventory.DeleteHorse(horse); + LoggedinUser.HorseInventory.DeleteHorse(horse); } @@ -331,21 +378,26 @@ namespace HISP.Server { byte[] sendToPrision = PacketBuilder.CreateChat(Messages.YouWereSentToPrisionIsle, PacketBuilder.CHAT_BOTTOM_RIGHT); SendPacket(sendToPrision); - User.Teleport(45, 35); + LoggedinUser.Teleport(45, 35); } if (totalMinutesElapsed % 5 == 0) - User.Thirst--; + LoggedinUser.Thirst--; if (totalMinutesElapsed % 15 == 0) - User.Hunger--; + LoggedinUser.Hunger--; if (totalMinutesElapsed % 15 == 0) - User.Tiredness--; + LoggedinUser.Tiredness--; } - minuteTimer.Change(oneMinute, oneMinute); + + + + if (!isDisconnecting) + minuteTimer.Change(oneMinute, oneMinute); + } private void warnTimerTick(object state) @@ -354,7 +406,7 @@ namespace HISP.Server byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatIdleWarningMessage(), PacketBuilder.CHAT_BOTTOM_RIGHT); SendPacket(chatPacket); if (LoggedIn) - User.Idle = true; + LoggedinUser.Idle = true; } private void kickTimerTick(object state) @@ -372,12 +424,12 @@ namespace HISP.Server { if (Client.LoggedIn) { - if (Client.User.Id == id) + if (Client.LoggedinUser.Id == id) Client.Kick(Messages.KickReasonDuplicateLogin); } } - User = new User(this, id); + LoggedinUser = new User(this, id); LoggedIn = true; Database.SetIpAddress(id, RemoteIp); @@ -387,14 +439,13 @@ namespace HISP.Server timeoutTimer = new Timer(new TimerCallback(timeoutTimerTick), null, timeoutInterval, timeoutInterval); } - private void parsePackets(byte[] packet) + private void parsePackets(byte[] Packet) { - if (packet.Length < 1) + if (Packet.Length < 1) { - Logger.ErrorPrint("Received an invalid packet (size: "+packet.Length+")"); - return; + Logger.ErrorPrint("Received an invalid packet (size: "+Packet.Length+")"); } - byte identifier = packet[0]; + byte identifier = Packet[0]; /* * Every time ive tried to fix this properly by just checking if its null or something @@ -413,7 +464,7 @@ namespace HISP.Server if (keepAliveTimer != null && identifier != PacketBuilder.PACKET_KEEP_ALIVE) { if (LoggedIn) - User.Idle = false; + LoggedinUser.Idle = false; keepAliveTimer.Change(oneMinute, oneMinute); } else @@ -444,14 +495,19 @@ namespace HISP.Server * this prevents the entire server from crashing * if theres an error in handling a particular packet. */ +#if (!DEBUG) try { +#endif 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.OnUserLogin(this, packet); + GameServer.OnLoginRequest(this, Packet); break; } } @@ -460,89 +516,87 @@ namespace HISP.Server switch (identifier) { case PacketBuilder.PACKET_LOGIN: - GameServer.OnUserInfoRequest(this, packet); + GameServer.OnUserInfoRequest(this, Packet); break; case PacketBuilder.PACKET_MOVE: - GameServer.OnMovementPacket(this, packet); + GameServer.OnMovementPacket(this, Packet); break; case PacketBuilder.PACKET_PLAYERINFO: - GameServer.OnPlayerInfoPacket(this, packet); + GameServer.OnPlayerInfoPacket(this, Packet); break; case PacketBuilder.PACKET_PLAYER: - GameServer.OnProfilePacket(this, packet); + GameServer.OnProfilePacket(this, Packet); break; case PacketBuilder.PACKET_CHAT: - GameServer.OnChatPacket(this, packet); + GameServer.OnChatPacket(this, Packet); break; case PacketBuilder.PACKET_CLICK: - GameServer.OnClickPacket(this, packet); + GameServer.OnClickPacket(this, Packet); break; case PacketBuilder.PACKET_KEEP_ALIVE: - GameServer.OnKeepAlive(this, packet); + GameServer.OnKeepAlive(this, Packet); break; case PacketBuilder.PACKET_TRANSPORT: - GameServer.OnTransportUsed(this, packet); + GameServer.OnTransportUsed(this, Packet); break; case PacketBuilder.PACKET_INVENTORY: - GameServer.OnInventoryRequested(this, packet); + GameServer.OnInventoryRequested(this, Packet); break; case PacketBuilder.PACKET_DYNAMIC_BUTTON: - GameServer.OnDynamicButtonPressed(this, packet); + GameServer.OnDynamicButtonPressed(this, Packet); break; case PacketBuilder.PACKET_DYNAMIC_INPUT: - GameServer.OnDynamicInputReceived(this, packet); + GameServer.OnDynamicInputReceived(this, Packet); break; case PacketBuilder.PACKET_ITEM_INTERACTION: - GameServer.OnItemInteraction(this, packet); + GameServer.OnItemInteraction(this, Packet); break; case PacketBuilder.PACKET_ARENA_SCORE: - GameServer.OnArenaScored(this, packet); + GameServer.OnArenaScored(this, Packet); break; case PacketBuilder.PACKET_QUIT: - GameServer.OnQuitPacket(this, packet); + GameServer.OnQuitPacket(this, Packet); break; case PacketBuilder.PACKET_NPC: - GameServer.OnNpcInteraction(this, packet); + GameServer.OnNpcInteraction(this, Packet); break; case PacketBuilder.PACKET_BIRDMAP: - GameServer.OnBirdMapRequested(this, packet); + GameServer.OnBirdMapRequested(this, Packet); break; case PacketBuilder.PACKET_SWFMODULE: - GameServer.OnSwfModuleCommunication(this, packet); + GameServer.OnSwfModuleCommunication(this, Packet); break; case PacketBuilder.PACKET_HORSE: - GameServer.OnHorseInteraction(this, packet); + GameServer.OnHorseInteraction(this, Packet); break; case PacketBuilder.PACKET_WISH: - GameServer.OnWish(this, packet); + GameServer.OnWish(this, Packet); break; case PacketBuilder.PACKET_RANCH: - GameServer.OnRanchPacket(this, packet); + GameServer.OnRanchPacket(this, Packet); break; case PacketBuilder.PACKET_AUCTION: - GameServer.OnAuctionPacket(this, packet); + GameServer.OnAuctionPacket(this, Packet); break; case PacketBuilder.PACKET_PLAYER_INTERACTION: - GameServer.OnPlayerInteration(this, packet); + GameServer.OnPlayerInteration(this, Packet); break; case PacketBuilder.PACKET_SOCIALS: - GameServer.OnSocialPacket(this, packet); + GameServer.OnSocialPacket(this, Packet); break; default: - Logger.ErrorPrint("Unimplemented packet: " + BitConverter.ToString(packet).Replace('-', ' ')); + Logger.ErrorPrint("Unimplemented Packet: " + BitConverter.ToString(Packet).Replace('-', ' ')); break; } } +#if (!DEBUG) } 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 + Logger.ErrorPrint("Unhandled Exception: " + e.ToString() + "\n" + e.Message + "\n" + e.StackTrace); + Kick("Unhandled Exception: " + e.ToString()); } +#endif } public void Kick(string Reason) @@ -554,10 +608,16 @@ namespace HISP.Server Logger.InfoPrint("CLIENT: "+RemoteIp+" KICKED for: "+Reason); } - public void SendPacket(byte[] packetData) + public void SendPacket(byte[] PacketData) { - if(!networkTransport.Disconnected) - networkTransport.Send(packetData); + try + { + ClientSocket.Send(PacketData); + } + catch (Exception) + { + Disconnect(); + } } } diff --git a/HorseIsleServer/LibHISP/Server/GameDataJson.cs b/HorseIsleServer/LibHISP/Server/GameDataJson.cs index c03f576..b2630a2 100755 --- a/HorseIsleServer/LibHISP/Server/GameDataJson.cs +++ b/HorseIsleServer/LibHISP/Server/GameDataJson.cs @@ -1,13 +1,6 @@ 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; @@ -15,26 +8,29 @@ 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; +using System.Dynamic; +using Newtonsoft.Json.Linq; namespace HISP.Server { public class GameDataJson { - private static dynamic gameData; - - private static void readGamedataFiles() + public static void ReadGamedata() { + dynamic gameData; 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) + foreach(string file in files) { - Logger.DebugPrint("Reading: " + file); + Logger.DebugPrint("Reading: "+file); string jsonData = File.ReadAllText(file); JObject thisData = (JObject)JsonConvert.DeserializeObject(jsonData); JObject jData = (JObject)gameData; @@ -52,13 +48,12 @@ namespace HISP.Server else { Logger.ErrorPrint("Could not find GAMEDATA, configured as; " + ConfigReader.GameData + " But no file or directory exists!"); - GameServer.ShutdownServer("Unable to find GAMEDATA"); + GameServer.ShutdownServer(); return; } - } + - private static void registerTowns() - { + // Register Towns int totalTowns = gameData.places.towns.Count; for (int i = 0; i < totalTowns; i++) { @@ -73,10 +68,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Town: " + town.Name + " X " + town.StartX + "-" + town.EndX + " Y " + town.StartY + "-" + town.EndY); World.Towns.Add(town); } - } - private static void registerZones() - { + // Register Zones int totalZones = gameData.places.zones.Count; for (int i = 0; i < totalZones; i++) { @@ -92,9 +85,7 @@ namespace HISP.Server World.Zones.Add(zone); } - } - private static void registerAreas() - { + // Register Areas int totalAreas = gameData.places.areas.Count; for (int i = 0; i < totalAreas; i++) { @@ -109,10 +100,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Area: " + area.Name + " X " + area.StartX + "-" + area.EndX + " Y " + area.StartY + "-" + area.EndY); World.Areas.Add(area); } - } - private static void registerIsles() - { + // Register Isles int totalIsles = gameData.places.isles.Count; for (int i = 0; i < totalIsles; i++) { @@ -128,10 +117,7 @@ namespace HISP.Server 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++) { @@ -145,9 +131,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Waypoint: " + waypoint.PosX.ToString() + ", " + waypoint.PosY.ToString() + " TYPE: " + waypoint.Type); World.Waypoints.Add(waypoint); } - } - private static void registerSpecialTiles() - { + + // Register Special Tiles int totalSpecialTiles = gameData.places.special_tiles.Count; for (int i = 0; i < totalSpecialTiles; i++) { @@ -168,50 +153,46 @@ namespace HISP.Server Logger.DebugPrint("Registered Special Tile: " + specialTile.Title + " X " + specialTile.X + " Y: " + specialTile.Y); World.SpecialTiles.Add(specialTile); } - } - private static void registerChatWarningReasons() - { + + // Register Filter Reasons int totalReasons = gameData.messages.chat.reason_messages.Count; for (int i = 0; i < totalReasons; i++) { - ChatMsg.Reason reason = new ChatMsg.Reason(); + Chat.Reason reason = new Chat.Reason(); reason.Name = gameData.messages.chat.reason_messages[i].name; reason.Message = gameData.messages.chat.reason_messages[i].message; - ChatMsg.AddReason(reason); + Chat.AddReason(reason); Logger.DebugPrint("Registered Chat Warning Reason: " + reason.Name + " (Message: " + reason.Message + ")"); } + // Register Filters - } - private static void registerFilteredWords() - { int totalFilters = gameData.messages.chat.filter.Count; for (int i = 0; i < totalFilters; i++) { - ChatMsg.Filter filter = new ChatMsg.Filter(); + 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 = ChatMsg.GetReason((string)gameData.messages.chat.filter[i].reason_type); - ChatMsg.AddFilter(filter); + 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 + ")"); } - } - private static void registerWordCorrections() - { + + // Register Corrections int totalCorrections = gameData.messages.chat.correct.Count; for (int i = 0; i < totalCorrections; i++) { - ChatMsg.Correction correction = new ChatMsg.Correction(); + Chat.Correction correction = new Chat.Correction(); correction.FilteredWord = gameData.messages.chat.correct[i].word; correction.ReplacedWord = gameData.messages.chat.correct[i].new_word; - ChatMsg.AddCorrection(correction); + Chat.AddCorrection(correction); Logger.DebugPrint("Registered Word Correction: " + correction.FilteredWord + " to " + correction.ReplacedWord); } - } - private static void registerTransportPoints() - { + + // Register Transports + int totalTransportPoints = gameData.transport.transport_points.Count; for (int i = 0; i < totalTransportPoints; i++) { @@ -223,10 +204,7 @@ namespace HISP.Server 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++) { @@ -241,9 +219,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Transport Location: " + transportPlace.LocationTitle + " To Goto X: " + transportPlace.GotoX + " Y: " + transportPlace.GotoY); } - } - private static void registerItems() - { + + // Register Items int totalItems = gameData.item.item_list.Count; for (int i = 0; i < totalItems; i++) { @@ -280,9 +257,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Item ID: " + item.Id + " Name: " + item.Name + " spawns on: " + item.SpawnParamaters.SpawnOnTileType); Item.AddItemInfo(item); } - } - private static void registerThrowables() - { + // Register Throwables int totalThrowable = gameData.item.throwable.Count; for (int i = 0; i < totalThrowable; i++) { @@ -293,10 +268,8 @@ namespace HISP.Server throwableItem.HitYourselfMessage = gameData.item.throwable[i].message_hit_yourself; Item.AddThrowableItem(throwableItem); } - } - private static void registerNpcs() - { + // Register NPCs Logger.DebugPrint("Registering NPCS: "); int totalNpcs = gameData.npc_list.Count; for (int i = 0; i < totalNpcs; i++) @@ -371,10 +344,9 @@ namespace HISP.Server npcEntry.Chatpoints = chats.ToArray(); Npc.AddNpc(npcEntry); } - } - private static void registerQuests() - { + // Register Quests + Logger.DebugPrint("Registering Quests: "); int totalQuests = gameData.quest_list.Count; for (int i = 0; i < totalQuests; i++) @@ -444,14 +416,9 @@ namespace HISP.Server 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); + Logger.DebugPrint("Registered Quest: " + quest.Id + " - " + quest.Title); Quest.AddQuestEntry(quest); } - } - - private static void registerShops() - { int totalShops = gameData.shop_list.Count; for (int i = 0; i < totalShops; i++) @@ -465,10 +432,9 @@ namespace HISP.Server Logger.DebugPrint("Registered Shop ID: " + shop.Id + " Selling items at " + shop.SellPricePercentage + "% and buying at " + shop.BuyPricePercentage); } - } - private static void registerAwards() - { + // Register awards + int totalAwards = gameData.award_list.Count; Award.GlobalAwardList = new Award.AwardEntry[totalAwards]; for (int i = 0; i < totalAwards; i++) @@ -487,9 +453,9 @@ namespace HISP.Server Logger.DebugPrint("Registered Award ID: " + award.Id + " - " + award.Title); } - } - private static void registerAbuseReportReasons() - { + + // Register Abuse Report Reasons + int totalAbuseReportReasons = gameData.messages.meta.abuse_report.reasons.Count; for (int i = 0; i < totalAbuseReportReasons; i++) { @@ -500,23 +466,11 @@ namespace HISP.Server 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() - { + + // 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++) @@ -524,13 +478,13 @@ namespace HISP.Server 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); + Logger.DebugPrint("Registered Tile: " + i + " Passable: " + tile.Passable + " Type: " + tile.Type); terrainTiles.Add(tile); } Map.TerrainTiles = terrainTiles.ToArray(); - } - private static void registerInns() - { + + // Register Abuse Report Reasons + int totalInns = gameData.inns.Count; for (int i = 0; i < totalInns; i++) { @@ -542,10 +496,7 @@ namespace HISP.Server 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++) { @@ -557,10 +508,8 @@ namespace HISP.Server Logger.DebugPrint("Registered poet: " + entry.Id.ToString() + " word: " + entry.Word + " in room " + entry.Room.ToString()); } - } - private static void registerBreeds() - { + // Register Horse Breeds int totalBreeds = gameData.horses.breeds.Count; for (int i = 0; i < totalBreeds; i++) { @@ -591,10 +540,7 @@ namespace HISP.Server HorseInfo.AddBreed(horseBreed); Logger.DebugPrint("Registered Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name); } - } - - private static void registerBreedPricesPawneerOrder() - { + // Register Breed Prices @ Pawneer Order int totalBreedPrices = gameData.horses.pawneer_base_price.Count; for (int i = 0; i < totalBreedPrices; i++) { @@ -604,10 +550,7 @@ namespace HISP.Server 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++) { @@ -618,11 +561,6 @@ namespace HISP.Server 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++) { @@ -632,9 +570,8 @@ namespace HISP.Server Tracking.TrackedItemsStatsMenu.Add(trackedItem); Logger.DebugPrint("Registered Tracked Item: " + trackedItem.What + " value: " + trackedItem.Value); } - } - private static void registerVets() - { + // Register Services + int totalVets = gameData.services.vet.price_multipliers.Count; for (int i = 0; i < totalVets; i++) { @@ -643,10 +580,7 @@ namespace HISP.Server 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++) { @@ -657,10 +591,6 @@ namespace HISP.Server 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++) { @@ -673,10 +603,7 @@ namespace HISP.Server 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++) { @@ -689,10 +616,9 @@ namespace HISP.Server Barn barn = new Barn(id, tired_cost, hunger_cost, thirst_cost); Logger.DebugPrint("Registered Barn: " + barn.Id); } - } - private static void registerLibaryBooks() - { + + // Register Libary Books int totalBooks = gameData.books.Count; for (int i = 0; i < totalBooks; i++) { @@ -701,12 +627,11 @@ namespace HISP.Server 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); - } - } + Logger.DebugPrint("Registered Libary Book: " + book.Id + " " + book.Title + " by " + book.Author); - private static void registerCrafts() - { + } + + // Register Crafts int totalWorkshops = gameData.workshop.Count; for (int i = 0; i < totalWorkshops; i++) { @@ -735,10 +660,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Workshop at X: " + wkShop.X + " Y: " + wkShop.Y); } - } - - private static void registerRanchBuildings() - { + // Register Ranch Buildings int totalRanchBuildings = gameData.ranch.ranch_buildings.buildings.Count; for (int i = 0; i < totalRanchBuildings; i++) { @@ -758,10 +680,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Ranch Building: " + building.Title); } - } - - private static void registerRanchUpgrades() - { + // Register Ranch Upgrades int totalRanchUpgrades = gameData.ranch.ranch_buildings.upgrades.Count; for (int i = 0; i < totalRanchUpgrades; i++) { @@ -783,10 +702,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Ranch Upgrade: " + upgrade.Title); } - } - - private static void registerRanchs() - { + // Register Ranches int totalRanchLocations = gameData.ranch.ranch_locations.Count; for (int i = 0; i < totalRanchLocations; i++) { @@ -799,10 +715,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Ranch id " + id + " at X: " + ranch.X + " Y: " + ranch.Y); } - } - - private static void registerRiddlerRiddles() - { + // Register Riddles int totalRiddles = gameData.riddle_room.Count; for (int i = 0; i < totalRiddles; i++) { @@ -814,9 +727,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Riddler Riddle: " + riddlerRiddle.Riddle); } - } - private static void registerBBCodes() - { + + // Register BBCODE int totalBBocdes = gameData.bbcode.Count; for (int i = 0; i < totalBBocdes; i++) { @@ -825,9 +737,8 @@ namespace HISP.Server BBCode code = new BBCode(tag, meta); Logger.DebugPrint("Registered BBCODE: " + code.Tag + " to " + code.MetaTranslation); } - } - private static void registerTrainingPens() - { + + // Register Training Pens int totalTrainingPens = gameData.training_pens.Count; for (int i = 0; i < totalTrainingPens; i++) { @@ -844,10 +755,7 @@ namespace HISP.Server Logger.DebugPrint("Registered Training Pen: " + trainer.Id + " for " + trainer.ImprovesStat); } - } - - private static void registerArenas() - { + // Register Arenas int totalArenas = gameData.arena.arena_list.Count; for (int i = 0; i < totalArenas; i++) { @@ -862,10 +770,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Arena: " + arena.Id.ToString() + " as " + arena.Type); } Arena.ExpRewards = gameData.arena.arena_exp.ToObject(); - } - private static void registerLeasers() - { + // Register Leaser int totalLeasers = gameData.leaser.Count; for (int i = 0; i < totalLeasers; i++) { @@ -917,10 +823,8 @@ namespace HISP.Server Leaser.AddHorseLeaser(leaser); Logger.DebugPrint("Registered Leaser: " + leaser.LeaseId.ToString() + " For a " + leaser.HorseName); } - } - private static void registerSocials() - { + // Register Socials int totalSocials = gameData.social_types.Count; for (int i = 0; i < totalSocials; i++) { @@ -941,10 +845,8 @@ namespace HISP.Server Logger.DebugPrint("Registered Social: " + social.ButtonName); } } - } - private static void registerRealTimeRiddleEvents() - { + // Register Events : Real Time Riddle int totalRealTimeRiddles = gameData.events.real_time_riddle.Count; for (int i = 0; i < totalRealTimeRiddles; i++) { @@ -954,13 +856,11 @@ namespace HISP.Server 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() - { + // 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++) @@ -972,7 +872,7 @@ namespace HISP.Server quizCategory.Name = name; quizCategory.Questions = new RealTimeQuiz.QuizQuestion[totalQuestions]; - for (int ii = 0; ii < totalQuestions; ii++) + 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; @@ -984,9 +884,9 @@ namespace HISP.Server Logger.DebugPrint("Registered Real Time Quiz Category: " + name); } - } - private static void registerRandomEvents() - { + + // Register Random Event + int totalRandomEvent = gameData.events.random_events.Count; for (int i = 0; i < totalRandomEvent; i++) { @@ -998,69 +898,19 @@ namespace HISP.Server 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) + 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) + 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) + 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) + 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(); @@ -1088,10 +938,7 @@ namespace HISP.Server 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; + Chat.PrivateMessageSound = gameData.messages.chat.pm_sound; // New Users @@ -2022,7 +1869,7 @@ namespace HISP.Server 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.DirectChatFormatForModerators = gameData.messages.chat.for_others.dm_format_moderator; Messages.YouWereSentToPrisionIsle = gameData.messages.starved_horse; diff --git a/HorseIsleServer/LibHISP/Server/GameServer.cs b/HorseIsleServer/LibHISP/Server/GameServer.cs index 267c413..3ee3812 100755 --- a/HorseIsleServer/LibHISP/Server/GameServer.cs +++ b/HorseIsleServer/LibHISP/Server/GameServer.cs @@ -24,8 +24,8 @@ namespace HISP.Server { public class GameServer { - public static Socket ServerSocket; + public static Socket ServerSocket; public static int IdleTimeout; public static int IdleWarning; @@ -206,10 +206,10 @@ namespace HISP.Server 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); + if (!client.LoggedinUser.MajorPriority) + if(!client.LoggedinUser.MinorPriority) + UpdateArea(client); + byte[] BaseStatsPacketData = PacketBuilder.CreateMoneyPlayerCountAndMail(client.LoggedinUser.Money, GameServer.GetNumberOfPlayers(), client.LoggedinUser.MailBox.UnreadMailCount); client.SendPacket(BaseStatsPacketData); UpdateWorld(client); @@ -255,7 +255,17 @@ namespace HISP.Server * eg: OnMovementPacket is whenever the server receies a movement request from the client. */ - // HI1 Protocol + + 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) { @@ -264,304 +274,301 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requested Bird Map when not logged in."); return; } - if(packet.Length >= 2) + byte method = packet[1]; + switch(method) { - byte method = packet[1]; - switch (method) - { - case PacketBuilder.PLAYER_INTERACTION_TRADE_REJECT: - if (sender.User.TradingWith != null) - sender.User.TradingWith.CancelTrade(); + 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; - case PacketBuilder.PLAYER_INTERACTION_ACCEPT: - if (sender.User.TradingWith != null) - sender.User.TradingWith.AcceptTrade(); + } + + if(IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + sender.LoggedinUser.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 - 4); + playerId = -1; + try + { + playerId = int.Parse(playerIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to MUTE User ID NaN."); 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; + if (IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + if(!sender.LoggedinUser.MutePlayer.IsUserMuted(user)) + sender.LoggedinUser.MutePlayer.MuteUser(user); - byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildStatsMenu(user, true)); - sender.SendPacket(metaTag); - } + byte[] nowMuting = PacketBuilder.CreateChat(Messages.FormatNowMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(nowMuting); + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(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; - 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); + if (IsUserOnline(playerId)) + { + User user = GetUserById(playerId); + if (sender.LoggedinUser.MutePlayer.IsUserMuted(user)) + sender.LoggedinUser.MutePlayer.UnmuteUser(user); - byte[] nowMuting = PacketBuilder.CreateChat(Messages.FormatNowMutingPlayer(user.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.SendPacket(nowMuting); + 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); - } + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(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; - 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); + if(sender.LoggedinUser.Friends.IsFriend(playerId)) + { + sender.LoggedinUser.Friends.RemoveFriend(playerId); - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.User)); - sender.SendPacket(metaPacket); - } + byte[] friendRemoved = PacketBuilder.CreateChat(Messages.FormatAddBuddyRemoveBuddy(Database.GetUsername(playerId)), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(friendRemoved); + + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(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; - 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)) + 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) { - sender.User.Friends.RemoveFriend(playerId); + if (friendId == sender.LoggedinUser.Id) + continue; - 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(IsUserOnline(friendId)) { - 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++; - } + 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); - } + 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; - 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); - } + } + 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; - 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; - - } + if (packet.Length < 5) 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; + packetStr = Encoding.UTF8.GetString(packet); + string idStr = packetStr.Substring(2, packetStr.Length - 4); + char firstChar = idStr[0]; + switch(firstChar) + { + case '3': // Trade Money - if (user.PendingTradeTo == sender.User.Id) + if (sender.LoggedinUser.Bids.Length > 0) { - // 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); + 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.CreateMeta(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.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 - 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; + + } + 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) { @@ -576,7 +583,7 @@ namespace HISP.Server { case PacketBuilder.SOCIALS_MENU: string packetStr = Encoding.UTF8.GetString(packet); - string playerIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string playerIdStr = packetStr.Substring(2, packetStr.Length - 4); int playerId = -1; try { @@ -584,22 +591,22 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " tried to socialize with User ID NaN."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to socialize with User ID NaN."); break; } if(IsUserOnline(playerId)) { - sender.User.SocializingWith = GetUserById(playerId); + sender.LoggedinUser.SocializingWith = GetUserById(playerId); - sender.User.SocializingWith.AddSocailizedWith(sender.User); - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildSocialMenu(sender.User.CurrentlyRidingHorse != null)); + sender.LoggedinUser.SocializingWith.AddSocailizedWith(sender.LoggedinUser); + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildSocialMenu(sender.LoggedinUser.CurrentlyRidingHorse != null)); sender.SendPacket(metaPacket); } else { - Logger.ErrorPrint(sender.User.Username + " tried to socialize with User #"+playerId.ToString()+" but there not online."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to socialize with User #"+playerId.ToString()+" but there not online."); } break; case PacketBuilder.SOCIALS_USE: @@ -609,23 +616,23 @@ namespace HISP.Server * 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.LoggedinUser.SocializingWith != null && social.BaseSocialType.Type != "GROUP") { - if (sender.User.SocializingWith.MuteAll || sender.User.SocializingWith.MuteSocials) + 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.User.SocializingWith.MutePlayer.IsUserMuted(sender.User)) + if (sender.LoggedinUser.SocializingWith.MutePlayer.IsUserMuted(sender.LoggedinUser)) { 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) + 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); @@ -636,43 +643,43 @@ namespace HISP.Server if(social.ForEveryone != null) { - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y, true, true)) + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true)) { if (social.BaseSocialType.Type != "GROUP") - if (user.Id == sender.User.SocializingWith.Id) + if (user.Id == sender.LoggedinUser.SocializingWith.Id) continue; - if (user.Id == sender.User.Id) + if (user.Id == sender.LoggedinUser.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(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.User.SocializingWith != null) + if(sender.LoggedinUser.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); + 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.User.SocializingWith != null) - socialTarget = sender.User.SocializingWith.Username; + if (sender.LoggedinUser.SocializingWith != null) + socialTarget = sender.LoggedinUser.SocializingWith.Username; - byte[] msgSender = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForSender, socialTarget, sender.User.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); + byte[] msgSender = PacketBuilder.CreateChat(Messages.FormatSocialMessage(social.ForSender, socialTarget, sender.LoggedinUser.Username), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(msgSender); @@ -680,20 +687,20 @@ namespace HISP.Server if (social.SoundEffect != null) { - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y, true, true)) + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true)) { if (user.MuteAll || user.MuteSocials) continue; - byte[] soundEffect = PacketBuilder.CreatePlaySound(social.SoundEffect); - user.Client.SendPacket(soundEffect); + byte[] soundEffect = PacketBuilder.CreatePlaysoundPacket(social.SoundEffect); + user.LoggedinClient.SendPacket(soundEffect); } } break; default: - Logger.ErrorPrint(sender.User.Username + " unknown social: " + method.ToString("X") + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); + Logger.ErrorPrint(sender.LoggedinUser.Username + " unknown social: " + method.ToString("X") + " packet dump: " + BitConverter.ToString(packet).Replace("-", " ")); break; } @@ -706,9 +713,9 @@ namespace HISP.Server return; } - if(sender.User.Inventory.HasItemId(Item.Telescope)) + if(sender.LoggedinUser.Inventory.HasItemId(Item.Telescope)) { - byte[] birdMapPacket = PacketBuilder.CreateBirdMap(sender.User.X, sender.User.Y); + byte[] birdMapPacket = PacketBuilder.CreateBirdMap(sender.LoggedinUser.X, sender.LoggedinUser.Y); sender.SendPacket(birdMapPacket); } else @@ -725,9 +732,9 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent auction packet when not logged in."); return; } - if (packet.Length < 3) + if (packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid sized auction packet: " + BitConverter.ToString(packet).Replace("-", " ")); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized auction packet: " + BitConverter.ToString(packet).Replace("-", " ")); return; } byte method = packet[1]; @@ -755,9 +762,9 @@ namespace HISP.Server case PacketBuilder.AUCITON_BID_100M: bidAmount = 100000000; doBids:; - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if(tile.Code.StartsWith("AUCTION-")) @@ -765,7 +772,7 @@ namespace HISP.Server 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); + string auctionEntryStr = packetStr.Substring(2, packetStr.Length - 4); try { auctionEntryId = int.Parse(auctionEntryStr); @@ -779,7 +786,7 @@ namespace HISP.Server break; Auction.AuctionEntry entry = auctionRoom.GetAuctionEntry(auctionEntryId); - entry.Bid(sender.User, bidAmount); + entry.Bid(sender.LoggedinUser, bidAmount); UpdateAreaForAll(tile.X, tile.Y, true, null); } @@ -801,9 +808,9 @@ namespace HISP.Server return; } - if(packet.Length < 2) + if(packet.Length < 3) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid sized horse interaction packet: " + BitConverter.ToString(packet).Replace("-", " ")); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized horse interaction packet: " + BitConverter.ToString(packet).Replace("-", " ")); return; } @@ -811,23 +818,23 @@ namespace HISP.Server switch(method) { case PacketBuilder.HORSE_LIST: - sender.User.MajorPriority = true; - byte[] metaTags = PacketBuilder.CreateMeta(Meta.BuildHorseInventory(sender.User)); + sender.LoggedinUser.MajorPriority = true; + byte[] metaTags = PacketBuilder.CreateMeta(Meta.BuildHorseInventory(sender.LoggedinUser)); sender.SendPacket(metaTags); break; case PacketBuilder.HORSE_PROFILE: byte methodProfileEdit = packet[2]; if(methodProfileEdit == PacketBuilder.HORSE_PROFILE_EDIT) { - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseDescriptionEditMeta(sender.User.LastViewedHorse)); + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseDescriptionEditMeta(sender.LoggedinUser.LastViewedHorse)); sender.SendPacket(metaPacket); } else { - Logger.ErrorPrint(sender.User.Username + "Trying to edit description of no horse"); + Logger.ErrorPrint(sender.LoggedinUser.Username + "Trying to edit description of no horse"); } } else @@ -838,7 +845,7 @@ namespace HISP.Server 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); + string randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -846,28 +853,28 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseFeedInst = sender.User.HorseInventory.GetHorseById(randomId); + HorseInstance horseFeedInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseFeedInst; - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(horseFeedInst, sender.User)); + sender.LoggedinUser.LastViewedHorse = horseFeedInst; + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(horseFeedInst, sender.LoggedinUser)); sender.SendPacket(metaPacket); break; } else { - Logger.HackerPrint(sender.User.Username + " Tried to feed at a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -875,16 +882,18 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horsePetInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horsePetInst; + 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) { @@ -906,14 +915,14 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to feed at a non existant horse."); + Logger.HackerPrint(sender.LoggedinUser.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)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("VET-")) @@ -923,7 +932,7 @@ namespace HISP.Server Vet vet = Vet.GetVetById(vetId); int price = 0; - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) price += vet.CalculatePrice(horse.BasicStats.Health); if (price == 0) { @@ -931,15 +940,15 @@ namespace HISP.Server sender.SendPacket(notNeededMessagePacket); break; } - else if (sender.User.Money >= price) + else if (sender.LoggedinUser.Money >= price) { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + 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.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); } else @@ -957,7 +966,7 @@ namespace HISP.Server case PacketBuilder.HORSE_VET_SERVICE: randomId = 0; packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if (randomIdStr == "NaN") break; @@ -968,17 +977,17 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseVetServiceInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseVetServiceInst; + HorseInstance horseVetServiceInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = horseVetServiceInst; - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("VET-")) @@ -988,10 +997,10 @@ namespace HISP.Server Vet vet = Vet.GetVetById(vetId); int price = vet.CalculatePrice(horseVetServiceInst.BasicStats.Health); - if (sender.User.Money >= price) + if (sender.LoggedinUser.Money >= price) { horseVetServiceInst.BasicStats.Health = 1000; - sender.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatVetHorseAtFullHealthMessage(horseVetServiceInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(messagePacket); @@ -1011,14 +1020,14 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to use vet services on a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if (randomIdStr == "NaN") break; @@ -1029,17 +1038,17 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseFarrierServiceInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseFarrierServiceInst; + HorseInstance horseFarrierServiceInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = horseFarrierServiceInst; - if (World.InSpecialTile(sender.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("FARRIER-")) @@ -1065,10 +1074,10 @@ namespace HISP.Server msg = Messages.FormatFarrierPutOnIronShoesMessage(incAmount, 1000); } - if (sender.User.Money >= price) + if (sender.LoggedinUser.Money >= price) { horseFarrierServiceInst.BasicStats.Shoes = incAmount; - sender.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); byte[] messagePacket = PacketBuilder.CreateChat(msg, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(messagePacket); @@ -1088,13 +1097,13 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to use farrier services on a non existant horse."); + 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.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("FARRIER-")) @@ -1105,7 +1114,7 @@ namespace HISP.Server Farrier farrier = Farrier.GetFarrierById(farrierId); int totalPrice = 0; - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) { if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) { @@ -1113,16 +1122,16 @@ namespace HISP.Server } } - if (sender.User.Money >= totalPrice) + if (sender.LoggedinUser.Money >= totalPrice) { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) { if (horse.BasicStats.Shoes < farrier.SteelShoesAmount) { horse.BasicStats.Shoes = farrier.SteelShoesAmount; } } - sender.User.TakeMoney(totalPrice); + sender.LoggedinUser.TakeMoney(totalPrice); byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatFarrierPutOnSteelShoesAllMesssage(farrier.SteelShoesAmount, 1000), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(messagePacket); @@ -1142,7 +1151,7 @@ namespace HISP.Server case PacketBuilder.HORSE_GROOM_SERVICE: randomId = 0; packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if (randomIdStr == "NaN") break; @@ -1153,17 +1162,17 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance groomHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = groomHorseInst; + HorseInstance groomHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = groomHorseInst; - if (World.InSpecialTile(sender.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("GROOMER-")) @@ -1175,10 +1184,10 @@ namespace HISP.Server int price = groomer.CalculatePrice(groomHorseInst.BasicStats.Groom); - if (sender.User.Money >= price) + if (sender.LoggedinUser.Money >= price) { groomHorseInst.BasicStats.Groom = groomer.Max; - sender.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatHorseGroomedToBestAbilities(groomHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(messagePacket); @@ -1198,13 +1207,13 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to use groomer services on a non existant horse."); + 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.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("GROOMER-")) @@ -1215,7 +1224,7 @@ namespace HISP.Server int price = 0; int count = 0; - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) { if (horse.BasicStats.Groom < groomer.Max) { @@ -1229,16 +1238,16 @@ namespace HISP.Server sender.SendPacket(notNeededMessagePacket); break; } - else if (sender.User.Money >= price) + else if (sender.LoggedinUser.Money >= price) { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + 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.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); } else @@ -1256,7 +1265,7 @@ namespace HISP.Server case PacketBuilder.HORSE_BARN_SERVICE: randomId = 0; packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if (randomIdStr == "NaN") break; @@ -1267,17 +1276,17 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance barnHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = barnHorseInst; + HorseInstance barnHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = barnHorseInst; - if (World.InSpecialTile(sender.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if (tile.Code != null) { if (tile.Code.StartsWith("BARN-")) @@ -1289,12 +1298,12 @@ namespace HISP.Server int price = barn.CalculatePrice(barnHorseInst.BasicStats.Tiredness, barnHorseInst.BasicStats.Hunger, barnHorseInst.BasicStats.Thirst); ; - if (sender.User.Money >= price) + if (sender.LoggedinUser.Money >= price) { barnHorseInst.BasicStats.Tiredness = 1000; barnHorseInst.BasicStats.Hunger = 1000; barnHorseInst.BasicStats.Thirst = 1000; - sender.User.TakeMoney(price); + sender.LoggedinUser.TakeMoney(price); byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatBarnHorseFullyFed(barnHorseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(messagePacket); @@ -1314,13 +1323,13 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to use groomer services on a non existant horse."); + 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.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("BARN-")) @@ -1330,7 +1339,7 @@ namespace HISP.Server Barn barn = Barn.GetBarnById(barnId); int totalPrice = 0; - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) { int price = barn.CalculatePrice(horse.BasicStats.Tiredness, horse.BasicStats.Hunger, horse.BasicStats.Thirst); if (price > 0) @@ -1342,9 +1351,9 @@ namespace HISP.Server sender.SendPacket(notNeededMessagePacket); break; } - else if (sender.User.Money >= totalPrice) + else if (sender.LoggedinUser.Money >= totalPrice) { - foreach (HorseInstance horse in sender.User.HorseInventory.HorseList) + foreach (HorseInstance horse in sender.LoggedinUser.HorseInventory.HorseList) { horse.BasicStats.Tiredness = 1000; horse.BasicStats.Thirst = 1000; @@ -1354,7 +1363,7 @@ namespace HISP.Server byte[] barnedAllHorsesPacket = PacketBuilder.CreateChat(Messages.BarnAllHorsesFullyFed, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(barnedAllHorsesPacket); - sender.User.TakeMoney(totalPrice); + sender.LoggedinUser.TakeMoney(totalPrice); } else @@ -1372,7 +1381,7 @@ namespace HISP.Server case PacketBuilder.HORSE_TRAIN: randomId = 0; packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if (randomIdStr == "NaN") break; @@ -1383,17 +1392,17 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance trainHorseInst = sender.User.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = trainHorseInst; + HorseInstance trainHorseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + sender.LoggedinUser.LastViewedHorse = trainHorseInst; - if (World.InSpecialTile(sender.User.X, sender.User.Y)) + if (World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if (tile.Code != null) { if (tile.Code.StartsWith("TRAINER-")) @@ -1409,9 +1418,9 @@ namespace HISP.Server Trainer trainer = Trainer.GetTrainerById(trainerId); - if (sender.User.Money >= trainer.MoneyCost) + if (sender.LoggedinUser.Money >= trainer.MoneyCost) { - sender.User.TakeMoney(trainer.MoneyCost); + sender.LoggedinUser.TakeMoney(trainer.MoneyCost); trainHorseInst.BasicStats.Mood -= trainer.MoodCost; trainHorseInst.BasicStats.Thirst -= trainer.ThirstCost; trainHorseInst.BasicStats.Hunger -= trainer.HungerCost; @@ -1439,7 +1448,7 @@ namespace HISP.Server break; } trainHorseInst.BasicStats.Experience += trainer.ExperienceGained; - if (!sender.User.Subscribed) + if (!sender.LoggedinUser.Subscribed) trainHorseInst.TrainTimer = 1440; else trainHorseInst.TrainTimer = 720; @@ -1448,12 +1457,12 @@ namespace HISP.Server sender.SendPacket(trainSuccessfulMessage); - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Training).Count++; + sender.LoggedinUser.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 + 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); } @@ -1471,13 +1480,13 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to use trauber services on a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -1485,19 +1494,19 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if(sender.User.LastViewedHorse == null) + if(sender.LoggedinUser.LastViewedHorse == null) { - Logger.InfoPrint(sender.User.Username + " Tried to feed a non existant horse."); + Logger.InfoPrint(sender.LoggedinUser.Username + " Tried to feed a non existant horse."); break; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem item = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); Item.ItemInformation itemInfo = item.ItemInstances[0].GetItemInfo(); - HorseInstance horseInstance = sender.User.LastViewedHorse; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; bool tooMuch = false; bool changePersonality = false; bool changeInteligence = false; @@ -1555,7 +1564,7 @@ namespace HISP.Server break; } } - sender.User.Inventory.Remove(item.ItemInstances[0]); + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); if(changePersonality) { @@ -1602,8 +1611,8 @@ namespace HISP.Server sender.SendPacket(horseCouldntFinishItAll); } - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(sender.User.LastViewedHorse, sender.User)); + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseFeedMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); sender.SendPacket(metaPacket); @@ -1611,13 +1620,13 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to feed a non existant item to a horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -1625,15 +1634,15 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseInstance = sender.User.HorseInventory.GetHorseById(randomId); - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + HorseInstance horseInstance = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("ARENA-")) @@ -1641,7 +1650,7 @@ namespace HISP.Server string[] arenaInfo = tile.Code.Split('-'); int arenaId = int.Parse(arenaInfo[1]); Arena arena = Arena.GetAreaById(arenaId); - if (!Arena.UserHasEnteredHorseInAnyArena(sender.User)) + if (!Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { if (horseInstance.BasicStats.Thirst <= 200) { @@ -1676,9 +1685,9 @@ namespace HISP.Server - if (sender.User.Money >= arena.EntryCost) + if (sender.LoggedinUser.Money >= arena.EntryCost) { - arena.AddEntry(sender.User, horseInstance); + arena.AddEntry(sender.LoggedinUser, horseInstance); break; } else @@ -1700,14 +1709,14 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to enter a non existant horse into a competition."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -1715,22 +1724,22 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - if(World.InTown(sender.User.X, sender.User.Y)) + if(World.InTown(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - Logger.HackerPrint(sender.User.Username + " Tried to reelease a horse while inside a town...."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to reelease a horse while inside a town...."); break; } - HorseInstance horseReleaseInst = sender.User.HorseInventory.GetHorseById(randomId); - if(sender.User.CurrentlyRidingHorse != null) + HorseInstance horseReleaseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); + if(sender.LoggedinUser.CurrentlyRidingHorse != null) { - if(horseReleaseInst.RandomId == sender.User.CurrentlyRidingHorse.RandomId) + if(horseReleaseInst.RandomId == sender.LoggedinUser.CurrentlyRidingHorse.RandomId) { byte[] errorChatPacket = PacketBuilder.CreateChat(Messages.HorseCantReleaseTheHorseYourRidingOn, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(errorChatPacket); @@ -1740,28 +1749,28 @@ namespace HISP.Server } if (horseReleaseInst.Description == "") - horseReleaseInst.Description += Messages.FormatHorseReleasedBy(sender.User.Username); + horseReleaseInst.Description += Messages.FormatHorseReleasedBy(sender.LoggedinUser.Username); - Logger.InfoPrint(sender.User.Username + " RELEASED HORSE: " + horseReleaseInst.Name + " (a " + horseReleaseInst.Breed.Name + ")."); + Logger.InfoPrint(sender.LoggedinUser.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.LoggedinUser.HorseInventory.DeleteHorse(horseReleaseInst); + new WildHorse(horseReleaseInst, sender.LoggedinUser.X, sender.LoggedinUser.Y, 60, true); - sender.User.LastViewedHorse = horseReleaseInst; - sender.User.MajorPriority = true; + sender.LoggedinUser.LastViewedHorse = horseReleaseInst; + sender.LoggedinUser.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."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -1769,38 +1778,38 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseTackInst = sender.User.HorseInventory.GetHorseById(randomId); + HorseInstance horseTackInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); - sender.User.LastViewedHorse = horseTackInst; - sender.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(horseTackInst, sender.User)); + sender.LoggedinUser.LastViewedHorse = horseTackInst; + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(horseTackInst, sender.LoggedinUser)); sender.SendPacket(metaPacket); break; } else { - Logger.HackerPrint(sender.User.Username + " Tried to tack at a non existant horse."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to tack at a non existant horse."); break; } case PacketBuilder.HORSE_DRINK: - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != "POND") { - Logger.HackerPrint(sender.User.Username + " Tried to drink from a pond when not on one."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -1808,12 +1817,12 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - HorseInstance horseDrinkInst = sender.User.HorseInventory.GetHorseById(randomId); + HorseInstance horseDrinkInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); if(horseDrinkInst.BasicStats.Health < 200) { @@ -1847,35 +1856,35 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to tack at a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string itemIdStr = packetStr.Substring(2, packetStr.Length - 4); try { itemId = int.Parse(itemIdStr); } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } if(Item.ItemIdExist(itemId)) { - if(sender.User.LastViewedHorse != null) + if(sender.LoggedinUser.LastViewedHorse != null) { - if(sender.User.LastViewedHorse.AutoSell > 0) + if(sender.LoggedinUser.LastViewedHorse.AutoSell > 0) { byte[] failMessagePacket = PacketBuilder.CreateChat(Messages.HorseTackFailAutoSell, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(failMessagePacket); break; } - if(sender.User.Inventory.HasItemId(itemId)) + if(sender.LoggedinUser.Inventory.HasItemId(itemId)) { Item.ItemInformation itemInfo = Item.GetItemById(itemId); if (itemInfo.Type == "TACK") @@ -1883,151 +1892,151 @@ namespace HISP.Server 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; + 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.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; + 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.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; + 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.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); sender.SendPacket(metaPacket); - byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatEquipTackMessage(itemInfo.Name, sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + 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.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; + 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.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(itemId).ItemInstances[0]); // Remove item from inventory. + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); sender.SendPacket(metaPacket); - byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatHorseCompanionEquipMessage(sender.User.LastViewedHorse.Name, itemInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + byte[] equipMsgPacket = PacketBuilder.CreateChat(Messages.FormatHorseCompanionEquipMessage(sender.LoggedinUser.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\"."); + 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.User.Username + " tried to equip tack he doesnt have"); + Logger.HackerPrint(sender.LoggedinUser.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."); + Logger.ErrorPrint(sender.LoggedinUser.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"); + Logger.HackerPrint(sender.LoggedinUser.Username + " tried to equip tack he doesnt exist"); break; } break; case PacketBuilder.HORSE_TACK_UNEQUIP: - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.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; + 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.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; + 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.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; + 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.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; + 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.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + byte[] itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatUnEquipTackMessage(sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(itemUnequipedMessage); - if(sender.User.CurrentlyRidingHorse != null) + if(sender.LoggedinUser.CurrentlyRidingHorse != null) { - if(sender.User.CurrentlyRidingHorse.RandomId == sender.User.LastViewedHorse.RandomId) + if(sender.LoggedinUser.CurrentlyRidingHorse.RandomId == sender.LoggedinUser.LastViewedHorse.RandomId) { - byte[] disMounted = PacketBuilder.CreateChat(Messages.FormatHorseDismountedBecauseTackedMessage(sender.User.CurrentlyRidingHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.Facing %= 5; - sender.User.CurrentlyRidingHorse = null; + 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.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(sender.User.LastViewedHorse, sender.User)); + sender.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); sender.SendPacket(metaPacket); break; companionRemove:; - itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatHorseCompanionRemoveMessage(sender.User.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + itemUnequipedMessage = PacketBuilder.CreateChat(Messages.FormatHorseCompanionRemoveMessage(sender.LoggedinUser.LastViewedHorse.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(itemUnequipedMessage); - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(sender.User.LastViewedHorse, sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(sender.LoggedinUser.LastViewedHorse, sender.LoggedinUser)); sender.SendPacket(metaPacket); break; } else { - Logger.ErrorPrint(sender.User.Username + " Tried to unequip items from non existnat horse"); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); if(randomIdStr == "") // F7 Shortcut { - if(sender.User.CurrentlyRidingHorse != null) + if(sender.LoggedinUser.CurrentlyRidingHorse != null) { byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -2037,8 +2046,8 @@ namespace HISP.Server } else { - if(sender.User.HorseInventory.HorseIdExist(sender.User.LastRiddenHorse)) - StartRidingHorse(sender, sender.User.LastRiddenHorse); + if(sender.LoggedinUser.HorseInventory.HorseIdExist(sender.LoggedinUser.LastRiddenHorse)) + StartRidingHorse(sender, sender.LoggedinUser.LastRiddenHorse); } break; } @@ -2050,10 +2059,10 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { byte[] stopRidingHorseMessagePacket = PacketBuilder.CreateChat(Messages.HorseStopRidingMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -2063,14 +2072,14 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to dismount at a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -2078,23 +2087,23 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); break; } - if (sender.User.HorseInventory.HorseIdExist(randomId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { StartRidingHorse(sender, randomId); break; } else { - Logger.HackerPrint(sender.User.Username + " Tried to mount at a non existant horse."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); HorseInstance horseInst; try { @@ -2103,12 +2112,12 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid randomid to horse interaction packet "); return; } - if(sender.User.HorseInventory.HorseIdExist(randomId)) + if(sender.LoggedinUser.HorseInventory.HorseIdExist(randomId)) { - horseInst = sender.User.HorseInventory.GetHorseById(randomId); + horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId); UpdateHorseMenu(sender, horseInst); } else @@ -2121,40 +2130,40 @@ namespace HISP.Server } catch(Exception) { - Logger.HackerPrint(sender.User.Username + " Tried to look at a non existant horse."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to look at a non existant horse."); break; } } break; case PacketBuilder.HORSE_ESCAPE: - if(WildHorse.DoesHorseExist(sender.User.CapturingHorseId)) + if(WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId)) { - WildHorse capturing = WildHorse.GetHorseById(sender.User.CapturingHorseId); - sender.User.CapturingHorseId = 0; + WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId); + sender.LoggedinUser.CapturingHorseId = 0; - if (capturing.X == sender.User.X && capturing.Y == sender.User.Y) + if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y) { capturing.Escape(); - Logger.InfoPrint(sender.User.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y); + Logger.InfoPrint(sender.LoggedinUser.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y); } } - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; byte[] hoseEscaped = PacketBuilder.CreateMeta(Meta.BuildHorseEscapedMessage()); sender.SendPacket(hoseEscaped); break; case PacketBuilder.HORSE_CAUGHT: - if (WildHorse.DoesHorseExist(sender.User.CapturingHorseId)) + if (WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId)) { - WildHorse capturing = WildHorse.GetHorseById(sender.User.CapturingHorseId); - sender.User.CapturingHorseId = 0; + WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId); + sender.LoggedinUser.CapturingHorseId = 0; - if (capturing.X == sender.User.X && capturing.Y == sender.User.Y) + if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y) { try { - capturing.Capture(sender.User); + capturing.Capture(sender.LoggedinUser); } catch (InventoryFullException) { @@ -2163,30 +2172,30 @@ namespace HISP.Server break; } - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count++; + sender.LoggedinUser.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 + 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.User.Username + " Captured a: " + capturing.Instance.Breed.Name); + Logger.InfoPrint(sender.LoggedinUser.Username + " Captured a: " + capturing.Instance.Breed.Name); - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; byte[] horseCaught = PacketBuilder.CreateMeta(Meta.BuildHorseCaughtMessage()); sender.SendPacket(horseCaught); break; } } - sender.User.MajorPriority = true; + sender.LoggedinUser.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); + randomIdStr = packetStr.Substring(2, packetStr.Length - 4); try { randomId = int.Parse(randomIdStr); @@ -2194,23 +2203,23 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid randomid to horse interaction packet "); + Logger.ErrorPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to catch a horse that doesnt exist."); return; } - if(sender.User.HorseInventory.HorseList.Length >= sender.User.MaxHorses) + if(sender.LoggedinUser.HorseInventory.HorseList.Length >= sender.LoggedinUser.MaxHorses) { byte[] caughtTooManyHorses = PacketBuilder.CreateChat(Messages.HorseCatchTooManyHorsesMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(caughtTooManyHorses); return; } - sender.User.CapturingHorseId = randomId; + sender.LoggedinUser.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); @@ -2231,7 +2240,7 @@ namespace HISP.Server return; } string packetStr = Encoding.UTF8.GetString(packet); - string dynamicInputStr = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string dynamicInputStr = packetStr.Substring(1, packetStr.Length - 3); if(dynamicInputStr.Contains("|")) { string[] dynamicInput = dynamicInputStr.Split('|'); @@ -2244,14 +2253,14 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input "); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input "); return; } switch(inputId) { case 1: // Bank - if (dynamicInput.Length >= 3) + if (dynamicInput.Length >= 2) { Int64 moneyDeposited = 0; Int64 moneyWithdrawn = 0; @@ -2262,14 +2271,14 @@ namespace HISP.Server } catch (Exception) { - Logger.ErrorPrint(sender.User.Username + " tried to deposit/witthdraw NaN money...."); + 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.User.BankMoney) + moneyDeposited > 9999999999) + if (Convert.ToInt64(sender.LoggedinUser.BankMoney) + moneyDeposited > 9999999999) { byte[] chatPacket = PacketBuilder.CreateChat(Messages.BankCantHoldThisMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); @@ -2287,20 +2296,21 @@ namespace HISP.Server break; } + - if((moneyDeposited <= sender.User.Money) && moneyDeposited != 0) + if((moneyDeposited <= sender.LoggedinUser.Money) && moneyDeposited != 0) { - sender.User.TakeMoney(Convert.ToInt32(moneyDeposited)); - sender.User.BankMoney += moneyDeposited; + 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.User.BankMoney) && moneyWithdrawn != 0) + if ((moneyWithdrawn <= sender.LoggedinUser.BankMoney) && moneyWithdrawn != 0) { - sender.User.BankMoney -= moneyWithdrawn; - sender.User.AddMoney(Convert.ToInt32(moneyWithdrawn)); + 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); @@ -2311,7 +2321,7 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); break; } case 2: // Send Mail @@ -2321,16 +2331,16 @@ namespace HISP.Server string subject = dynamicInput[2]; string message = dynamicInput[3]; - if(sender.User.Money >= 3) + if(sender.LoggedinUser.Money >= 3) { if(Database.CheckUserExist(to)) { int playerId = Database.GetUserid(to); - sender.User.TakeMoney(3); + sender.LoggedinUser.TakeMoney(3); Mailbox.Mail mailMessage = new Mailbox.Mail(); mailMessage.RandomId = RandomID.NextRandomId(); - mailMessage.FromUser = sender.User.Id; + mailMessage.FromUser = sender.LoggedinUser.Id; mailMessage.ToUser = playerId; mailMessage.Timestamp = Convert.ToInt32((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds); mailMessage.Read = false; @@ -2343,7 +2353,7 @@ namespace HISP.Server user.MailBox.AddMail(mailMessage); byte[] BaseStatsPacketData = PacketBuilder.CreateMoneyPlayerCountAndMail(user.Money, GameServer.GetNumberOfPlayers(), user.MailBox.UnreadMailCount); - user.Client.SendPacket(BaseStatsPacketData); + user.LoggedinClient.SendPacket(BaseStatsPacketData); } else { @@ -2368,7 +2378,7 @@ namespace HISP.Server { if (dynamicInput.Length >= 2) { - if(sender.User.AttemptingToOfferItem == -1) // Money + if(sender.LoggedinUser.AttemptingToOfferItem == -1) // Money { string answer = dynamicInput[1]; int amountMoney = -1; @@ -2384,27 +2394,27 @@ namespace HISP.Server } if(amountMoney < 0) { - Logger.ErrorPrint(sender.User.Username + " tried to trade less than 0$"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to trade less than 0$"); } - if(amountMoney >= sender.User.Money) + if(amountMoney >= sender.LoggedinUser.Money) { byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(tooMuchMoney); break; } - sender.User.TradingWith.MoneyOffered = amountMoney; + sender.LoggedinUser.TradingWith.MoneyOffered = amountMoney; UpdateArea(sender); - if(sender.User.TradingWith != null) - if (!sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); + if(sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); break; } - if (Item.ItemIdExist(sender.User.AttemptingToOfferItem)) + if (Item.ItemIdExist(sender.LoggedinUser.AttemptingToOfferItem)) { string answer = dynamicInput[1]; int itemCount = -1; @@ -2414,10 +2424,10 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (Item TRADE, id is NaN)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Item TRADE, id is NaN)"); } - InventoryItem item = sender.User.Inventory.GetItemByItemId(sender.User.AttemptingToOfferItem); + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(sender.LoggedinUser.AttemptingToOfferItem); if (itemCount <= 0) { @@ -2432,11 +2442,11 @@ namespace HISP.Server break; } - foreach(ItemInstance[] existingItems in sender.User.TradingWith.ItemsOffered) + foreach(ItemInstance[] existingItems in sender.LoggedinUser.TradingWith.ItemsOffered) { - if(existingItems[0].ItemId == sender.User.AttemptingToOfferItem) + if(existingItems[0].ItemId == sender.LoggedinUser.AttemptingToOfferItem) { - sender.User.TradingWith.RemoveOfferedItems(existingItems); + sender.LoggedinUser.TradingWith.RemoveOfferedItems(existingItems); break; } } @@ -2448,42 +2458,42 @@ namespace HISP.Server { items[i] = item.ItemInstances[i]; } - sender.User.TradingWith.OfferItems(items); + sender.LoggedinUser.TradingWith.OfferItems(items); UpdateArea(sender); - if (sender.User.TradingWith != null) - if (!sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); + if (sender.LoggedinUser.TradingWith != null) + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); } break; } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (Item TRADE, wrong size)"); + 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.User.LastRiddle != null) + if (sender.LoggedinUser.LastRiddle != null) { string answer = dynamicInput[1]; - if(sender.User.LastRiddle.CheckAnswer(sender.User, answer)) - sender.User.LastRiddle = null; + if(sender.LoggedinUser.LastRiddle.CheckAnswer(sender.LoggedinUser, answer)) + sender.LoggedinUser.LastRiddle = null; UpdateArea(sender); } break; } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (LastRiddle, wrong size)"); + 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.User.LastViewedHorse != null) + if(sender.LoggedinUser.LastViewedHorse != null) { string desc = dynamicInput[2]; string name = dynamicInput[1]; @@ -2504,7 +2514,7 @@ namespace HISP.Server break; } - object filterReason = ChatMsg.FilterMessage(name); + object filterReason = Chat.FilterMessage(name); if (filterReason != null) { byte[] msg = PacketBuilder.CreateChat(Messages.HorseNameViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -2512,33 +2522,33 @@ namespace HISP.Server return; } - filterReason = ChatMsg.FilterMessage(desc); + filterReason = Chat.FilterMessage(desc); if (filterReason != null) { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; + Chat.Reason reason = (Chat.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.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.User.LastViewedHorse); + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); } break; } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); + 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.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; string metaWindow = Meta.BuildNpcSearch(dynamicInput[1]); byte[] metaPacket = PacketBuilder.CreateMeta(metaWindow); sender.SendPacket(metaPacket); @@ -2546,13 +2556,13 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (NPC Search, wrong size)"); + 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.User.PrivateNotes = dynamicInput[1]; + sender.LoggedinUser.PrivateNotes = dynamicInput[1]; UpdateStats(sender); byte[] chatPacket = PacketBuilder.CreateChat(Messages.PrivateNotesSavedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); @@ -2560,16 +2570,16 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + 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.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; int newSellPrice = 0; try { @@ -2594,12 +2604,12 @@ namespace HISP.Server sender.SendPacket(sellPricePacket); horseInstance.AutoSell = newSellPrice; - UpdateHorseMenu(sender, sender.User.LastViewedHorse); + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); } } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (autosell, wrong size)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (autosell, wrong size)"); break; } break; @@ -2608,7 +2618,7 @@ namespace HISP.Server { string title = dynamicInput[1]; string desc = dynamicInput[2]; - if(sender.User.OwnedRanch != null) + if(sender.LoggedinUser.OwnedRanch != null) { title.Trim(); desc.Trim(); @@ -2625,7 +2635,7 @@ namespace HISP.Server break; } - object filterReason = ChatMsg.FilterMessage(title); + object filterReason = Chat.FilterMessage(title); if (filterReason != null) { byte[] msg = PacketBuilder.CreateChat(Messages.RanchSavedTitleViolationsError, PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -2633,18 +2643,18 @@ namespace HISP.Server return; } - filterReason = ChatMsg.FilterMessage(desc); + filterReason = Chat.FilterMessage(desc); if (filterReason != null) { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; + Chat.Reason reason = (Chat.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; + sender.LoggedinUser.OwnedRanch.Title = title; + sender.LoggedinUser.OwnedRanch.Description = desc; } byte[] descriptionEditedMessage = PacketBuilder.CreateChat(Messages.RanchSavedRanchDescripton, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(descriptionEditedMessage); @@ -2661,7 +2671,7 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (ranch description, wrong size)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (ranch description, wrong size)"); break; } break; @@ -2679,7 +2689,7 @@ namespace HISP.Server break; } - Database.AddReport(sender.User.Username, userName, reason); + Database.AddReport(sender.LoggedinUser.Username, userName, reason); byte[] chatPacket = PacketBuilder.CreateChat(Messages.AbuseReportFiled, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); UpdateArea(sender); @@ -2694,21 +2704,21 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); + 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.User.MajorPriority = true; + sender.LoggedinUser.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)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (private notes, wrong size)"); break; } case 14: @@ -2716,9 +2726,9 @@ namespace HISP.Server { string password = dynamicInput[1]; // Get current tile - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.Y); + World.SpecialTile tile = World.GetSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y); if(tile.Code != null) { if (tile.Code.StartsWith("PASSWORD-")) @@ -2730,11 +2740,11 @@ namespace HISP.Server int questId = int.Parse(args[2]); if (password.ToLower() == expectedPassword.ToLower()) { - Quest.CompleteQuest(sender.User, Quest.GetQuestById(questId), false); + Quest.CompleteQuest(sender.LoggedinUser, Quest.GetQuestById(questId), false); } else { - Quest.QuestResult result = Quest.FailQuest(sender.User, Quest.GetQuestById(questId), true); + 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); @@ -2743,26 +2753,26 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Send invalid password input request. (Too few arguments!)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Send invalid password input request. (Too few arguments!)"); break; } } else { - Logger.ErrorPrint(sender.User.Username + " Send password input request. (Not on password tile!)"); + Logger.ErrorPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.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)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid password request, (wrong size)"); break; } @@ -2772,9 +2782,9 @@ namespace HISP.Server { if(QuizEvent != null) { - if (sender.User.InRealTimeQuiz) + if (sender.LoggedinUser.InRealTimeQuiz) { - RealTimeQuiz.Participent participent = QuizEvent.JoinEvent(sender.User); + RealTimeQuiz.Participent participent = QuizEvent.JoinEvent(sender.LoggedinUser); string answer = dynamicInput[1]; participent.CheckAnswer(answer); } @@ -2783,7 +2793,7 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (RealTimeQuiz, wrong size)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (RealTimeQuiz, wrong size)"); break; } default: @@ -2795,7 +2805,7 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to send a invalid dynamic input (wrong size)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (wrong size)"); return; } } @@ -2810,17 +2820,17 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requests player info when not logged in."); return; } - if(packet.Length < 2) + if(packet.Length < 3) { - Logger.ErrorPrint(sender.User.Username + " Sent playerinfo packet of wrong size"); + Logger.ErrorPrint(sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListMenu(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; } @@ -2830,55 +2840,55 @@ namespace HISP.Server { if (!sender.LoggedIn) { - Logger.ErrorPrint(sender.RemoteIp + " Clicked dynamic button when not logged in."); + 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 - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string buttonIdStr = packetStr.Substring(1, packetStr.Length - 3); switch(buttonIdStr) { case "2": // Compose Mail - if(sender.User.Money <= 3) + if(sender.LoggedinUser.Money <= 3) { byte[] cantAffordPostage = PacketBuilder.CreateChat(Messages.CityHallCantAffordPostageMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantAffordPostage); break; } - sender.User.MajorPriority = true; + sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildQuestLog(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "4": // View Horse Breeds - sender.User.MajorPriority = true; + sender.LoggedinUser.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); + if (sender.LoggedinUser.LastViewedHorse != null) + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); break; case "6": // Equip companion - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(horseInstance,sender.User)); + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseCompanionEquipMenu(horseInstance,sender.LoggedinUser)); sender.SendPacket(metaPacket); } break; case "7": // TP To nearest wagon (ranch) - if(sender.User.OwnedRanch != null) + if(sender.LoggedinUser.OwnedRanch != null) { - if(sender.User.OwnedRanch.GetBuildingCount(7) > 0) // Wagon + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(7) > 0) // Wagon { - int ranchX = sender.User.OwnedRanch.X; - int ranchY = sender.User.OwnedRanch.Y; + int ranchX = sender.LoggedinUser.OwnedRanch.X; + int ranchY = sender.LoggedinUser.OwnedRanch.Y; double smallestDistance = Double.PositiveInfinity; int smalestTransportPointId = 0; @@ -2912,115 +2922,115 @@ namespace HISP.Server byte[] transported = PacketBuilder.CreateChat(Messages.RanchWagonDroppedYouOff, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(transported); - sender.User.Teleport(newX, newY); + sender.LoggedinUser.Teleport(newX, newY); } } break; case "8": - if(sender.User.LastViewedHorse != null) + if(sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseReleaseConfirmationMessage(horseInstance)); sender.SendPacket(metaPacket); } break; case "9": // View Tack (Libary) - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildTackLibary()); sender.SendPacket(metaPacket); break; case "10": // View Companions (Libary) - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildCompanionLibary()); sender.SendPacket(metaPacket); break; case "11": // Randomize horse name - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.LastViewedHorse; horseInstance.ChangeNameWithoutUpdatingDatabase(HorseInfo.GenerateHorseName()); metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseDescriptionEditMeta(horseInstance)); sender.SendPacket(metaPacket); } break; case "12": // View Minigames (Libary) - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigamesLibary()); sender.SendPacket(metaPacket); break; case "13": // Train All (Ranch) - if (sender.User.OwnedRanch != null) + if (sender.LoggedinUser.OwnedRanch != null) { - if(sender.User.OwnedRanch.GetBuildingCount(6) > 0) // Training Pen + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(6) > 0) // Training Pen { - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchTraining(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchTraining(sender.LoggedinUser)); sender.SendPacket(metaPacket); } } break; case "14": // Most Valued Ranches - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildMostValuedRanches()); sender.SendPacket(metaPacket); break; case "15": // Most Richest Players - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildRichestPlayers()); sender.SendPacket(metaPacket); break; case "16": // Most Adventurous Players - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildAdventurousPlayers()); sender.SendPacket(metaPacket); break; case "17": // Most Experienced Players - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildExperiencedPlayers()); sender.SendPacket(metaPacket); break; case "18": // Best Minigame Players - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigamePlayers()); sender.SendPacket(metaPacket); break; case "19": // Most Experienced Horses - sender.User.MajorPriority = true; + sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildMinigameRankingsForUser(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "21": // Private Notes - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPrivateNotes(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildPrivateNotes(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "22": // View Locations (Libary) - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildLocationsLibary()); sender.SendPacket(metaPacket); break; case "23": // View Awards (Libary) - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildAwardsLibary()); sender.SendPacket(metaPacket); break; case "26": // Buy Horse (Auto Sell) - if(sender.User.LastViewedHorseOther != null) + if(sender.LoggedinUser.LastViewedHorseOther != null) { bool isOnRanch = false; bool isOnPlayer = false; - HorseInstance horseToSell = sender.User.LastViewedHorseOther; - if (Ranch.GetOwnedRanch(horseToSell.Owner)) + HorseInstance horseToSell = sender.LoggedinUser.LastViewedHorseOther; + if (Ranch.IsRanchOwned(horseToSell.Owner)) { Ranch ranch = Ranch.GetRanchOwnedBy(horseToSell.Owner); - if(sender.User.X == ranch.X && sender.User.Y == ranch.Y) + if(sender.LoggedinUser.X == ranch.X && sender.LoggedinUser.Y == ranch.Y) { isOnRanch = true; } @@ -3029,7 +3039,7 @@ namespace HISP.Server if(GameServer.IsUserOnline(horseToSell.Owner)) { User user = GameServer.GetUserById(horseToSell.Owner); - if (user.X == sender.User.X && user.Y == sender.User.Y) + if (user.X == sender.LoggedinUser.X && user.Y == sender.LoggedinUser.Y) { isOnPlayer = true; } @@ -3040,16 +3050,16 @@ namespace HISP.Server if (horseToSell.AutoSell == 0) break; - if(sender.User.Money >= horseToSell.AutoSell) + if(sender.LoggedinUser.Money >= horseToSell.AutoSell) { - if (sender.User.HorseInventory.HorseList.Length + 1 > sender.User.MaxHorses) + 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.User.TakeMoney(horseToSell.AutoSell); + sender.LoggedinUser.TakeMoney(horseToSell.AutoSell); if (IsUserOnline(horseToSell.Owner)) { @@ -3057,12 +3067,12 @@ namespace HISP.Server 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); + 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.User.Username)); + Database.AddMessageToQueue(horseToSell.Owner, Messages.FormatAutoSellSoldOffline(horseToSell.Name, horseToSell.AutoSell, sender.LoggedinUser.Username)); try { Database.SetPlayerMoney((Database.GetPlayerMoney(horseToSell.Owner) + horseToSell.AutoSell), horseToSell.Owner); @@ -3073,9 +3083,9 @@ namespace HISP.Server } } - horseToSell.Owner = sender.User.Id; + horseToSell.Owner = sender.LoggedinUser.Id; horseToSell.AutoSell = 0; - sender.User.HorseInventory.AddHorse(horseToSell, false); + sender.LoggedinUser.HorseInventory.AddHorse(horseToSell, false); byte[] success = PacketBuilder.CreateChat(Messages.FormatAutoSellSuccess(horseToSell.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(success); @@ -3102,124 +3112,124 @@ namespace HISP.Server } break; case "24": // Award List - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAwardList(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildAwardList(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "27": // Ranch Edit - if(sender.User.OwnedRanch != null) + if(sender.LoggedinUser.OwnedRanch != null) { - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchEdit(sender.User.OwnedRanch)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchEdit(sender.LoggedinUser.OwnedRanch)); sender.SendPacket(metaPacket); } break; case "29": // Auto Sell Horses - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildTopAutoSellHorses()); sender.SendPacket(metaPacket); break; case "31": - sender.User.MajorPriority = true; + sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildBuddyList(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "36": // Nearby list - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildNearbyList(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildNearbyList(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "37": // All Players List - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerList(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerList(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "40": // All Players Alphabetical - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListAlphabetical(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildPlayerListAlphabetical(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "30": // Find NPC - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildFindNpcMenu()); sender.SendPacket(metaPacket); break; case "25": // Set auto sell price - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.MajorPriority = true; - HorseInstance horseInstance = sender.User.LastViewedHorse; + sender.LoggedinUser.MajorPriority = true; + HorseInstance horseInstance = sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildAllBasicStats(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "34": // View Basic stats (Horse) - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildAllStats(sender.User)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildAllStats(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "38": // Read Books - sender.User.MajorPriority = true; + sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildAuctionHorseList(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "47": - sender.User.MajorPriority = true; + sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildMiscStats(sender.LoggedinUser)); sender.SendPacket(metaPacket); break; case "58": // Add new item to trade - if(sender.User.TradingWith != null) + if(sender.LoggedinUser.TradingWith != null) { - sender.User.TradeMenuPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildTradeAdd(sender.User.TradingWith)); + sender.LoggedinUser.TradeMenuPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildTradeAdd(sender.LoggedinUser.TradingWith)); sender.SendPacket(metaPacket); } break; case "59": // Done - if (sender.User.TradingWith != null) + if (sender.LoggedinUser.TradingWith != null) { - sender.User.TradingWith.Stage = "DONE"; + sender.LoggedinUser.TradingWith.Stage = "DONE"; - if (sender.User.TradingWith != null) - if (sender.User.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) - UpdateArea(sender.User.TradingWith.OtherTrade.Trader.Client); + 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.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildRanchSellConfirmation()); sender.SendPacket(metaPacket); break; case "61": // Most Spoiled Horse - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildMostSpoiledHorses()); sender.SendPacket(metaPacket); break; case "28c1": // Abuse Report - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildAbuseReportPage()); sender.SendPacket(metaPacket); break; @@ -3236,14 +3246,14 @@ namespace HISP.Server category = "RETIRED"; goto setCategory; setCategory:; - if (sender.User.LastViewedHorse != null) + if (sender.LoggedinUser.LastViewedHorse != null) { - sender.User.LastViewedHorse.Category = category; + sender.LoggedinUser.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); + sender.LoggedinUser.MajorPriority = true; + UpdateHorseMenu(sender, sender.LoggedinUser.LastViewedHorse); } break; @@ -3258,20 +3268,20 @@ namespace HISP.Server } catch (FormatException) { - Logger.DebugPrint(sender.User.Username + " Tried to read a book of id NaN"); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to read a book of id NaN"); break; }; if(Book.BookExists(bookId)) { Book book = Book.GetBookById(bookId); - sender.User.MajorPriority = true; + sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + "Tried to read a book that doesnt exist."); } break; } @@ -3285,11 +3295,11 @@ namespace HISP.Server } catch (FormatException) { - Logger.DebugPrint(sender.User.Username + " Tried to whisper a horse with BreedId NaN."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to whisper a horse with BreedId NaN."); break; }; - if (sender.User.Money < 50000) + if (sender.LoggedinUser.Money < 50000) { byte[] cannotAffordMessage = PacketBuilder.CreateChat(Messages.WhispererServiceCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cannotAffordMessage); @@ -3313,7 +3323,7 @@ namespace HISP.Server { cost = 10000; } - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; byte[] pricingMessage = PacketBuilder.CreateChat(Messages.FormatWhispererPrice(cost), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(pricingMessage); @@ -3321,7 +3331,7 @@ namespace HISP.Server byte[] serachResultMeta = PacketBuilder.CreateMeta(Meta.BuildWhisperSearchResults(horsesFound.ToArray())); sender.SendPacket(serachResultMeta); - sender.User.TakeMoney(cost); + sender.LoggedinUser.TakeMoney(cost); break; } else if (buttonIdStr.StartsWith("4c")) // Libary Breed Search @@ -3336,10 +3346,10 @@ namespace HISP.Server } catch (Exception) { - Logger.DebugPrint(sender.User.Username + " Sent invalid libary breed viewer request."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent invalid libary breed viewer request."); break; }; - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; string metaTag = Meta.BuildBreedViewerLibary(horseBreed); metaPacket = PacketBuilder.CreateMeta(metaTag); sender.SendPacket(metaPacket); @@ -3354,48 +3364,48 @@ namespace HISP.Server else if (buttonIdStr.StartsWith("50c")) { string gender = buttonIdStr.Substring(3); - if (sender.User.PawneerOrderBreed != null) + if (sender.LoggedinUser.PawneerOrderBreed != null) { - if (sender.User.PawneerOrderBreed.GenderTypes().Contains(gender)) + if (sender.LoggedinUser.PawneerOrderBreed.GenderTypes().Contains(gender)) { - if (sender.User.Inventory.HasItemId(Item.PawneerOrder)) + if (sender.LoggedinUser.Inventory.HasItemId(Item.PawneerOrder)) { - sender.User.PawneerOrderGender = gender; + sender.LoggedinUser.PawneerOrderGender = gender; - HorseInstance horseInstance = new HorseInstance(sender.User.PawneerOrderBreed); - horseInstance.Color = sender.User.PawneerOrderColor; - horseInstance.Gender = sender.User.PawneerOrderGender; + HorseInstance horseInstance = new HorseInstance(sender.LoggedinUser.PawneerOrderBreed); + horseInstance.Color = sender.LoggedinUser.PawneerOrderColor; + horseInstance.Gender = sender.LoggedinUser.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.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(Item.PawneerOrder).ItemInstances[0]); + sender.LoggedinUser.HorseInventory.AddHorse(horseInstance, true, true); - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderFound(horseInstance)); sender.SendPacket(metaPacket); break; } } } - Logger.ErrorPrint(sender.User.Username + " Error occured when doing a Pawneer Order."); + 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.User.PawneerOrderBreed != null) + if (sender.LoggedinUser.PawneerOrderBreed != null) { - if (sender.User.PawneerOrderBreed.Colors.Contains(color)) + if (sender.LoggedinUser.PawneerOrderBreed.Colors.Contains(color)) { - sender.User.PawneerOrderColor = color; + sender.LoggedinUser.PawneerOrderColor = color; - sender.User.MajorPriority = true; - metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderGenderList(sender.User.PawneerOrderBreed, color)); + sender.LoggedinUser.MajorPriority = true; + metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderGenderList(sender.LoggedinUser.PawneerOrderBreed, color)); sender.SendPacket(metaPacket); break; } } - Logger.ErrorPrint(sender.User.Username + " Asked for a horse of an unknown color " + color); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Asked for a horse of an unknown color " + color); break; } else if (buttonIdStr.StartsWith("48c")) // Pawneer Order Breed Select @@ -3410,12 +3420,12 @@ namespace HISP.Server } catch (Exception) { - Logger.DebugPrint(sender.User.Username + " Tried to pawner order a horse with id NaN."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawner order a horse with id NaN."); break; } - sender.User.PawneerOrderBreed = breed; + sender.LoggedinUser.PawneerOrderBreed = breed; - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(Meta.BuildPawneerOrderColorList(breed)); sender.SendPacket(metaPacket); break; @@ -3430,30 +3440,30 @@ namespace HISP.Server } catch (FormatException) { - Logger.DebugPrint(sender.User.Username + " Tried to pawn a horse with id NaN."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN."); break; } - if (sender.User.HorseInventory.HorseIdExist(horseId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); + HorseInstance inst = sender.LoggedinUser.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.LoggedinUser.HorseInventory.DeleteHorse(inst); // 1000% a "distant land.." + sender.LoggedinUser.LastViewedHorse = null; - sender.User.AddMoney(price); + sender.LoggedinUser.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 + 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); @@ -3476,15 +3486,15 @@ namespace HISP.Server } catch (FormatException) { - Logger.DebugPrint(sender.User.Username + " Tried to pawn a horse with id NaN."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN."); break; } - if (sender.User.HorseInventory.HorseIdExist(horseId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); + HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId); - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; byte[] confirmScreen = PacketBuilder.CreateMeta(Meta.BuildPawneerConfimation(inst)); sender.SendPacket(confirmScreen); break; @@ -3506,39 +3516,39 @@ namespace HISP.Server } catch (FormatException) { - Logger.DebugPrint(sender.User.Username + " Tried to auction a horse with id NaN."); + Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to auction a horse with id NaN."); break; } - if (sender.User.HorseInventory.HorseIdExist(horseId)) + if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId)) { - HorseInstance inst = sender.User.HorseInventory.GetHorseById(horseId); + HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId); - if(World.InSpecialTile(sender.User.X, sender.User.Y)) + if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(sender.User.X, sender.User.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.User.Username + " Is trying to place a horse in."); + 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.User)) + if(auctionRoom.HasUserPlacedAuctionAllready(sender.LoggedinUser)) { byte[] cantPlaceAuction = PacketBuilder.CreateChat(Messages.AuctionOneHorsePerPlayer, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantPlaceAuction); break; } - if (sender.User.Money >= 1000) + if (sender.LoggedinUser.Money >= 1000) { - sender.User.TakeMoney(1000); - Auction.AuctionEntry entry = new Auction.AuctionEntry(8, 0, sender.User.Id); + sender.LoggedinUser.TakeMoney(1000); + Auction.AuctionEntry entry = new Auction.AuctionEntry(8, 0, sender.LoggedinUser.Id); entry.Horse = inst; - entry.OwnerId = sender.User.Id; + entry.OwnerId = sender.LoggedinUser.Id; entry.Completed = false; inst.Hidden = true; auctionRoom.AddEntry(entry); UpdateArea(sender); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); break; } else @@ -3550,7 +3560,7 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to auction a horse they did not have."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to auction a horse they did not have."); break; } } @@ -3558,9 +3568,9 @@ namespace HISP.Server { Leaser horseLeaser = Leaser.GetLeaserByButtonId(buttonIdStr); - if(sender.User.Money >= horseLeaser.Price) + if(sender.LoggedinUser.Money >= horseLeaser.Price) { - if(sender.User.HorseInventory.HorseList.Length + 1 > sender.User.MaxHorses) + if(sender.LoggedinUser.HorseInventory.HorseList.Length + 1 > sender.LoggedinUser.MaxHorses) { byte[] cantManageHorses = PacketBuilder.CreateChat(Messages.HorseLeaserHorsesFull, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantManageHorses); @@ -3568,31 +3578,31 @@ namespace HISP.Server } else { - sender.User.MajorPriority = true; - sender.User.TakeMoney(horseLeaser.Price); + sender.LoggedinUser.MajorPriority = true; + sender.LoggedinUser.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 + 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.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 + 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.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.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.User.HorseInventory.AddHorse(leaseHorse); + sender.LoggedinUser.HorseInventory.AddHorse(leaseHorse); byte[] addedHorseMeta = PacketBuilder.CreateMeta(Meta.BuildLeaserOnLeaseInfo(horseLeaser)); sender.SendPacket(addedHorseMeta); @@ -3613,7 +3623,7 @@ namespace HISP.Server } if(AbuseReport.DoesReasonExist(buttonIdStr)) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; metaPacket = PacketBuilder.CreateMeta(AbuseReport.GetReasonById(buttonIdStr).Meta); sender.SendPacket(metaPacket); break; @@ -3630,13 +3640,13 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requested user information when not logged in."); return; } - if(packet.Length <= 2) + if(packet.Length <= 3) { - Logger.ErrorPrint(sender.User.Username + "Sent invalid Arena Scored Packet."); + Logger.ErrorPrint(sender.LoggedinUser.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); + string scoreStr = packetStr.Substring(1, packet.Length - 3); int score = -1; try { @@ -3644,21 +3654,21 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Scored NAN in an arena."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Scored NAN in an arena."); return; } - if(Arena.UserHasEnteredHorseInAnyArena(sender.User)) + if(Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { 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); + Arena enteredArena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + enteredArena.SubmitScore(sender.LoggedinUser, score); } else { - Logger.ErrorPrint(sender.User.Username + " Scored in an arena while not in one"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Scored in an arena while not in one"); } return; @@ -3672,19 +3682,19 @@ namespace HISP.Server } // Prevent duplicate requests. - if (sender.User.UserInfoSend) + if (sender.LoggedinUser.UserInfoSend) return; - sender.User.UserInfoSend = true; + sender.LoggedinUser.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); + Database.AddOnlineUser(sender.LoggedinUser.Id, sender.LoggedinUser.Administrator, sender.LoggedinUser.Moderator, sender.LoggedinUser.Subscribed, sender.LoggedinUser.NewPlayer); - Logger.DebugPrint(sender.User.Username + " Requested user information."); - User user = sender.User; + Logger.DebugPrint(sender.LoggedinUser.Username + " Requested user information."); + User user = sender.LoggedinUser; // Send player current location & map data - byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + 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. @@ -3692,11 +3702,11 @@ namespace HISP.Server 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()); + byte[] WorldData = PacketBuilder.CreateTimeAndWeatherUpdate(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.User.NewPlayer) + if (sender.LoggedinUser.NewPlayer) { byte[] NewUserMessage = PacketBuilder.CreateChat(Messages.NewUserMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(NewUserMessage); @@ -3721,16 +3731,16 @@ namespace HISP.Server { if (client.LoggedIn) { - if (client.User.Id != user.Id) + if (client.LoggedinUser.Id != user.Id) { - if(IsOnScreen(client.User.X, client.User.Y, sender.User.X, sender.User.Y)) + if(IsOnScreen(client.LoggedinUser.X, client.LoggedinUser.Y, sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(client.User.X, client.User.Y, client.User.Facing, client.User.CharacterId, client.User.Username); + 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.User.Facing, client.User.CharacterId, client.User.Username); + byte[] PlayerInfo = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000+4, 1000+1, client.LoggedinUser.Facing, client.LoggedinUser.CharacterId, client.LoggedinUser.Username); sender.SendPacket(PlayerInfo); } } @@ -3741,11 +3751,11 @@ namespace HISP.Server * 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) + 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.Client); + UpdateArea(nearbyUser.LoggedinClient); /* * Send a list of isles, towns and areas to the player @@ -3760,7 +3770,7 @@ namespace HISP.Server sender.SendPacket(TileFlags); // Send Todays Note: - byte[] MotdData = PacketBuilder.CreateMotd(Messages.FormatMotd(ConfigReader.Motd)); + byte[] MotdData = PacketBuilder.CreateAnnouncement(Messages.FormatMOTD()); sender.SendPacket(MotdData); // Send riddle annoucement @@ -3776,20 +3786,20 @@ namespace HISP.Server DoItemPurchases(sender); // Send Queued Messages - string[] queuedMessages = Database.GetMessageQueue(sender.User.Id); + 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.User.Id); + Database.ClearMessageQueue(sender.LoggedinUser.Id); // Send "Playername Logged in" message - byte[] loginMessageBytes = PacketBuilder.CreateChat(Messages.FormatLoginMessage(sender.User.Username), PacketBuilder.CHAT_BOTTOM_LEFT); + byte[] loginMessageBytes = PacketBuilder.CreateChat(Messages.FormatLoginMessage(sender.LoggedinUser.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) + if (!client.LoggedinUser.MuteLogins && !client.LoggedinUser.MuteAll) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) client.SendPacket(loginMessageBytes); @@ -3797,16 +3807,16 @@ namespace HISP.Server * 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); + 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.User.Id != sender.User.Id) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) { - if (IsOnScreen(client.User.X, client.User.Y, sender.User.X, sender.User.Y)) + if (IsOnScreen(client.LoggedinUser.X, client.LoggedinUser.Y, sender.LoggedinUser.X, sender.LoggedinUser.Y)) client.SendPacket(yourPlayerInfo); else client.SendPacket(yourPlayerInfoOffscreen); @@ -3814,6 +3824,8 @@ namespace HISP.Server } } + + } public static void OnSwfModuleCommunication(GameClient sender, byte[] packet) @@ -3823,9 +3835,9 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " tried to send swf communication when not logged in."); return; } - if (packet.Length < 3) + if (packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid swf commmunication Packet"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid swf commmunication Packet"); return; } @@ -3834,13 +3846,13 @@ namespace HISP.Server switch(module) { case PacketBuilder.SWFMODULE_INVITE: - if(packet.Length < 3) + if(packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid 2PLAYER INVITE Packet (WRONG SIZE)"); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string playerIdStr = packetStr.Substring(2, packetStr.Length - 4); int playerId = -1; try { @@ -3851,17 +3863,17 @@ namespace HISP.Server if(IsUserOnline(playerId)) { User toInvite = GetUserById(playerId); - TwoPlayer twoPlayerGame = new TwoPlayer(toInvite, sender.User, false); + TwoPlayer twoPlayerGame = new TwoPlayer(toInvite, sender.LoggedinUser, false); } break; case PacketBuilder.SWFMODULE_ACCEPT: - if (packet.Length < 3) + if (packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid 2PLAYER ACCEPT Packet (WRONG SIZE)"); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + playerIdStr = packetStr.Substring(2, packetStr.Length - 4); playerId = -1; try { @@ -3872,24 +3884,24 @@ namespace HISP.Server if (IsUserOnline(playerId)) { User toAccept = GetUserById(playerId); - if(TwoPlayer.IsPlayerInvitingPlayer(toAccept, sender.User)) + if(TwoPlayer.IsPlayerInvitingPlayer(toAccept, sender.LoggedinUser)) { - TwoPlayer twoPlayerGame = TwoPlayer.GetGameInvitingPlayer(toAccept, sender.User); - twoPlayerGame.Accept(sender.User); + TwoPlayer twoPlayerGame = TwoPlayer.GetGameInvitingPlayer(toAccept, sender.LoggedinUser); + twoPlayerGame.Accept(sender.LoggedinUser); } } break; case PacketBuilder.SWFMODULE_DRAWINGROOM: if(packet.Length < 3) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM packet (swf communication, WRONG SIZE)"); break; } if(packet[2] == PacketBuilder.DRAWINGROOM_GET_DRAWING) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); break; } int roomId = packet[3] - 40; @@ -3900,22 +3912,22 @@ namespace HISP.Server } catch(KeyNotFoundException) { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); break; } if(room.Drawing != "") { - byte[] drawingPacket = PacketBuilder.CreateDrawingUpdate(room.Drawing); + byte[] drawingPacket = PacketBuilder.CreateDrawingUpdatePacket(room.Drawing); sender.SendPacket(drawingPacket); } } else if(packet[2] == PacketBuilder.DRAWINGROOM_SAVE) { - if (packet.Length < 4) + if (packet.Length < 5) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); break; } @@ -3933,27 +3945,27 @@ namespace HISP.Server } catch (KeyNotFoundException) { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); break; } - if (!Database.SavedDrawingsExist(sender.User.Id)) - Database.CreateSavedDrawings(sender.User.Id); + 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.User.Id, room.Drawing); + Database.SaveDrawingSlot1(sender.LoggedinUser.Id, room.Drawing); slotNo = 1; break; case 0x2A: // Slot 2 - Database.SaveDrawingSlot2(sender.User.Id, room.Drawing); + Database.SaveDrawingSlot2(sender.LoggedinUser.Id, room.Drawing); slotNo = 2; break; case 0x2B: // Slot 3 - Database.SaveDrawingSlot3(sender.User.Id, room.Drawing); + Database.SaveDrawingSlot3(sender.LoggedinUser.Id, room.Drawing); slotNo = 3; break; } @@ -3965,13 +3977,13 @@ namespace HISP.Server } else if (packet[2] == PacketBuilder.DRAWINGROOM_LOAD) { - if (packet.Length < 4) + if (packet.Length < 5) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); break; } - if(!sender.User.Subscribed) + if(!sender.LoggedinUser.Subscribed) { byte[] notSubscribedCantLoad = PacketBuilder.CreateChat(Messages.DrawingCannotLoadNotSubscribed, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(notSubscribedCantLoad); @@ -3984,12 +3996,12 @@ namespace HISP.Server room = Drawingroom.GetDrawingRoomById(roomId); } catch (KeyNotFoundException){ - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid drawing room: " + roomId); break; } - if (!Database.SavedDrawingsExist(sender.User.Id)) - Database.CreateSavedDrawings(sender.User.Id); + if (!Database.SavedDrawingsExist(sender.LoggedinUser.Id)) + Database.CreateSavedDrawings(sender.LoggedinUser.Id); int slotNo = 0; byte slot = packet[4]; @@ -3997,15 +4009,15 @@ namespace HISP.Server switch (slot) { case 0x29: // Slot 1 - drawingToAdd = Database.LoadDrawingSlot1(sender.User.Id); + drawingToAdd = Database.LoadDrawingSlot1(sender.LoggedinUser.Id); slotNo = 1; break; case 0x2A: // Slot 2 - drawingToAdd = Database.LoadDrawingSlot2(sender.User.Id); + drawingToAdd = Database.LoadDrawingSlot2(sender.LoggedinUser.Id); slotNo = 2; break; case 0x2B: // Slot 3 - drawingToAdd = Database.LoadDrawingSlot3(sender.User.Id); + drawingToAdd = Database.LoadDrawingSlot3(sender.LoggedinUser.Id); slotNo = 3; break; } @@ -4019,7 +4031,7 @@ namespace HISP.Server break; } - Database.SetLastPlayer("D" + room.Id.ToString(), sender.User.Id); + 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); @@ -4029,15 +4041,15 @@ namespace HISP.Server } else // Default action- draw line { - if (packet.Length < 4) + if (packet.Length < 5) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRAWINGROOM GET DRAWING packet (swf communication, WRONG SIZE)"); break; } - if(!sender.User.Subscribed) + if(!sender.LoggedinUser.Subscribed) { - Logger.ErrorPrint(sender.User.Username + " Tried to draw while not 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; @@ -4051,13 +4063,13 @@ namespace HISP.Server } catch (KeyNotFoundException) { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid drawing room: " + roomId); + 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 - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string drawing = packetStr.Substring(3, packetStr.Length - 5); if (drawing.Contains("X!")) // Clear byte { room.Drawing = ""; @@ -4074,22 +4086,22 @@ namespace HISP.Server break; } update:; - Database.SetLastPlayer("D" + room.Id.ToString(), sender.User.Id); + Database.SetLastPlayer("D" + room.Id.ToString(), sender.LoggedinUser.Id); UpdateDrawingForAll("D" + room.Id, sender, drawing, false); } break; case PacketBuilder.SWFMODULE_BRICKPOET: - if(packet.Length < 4) + if(packet.Length < 5) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET packet (swf communication, WRONG SIZE)"); break; } if(packet[2] == PacketBuilder.BRICKPOET_LIST_ALL) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET LIST ALL packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET LIST ALL packet (swf communication, WRONG SIZE)"); break; } @@ -4101,31 +4113,31 @@ namespace HISP.Server } catch(KeyNotFoundException) { - Logger.ErrorPrint(sender.User.Username + " tried to load an invalid brickpoet room: " + roomId); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to load an invalid brickpoet room: " + roomId); break; } // Send list of peices - byte[] poetPacket = PacketBuilder.CreateBrickPoetList(room); + byte[] poetPacket = PacketBuilder.CreateBrickPoetListPacket(room); sender.SendPacket(poetPacket); } else if(packet[3] == PacketBuilder.BRICKPOET_MOVE) { - if (packet.Length < 0xA) + if (packet.Length < 0xB) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, WRONG SIZE)"); + 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.User.Username + " Sent invalid BRICKPOET MOVE packet (swf communication, NO | SEPERATOR)"); + 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.User.Username + " Sent invalid BRICKPOET MOVE Packet (swf communication, NOT ENOUGH | SEPERATORS."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid BRICKPOET MOVE Packet (swf communication, NOT ENOUGH | SEPERATORS."); break; } @@ -4149,7 +4161,7 @@ namespace HISP.Server } catch (Exception e) { - Logger.ErrorPrint(sender.User.Username + " brickpoet - "+e.ToString()); + Logger.ErrorPrint(sender.LoggedinUser.Username + " brickpoet - "+e.ToString()); break; } // Change location in Database @@ -4158,18 +4170,18 @@ namespace HISP.Server foreach(User user in GetUsersOnSpecialTileCode("MULTIROOM-" + "P" + roomId.ToString())) // Send to each user! { - if (user.Id == sender.User.Id) + if (user.Id == sender.LoggedinUser.Id) continue; - byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMove(peice); - user.Client.SendPacket(updatePoetRoomPacket); + byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMovePacket(peice); + user.LoggedinClient.SendPacket(updatePoetRoomPacket); } - if (Database.GetLastPlayer("P" + roomId) != sender.User.Id) + if (Database.GetLastPlayer("P" + roomId) != sender.LoggedinUser.Id) { - Database.SetLastPlayer("P" + roomId, sender.User.Id); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + Database.SetLastPlayer("P" + roomId, sender.LoggedinUser.Id); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); } break; @@ -4182,9 +4194,9 @@ namespace HISP.Server break; case PacketBuilder.SWFMODULE_DRESSUPROOM: - if ( packet.Length < 5 ) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM packet (swf communication, WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM packet (swf communication, WRONG SIZE)"); break; } if (packet[2] == PacketBuilder.DRESSUPROOM_LIST_ALL) @@ -4194,35 +4206,35 @@ namespace HISP.Server if (room.DressupPeices.Length > 0) { - byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceLoad(room.DressupPeices); + byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceLoad(room.DressupPeices.ToArray()); sender.SendPacket(allDressupsResponse); } } else // Move { - if (packet.Length < 8) + if (packet.Length < 9) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, WRONG SIZE)"); + 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.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID ROOM)"); + 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 - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string moveStr = packetStr.Substring(3, packetStr.Length - 5); string[] moves = moveStr.Split('|'); if(moves.Length < 3) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, MOVES WRONG SIZE)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, MOVES WRONG SIZE)"); break; } @@ -4247,7 +4259,7 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID LOCATION)"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent invalid DRESSUPROOM MOVE packet (swf communication, INVALID LOCATION)"); break; } @@ -4259,68 +4271,68 @@ namespace HISP.Server // 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); + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true); foreach(User user in users) { - if (user.Id != sender.User.Id) - user.Client.SendPacket(movePeicePacket); + if (user.Id != sender.LoggedinUser.Id) + user.LoggedinClient.SendPacket(movePeicePacket); } } break; - case PacketBuilder.SWFMODULE_BROADCAST: - byte[] response = PacketBuilder.CreateForwardedSwfModule(packet); - foreach (User user in GetUsersAt(sender.User.X, sender.User.Y)) + case PacketBuilder.SWFMODULE_BANDHALL: + byte[] response = PacketBuilder.CreateForwardedSwfRequest(packet); + foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - if (user.Id == sender.User.Id) + if (user.Id == sender.LoggedinUser.Id) continue; - user.Client.SendPacket(response); + user.LoggedinClient.SendPacket(response); } break; - case PacketBuilder.SWFMODULE_OPPONENT: - if(TwoPlayer.IsPlayerInGame(sender.User)) + case PacketBuilder.SWFMODULE_2PLAYER: + if(TwoPlayer.IsPlayerInGame(sender.LoggedinUser)) { - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.User); + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.LoggedinUser); User otherUser = null; - if (twoPlayerGame.Invitee.Id == sender.User.Id) + if (twoPlayerGame.Invitee.Id == sender.LoggedinUser.Id) otherUser = twoPlayerGame.Inviting; - else if (twoPlayerGame.Inviting.Id == sender.User.Id) + else if (twoPlayerGame.Inviting.Id == sender.LoggedinUser.Id) otherUser = twoPlayerGame.Invitee; - response = PacketBuilder.CreateForwardedSwfModule(packet); - otherUser.Client.SendPacket(response); + response = PacketBuilder.CreateForwardedSwfRequest(packet); + otherUser.LoggedinClient.SendPacket(response); } break; case PacketBuilder.SWFMODULE_CLOSE: - if (TwoPlayer.IsPlayerInGame(sender.User)) + if (TwoPlayer.IsPlayerInGame(sender.LoggedinUser)) { - TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.User); + TwoPlayer twoPlayerGame = TwoPlayer.GetTwoPlayerGameInProgress(sender.LoggedinUser); User otherUser = null; - if (twoPlayerGame.Invitee.Id == sender.User.Id) + if (twoPlayerGame.Invitee.Id == sender.LoggedinUser.Id) otherUser = twoPlayerGame.Inviting; - else if (twoPlayerGame.Inviting.Id == sender.User.Id) + else if (twoPlayerGame.Inviting.Id == sender.LoggedinUser.Id) otherUser = twoPlayerGame.Invitee; response = PacketBuilder.Create2PlayerClose(); - otherUser.Client.SendPacket(response); + otherUser.LoggedinClient.SendPacket(response); - twoPlayerGame.CloseGame(sender.User); + twoPlayerGame.CloseGame(sender.LoggedinUser); } break; case PacketBuilder.SWFMODULE_ARENA: - if (Arena.UserHasEnteredHorseInAnyArena(sender.User)) + if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { - Arena arena = Arena.GetArenaUserEnteredIn(sender.User); - response = PacketBuilder.CreateForwardedSwfModule(packet); + Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + response = PacketBuilder.CreateForwardedSwfRequest(packet); foreach (Arena.ArenaEntry entry in arena.Entries.ToArray()) { - if (entry.EnteredUser.Id == sender.User.Id) + if (entry.EnteredUser.Id == sender.LoggedinUser.Id) continue; - if(entry.EnteredUser.Client.LoggedIn) - entry.EnteredUser.Client.SendPacket(response); + if(entry.EnteredUser.LoggedinClient.LoggedIn) + entry.EnteredUser.LoggedinClient.SendPacket(response); } } @@ -4341,19 +4353,19 @@ namespace HISP.Server return; } - if(packet.Length < 3) + if(packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid wish Packet"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid wish Packet"); return; } - if (!sender.User.Inventory.HasItemId(Item.WishingCoin)) + if (!sender.LoggedinUser.Inventory.HasItemId(Item.WishingCoin)) { - Logger.HackerPrint(sender.User.Username + " Tried to use a wishing well while having 0 coins."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use a wishing well while having 0 coins."); return; } - InventoryItem wishingCoinInvItems = sender.User.Inventory.GetItemByItemId(Item.WishingCoin); + InventoryItem wishingCoinInvItems = sender.LoggedinUser.Inventory.GetItemByItemId(Item.WishingCoin); byte wishType = packet[1]; string message = ""; @@ -4364,7 +4376,7 @@ namespace HISP.Server { case PacketBuilder.WISH_MONEY: int gainMoney = RandomNumberGenerator.Next(500, 1000); - sender.User.AddMoney(gainMoney); + sender.LoggedinUser.AddMoney(gainMoney); message = Messages.FormatWishMoneyMessage(gainMoney); break; case PacketBuilder.WISH_ITEMS: @@ -4374,8 +4386,8 @@ namespace HISP.Server 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)); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm2.Id)); message = Messages.FormatWishThingsMessage(itm.Name, itm2.Name); break; @@ -4389,8 +4401,8 @@ namespace HISP.Server itm = wishableItmes[item]; - sender.User.AddMoney(earnMoney); - sender.User.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); + sender.LoggedinUser.AddMoney(earnMoney); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(itm.Id)); message = Messages.FormatWishWorldPeaceMessage(earnMoney, itm.Name); break; @@ -4398,34 +4410,34 @@ namespace HISP.Server Logger.ErrorPrint("Unknnown Wish type: " + wishType.ToString("X")); break; } - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count++; + sender.LoggedinUser.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.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 100) + sender.LoggedinUser.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.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 1000) + sender.LoggedinUser.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 + 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.User.Inventory.Remove(wishingCoinInvItems.ItemInstances[0]); + sender.LoggedinUser.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"); + 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.User.Username); + Logger.DebugPrint("Received KEEP_ALIVE from: " + sender.LoggedinUser.Username); return; } } @@ -4436,9 +4448,9 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Requested stats when not logged in."); return; } - if(packet.Length < 2) + if(packet.Length < 3) { - Logger.ErrorPrint(sender.User.Username + "Sent an invalid Stats Packet"); + Logger.ErrorPrint(sender.LoggedinUser.Username + "Sent an invalid Stats Packet"); return; } @@ -4453,7 +4465,7 @@ namespace HISP.Server } if (packet.Length < 2) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Profile Packet"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid Profile Packet"); return; } @@ -4464,8 +4476,8 @@ namespace HISP.Server } if (method == PacketBuilder.VIEW_PROFILE) { - sender.User.MajorPriority = true; - string profilePage = sender.User.ProfilePage; + sender.LoggedinUser.MajorPriority = true; + string profilePage = sender.LoggedinUser.ProfilePage; byte[] profilePacket = PacketBuilder.CreateProfilePage(profilePage); sender.SendPacket(profilePacket); } @@ -4473,17 +4485,19 @@ namespace HISP.Server { string packetStr = Encoding.UTF8.GetString(packet); - if (packet.Length <= 3 || !packetStr.Contains('|')) + if (packet.Length < 3 || !packetStr.Contains('|')) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Profile SAVE Packet"); + 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 - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); - sender.User.CharacterId = characterId; + profilePage = profilePage.Substring(0, profilePage.Length - 2); + sender.LoggedinUser.CharacterId = characterId; + + if (profilePage.Length > 4000) { @@ -4492,41 +4506,41 @@ namespace HISP.Server return; } - object filterReason = ChatMsg.FilterMessage(profilePage); + object filterReason = Chat.FilterMessage(profilePage); if(filterReason != null) { - ChatMsg.Reason reason = (ChatMsg.Reason)filterReason; + Chat.Reason reason = (Chat.Reason)filterReason; byte[] msg = PacketBuilder.CreateChat(Messages.FormatProfileSavedBlocked(reason.Message), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(msg); return; } - sender.User.ProfilePage = profilePage; + sender.LoggedinUser.ProfilePage = profilePage; - Logger.DebugPrint(sender.User.Username + " Changed to character id: " + characterId + " and set there Profile Description to '" + 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.User); + UpdateUserFacingAndLocation(sender.LoggedinUser); } else if (method == PacketBuilder.SECCODE_AWARD) { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode AWARD request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string awardIdStr = packetStr.Substring(6, packetStr.Length - 6 - 2); int value = -1; try @@ -4535,18 +4549,18 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid awardid value"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid awardid value"); return; } - sender.User.Awards.AddAward(Award.GetAwardById(value)); + 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.User.Username + " Sent invalid sec code"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); return; } } @@ -4555,49 +4569,49 @@ namespace HISP.Server bool time = (method == PacketBuilder.SECCODE_TIME); bool winloose = (method == PacketBuilder.SECCODE_WINLOOSE); - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode score/time/winloose request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + 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.User.Highscores.Win(gameTitle); + 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.User.Highscores.Loose(gameTitle); + sender.LoggedinUser.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.LoggedinUser.Highscores.HighscoreList.Length >= 30) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player - if (sender.User.Highscores.HighscoreList.Length >= 60) - sender.User.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master + if (sender.LoggedinUser.Highscores.HighscoreList.Length >= 60) + sender.LoggedinUser.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.LoggedinUser.Id) >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy return; } if (gameInfoStr.Contains("|")) @@ -4605,7 +4619,7 @@ namespace HISP.Server string[] gameInfo = gameInfoStr.Split('|'); if (gameInfo.Length < 2) { - Logger.ErrorPrint(sender.User.Username + " Sent a invalid seccode score request"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid seccode score request"); return; } @@ -4619,7 +4633,7 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid score value"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid score value"); return; } Highscore.HighscoreTableEntry[] scores = Database.GetTopScores(gameTitle, 5, !time); @@ -4627,12 +4641,12 @@ namespace HISP.Server if (scores.Length >= 1) bestScoreEver = scores[0].Score <= value; - bool newHighscore = sender.User.Highscores.UpdateHighscore(gameTitle, value, time); + 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.User.AddMoney(2500); + sender.LoggedinUser.AddMoney(2500); } else if (newHighscore) { @@ -4649,22 +4663,22 @@ namespace HISP.Server } - if(sender.User.Highscores.HighscoreList.Length >= 30) - sender.User.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player + if(sender.LoggedinUser.Highscores.HighscoreList.Length >= 30) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(12)); // Minigame Player - if (sender.User.Highscores.HighscoreList.Length >= 60) - sender.User.Awards.AddAward(Award.GetAwardById(13)); // Minigame Master + if (sender.LoggedinUser.Highscores.HighscoreList.Length >= 60) + sender.LoggedinUser.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.LoggedinUser.Id) >= 1000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(14)); // Minigame Nut - if (Database.GetPlayerTotalMinigamesPlayed(sender.User.Id) >= 10000) - sender.User.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy + if (Database.GetPlayerTotalMinigamesPlayed(sender.LoggedinUser.Id) >= 10000) + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(15)); // Minigame Crazy } else { - Logger.ErrorPrint(sender.User.Username + " didnt send a game name AND a score."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score."); return; } @@ -4673,33 +4687,33 @@ namespace HISP.Server { byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); return; } } else if (method == PacketBuilder.SECCODE_MONEY) { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode money request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string gameInfoStr = packetStr.Substring(6, packetStr.Length - 6 - 2); if (gameInfoStr.Contains("|")) { string[] moneyInfo = gameInfoStr.Split('|'); if (moneyInfo.Length < 2) { - Logger.ErrorPrint(sender.User.Username + " Sent a invalid money score request"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent a invalid money score request"); return; } @@ -4713,21 +4727,21 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid money value"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid money value"); return; } int moneyEarned = value * 10; - Logger.InfoPrint(sender.User.Username + " Earned $" + moneyEarned + " In: " + id); + Logger.InfoPrint(sender.LoggedinUser.Username + " Earned $" + moneyEarned + " In: " + id); - sender.User.AddMoney(moneyEarned); + sender.LoggedinUser.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."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " didnt send a game name AND a score."); return; } @@ -4735,19 +4749,19 @@ namespace HISP.Server } else if (method == PacketBuilder.SECCODE_GIVE_ITEM) { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode item request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); int value = -1; try { @@ -4755,7 +4769,7 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid value"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); return; } @@ -4768,7 +4782,7 @@ namespace HISP.Server string messageToSend = Messages.FormatYouEarnedAnItemMessage(itemInfo.Name); try { - sender.User.Inventory.Add(itm); + sender.LoggedinUser.Inventory.Add(itm); } catch(InventoryException) { @@ -4780,7 +4794,7 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to give an non existant item"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to give an non existant item"); return; } @@ -4789,25 +4803,25 @@ namespace HISP.Server { byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); return; } } else if (method == PacketBuilder.SECCODE_DELETE_ITEM) { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode item request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); int value = -1; try { @@ -4815,15 +4829,15 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent correct sec code, but invalid value"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); return; } - if (sender.User.Inventory.HasItemId(value)) + if (sender.LoggedinUser.Inventory.HasItemId(value)) { - InventoryItem item = sender.User.Inventory.GetItemByItemId(value); - sender.User.Inventory.Remove(item.ItemInstances[0]); + 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); @@ -4833,7 +4847,7 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to delete an non existant item"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to delete an non existant item"); return; } @@ -4842,25 +4856,25 @@ namespace HISP.Server { byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); return; } } else if (method == PacketBuilder.SECCODE_QUEST) { - byte[] ExpectedSecCode = sender.User.GenerateSecCode(); + byte[] ExpectedSecCode = sender.LoggedinUser.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("-", " ")); + Logger.DebugPrint(sender.LoggedinUser.Username + " Sent sec code: " + BitConverter.ToString(GotSecCode).Replace("-", " ")); if (ExpectedSecCode.SequenceEqual(GotSecCode)) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent a seccode quest request with invalid size"); + 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) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string intStr = packetStr.Substring(6, packetStr.Length - 6 - 2); int value = -1; try { @@ -4868,7 +4882,7 @@ namespace HISP.Server } catch (FormatException) { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but invalid value"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but invalid value"); return; } @@ -4876,11 +4890,11 @@ namespace HISP.Server if (Quest.DoesQuestExist(value)) { Quest.QuestEntry questEntry = Quest.GetQuestById(value); - Quest.ActivateQuest(sender.User, questEntry); + Quest.ActivateQuest(sender.LoggedinUser, questEntry); } else { - Logger.HackerPrint(sender.User.Username + " Sent correct sec code, but tried to activate a non existant quest"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent correct sec code, but tried to activate a non existant quest"); return; } @@ -4890,31 +4904,31 @@ namespace HISP.Server { byte[] errorMessage = PacketBuilder.CreateChat(Messages.InvalidSecCodeError, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(errorMessage); - Logger.HackerPrint(sender.User.Username + " Sent invalid sec code"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Sent invalid sec code"); return; } } else if (method == PacketBuilder.PROFILE_HIGHSCORES_LIST) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string gameName = packetStr.Substring(2, packetStr.Length - 4); byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopHighscores(gameName)); sender.SendPacket(metaTag); } else if (method == PacketBuilder.PROFILE_BESTTIMES_LIST) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string gameName = packetStr.Substring(2, packetStr.Length - 4); byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopTimes(gameName)); sender.SendPacket(metaTag); } else if (method == PacketBuilder.PROFILE_WINLOOSE_LIST) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; string packetStr = Encoding.UTF8.GetString(packet); - string gameName = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string gameName = packetStr.Substring(2, packetStr.Length - 4); byte[] metaTag = PacketBuilder.CreateMeta(Meta.BuildTopWinners(gameName)); sender.SendPacket(metaTag); } @@ -4932,7 +4946,7 @@ namespace HISP.Server } - User loggedInUser = sender.User; + User loggedInUser = sender.LoggedinUser; /* * Player stuff @@ -4948,7 +4962,7 @@ namespace HISP.Server // Close Social Windows foreach (User sUser in loggedInUser.BeingSocializedBy) - UpdateArea(sUser.Client); + UpdateArea(sUser.LoggedinClient); loggedInUser.ClearSocailizedWith(); @@ -4956,7 +4970,7 @@ namespace HISP.Server { if(loggedInUser.CurrentlyRidingHorse.BasicStats.Experience < 25) { - if(GameServer.RandomNumberGenerator.Next(0, 100) == 97) + if(GameServer.RandomNumberGenerator.Next(0, 100) >= 97 || sender.LoggedinUser.Username.ToLower() == "dream") { loggedInUser.CurrentlyRidingHorse.BasicStats.Experience++; byte[] horseBuckedMessage; @@ -4967,8 +4981,8 @@ namespace HISP.Server else horseBuckedMessage = PacketBuilder.CreateChat(Messages.HorseBuckedYou, PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.CurrentlyRidingHorse = null; - sender.User.Facing %= 5; + sender.LoggedinUser.CurrentlyRidingHorse = null; + sender.LoggedinUser.Facing %= 5; sender.SendPacket(horseBuckedMessage); } } @@ -5017,7 +5031,7 @@ namespace HISP.Server int onHorse = 0; - int facing = sender.User.Facing; + int facing = sender.LoggedinUser.Facing; while (facing >= 5) { facing -= 5; @@ -5074,7 +5088,7 @@ namespace HISP.Server 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); + byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true); sender.SendPacket(moveResponse); goto Complete; } @@ -5163,12 +5177,12 @@ namespace HISP.Server } } - byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true); + byte[] moveResponse = PacketBuilder.CreateMovementPacket(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); + byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false); sender.SendPacket(moveResponse); } Complete:; @@ -5200,7 +5214,7 @@ namespace HISP.Server continue; byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(1000 + 4, 1000 + 1, loggedInUser.Facing, loggedInUser.CharacterId, loggedInUser.Username); - offScreenUsers.Client.SendPacket(playerInfoBytes); + offScreenUsers.LoggedinClient.SendPacket(playerInfoBytes); } foreach (User onScreenUsers in goneOnScreen) @@ -5209,7 +5223,7 @@ namespace HISP.Server continue; byte[] playerInfoBytes = PacketBuilder.CreatePlayerInfoUpdateOrCreate(onScreenUsers.X, onScreenUsers.Y, onScreenUsers.Facing, onScreenUsers.CharacterId, onScreenUsers.Username); - loggedInUser.Client.SendPacket(playerInfoBytes); + loggedInUser.LoggedinClient.SendPacket(playerInfoBytes); } Update(sender); @@ -5222,7 +5236,7 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent quit packet when not logged in."); return; } - Logger.InfoPrint(sender.User.Username + " Clicked \"Quit Game\".. Disconnecting"); + Logger.InfoPrint(sender.LoggedinUser.Username + " Clicked \"Quit Game\".. Disconnecting"); sender.Disconnect(); } public static void OnNpcInteraction(GameClient sender, byte[] packet) @@ -5232,7 +5246,7 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent npc interaction packet when not logged in."); return; } - if (packet.Length < 2) + if (packet.Length < 3) { Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid npc interaction packet."); return; @@ -5242,7 +5256,7 @@ namespace HISP.Server { string packetStr = Encoding.UTF8.GetString(packet); - string number = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string number = packetStr.Substring(2, packetStr.Length - 4); int chatId = 0; try @@ -5251,36 +5265,36 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Tried to start talking to an NPC with id that is NaN."); + 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.User.Username + " Tried to start talking to an NPC that doesnt exist."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC that doesnt exist."); return; } - sender.User.MajorPriority = true; + sender.LoggedinUser.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."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to start talking to an NPC with no chatpoints."); return; } - int defaultChatpointId = Npc.GetDefaultChatpoint(sender.User, entry); + int defaultChatpointId = Npc.GetDefaultChatpoint(sender.LoggedinUser, entry); Npc.NpcChat startingChatpoint = Npc.GetNpcChatpoint(entry, defaultChatpointId); - string metaInfo = Meta.BuildNpcChatpoint(sender.User, entry, startingChatpoint); + string metaInfo = Meta.BuildNpcChatpoint(sender.LoggedinUser, entry, startingChatpoint); byte[] metaPacket = PacketBuilder.CreateMeta(metaInfo); sender.SendPacket(metaPacket); - sender.User.LastTalkedToNpc = entry; + sender.LoggedinUser.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); + string number = packetStr.Substring(2, packetStr.Length - 4); int replyId = 0; try { @@ -5288,11 +5302,11 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Tried to reply to an NPC with replyid that is NaN."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to reply to an NPC with replyid that is NaN."); return; } - Npc.NpcEntry lastNpc = sender.User.LastTalkedToNpc; + Npc.NpcEntry lastNpc = sender.LoggedinUser.LastTalkedToNpc; Npc.NpcReply reply; try { @@ -5300,7 +5314,7 @@ namespace HISP.Server } catch(KeyNotFoundException) { - Logger.ErrorPrint(sender.User.Username + " Tried to reply with replyid that does not exist."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to reply with replyid that does not exist."); return; } @@ -5309,8 +5323,8 @@ namespace HISP.Server UpdateArea(sender); return; } - sender.User.MajorPriority = true; - string metaInfo = Meta.BuildNpcChatpoint(sender.User, lastNpc, Npc.GetNpcChatpoint(lastNpc, reply.GotoChatpoint)); + sender.LoggedinUser.MajorPriority = true; + string metaInfo = Meta.BuildNpcChatpoint(sender.LoggedinUser, lastNpc, Npc.GetNpcChatpoint(lastNpc, reply.GotoChatpoint)); byte[] metaPacket = PacketBuilder.CreateMeta(metaInfo); sender.SendPacket(metaPacket); return; @@ -5323,7 +5337,7 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent transport packet when not logged in."); return; } - if (packet.Length < 2) + if (packet.Length < 3) { Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid transport packet."); return; @@ -5331,7 +5345,7 @@ namespace HISP.Server string packetStr = Encoding.UTF8.GetString(packet); - string number = packetStr.Substring(1, (packetStr.Length - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string number = packetStr.Substring(1, packetStr.Length - 3); int transportid; try @@ -5340,15 +5354,15 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Tried to use a transport with id that is NaN."); + Logger.ErrorPrint(sender.LoggedinUser.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) + 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.User.Username + " Tried to use transport id: " + transportid.ToString() + " while not the correct transport point!"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use transport id: " + transportid.ToString() + " while not the correct transport point!"); return; } @@ -5357,16 +5371,16 @@ namespace HISP.Server if (transportLocation.Type == "WAGON") { - if(sender.User.OwnedRanch != null) + if(sender.LoggedinUser.OwnedRanch != null) { - if(sender.User.OwnedRanch.GetBuildingCount(7) > 0) // Wagon + if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(7) > 0) // Wagon { cost = 0; } } } - if (sender.User.Bids.Length > 0) + if (sender.LoggedinUser.Bids.Length > 0) { byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantBuyWhileAuctioning); @@ -5374,7 +5388,7 @@ namespace HISP.Server } - if (sender.User.Money >= cost) + if (sender.LoggedinUser.Money >= cost) { string swfToLoad = Messages.BoatCutscene; if (transportLocation.Type == "WAGON") @@ -5382,24 +5396,24 @@ namespace HISP.Server if (transportLocation.Type != "ROWBOAT") { - byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swfToLoad, PacketBuilder.PACKET_SWF_MODULE_CUTSCENE); + byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swfToLoad, PacketBuilder.PACKET_SWF_CUTSCENE); sender.SendPacket(swfModulePacket); } - sender.User.Teleport(transportLocation.GotoX, transportLocation.GotoY); - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Transport).Count++; + sender.LoggedinUser.Teleport(transportLocation.GotoX, transportLocation.GotoY); + sender.LoggedinUser.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 + 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.User.TakeMoney(cost); + sender.LoggedinUser.TakeMoney(cost); } else { @@ -5409,7 +5423,7 @@ namespace HISP.Server } catch (KeyNotFoundException) { - Logger.HackerPrint(sender.User.Username + " Tried to use transport id: " + transportid.ToString() + " while not on a transport point!"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to use transport id: " + transportid.ToString() + " while not on a transport point!"); } @@ -5421,9 +5435,9 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent ranch packet when not logged in."); return; } - if (packet.Length < 3) + if (packet.Length < 4) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid ranch packet."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid ranch packet."); return; } string packetStr = Encoding.UTF8.GetString(packet); @@ -5431,7 +5445,7 @@ namespace HISP.Server if (method == PacketBuilder.RANCH_INFO) { - string buildingIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); int buildingId = 0; try { @@ -5439,7 +5453,7 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); + Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to get info for building id NaN"); return; } if (Ranch.RanchBuilding.RanchBuildingExists(buildingId)) @@ -5453,74 +5467,74 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id that didnt exist."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string NanSTR = packetStr.Substring(2, packetStr.Length - 4); if (NanSTR == "NaN") { - if (sender.User.OwnedRanch == null) + if (sender.LoggedinUser.OwnedRanch == null) { - Logger.HackerPrint(sender.User.Username + " Tried to sell there ranch when they didnt own one."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell there ranch when they didnt own one."); return; } - int sellPrice = sender.User.OwnedRanch.GetSellPrice(); - sender.User.AddMoney(sellPrice); + int sellPrice = sender.LoggedinUser.OwnedRanch.GetSellPrice(); + sender.LoggedinUser.AddMoney(sellPrice); byte[] sellPacket = PacketBuilder.CreateChat(Messages.FormatRanchSoldMessage(sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); - sender.User.OwnedRanch.OwnerId = -1; + sender.LoggedinUser.OwnedRanch.OwnerId = -1; sender.SendPacket(sellPacket); // Change map sprite. - User[] users = GetUsersAt(sender.User.X, sender.User.Y, true, true); + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.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); + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + user.LoggedinClient.SendPacket(MovementPacket); } - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); } else { - Logger.ErrorPrint(sender.User.Username + " Tried to sell there ranch without sending NaN."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string NanSTR = packetStr.Substring(2, packetStr.Length - 4); if (NanSTR == "NaN") { - if (sender.User.OwnedRanch != null) + if (sender.LoggedinUser.OwnedRanch != null) { - Ranch.RanchUpgrade currentUpgrade = sender.User.OwnedRanch.GetRanchUpgrade(); + Ranch.RanchUpgrade currentUpgrade = sender.LoggedinUser.OwnedRanch.GetRanchUpgrade(); if (!Ranch.RanchUpgrade.RanchUpgradeExists(currentUpgrade.Id + 1)) { - Logger.ErrorPrint(sender.User.Username + " Tried to upgrade there ranch when it was max upgrade."); + 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.User.Money >= nextUpgrade.Cost) + if (sender.LoggedinUser.Money >= nextUpgrade.Cost) { - sender.User.TakeMoney(nextUpgrade.Cost); - sender.User.OwnedRanch.InvestedMoney += nextUpgrade.Cost; - sender.User.OwnedRanch.UpgradedLevel++; + 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.User.X, sender.User.Y, true, true); + User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.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); + byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true); + user.LoggedinClient.SendPacket(MovementPacket); } - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); } else { @@ -5530,18 +5544,18 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to upgrade there ranch when they didnt own one."); + Logger.HackerPrint(sender.LoggedinUser.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."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); int buildingId = 0; try { @@ -5549,57 +5563,57 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); + 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.User.LastClickedRanchBuilding; + int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding; if (ranchBuild <= 0) return; - if (sender.User.OwnedRanch != null) + if (sender.LoggedinUser.OwnedRanch != null) { - if (ranchBuild > sender.User.OwnedRanch.GetRanchUpgrade().Limit) + if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit) { - Logger.HackerPrint(sender.User.Username + " Tried to remove more buildings than the limit."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to remove more buildings than the limit."); return; } - Ranch.RanchBuilding ranchBuilding = sender.User.OwnedRanch.GetBuilding(ranchBuild - 1); + Ranch.RanchBuilding ranchBuilding = sender.LoggedinUser.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; + 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.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.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.ErrorPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.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."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string buildingIdStr = packetStr.Substring(2, packetStr.Length - 4); int buildingId = 0; try { @@ -5607,31 +5621,31 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " tried to get info for building id NaN"); + 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.User.LastClickedRanchBuilding; + int ranchBuild = sender.LoggedinUser.LastClickedRanchBuilding; if (ranchBuild == 0) return; - if (sender.User.OwnedRanch != null) + if (sender.LoggedinUser.OwnedRanch != null) { - if (ranchBuild > sender.User.OwnedRanch.GetRanchUpgrade().Limit) + if (ranchBuild > sender.LoggedinUser.OwnedRanch.GetRanchUpgrade().Limit) { - Logger.HackerPrint(sender.User.Username + " Tried to build more buildings than the limit."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to build more buildings than the limit."); return; } - if (sender.User.Money >= building.Cost) + if (sender.LoggedinUser.Money >= building.Cost) { - sender.User.OwnedRanch.SetBuilding(ranchBuild - 1, building); - sender.User.OwnedRanch.InvestedMoney += building.Cost; - sender.User.TakeMoney(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.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); return; } @@ -5642,31 +5656,33 @@ namespace HISP.Server return; } } - Logger.HackerPrint(sender.User.Username + " Tried to build in a ranch when they dont own one."); + Logger.HackerPrint(sender.LoggedinUser.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."); + 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 - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string nan = packetStr.Substring(2, packetStr.Length - 4); if (nan == "NaN") { - if (Ranch.IsRanchHere(sender.User.X, sender.User.Y)) + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); - if (sender.User.Money >= ranch.Value) + 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.User.TakeMoney(ranch.Value); - ranch.OwnerId = sender.User.Id; + sender.LoggedinUser.TakeMoney(ranch.Value); + ranch.OwnerId = sender.LoggedinUser.Id; ranch.InvestedMoney += ranch.Value; - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + sender.LoggedinUser.OwnedRanch = ranch; + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(Item.DorothyShoes)); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); } else @@ -5677,36 +5693,36 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " Tried to buy a non existant ranch."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to buy a non existant ranch."); return; } } else { - Logger.ErrorPrint(sender.User.Username + " Sent RANCH_BUY without \"NaN\"."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent RANCH_BUY without \"NaN\"."); return; } } else if (method == PacketBuilder.RANCH_CLICK) { - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid ranch click packet."); + 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.User.X, sender.User.Y)) + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); - if (sender.User.OwnedRanch != null) + Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); + if (sender.LoggedinUser.OwnedRanch != null) { - if (sender.User.OwnedRanch.Id == ranch.Id) + if (sender.LoggedinUser.OwnedRanch.Id == ranch.Id) { int buildSlot = packet[3] - 40; - sender.User.LastClickedRanchBuilding = buildSlot; - sender.User.MajorPriority = true; + sender.LoggedinUser.LastClickedRanchBuilding = buildSlot; + sender.LoggedinUser.MajorPriority = true; if (buildSlot == 0) { @@ -5726,16 +5742,16 @@ namespace HISP.Server } } - Logger.HackerPrint(sender.User.Username + " Tried to build in a ranch they didnt own."); + 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.User.X, sender.User.Y)) + if (Ranch.IsRanchHere(sender.LoggedinUser.X, sender.LoggedinUser.Y)) { - Ranch ranch = Ranch.GetRanchAt(sender.User.X, sender.User.Y); + Ranch ranch = Ranch.GetRanchAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); int buildSlot = packet[3] - 40; - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; if (buildSlot == 0) // Main Building { @@ -5751,13 +5767,13 @@ namespace HISP.Server } else { - Logger.ErrorPrint(sender.User.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); + Logger.ErrorPrint(sender.LoggedinUser.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("-", " ")); + Logger.ErrorPrint(sender.LoggedinUser.Username + " sent an Unknown ranch packet " + BitConverter.ToString(packet).Replace("-", " ")); } } public static void OnChatPacket(GameClient sender, byte[] packet) @@ -5768,7 +5784,7 @@ namespace HISP.Server return; } - if (packet.Length < 3) + if (packet.Length < 4) { Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid chat packet."); return; @@ -5777,16 +5793,16 @@ namespace HISP.Server 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); + Chat.ChatChannel channel = (Chat.ChatChannel)packet[1]; + string message = packetStr.Substring(2, packetStr.Length - 4); - Logger.DebugPrint(sender.User.Username + " Attempting to say '" + message + "' in channel: " + channel.ToString()); + Logger.DebugPrint(sender.LoggedinUser.Username + " Attempting to say '" + message + "' in channel: " + channel.ToString()); string nameTo = null; - if (channel == ChatMsg.ChatChannel.Dm) + if (channel == Chat.ChatChannel.Dm) { - nameTo = ChatMsg.GetDmRecipiant(message); - message = ChatMsg.GetDmMessage(message); + nameTo = Chat.GetDmRecipiant(message); + message = Chat.GetDmMessage(message); } if (message == "") @@ -5805,112 +5821,112 @@ namespace HISP.Server { case "/$": case "/ads": - channel = ChatMsg.ChatChannel.Ads; + channel = Chat.ChatChannel.Ads; break; case "/a": case "/all": - channel = ChatMsg.ChatChannel.All; + channel = Chat.ChatChannel.All; break; case "/h": case "/here": - channel = ChatMsg.ChatChannel.Here; + channel = Chat.ChatChannel.Here; break; case "/n": case "/near": - channel = ChatMsg.ChatChannel.Near; + channel = Chat.ChatChannel.Near; break; case "/b": case "/buddy": - channel = ChatMsg.ChatChannel.Buddies; + channel = Chat.ChatChannel.Buddies; break; case "/i": case "/island": - channel = ChatMsg.ChatChannel.Isle; + channel = Chat.ChatChannel.Isle; break; case "/admin": - if (sender.User.Administrator) - channel = ChatMsg.ChatChannel.Admin; + if (sender.LoggedinUser.Administrator) + channel = Chat.ChatChannel.Admin; else return; break; case "/mod": - if (sender.User.Moderator) - channel = ChatMsg.ChatChannel.Mod; + if (sender.LoggedinUser.Moderator) + channel = Chat.ChatChannel.Mod; else return; break; default: - channel = ChatMsg.ChatChannel.Dm; + channel = Chat.ChatChannel.Dm; nameTo = channelString.Substring(1).Trim(); break; } if (message == "") // this is how pinto does it, im serious. { - channel = ChatMsg.ChatChannel.Dm; + channel = Chat.ChatChannel.Dm; nameTo = ""; } } message = message.Trim(); - if (channel == ChatMsg.ChatChannel.All && message.Length > 150) + if (channel == Chat.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) + if (channel == Chat.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)) + if (Chat.ProcessCommand(sender.LoggedinUser, message)) { - Logger.DebugPrint(sender.User.Username + " Attempting to run command '" + message + "' in channel: " + channel.ToString()); + 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.User); + RiddleEvent.Win(sender.LoggedinUser); // 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)) + 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.User.MutePrivateMessage && channel == ChatMsg.ChatChannel.Dm) + if(sender.LoggedinUser.MutePrivateMessage && channel == Chat.ChatChannel.Dm) { byte[] cantSendDmMessage = PacketBuilder.CreateChat(Messages.CantSendPrivateMessageWhileMuted, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantSendDmMessage); return; } - Object violationReason = ChatMsg.FilterMessage(message); + Object violationReason = Chat.FilterMessage(message); if (violationReason != null) { - sender.User.ChatViolations += 1; - string chatViolationMessage = Messages.FormatGlobalChatViolationMessage((ChatMsg.Reason)violationReason); + 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 = ChatMsg.GetSide(channel); - message = ChatMsg.DoCorrections(message); - message = ChatMsg.EscapeMessage(message); + byte chatSide = Chat.GetSide(channel); + message = Chat.DoCorrections(message); + message = Chat.EscapeMessage(message); - string failedReason = ChatMsg.NonViolationChecks(sender.User, message); + string failedReason = Chat.NonViolationChecks(sender.LoggedinUser, message); if (failedReason != null) { byte[] failedMessage = PacketBuilder.CreateChat(failedReason, PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -5918,10 +5934,10 @@ namespace HISP.Server return; } - GameClient[] recipiants = ChatMsg.GetRecipiants(sender.User, channel, nameTo); + GameClient[] recipiants = Chat.GetRecipiants(sender.LoggedinUser, channel, nameTo); - if(channel == ChatMsg.ChatChannel.Dm) + if(channel == Chat.ChatChannel.Dm) { if(recipiants.Length <= 0) { @@ -5932,45 +5948,45 @@ namespace HISP.Server } else { - nameTo = recipiants[0].User.Username; + nameTo = recipiants[0].LoggedinUser.Username; } } // Spam filter if(ConfigReader.EnableSpamFilter) { - if (channel == ChatMsg.ChatChannel.Ads) + if (channel == Chat.ChatChannel.Ads) { - if (!sender.User.CanUseAdsChat && !sender.User.Administrator) + if (!sender.LoggedinUser.CanUseAdsChat && !sender.LoggedinUser.Administrator) { byte[] cantSendInAds = PacketBuilder.CreateChat(Messages.AdsOnlyOncePerMinute, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantSendInAds); return; } - sender.User.CanUseAdsChat = false; + sender.LoggedinUser.CanUseAdsChat = false; } - else if (channel == ChatMsg.ChatChannel.All) + else if (channel == Chat.ChatChannel.All) { - if (sender.User.TotalGlobalChatMessages <= 0 && !sender.User.Administrator) + if (sender.LoggedinUser.TotalGlobalChatMessages <= 0 && !sender.LoggedinUser.Administrator) { byte[] globalLimited = PacketBuilder.CreateChat(Messages.GlobalChatLimited, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(globalLimited); return; } - sender.User.TotalGlobalChatMessages--; + sender.LoggedinUser.TotalGlobalChatMessages--; } } // Muted user checks - if(channel == ChatMsg.ChatChannel.Dm) + if(channel == Chat.ChatChannel.Dm) { try { User userTo = GetUserByNameStartswith(nameTo); - if (sender.User.MutePlayer.IsUserMuted(userTo)) + if (sender.LoggedinUser.MutePlayer.IsUserMuted(userTo)) { byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatCantSendYourIgnoringPlayer(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); sender.SendPacket(dmWasBlocked); @@ -5982,7 +5998,7 @@ namespace HISP.Server sender.SendPacket(dmWasBlocked); return; } - else if (userTo.MutePlayer.IsUserMuted(sender.User)) + else if (userTo.MutePlayer.IsUserMuted(sender.LoggedinUser)) { byte[] dmWasBlocked = PacketBuilder.CreateChat(Messages.FormatPlayerIgnoringYourPms(userTo.Username), PacketBuilder.CHAT_DM_RIGHT); sender.SendPacket(dmWasBlocked); @@ -5995,20 +6011,20 @@ namespace HISP.Server } } // Finally send chat message. - string formattedMessage = ChatMsg.FormatChatForOthers(sender.User, channel, message); - string formattedMessageSender = ChatMsg.FormatChatForSender(sender.User, channel, message, nameTo); + 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.CreatePlaySound(ChatMsg.PrivateMessageSound); + byte[] playDmSound = PacketBuilder.CreatePlaysoundPacket(Chat.PrivateMessageSound); // Send to clients ... foreach (GameClient recipiant in recipiants) { recipiant.SendPacket(chatPacketOthers); - if (channel == ChatMsg.ChatChannel.Dm) + if (channel == Chat.ChatChannel.Dm) recipiant.SendPacket(playDmSound); } @@ -6016,14 +6032,14 @@ namespace HISP.Server sender.SendPacket(chatPacketSender); // AutoReply - if (channel == ChatMsg.ChatChannel.Dm) + if (channel == Chat.ChatChannel.Dm) { foreach (GameClient recipiant in recipiants) { - if (recipiant.User.AutoReplyText != "") + if (recipiant.LoggedinUser.AutoReplyText != "") { - string formattedMessageAuto = ChatMsg.FormatChatForOthers(recipiant.User, channel, recipiant.User.AutoReplyText, true); - string formattedMessageSenderAuto = ChatMsg.FormatChatForSender(recipiant.User, channel, recipiant.User.AutoReplyText, nameTo, true); + 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); @@ -6044,16 +6060,16 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Send click packet when not logged in."); return; } - if (packet.Length < 5) + if (packet.Length < 6) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid Click Packet"); + 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 - 1) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string packetContents = packetStr.Substring(1, packetStr.Length - 3); string[] xy = packetContents.Split('|'); int x = 0; int y = 0; @@ -6065,11 +6081,11 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent a click packet with non-string xy value."); + Logger.ErrorPrint(sender.LoggedinUser.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()); + 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 @@ -6109,9 +6125,8 @@ namespace HISP.Server 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); } } @@ -6122,9 +6137,9 @@ namespace HISP.Server Logger.ErrorPrint(sender.RemoteIp + " Sent object interaction packet when not logged in."); return; } - if (packet.Length < 2) + if (packet.Length < 3) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } @@ -6133,13 +6148,13 @@ namespace HISP.Server { case PacketBuilder.ITEM_PICKUP_ALL: string chatMsg = Messages.GrabAllItemsMessage; - DroppedItems.DroppedItem[] droppedItems = DroppedItems.GetItemsAt(sender.User.X, sender.User.Y); + DroppedItems.DroppedItem[] droppedItems = DroppedItems.GetItemsAt(sender.LoggedinUser.X, sender.LoggedinUser.Y); foreach (DroppedItems.DroppedItem item in droppedItems) { try { - sender.User.Inventory.Add(item.Instance); + sender.LoggedinUser.Inventory.Add(item.Instance); DroppedItems.RemoveDroppedItem(item); } catch (InventoryException) @@ -6148,7 +6163,7 @@ namespace HISP.Server } } - UpdateAreaForAll(sender.User.X, sender.User.Y); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y); byte[] chatMessage = PacketBuilder.CreateChat(chatMsg, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatMessage); @@ -6156,7 +6171,7 @@ namespace HISP.Server break; case PacketBuilder.ITEM_PICKUP: string packetStr = Encoding.UTF8.GetString(packet); - string randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string randomIdStr = packetStr.Substring(2, packet.Length - 4); int randomId = 0; try @@ -6165,7 +6180,7 @@ namespace HISP.Server } catch(FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } @@ -6174,7 +6189,7 @@ namespace HISP.Server DroppedItems.DroppedItem item = DroppedItems.GetDroppedItemById(randomId); try { - sender.User.Inventory.Add(item.Instance); + sender.LoggedinUser.Inventory.Add(item.Instance); } catch (InventoryException) { @@ -6186,7 +6201,7 @@ namespace HISP.Server DroppedItems.RemoveDroppedItem(item); - UpdateAreaForAll(sender.User.X, sender.User.Y); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y); chatMessage = PacketBuilder.CreateChat(Messages.GrabbedItemMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatMessage); @@ -6196,7 +6211,7 @@ namespace HISP.Server 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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to grab a non existing object."); return; } @@ -6206,103 +6221,103 @@ namespace HISP.Server switch(toRemove) { case '1': - if(sender.User.EquipedCompetitionGear.Head != null) + if(sender.LoggedinUser.EquipedCompetitionGear.Head != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Head.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove competition gear when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); } break; case '2': - if (sender.User.EquipedCompetitionGear.Body != null) + if (sender.LoggedinUser.EquipedCompetitionGear.Body != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Body.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove competition gear when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); } break; case '3': - if (sender.User.EquipedCompetitionGear.Legs != null) + if (sender.LoggedinUser.EquipedCompetitionGear.Legs != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Legs.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove competition gear when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); } break; case '4': - if (sender.User.EquipedCompetitionGear.Feet != null) + if (sender.LoggedinUser.EquipedCompetitionGear.Feet != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Feet.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove competition gear when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove competition gear when none was equipped."); } break; case '5': - if (sender.User.EquipedJewelry.Slot1 != null) + if (sender.LoggedinUser.EquipedJewelry.Slot1 != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot1.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove jewery when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); } break; case '6': - if (sender.User.EquipedJewelry.Slot2 != null) + if (sender.LoggedinUser.EquipedJewelry.Slot2 != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot2.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove jewery when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); } break; case '7': - if (sender.User.EquipedJewelry.Slot3 != null) + if (sender.LoggedinUser.EquipedJewelry.Slot3 != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot3.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove jewery when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Attempted to remove jewery when none was equipped."); } break; case '8': - if (sender.User.EquipedJewelry.Slot4 != null) + if (sender.LoggedinUser.EquipedJewelry.Slot4 != null) { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedJewelry.Slot4.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.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.User.Username + " Attempted to remove jewery when none was equipped."); + Logger.HackerPrint(sender.LoggedinUser.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("-", " ")); + Logger.InfoPrint(sender.LoggedinUser.Username + "Unimplemented \"remove worn item\" ItemInteraction packet: " + BitConverter.ToString(packet).Replace("-", " ")); break; } @@ -6321,7 +6336,7 @@ namespace HISP.Server break; case PacketBuilder.ITEM_THROW: packetStr = Encoding.UTF8.GetString(packet); - string itemidStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string itemidStr = packetStr.Substring(2, packet.Length - 2); int itemId = 0; try @@ -6330,31 +6345,31 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. (THROW) " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. (THROW) " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItemId(itemId)) + if (sender.LoggedinUser.Inventory.HasItemId(itemId)) { if (!Item.IsThrowable(itemId)) { - Logger.HackerPrint(sender.User.Username + " Tried to throw an item that isnt throwable."); + Logger.HackerPrint(sender.LoggedinUser.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); + 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.User.Id) + if (userAt[userIndx].Id == sender.LoggedinUser.Id) continue; Item.ThrowableItem throwableItem = Item.GetThrowableItem(curItem.ItemId); - if (userAt[userIndx].Id == sender.User.Id) + if (userAt[userIndx].Id == sender.LoggedinUser.Id) { byte[] thrownHitYourself = PacketBuilder.CreateChat(throwableItem.HitYourselfMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(thrownHitYourself); @@ -6368,26 +6383,26 @@ namespace HISP.Server } if(itemId == Item.ModSplatterball) { - ModsRevengeEvent.Payout(sender.User, userAt[userIndx]); + 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.User.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].Client.SendPacket(thrownForOthers); + userAt[userIndx].LoggedinClient.SendPacket(thrownForOthers); break; } - sender.User.Inventory.Remove(curItem); + sender.LoggedinUser.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); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; try @@ -6396,18 +6411,18 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - ItemInstance curItem = sender.User.Inventory.GetItemByRandomid(randomId).ItemInstances[0]; + ItemInstance curItem = sender.LoggedinUser.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); + sender.LoggedinUser.Inventory.Add(wrappedItem); + sender.LoggedinUser.Inventory.Remove(curItem); } catch(InventoryException) { @@ -6423,7 +6438,7 @@ namespace HISP.Server break; case PacketBuilder.ITEM_OPEN: packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; try @@ -6432,16 +6447,16 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem item = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); int newItem = item.ItemInstances[0].Data; if(newItem == 0) { - sender.User.Inventory.Remove(item.ItemInstances[0]); + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); byte[] itemOpenFailedNothingInside = PacketBuilder.CreateChat(Messages.SantaCantOpenNothingInside, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(itemOpenFailedNothingInside); @@ -6453,8 +6468,8 @@ namespace HISP.Server try { - sender.User.Inventory.Add(new ItemInstance(newItem)); - sender.User.Inventory.Remove(item.ItemInstances[0]); + sender.LoggedinUser.Inventory.Add(new ItemInstance(newItem)); + sender.LoggedinUser.Inventory.Remove(item.ItemInstances[0]); } catch(InventoryException) { @@ -6469,14 +6484,14 @@ namespace HISP.Server break; case PacketBuilder.ITEM_USE: packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 4); if(randomIdStr == "") // f12 ranch shortcut { - if (sender.User.Inventory.HasItemId(Item.DorothyShoes)) + if (sender.LoggedinUser.Inventory.HasItemId(Item.DorothyShoes)) { - InventoryItem itm = sender.User.Inventory.GetItemByItemId(Item.DorothyShoes); - Item.UseItem(sender.User, itm.ItemInstances[0]); + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByItemId(Item.DorothyShoes); + Item.UseItem(sender.LoggedinUser, itm.ItemInstances[0]); return; } else @@ -6495,18 +6510,18 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); - Item.UseItem(sender.User, itm.ItemInstances[0]); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; try @@ -6515,12 +6530,12 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); ItemInstance instance = itm.ItemInstances[0]; Item.ItemInformation itemInf = instance.GetItemInfo(); @@ -6529,80 +6544,80 @@ namespace HISP.Server switch (itemInf.GetMiscFlag(0)) { case CompetitionGear.MISC_FLAG_HEAD: - if (sender.User.EquipedCompetitionGear.Head == null) - sender.User.EquipedCompetitionGear.Head = itemInf; + if (sender.LoggedinUser.EquipedCompetitionGear.Head == null) + sender.LoggedinUser.EquipedCompetitionGear.Head = itemInf; else { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Head.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Head = itemInf; + 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.User.EquipedCompetitionGear.Body == null) - sender.User.EquipedCompetitionGear.Body = itemInf; + if (sender.LoggedinUser.EquipedCompetitionGear.Body == null) + sender.LoggedinUser.EquipedCompetitionGear.Body = itemInf; else { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Body.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Body = itemInf; + 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.User.EquipedCompetitionGear.Legs == null) - sender.User.EquipedCompetitionGear.Legs = itemInf; + if (sender.LoggedinUser.EquipedCompetitionGear.Legs == null) + sender.LoggedinUser.EquipedCompetitionGear.Legs = itemInf; else { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Legs.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Legs = itemInf; + 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.User.EquipedCompetitionGear.Feet == null) - sender.User.EquipedCompetitionGear.Feet = itemInf; + if (sender.LoggedinUser.EquipedCompetitionGear.Feet == null) + sender.LoggedinUser.EquipedCompetitionGear.Feet = itemInf; else { - ItemInstance itemInstance = new ItemInstance(sender.User.EquipedCompetitionGear.Feet.Id); - sender.User.Inventory.AddIgnoringFull(itemInstance); - sender.User.EquipedCompetitionGear.Feet = itemInf; + 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.User.Inventory.Remove(instance); + 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.User.EquipedJewelry.Slot1 == null) + if (sender.LoggedinUser.EquipedJewelry.Slot1 == null) { - sender.User.EquipedJewelry.Slot1 = itemInf; + sender.LoggedinUser.EquipedJewelry.Slot1 = itemInf; addedJewelry = true; } - else if (sender.User.EquipedJewelry.Slot2 == null) + else if (sender.LoggedinUser.EquipedJewelry.Slot2 == null) { - sender.User.EquipedJewelry.Slot2 = itemInf; + sender.LoggedinUser.EquipedJewelry.Slot2 = itemInf; addedJewelry = true; } - else if (sender.User.EquipedJewelry.Slot3 == null) + else if (sender.LoggedinUser.EquipedJewelry.Slot3 == null) { - sender.User.EquipedJewelry.Slot3 = itemInf; + sender.LoggedinUser.EquipedJewelry.Slot3 = itemInf; addedJewelry = true; } - else if (sender.User.EquipedJewelry.Slot4 == null) + else if (sender.LoggedinUser.EquipedJewelry.Slot4 == null) { - sender.User.EquipedJewelry.Slot4 = itemInf; + sender.LoggedinUser.EquipedJewelry.Slot4 = itemInf; addedJewelry = true; } if(addedJewelry) { - sender.User.Inventory.Remove(instance); + sender.LoggedinUser.Inventory.Remove(instance); byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatJewerlyEquipMessage(itemInf.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); } @@ -6617,12 +6632,12 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to wear an item they did not have."); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string idStr = packetStr.Substring(2, packet.Length - 4); if(idStr == "NaN") // Fountain { string msg = Messages.FountainDrankYourFull; @@ -6630,24 +6645,24 @@ namespace HISP.Server if(looseMoney) { int looseAmount = RandomNumberGenerator.Next(0, 100); - if (looseAmount > sender.User.Money) - looseAmount = sender.User.Money; - sender.User.TakeMoney(looseAmount); + if (looseAmount > sender.LoggedinUser.Money) + looseAmount = sender.LoggedinUser.Money; + sender.LoggedinUser.TakeMoney(looseAmount); msg = Messages.FormatDroppedMoneyMessage(looseAmount); } - sender.User.Thirst = 1000; + sender.LoggedinUser.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); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 3); randomId = 0; try @@ -6656,17 +6671,17 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (sender.User.Inventory.HasItem(randomId)) + if (sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); ItemInstance instance = itm.ItemInstances[0]; - sender.User.Inventory.Remove(instance); + sender.LoggedinUser.Inventory.Remove(instance); Item.ItemInformation itmInfo = instance.GetItemInfo(); - bool toMuch = Item.ConsumeItem(sender.User, itmInfo); + bool toMuch = Item.ConsumeItem(sender.LoggedinUser, itmInfo); byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatConsumeItemMessaege(itmInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(chatPacket); @@ -6680,12 +6695,12 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to consume an item they did not have."); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; try @@ -6694,37 +6709,37 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. (drop)"+BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. (drop)"+BitConverter.ToString(packet)); return; } - if(sender.User.Inventory.HasItem(randomId)) + if(sender.LoggedinUser.Inventory.HasItem(randomId)) { - InventoryItem itm = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); ItemInstance instance = itm.ItemInstances[0]; - if(DroppedItems.GetItemsAt(sender.User.X, sender.User.Y).Length > 25) + 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.User.X, sender.User.Y); - sender.User.Inventory.Remove(instance); + 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.User.X, sender.User.Y, false, sender.User); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, false, sender.LoggedinUser); } else { - Logger.HackerPrint(sender.User.Username + " Tried to drop an item they did not have."); + 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.User.Username + " Used ITEM_SHOVEL with 3rd byte not 0x14."); - if (!Quest.UseTool(sender.User, Quest.Shovel, sender.User.X, sender.User.Y)) + 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); @@ -6732,8 +6747,8 @@ namespace HISP.Server 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)) + 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); @@ -6741,8 +6756,8 @@ namespace HISP.Server 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)) + 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); @@ -6750,8 +6765,8 @@ namespace HISP.Server 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)) + 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); @@ -6759,7 +6774,7 @@ namespace HISP.Server break; case PacketBuilder.ITEM_CRAFT: packetStr = Encoding.UTF8.GetString(packet); - string craftIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string craftIdStr = packetStr.Substring(2, packet.Length - 2); int craftId = 0; // Prevent crashing on non-int string. try @@ -6768,19 +6783,19 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " tried to craft using craft id NaN."); + 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.User.Money) // Check money + if(itm.MoneyCost <= sender.LoggedinUser.Money) // Check money { foreach(Workshop.RequiredItem reqItem in itm.RequiredItems) { - if (sender.User.Inventory.HasItemId(reqItem.RequiredItemId)) + if (sender.LoggedinUser.Inventory.HasItemId(reqItem.RequiredItemId)) { - if (sender.User.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances.Length < reqItem.RequiredItemCount) + if (sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances.Length < reqItem.RequiredItemCount) goto failMissingItem; } else @@ -6790,7 +6805,7 @@ namespace HISP.Server // Finally create the items try { - sender.User.Inventory.Add(new ItemInstance(itm.GiveItemId)); + sender.LoggedinUser.Inventory.Add(new ItemInstance(itm.GiveItemId)); } catch(InventoryException) { @@ -6798,19 +6813,19 @@ namespace HISP.Server sender.SendPacket(inventoryFullMessage); break; } - sender.User.TakeMoney(itm.MoneyCost); + 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.User.Inventory.Remove(sender.User.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances[0]); + sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(reqItem.RequiredItemId).ItemInstances[0]); - sender.User.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Crafting).Count++; + sender.LoggedinUser.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 + 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); @@ -6838,7 +6853,7 @@ namespace HISP.Server int message = 1; packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; // Prevent crashing on non-int string. try @@ -6847,22 +6862,22 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object sell packet."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet."); return; } - if (!sender.User.Inventory.HasItem(randomId)) + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that they doesnt have in there inventory"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell a item that they doesnt have in there inventory"); return; } - InventoryItem invItem = sender.User.Inventory.GetItemByRandomid(randomId); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string itemIdStr = packetStr.Substring(2, packet.Length - 2); itemId = 0; // Prevent crashing on non-int string. try @@ -6871,16 +6886,16 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object sell packet."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object sell packet."); return; } - if (!sender.User.Inventory.HasItemId(itemId)) + if (!sender.LoggedinUser.Inventory.HasItemId(itemId)) { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that they doesnt have in there inventory"); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to sell a item that they doesnt have in there inventory"); return; } - invItem = sender.User.Inventory.GetItemByItemId(itemId); + invItem = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); totalSold = invItem.ItemInstances.Length; message = 2; @@ -6888,14 +6903,14 @@ namespace HISP.Server doSell:; Item.ItemInformation itemInfo = Item.GetItemById(itemId); - Shop shop = sender.User.LastShoppedAt; + 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.User.Money) + sellPrice > 2100000000) + if (Convert.ToUInt64(sender.LoggedinUser.Money) + sellPrice > 2100000000) { byte[] cantSellMoneyCapCheck = PacketBuilder.CreateChat(Messages.CannotSellYoudGetTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantSellMoneyCapCheck); @@ -6906,14 +6921,14 @@ namespace HISP.Server for (int i = 0; i < totalSold; i++) { ItemInstance itemInstance = invItem.ItemInstances[0]; - sender.User.Inventory.Remove(itemInstance); + sender.LoggedinUser.Inventory.Remove(itemInstance); shop.Inventory.Add(itemInstance); } if (sellPrice < 2147483647) // Sanity Check (yes i checked it earlier) - sender.User.AddMoney(Convert.ToInt32(sellPrice)); + sender.LoggedinUser.AddMoney(Convert.ToInt32(sellPrice)); - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); if(message == 1) { byte[] soldItemMessage = PacketBuilder.CreateChat(Messages.FormatSellMessage(itemInfo.Name, sellPrice), PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -6933,14 +6948,14 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to sell a item that was not avalible to be sold."); + 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, (packetStr.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + itemIdStr = packetStr.Substring(2, packet.Length - 3); itemId = 0; // Prevent crashing on non-int string. try @@ -6949,26 +6964,26 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object buy and consume packet."); + Logger.ErrorPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an itemid that doesnt even exist."); break; } - Inn lastInn = sender.User.LastVisitedInn; + Inn lastInn = sender.LoggedinUser.LastVisitedInn; if (lastInn != null) { try { itemInfo = lastInn.GetStockedItem(itemId); int price = lastInn.CalculateBuyCost(itemInfo); - if(sender.User.Money >= price) + if(sender.LoggedinUser.Money >= price) { - sender.User.TakeMoney(price); - bool toMuch = Item.ConsumeItem(sender.User, itemInfo); + sender.LoggedinUser.TakeMoney(price); + bool toMuch = Item.ConsumeItem(sender.LoggedinUser, itemInfo); string tooMuchMessage = Messages.ConsumedButMaxReached; if (itemInfo.Effects.Length > 0) @@ -6997,12 +7012,12 @@ namespace HISP.Server } catch(KeyNotFoundException) { - Logger.HackerPrint(sender.User.Username + " Tried to buy and consume an item not stocked by the inn there standing on."); + Logger.HackerPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy and consume item while not in a inn."); } break; @@ -7019,7 +7034,7 @@ namespace HISP.Server count = 25; doPurchase:; packetStr = Encoding.UTF8.GetString(packet); - itemIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + itemIdStr = packetStr.Substring(2, packet.Length - 3); itemId = 0; // Prevent crashing on non-int string. try @@ -7028,29 +7043,29 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object buy packet."); + Logger.ErrorPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an itemid that doesnt even exist."); break; } itemInfo = Item.GetItemById(itemId); - shop = sender.User.LastShoppedAt; + shop = sender.LoggedinUser.LastShoppedAt; if (shop != null) { UInt64 buyCost = Convert.ToUInt64(shop.CalculateBuyCost(itemInfo) * Convert.ToUInt64(count)); - if (sender.User.Bids.Length > 0) + if (sender.LoggedinUser.Bids.Length > 0) { byte[] cantBuyWhileAuctioning = PacketBuilder.CreateChat(Messages.AuctionNoOtherTransactionAllowed, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantBuyWhileAuctioning); return; } - if (Convert.ToUInt64(sender.User.Money) < buyCost) + if (Convert.ToUInt64(sender.LoggedinUser.Money) < buyCost) { byte[] cantAffordMessage = PacketBuilder.CreateChat(Messages.CantAfford1, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(cantAffordMessage); @@ -7060,22 +7075,22 @@ namespace HISP.Server { if (shop.Inventory.GetItemByItemId(itemId).ItemInstances.Length < count) { - Logger.HackerPrint(sender.User.Username + " Tried to buy more of an item than is in stock."); + 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.User.Inventory.HasItemId(itemId)) + if (sender.LoggedinUser.Inventory.HasItemId(itemId)) { - InventoryItem items = sender.User.Inventory.GetItemByItemId(itemId); + InventoryItem items = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); if (items.ItemInstances.Length + count > Item.MAX_STACK) { goto showError; } } - else if(sender.User.Inventory.Count + 1 > sender.User.MaxItems) + else if(sender.LoggedinUser.Inventory.Count + 1 > sender.LoggedinUser.MaxItems) { goto showError; } @@ -7085,22 +7100,22 @@ namespace HISP.Server ItemInstance itemInstance = shop.Inventory.GetItemByItemId(itemId).ItemInstances[0]; try { - sender.User.Inventory.Add(itemInstance); + sender.LoggedinUser.Inventory.Add(itemInstance); } catch (InventoryException) { - Logger.ErrorPrint("Failed to add: " + itemInfo.Name + " to " + sender.User.Username + " inventory."); + 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.User.TakeMoney(Convert.ToInt32(buyCost)); + sender.LoggedinUser.TakeMoney(Convert.ToInt32(buyCost)); // Send chat message to client. - UpdateAreaForAll(sender.User.X, sender.User.Y, true); + UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true); if (message == 1) { byte[] broughtItemMessage = PacketBuilder.CreateChat(Messages.FormatBuyMessage(itemInfo.Name, buyCost), PacketBuilder.CHAT_BOTTOM_RIGHT); @@ -7119,12 +7134,12 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " Tried to buy a item that was not for sale."); + Logger.HackerPrint(sender.LoggedinUser.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."); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to buy an item while not in a store."); } @@ -7151,7 +7166,7 @@ namespace HISP.Server break; case PacketBuilder.ITEM_RIP: packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(2, (packet.Length - 2) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(2, packet.Length - 2); randomId = 0; try { @@ -7159,24 +7174,24 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (!sender.User.Inventory.HasItem(randomId)) + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) { - Logger.HackerPrint(sender.User.Username + " Tried to rip someone elses mail. " + randomId.ToString()); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to rip someone elses mail. " + randomId.ToString()); return; } - InventoryItem ripItems = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem ripItems = sender.LoggedinUser.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)); + sender.LoggedinUser.MailBox.RipUpMessage(sender.LoggedinUser.MailBox.GetMessageByRandomId(item.Data)); break; } } @@ -7186,7 +7201,7 @@ namespace HISP.Server if (method == PacketBuilder.ITEM_LOOK) { packetStr = Encoding.UTF8.GetString(packet); - itemIdStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + itemIdStr = packetStr.Substring(3, packet.Length - 3); itemId = 0; try { @@ -7194,20 +7209,20 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } if (itemId == Item.MailMessage) { - if (!sender.User.Inventory.HasItemId(Item.MailMessage)) + if (!sender.LoggedinUser.Inventory.HasItemId(Item.MailMessage)) { - Logger.ErrorPrint(sender.User.Username + " Tried to view a mail message when they didnt have one."); + Logger.ErrorPrint(sender.LoggedinUser.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.LoggedinUser.MajorPriority = true; + byte[] mailList = PacketBuilder.CreateMeta(Meta.BuildMailList(sender.LoggedinUser, sender.LoggedinUser.Inventory.GetItemByItemId(Item.MailMessage))); sender.SendPacket(mailList); break; } @@ -7215,7 +7230,7 @@ namespace HISP.Server else if(method == PacketBuilder.ITEM_READ) { packetStr = Encoding.UTF8.GetString(packet); - randomIdStr = packetStr.Substring(3, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + randomIdStr = packetStr.Substring(3, packet.Length - 3); randomId = 0; try { @@ -7223,17 +7238,17 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet. " + BitConverter.ToString(packet)); return; } - if (!sender.User.Inventory.HasItem(randomId)) + if (!sender.LoggedinUser.Inventory.HasItem(randomId)) { - Logger.HackerPrint(sender.User.Username + " Tried to view someone elses mail. " + randomId.ToString()); + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to view someone elses mail. " + randomId.ToString()); return; } - InventoryItem items = sender.User.Inventory.GetItemByRandomid(randomId); + InventoryItem items = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); foreach (ItemInstance item in items.ItemInstances) { if (item.RandomId == randomId) @@ -7241,8 +7256,8 @@ namespace HISP.Server if (item.Data == 0) continue; - sender.User.MajorPriority = true; - byte[] readMail = PacketBuilder.CreateMeta(Meta.BuildMailLetter(sender.User.MailBox.GetMessageByRandomId(item.Data), randomId)); + sender.LoggedinUser.MajorPriority = true; + byte[] readMail = PacketBuilder.CreateMeta(Meta.BuildMailLetter(sender.LoggedinUser.MailBox.GetMessageByRandomId(item.Data), randomId)); sender.SendPacket(readMail); break; } @@ -7252,11 +7267,11 @@ namespace HISP.Server } - Logger.ErrorPrint(sender.User.Username + " Unknown Method- " + method.ToString("X") + " " + BitConverter.ToString(packet).Replace("-", " ")); + 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, (packetStr.Length - 3) - PacketBuilder.PACKET_CLIENT_TERMINATOR_LENGTH); + string valueStr = packetStr.Substring(3, packet.Length - 3); int value = 0; try { @@ -7264,22 +7279,22 @@ namespace HISP.Server } catch (FormatException) { - Logger.ErrorPrint(sender.User.Username + " Sent an invalid object interaction packet. "+BitConverter.ToString(packet)); + 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.User.Inventory.HasItem(value)) - itemId = sender.User.Inventory.GetItemByRandomid(value).ItemId; + 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.User.Username + " asked for details of non existiant item."); + Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item."); return; } - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; Item.ItemInformation info = Item.GetItemById(itemId); string infoMessage = Meta.BuildItemInfo(info); byte[] metaPacket = PacketBuilder.CreateMeta(infoMessage); @@ -7287,10 +7302,10 @@ namespace HISP.Server } if (packet[2] == PacketBuilder.ITEM_INFORMATON_ID) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; if (!Item.ItemIdExist(value)) { - Logger.HackerPrint(sender.User.Username + " asked for details of non existiant item."); + Logger.HackerPrint(sender.LoggedinUser.Username + " asked for details of non existiant item."); return; } @@ -7303,7 +7318,7 @@ namespace HISP.Server { if(Npc.NpcExists(value)) { - sender.User.MajorPriority = true; + sender.LoggedinUser.MajorPriority = true; Npc.NpcEntry npc = Npc.GetNpcById(value); string infoMessage = Meta.BuildNpcInfo(npc); byte[] metaPacket = PacketBuilder.CreateMeta(infoMessage); @@ -7311,14 +7326,14 @@ namespace HISP.Server } else { - Logger.HackerPrint(sender.User.Username + " asked for details of non existiant npc."); + Logger.HackerPrint(sender.LoggedinUser.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('-', ' ')); + Logger.WarnPrint(sender.LoggedinUser.Username + " Sent an unknown Item Interaction Packet type: " + action.ToString() + ", Packet Dump: " + BitConverter.ToString(packet).Replace('-', ' ')); break; } @@ -7331,7 +7346,7 @@ namespace HISP.Server return; } - if (packet.Length < 1) + if (packet.Length < 2) { Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid inventory request packet."); return; @@ -7339,13 +7354,13 @@ namespace HISP.Server UpdateInventory(sender); } - public static void OnUserLogin(GameClient sender, byte[] packet) + 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 < 2) + if (!loginRequestString.Contains('|') || packet.Length < 3) { Logger.ErrorPrint(sender.RemoteIp + " Sent an invalid login request"); return; @@ -7374,7 +7389,7 @@ namespace HISP.Server 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); + byte[] userBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.LoginFailedReasonBanned); sender.SendPacket(userBannedPacket); return; } @@ -7382,24 +7397,27 @@ namespace HISP.Server 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)); + byte[] ipBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.FormatIpBannedMessage(sender.RemoteIp)); sender.SendPacket(ipBannedPacket); return; } - sender.Login(userId); - sender.User.Password = password; - byte[] ResponsePacket = PacketBuilder.CreateLogin(true); + + + sender.Login(userId); + sender.LoggedinUser.Password = password; + + byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(true); sender.SendPacket(ResponsePacket); - Logger.DebugPrint(sender.RemoteIp + " Logged into : " + sender.User.Username + " (ADMIN: " + sender.User.Administrator + " MOD: " + sender.User.Moderator + ")"); + 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.CreateLogin(false); + byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(false); sender.SendPacket(ResponsePacket); } } @@ -7410,49 +7428,49 @@ namespace HISP.Server { if (sender.LoggedIn) { - Database.SetPlayerLastLogin(Convert.ToInt32(new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds()), sender.User.Id); // Set last login date - Database.RemoveOnlineUser(sender.User.Id); + 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.User); - TwoPlayer.TwoPlayerRemove(sender.User); + Multiroom.LeaveAllMultirooms(sender.LoggedinUser); + TwoPlayer.TwoPlayerRemove(sender.LoggedinUser); // Remove Trade Reference - sender.User.TradingWith = null; - sender.User.PendingTradeTo = 0; + sender.LoggedinUser.TradingWith = null; + sender.LoggedinUser.PendingTradeTo = 0; // Leave open water balloon game if (WaterBalloonEvent != null) if(WaterBalloonEvent.Active) - WaterBalloonEvent.LeaveEvent(sender.User); + WaterBalloonEvent.LeaveEvent(sender.LoggedinUser); // Leave open quiz. if (QuizEvent != null) - QuizEvent.LeaveEvent(sender.User); + QuizEvent.LeaveEvent(sender.LoggedinUser); - ModsRevengeEvent.LeaveEvent(sender.User); + ModsRevengeEvent.LeaveEvent(sender.LoggedinUser); // Delete Arena Entries - if (Arena.UserHasEnteredHorseInAnyArena(sender.User)) + if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser)) { - Arena arena = Arena.GetArenaUserEnteredIn(sender.User); - arena.DeleteEntry(sender.User); + Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser); + arena.DeleteEntry(sender.LoggedinUser); } // Send disconnect message - byte[] logoutMessageBytes = PacketBuilder.CreateChat(Messages.FormatLogoutMessage(sender.User.Username), PacketBuilder.CHAT_BOTTOM_LEFT); + byte[] logoutMessageBytes = PacketBuilder.CreateChat(Messages.FormatLogoutMessage(sender.LoggedinUser.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) + 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.CreatePlayerLeave(sender.User.Username); + byte[] playerRemovePacket = PacketBuilder.CreatePlayerLeavePacket(sender.LoggedinUser.Username); foreach (GameClient client in GameClient.ConnectedClients) if (client.LoggedIn) - if (client.User.Id != sender.User.Id) + if (client.LoggedinUser.Id != sender.LoggedinUser.Id) client.SendPacket(playerRemovePacket); } @@ -7482,13 +7500,13 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) if (client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!includeMuted && client.User.MuteIsland) + if (!includeMuted && client.LoggedinUser.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); + 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(); @@ -7499,13 +7517,13 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) if (client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!includeMuted && client.User.MuteIsland) + if (!includeMuted && client.LoggedinUser.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); + 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(); @@ -7520,13 +7538,13 @@ namespace HISP.Server if (client.LoggedIn) { - if (World.InSpecialTile(client.User.X, client.User.Y)) + if (World.InSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y)) { - World.SpecialTile tile = World.GetSpecialTile(client.User.X, client.User.Y); + World.SpecialTile tile = World.GetSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y); if (tile.Code == code) { - userList.Add(client.User); + userList.Add(client.LoggedinUser); } } } @@ -7540,12 +7558,12 @@ namespace HISP.Server { if(client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!includeMuted && client.User.MuteNear) + if (!includeMuted && client.LoggedinUser.MuteNear) continue; - if (client.User.X == x && client.User.Y == y) - usersHere.Add(client.User); + if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y) + usersHere.Add(client.LoggedinUser); } } return usersHere.ToArray(); @@ -7556,8 +7574,8 @@ namespace HISP.Server { if (client.LoggedIn) { - if (client.User.Username.ToLower().StartsWith(username.ToLower())) - return client.User; + if (client.LoggedinUser.Username.ToLower().StartsWith(username.ToLower())) + return client.LoggedinUser; } } throw new KeyNotFoundException("User was not found."); @@ -7569,8 +7587,8 @@ namespace HISP.Server { if(client.LoggedIn) { - if (client.User.Username.ToLower() == username.ToLower()) - return client.User; + if (client.LoggedinUser.Username.ToLower() == username.ToLower()) + return client.LoggedinUser; } } throw new KeyNotFoundException("User was not found."); @@ -7581,8 +7599,8 @@ namespace HISP.Server foreach(GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (client.User.Id == id) - return client.User; + if (client.LoggedinUser.Id == id) + return client.LoggedinUser; } throw new KeyNotFoundException("User not found (not online?)"); @@ -7600,8 +7618,8 @@ namespace HISP.Server { if (client.LoggedIn) { - if (startX <= client.User.X && endX >= client.User.X && startY <= client.User.Y && endY >= client.User.Y) - usersNearby.Add(client.User); + if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) + usersNearby.Add(client.LoggedinUser); } } @@ -7628,12 +7646,12 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) if (client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!includeMuted && client.User.MuteNear) + if (!includeMuted && client.LoggedinUser.MuteNear) continue; - if (IsOnScreen(x,y,client.User.X, client.User.Y)) - usersOnScreen.Add(client.User); + if (IsOnScreen(x,y,client.LoggedinUser.X, client.LoggedinUser.Y)) + usersOnScreen.Add(client.LoggedinUser); } return usersOnScreen.ToArray(); @@ -7651,12 +7669,12 @@ namespace HISP.Server { if (client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!includeMuted && client.User.MuteNear) + if (!includeMuted && client.LoggedinUser.MuteNear) continue; - if (startX <= client.User.X && endX >= client.User.X && startY <= client.User.Y && endY >= client.User.Y) - usersNearby.Add(client.User); + if (startX <= client.LoggedinUser.X && endX >= client.LoggedinUser.X && startY <= client.LoggedinUser.Y && endY >= client.LoggedinUser.Y) + usersNearby.Add(client.LoggedinUser); } } @@ -7668,9 +7686,9 @@ namespace HISP.Server foreach(GameClient client in GameClient.ConnectedClients) if (client.LoggedIn) { - if (!includeStealth && client.User.Stealth) + if (!includeStealth && client.LoggedinUser.Stealth) continue; - if (!client.User.Stealth) + if (!client.LoggedinUser.Stealth) count++; } @@ -7686,12 +7704,12 @@ namespace HISP.Server if (client.LoggedIn) { - if (!caller.Friends.List.Contains(client.User.Id)) + if (!caller.Friends.List.Contains(client.LoggedinUser.Id)) continue; - if (!client.User.Stealth) - allLocations.Add(new Point(client.User.X, client.User.Y)); + if (!client.LoggedinUser.Stealth) + allLocations.Add(new Point(client.LoggedinUser.X, client.LoggedinUser.Y)); } } @@ -7708,11 +7726,11 @@ namespace HISP.Server if (client.LoggedIn) { - if (client.User.Id == caller.Id) + if (client.LoggedinUser.Id == caller.Id) continue; - if (!client.User.Stealth) - allLocations.Add(new Point(client.User.X, client.User.Y)); + if (!client.LoggedinUser.Stealth) + allLocations.Add(new Point(client.LoggedinUser.X, client.LoggedinUser.Y)); } @@ -7726,7 +7744,7 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (!client.User.MuteAds) + if (!client.LoggedinUser.MuteAds) count++; } return count; @@ -7737,11 +7755,11 @@ namespace HISP.Server if (user.MailBox.UnreadMailCount > 0) { - byte[] RipOffAOLSound = PacketBuilder.CreatePlaySound(Messages.MailSe); - user.Client.SendPacket(RipOffAOLSound); + byte[] RipOffAOLSound = PacketBuilder.CreatePlaysoundPacket(Messages.MailSe); + user.LoggedinClient.SendPacket(RipOffAOLSound); byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); - user.Client.SendPacket(mailReceivedText); + user.LoggedinClient.SendPacket(mailReceivedText); user.MailBox.ReadAllMail(); } @@ -7752,7 +7770,7 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if(client.User.Moderator) + if(client.LoggedinUser.Moderator) count++; } return count; @@ -7777,7 +7795,7 @@ namespace HISP.Server foreach (GameClient client in GameClient.ConnectedClients) { if (client.LoggedIn) - if (client.User.Administrator) + if (client.LoggedinUser.Administrator) count++; } return count; @@ -7790,13 +7808,13 @@ namespace HISP.Server 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) + 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.Client); + UpdateArea(nearbyUser.LoggedinClient); - UpdateUserFacingAndLocation(client.User); + UpdateUserFacingAndLocation(client.LoggedinUser); } public static void UpdateDrawingForAll(string id, GameClient sender, string drawing, bool includingSender=false) @@ -7809,28 +7827,28 @@ namespace HISP.Server foreach (User user in usersHere) { if (!includingSender) - if (user.Id == sender.User.Id) + if (user.Id == sender.LoggedinUser.Id) continue; - byte[] patchDrawing = PacketBuilder.CreateDrawingUpdate(drawing); - user.Client.SendPacket(patchDrawing); + byte[] patchDrawing = PacketBuilder.CreateDrawingUpdatePacket(drawing); + user.LoggedinClient.SendPacket(patchDrawing); } } } public static void UpdateHorseMenu(GameClient forClient, HorseInstance horseInst) { - forClient.User.MajorPriority = true; + forClient.LoggedinUser.MajorPriority = true; - int TileID = Map.GetTileId(forClient.User.X, forClient.User.Y, false); + int TileID = Map.GetTileId(forClient.LoggedinUser.X, forClient.LoggedinUser.Y, false); string type = Map.TerrainTiles[TileID - 1].Type; - if (horseInst.Owner == forClient.User.Id) - forClient.User.LastViewedHorse = horseInst; + if (horseInst.Owner == forClient.LoggedinUser.Id) + forClient.LoggedinUser.LastViewedHorse = horseInst; else - forClient.User.LastViewedHorseOther = horseInst; + forClient.LoggedinUser.LastViewedHorseOther = horseInst; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseInformation(horseInst, forClient.User)); + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildHorseInformation(horseInst, forClient.LoggedinUser)); forClient.SendPacket(metaPacket); string loadSwf = HorseInfo.BreedViewerSwf(horseInst, type); @@ -7841,8 +7859,8 @@ namespace HISP.Server { if (!forClient.LoggedIn) return; - forClient.User.MajorPriority = true; - byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildInventoryInfo(forClient.User.Inventory)); + forClient.LoggedinUser.MajorPriority = true; + byte[] metaPacket = PacketBuilder.CreateMeta(Meta.BuildInventoryInfo(forClient.LoggedinUser.Inventory)); forClient.SendPacket(metaPacket); } @@ -7854,11 +7872,11 @@ namespace HISP.Server return; } - string lastWeather = forClient.User.LastSeenWeather; - string weather = forClient.User.GetWeatherSeen(); + string lastWeather = forClient.LoggedinUser.LastSeenWeather; + string weather = forClient.LoggedinUser.GetWeatherSeen(); if (lastWeather != weather) { - byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdate(weather); + byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdatePacket(weather); forClient.SendPacket(WeatherUpdate); } } @@ -7870,7 +7888,7 @@ namespace HISP.Server return; } - byte[] WorldData = PacketBuilder.CreateTimeAndWeatherUpdate(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, forClient.User.GetWeatherSeen()); + byte[] WorldData = PacketBuilder.CreateTimeAndWeatherUpdate(World.ServerTime.Minutes, World.ServerTime.Days, World.ServerTime.Years, forClient.LoggedinUser.GetWeatherSeen()); forClient.SendPacket(WorldData); } public static void UpdatePlayer(GameClient forClient) @@ -7880,7 +7898,7 @@ namespace HISP.Server 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); + byte[] PlayerData = PacketBuilder.CreateMoneyPlayerCountAndMail(forClient.LoggedinUser.Money, GameServer.GetNumberOfPlayers(), forClient.LoggedinUser.MailBox.UnreadMailCount); forClient.SendPacket(PlayerData); } @@ -7890,17 +7908,17 @@ namespace HISP.Server foreach (User onScreenUser in GetOnScreenUsers(user.X, user.Y, true, true)) if (onScreenUser.Id != user.Id) - onScreenUser.Client.SendPacket(playerInfoBytes); + 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.User.X == x && client.User.Y == y) - if(!client.User.MinorPriority || ignoreMetaPrio) - if(!client.User.MajorPriority) - if(client.User != exceptMe) + if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y) + if(!client.LoggedinUser.MinorPriority || ignoreMetaPrio) + if(!client.LoggedinUser.MajorPriority) + if(client.LoggedinUser != exceptMe) UpdateArea(client); } } @@ -7918,39 +7936,38 @@ namespace HISP.Server return; } - if(forClient.User.TradingWith != null) + if(forClient.LoggedinUser.TradingWith != null) { - if (!forClient.User.TradingWith.OtherTrade.Trader.Client.LoggedIn) + if (!forClient.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient.LoggedIn) { - forClient.User.TradingWith.InteruptTrade(); + forClient.LoggedinUser.TradingWith.InteruptTrade(); return; } - if (forClient.User.TradingWith.OtherTrade.Trader.TradingWith == null) + if (forClient.LoggedinUser.TradingWith.OtherTrade.Trader.TradingWith == null) { - forClient.User.TradingWith.InteruptTrade(); + forClient.LoggedinUser.TradingWith.InteruptTrade(); return; } - forClient.User.MajorPriority = true; - forClient.User.TradeMenuPriority = false; - byte[] tradeMeta = PacketBuilder.CreateMeta(Meta.BuildTrade(forClient.User.TradingWith)); + forClient.LoggedinUser.MajorPriority = true; + forClient.LoggedinUser.TradeMenuPriority = false; + byte[] tradeMeta = PacketBuilder.CreateMeta(Meta.BuildTrade(forClient.LoggedinUser.TradingWith)); forClient.SendPacket(tradeMeta); return; } - forClient.User.MajorPriority = false; - forClient.User.MinorPriority = false; + forClient.LoggedinUser.MajorPriority = false; + forClient.LoggedinUser.MinorPriority = false; - string locationStr; - - int tileX = forClient.User.X; - int tileY = forClient.User.Y; + string LocationStr = ""; + int tileX = forClient.LoggedinUser.X; + int tileY = forClient.LoggedinUser.Y; if (!World.InSpecialTile(tileX, tileY)) { - if (forClient.User.InRealTimeQuiz) + if (forClient.LoggedinUser.InRealTimeQuiz) return; - locationStr = Meta.BuildMetaInfo(forClient.User, tileX, tileY); + LocationStr = Meta.BuildMetaInfo(forClient.LoggedinUser, tileX, tileY); } else { @@ -7961,21 +7978,21 @@ namespace HISP.Server forClient.SendPacket(swfModulePacket); } - if (forClient.User.InRealTimeQuiz && QuizEvent != null) + if (forClient.LoggedinUser.InRealTimeQuiz && QuizEvent != null) { - QuizEvent.JoinEvent(forClient.User).UpdateParticipent(); + QuizEvent.JoinEvent(forClient.LoggedinUser).UpdateParticipent(); return; } if (specialTile.Code != null) if (!ProcessMapCodeWithArg(forClient, specialTile)) return; - locationStr = Meta.BuildSpecialTileInfo(forClient.User, specialTile); + LocationStr = Meta.BuildSpecialTileInfo(forClient.LoggedinUser, specialTile); } - byte[] areaMessage = PacketBuilder.CreateMeta(locationStr); - forClient.SendPacket(areaMessage); + byte[] AreaMessage = PacketBuilder.CreateMeta(LocationStr); + forClient.SendPacket(AreaMessage); } public static void UpdateStats(GameClient client) @@ -7983,8 +8000,8 @@ namespace HISP.Server if (!client.LoggedIn) return; - client.User.MajorPriority = true; - string metaWind = Meta.BuildStatsMenu(client.User); + client.LoggedinUser.MajorPriority = true; + string metaWind = Meta.BuildStatsMenu(client.LoggedinUser); byte[] statsPacket = PacketBuilder.CreateMeta(metaWind); client.SendPacket(statsPacket); @@ -8018,11 +8035,11 @@ namespace HISP.Server { if (connectedClient.LoggedIn) { - if (connectedClient.User.Inventory.HasItemId(id)) + if (connectedClient.LoggedinUser.Inventory.HasItemId(id)) { - InventoryItem invItm = connectedClient.User.Inventory.GetItemByItemId(id); + InventoryItem invItm = connectedClient.LoggedinUser.Inventory.GetItemByItemId(id); foreach (ItemInstance itm in invItm.ItemInstances.ToArray()) - connectedClient.User.Inventory.Remove(itm); + connectedClient.LoggedinUser.Inventory.Remove(itm); } } } @@ -8044,7 +8061,7 @@ namespace HISP.Server public static void StartRidingHorse(GameClient sender, int horseRandomId) { - HorseInstance horseMountInst = sender.User.HorseInventory.GetHorseById(horseRandomId); + HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(horseRandomId); if (horseMountInst.Breed.Type != "unicorn" && horseMountInst.Breed.Type != "pegasus") { @@ -8061,7 +8078,7 @@ namespace HISP.Server byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); sender.SendPacket(ridingHorseMessagePacket); - sender.User.CurrentlyRidingHorse = horseMountInst; + sender.LoggedinUser.CurrentlyRidingHorse = horseMountInst; // Determine what sprite to use; int incBy = 0; @@ -8112,13 +8129,13 @@ namespace HISP.Server } if (horseMountInst.Breed.Type == "camel") { - sender.User.Awards.AddAward(Award.GetAwardById(40)); // Camel Rider + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(40)); // Camel Rider incBy = 13; } if(horseMountInst.Breed.Type == "llama") { - sender.User.Awards.AddAward(Award.GetAwardById(41)); // Llama Rider + sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(41)); // Llama Rider incBy = 14; } @@ -8136,16 +8153,16 @@ namespace HISP.Server } incBy *= 5; - sender.User.Facing %= 5; - sender.User.Facing += incBy; - sender.User.LastRiddenHorse = horseRandomId; + sender.LoggedinUser.Facing %= 5; + sender.LoggedinUser.Facing += incBy; + sender.LoggedinUser.LastRiddenHorse = horseRandomId; - UpdateUserFacingAndLocation(sender.User); + UpdateUserFacingAndLocation(sender.LoggedinUser); - byte[] updatePlayer = PacketBuilder.CreateMovement(sender.User.X, sender.User.Y, sender.User.CharacterId, sender.User.Facing, PacketBuilder.DIRECTION_NONE, true); + 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.User.HorseWindowOpen) + if (sender.LoggedinUser.HorseWindowOpen) UpdateArea(sender); } public static void DoItemPurchases(GameClient sender) @@ -8153,28 +8170,28 @@ namespace HISP.Server if (!sender.LoggedIn) return; - Item.ItemPurchaseQueueItem[] queueItems = Database.GetItemPurchaseQueue(sender.User.Id); + Item.ItemPurchaseQueueItem[] queueItems = Database.GetItemPurchaseQueue(sender.LoggedinUser.Id); foreach (Item.ItemPurchaseQueueItem queueItem in queueItems) { for (int i = 0; i < queueItem.ItemCount; i++) { - sender.User.Inventory.AddIgnoringFull(new ItemInstance(queueItem.ItemId)); + sender.LoggedinUser.Inventory.AddIgnoringFull(new ItemInstance(queueItem.ItemId)); } } - Database.ClearItemPurchaseQueue(sender.User.Id); + Database.ClearItemPurchaseQueue(sender.LoggedinUser.Id); } public static void StopRidingHorse(GameClient sender) { - sender.User.CurrentlyRidingHorse = null; + sender.LoggedinUser.CurrentlyRidingHorse = null; - sender.User.Facing %= 5; - UpdateUserFacingAndLocation(sender.User); + sender.LoggedinUser.Facing %= 5; + UpdateUserFacingAndLocation(sender.LoggedinUser); - byte[] updatePlayer = PacketBuilder.CreateMovement(sender.User.X, sender.User.Y, sender.User.CharacterId, sender.User.Facing, PacketBuilder.DIRECTION_NONE, true); + 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.User.HorseWindowOpen) + if (sender.LoggedinUser.HorseWindowOpen) UpdateArea(sender); } public static bool ProcessMapCodeWithArg(GameClient forClient, World.SpecialTile tile) @@ -8197,7 +8214,7 @@ namespace HISP.Server { int newX = int.Parse(args[0]); int newY = int.Parse(args[1]); - forClient.User.Teleport(newX, newY); + forClient.LoggedinUser.Teleport(newX, newY); if (World.InIsle(tile.X, tile.Y)) { World.Isle isle = World.GetIsle(tile.X, tile.Y); @@ -8205,7 +8222,7 @@ namespace HISP.Server 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); + byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE); forClient.SendPacket(swfPacket); } } @@ -8223,8 +8240,8 @@ namespace HISP.Server 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) + forClient.LoggedinUser.Tiredness = 1000; + foreach(HorseInstance horse in forClient.LoggedinUser.HorseInventory.HorseList) { horse.BasicStats.Tiredness = 1000; } @@ -8240,12 +8257,12 @@ namespace HISP.Server if (minuteTimer != null) minuteTimer.Dispose(); } - public static void ShutdownServer(string shutdownReason = "No reason provided.") + public static void ShutdownServer() { - Logger.InfoPrint("Server shutting down; " + shutdownReason); + Logger.InfoPrint("Server shutting down."); try { - GameClient.OnShutdown(shutdownReason); + GameClient.OnShutdown(); GameServer.OnShutdown(); Database.OnShutdown(); } @@ -8254,14 +8271,13 @@ namespace HISP.Server 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); + 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()); diff --git a/HorseIsleServer/LibHISP/Server/Logger.cs b/HorseIsleServer/LibHISP/Server/Logger.cs index 8f13c38..f173776 100755 --- a/HorseIsleServer/LibHISP/Server/Logger.cs +++ b/HorseIsleServer/LibHISP/Server/Logger.cs @@ -1,58 +1,50 @@ -using System; - -namespace HISP.Server -{ - public class Logger - { - private static void defaultCallbackFunc(bool error, string type, string text) - { - return; +using System; + +namespace HISP.Server +{ + public class Logger + { + private static void defaultCallbackFunc(bool error, string type, string text) + { + 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(true, "ERROR", text); + } + public static void WarnPrint(string text) + { + if (ConfigReader.LogLevel >= 2) + logFunction(false, "WARN", text); + } + public static void HackerPrint(string text) + { + if (ConfigReader.LogLevel >= 3) + logFunction(false, "HACK", text); + } + public static void InfoPrint(string text) + { + if (ConfigReader.LogLevel >= 4) + logFunction(false, "INFO", text); + } + public static void DebugPrint(string text) + { + if (ConfigReader.LogLevel >= 5) + logFunction(false, "DEBUG", text); } - - 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); - } - } -} + public static void CrashPrint(string text) + { + logFunction(true, "CRASH", 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 index 5cacf18..5d89314 100755 --- a/HorseIsleServer/LibHISP/Server/PacketBuilder.cs +++ b/HorseIsleServer/LibHISP/Server/PacketBuilder.cs @@ -1,232 +1,233 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; - -using HISP.Game; -using HISP.Game.SwfModules; +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. +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_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_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_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; + + // Helper function for packets that return map data, (eg CreateMovementPacket 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) @@ -242,658 +243,677 @@ namespace HISP.Server 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 += "^"; + } + + // 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[3]; + packet[0] = PACKET_SWFMODULE; + packet[1] = SWFMODULE_2PLAYER_CLOSED; + packet[2] = PACKET_TERMINATOR; + + 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]; + byte[] packet = new byte[(1 * 2) + peiceMoveBytes.Length]; + + packet[0] = PACKET_SWFMODULE; + Array.Copy(peiceMoveBytes, 0, packet, 1, peiceMoveBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + + 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 * 2) + peiceLoadBytes.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; + packet[0] = PACKET_SWFMODULE; + Array.Copy(peiceLoadBytes, 0, packet, 1, peiceLoadBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; - 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 + 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[] CreateForwardedSwfRequest(byte[] request) + { + byte[] packet = new byte[(1 * 2) + request.Length]; + packet[0] = PACKET_SWFMODULE; + Array.Copy(request, 0, packet, 1, request.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + 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) + // 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); + } + } + + packet.Add(PACKET_TERMINATOR); + + 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[] 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; + } + // 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[] CreateBrickPoetMovePacket(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 * 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; + } + // Creates a byte array for a packet to inform the client of all all Poetry Peices in a Brick Poet room + public static byte[] CreateBrickPoetListPacket(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 * 2) + peicesBytes.Length]; + + packet[0] = PACKET_SWFMODULE; + + Array.Copy(peicesBytes, 0, packet, 1, peicesBytes.Length); + + packet[packet.Length - 1] = PACKET_TERMINATOR; + + return packet; + } + // Creates a byte array of a packet requesting the client to play a sound effect. + 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; + } + // 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[] 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; + } + // 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 * 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; + } + // Creates a byte array of a packet to inform the client + // if a given Login Attempt was successful or not + public static byte[] CreateLoginPacket(bool Success, string ErrorMessage="") + { + byte[] loginFailMessage = Encoding.UTF8.GetBytes(ErrorMessage); + byte[] packet = new byte[(1 * 3) + 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); + + packet[packet.Length-1] = PACKET_TERMINATOR; + + 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 * 2) + profileBytes.Length]; + + packet[0] = PACKET_PLAYER; + Array.Copy(profileBytes, 0, packet, 1, profileBytes.Length); + packet[packet.Length-1] = PACKET_TERMINATOR; + + 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[] CreateMovementPacket(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; + 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); + } + } + + } + packet.Add(PACKET_TERMINATOR); + + 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 * 2) + strBytes.Length]; + packet[0] = PACKET_CLICK; + Array.Copy(strBytes, 0, packet, 1, strBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + 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 * 2) + formattedBytes.Length]; + + packet[0] = PACKET_META; + Array.Copy(formattedBytes, 0, packet, 1, formattedBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + + 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 * 3) + formattedBytes.Length]; + packet[0] = PACKET_CHAT; + packet[1] = chatWindow; + Array.Copy(formattedBytes, 0, packet, 2, formattedBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + return packet; + } + + // Creates a byte array of a packet informing the client to change the current Weather Effect. + public static byte[] CreateWeatherUpdatePacket(string newWeather) + { + byte[] weatherBytes = Encoding.UTF8.GetBytes(newWeather); + byte[] packet = new byte[(1 * 3) + 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; - } + packet[packet.Length - 1] = PACKET_TERMINATOR; + 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); + + packet[packet.Length - 1] = PACKET_TERMINATOR; + + 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[2]; + packet[0] = PACKET_KEEP_ALIVE; + packet[1] = PACKET_TERMINATOR; + 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; - } + // (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); + } + packet.Add(PACKET_TERMINATOR); + + 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*2) + playerDataBytes.Length]; + packet[0] = PACKET_BASE_STATS; + Array.Copy(playerDataBytes, 0, packet, 1, playerDataBytes.Length); + packet[packet.Length - 1] = PACKET_TERMINATOR; + 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(int[] tileDepthFlags) + { + byte[] packet = new byte[(1 * 2) + tileDepthFlags.Length]; + packet[0] = PACKET_TILE_FLAGS; + + for(int i = 0; i < tileDepthFlags.Length; i++) + packet[1 + i] = (byte)(tileDepthFlags[i].ToString()[0]); + + packet[packet.Length - 1] = PACKET_TERMINATOR; + 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) + // 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 + char userType = 'N'; // Normal? + + if (Moderator) + userType = 'M'; // Moderator + + if (Admin) + userType = 'A'; // Admin + + byte[] packet = new byte[7]; + + packet[0] = PACKET_SEC_CODE; + + packet[1] = (byte)(SecCodeSeed[0] + 33); + packet[2] = (byte)(SecCodeSeed[1] + 33); + packet[3] = (byte)(SecCodeSeed[2] + 33); + packet[4] = (byte)(SecCodeInc + 33); + + + packet[5] = (byte)userType; + packet[6] = PACKET_TERMINATOR; + + 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; + // into the actual game client. + public static byte[] CreateSwfModule(string swf,byte headerByte) + { + byte[] swfBytes = Encoding.UTF8.GetBytes(swf); + byte[] packet = new byte[(1 * 2) + 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; + packet[packet.Length - 1] = PACKET_TERMINATOR; + + 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[] CreateAnnouncement(string announcement) + { + byte[] annouceBytes = Encoding.UTF8.GetBytes(announcement); + byte[] packet = new byte[(1 * 2) + 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; + packet[packet.Length - 1] = PACKET_TERMINATOR; + + 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 * 2) + kickMsgBytes.Length]; + + packet[0] = PACKET_KICK; Array.Copy(kickMsgBytes, 0, packet, 1, kickMsgBytes.Length); - - return packet; - } - - } -} + packet[packet.Length - 1] = PACKET_TERMINATOR; + + return packet; + } + + } +} diff --git a/HorseIsleServer/LibHISP/Server/ServerVersion.cs b/HorseIsleServer/LibHISP/Server/ServerVersion.cs index 305affc..5efadbe 100755 --- a/HorseIsleServer/LibHISP/Server/ServerVersion.cs +++ b/HorseIsleServer/LibHISP/Server/ServerVersion.cs @@ -40,7 +40,7 @@ namespace HISP.Server #elif OS_MACOS return "MACOS"; #else - return "UNKNWON"; + return "UNK_PLATFORM"; #endif } diff --git a/HorseIsleServer/LibHISP/Util/Helper.cs b/HorseIsleServer/LibHISP/Util/Helper.cs index a3a49a9..1c0b0d1 100644 --- a/HorseIsleServer/LibHISP/Util/Helper.cs +++ b/HorseIsleServer/LibHISP/Util/Helper.cs @@ -1,108 +1,52 @@ -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; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; + +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 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/MPN00BS/HTTP/ContentServer.cs b/HorseIsleServer/MPN00BS/HTTP/ContentServer.cs index caeec6d..bf9a6e4 100755 --- a/HorseIsleServer/MPN00BS/HTTP/ContentServer.cs +++ b/HorseIsleServer/MPN00BS/HTTP/ContentServer.cs @@ -277,11 +277,8 @@ namespace HTTP public void Shutdown() { shutdownServer = true; - if(ServerSocket != null) - { - ServerSocket.Dispose(); - ServerSocket = null; - } + ServerSocket.Dispose(); + ServerSocket = null; } private bool shutdownServer = false; public string ipaddr; diff --git a/HorseIsleServer/MPN00BS/MPN00BS.csproj b/HorseIsleServer/MPN00BS/MPN00BS.csproj index c6fc819..139a513 100755 --- a/HorseIsleServer/MPN00BS/MPN00BS.csproj +++ b/HorseIsleServer/MPN00BS/MPN00BS.csproj @@ -10,13 +10,7 @@ 1701;1702;2026;IL2026 icon.ico - - - partial - false - true - - + win-x86 true @@ -67,7 +61,7 @@ - net8.0 + net7.0 false true OnBuildSuccess @@ -227,9 +221,9 @@ - - - + + + @@ -250,12 +244,4 @@ - - - PreserveNewest - flashplayer\MACOS\%(RecursiveDir)%(Filename)%(Extension) - - - - diff --git a/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs b/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs index dc7b03a..547540b 100755 --- a/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs +++ b/HorseIsleServer/MPN00BS/Properties/AssemblyInfo.cs @@ -30,8 +30,8 @@ using System.Runtime.InteropServices; // // 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")] +[assembly: AssemblyVersion("1.7.140.0")] +[assembly: AssemblyFileVersion("1.7.140.0")] diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM.pubxml index 4c08f3e..e1eff10 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\android-arm\publish\ FileSystem - net8.0 + net7.0 android-arm True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml index e9b3839..59f44f0 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/AndroidARM64.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\android-arm64\publish\ FileSystem - net8.0 + net7.0 android-arm64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Linux64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Linux64.pubxml index 2a7977d..c5f1582 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Linux64.pubxml +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Linux64.pubxml @@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Linux x64 - bin\x64\Linux\net8.0\linux-x64\publish\ + bin\x64\Linux\net7.0\linux-x64\publish\ FileSystem - net8.0 + net7.0 linux-x64 True True True - False + True OS_LINUX;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml index fdccff1..06bcf27 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\linux-arm\publish\ FileSystem - net8.0 + net7.0 linux-arm True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM64.pubxml index f387011..b4cdb5b 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/LinuxARM64.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\linux-arm64\publish\ FileSystem - net8.0 + net7.0 linux-arm64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Osx64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Osx64.pubxml index 2e55913..ced4af4 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Osx64.pubxml +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Osx64.pubxml @@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121. MacOS x64 - bin\x64\MacOS\net8.0\osx-x64\publish\ + bin\x64\MacOS\net7.0\osx-x64\publish\ FileSystem - net8.0 + net7.0 osx-x64 True True True - False + True OS_MACOS;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml index 6d6a41d..cc18457 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/OsxARM64.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\osx-arm64\publish\ FileSystem - net8.0 + net7.0 osx-arm64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win32.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win32.pubxml index afb5f8d..2763365 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win32.pubxml +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win32.pubxml @@ -6,14 +6,14 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Windows x86 - bin\x86\Windows\net8.0\win-x86\publish\ + bin\x86\Windows\net7.0\win-x86\publish\ FileSystem - net8.0 + net7.0 win-x86 True True True - False + True OS_WINDOWS;ARCH_X86 \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml index a07a6ae..f23270c 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\win-x64\publish\ FileSystem - net8.0 + net7.0 win-x64 True True True - False + True OS_WINDOWS;ARCH_X86_64 \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml.user b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml.user new file mode 100755 index 0000000..09db105 --- /dev/null +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/Win64.pubxml.user @@ -0,0 +1,9 @@ + + + + + True|2022-07-20T07:28:37.2663216Z;True|2022-07-20T18:43:12.6339464+12:00; + + \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM.pubxml index f6cc04e..a64c8c0 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\win-arm\publish\ FileSystem - net8.0 + net7.0 win-arm True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM64.pubxml index 10dfe10..0ce204c 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/WinARM64.pubxml +++ b/HorseIsleServer/MPN00BS/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\net7.0\win-arm64\publish\ FileSystem - net8.0 + net7.0 win-arm64 True True diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM.pubxml index 077cfed..3312d3f 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM.pubxml +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM - bin\arm\iOS\net8.0\ios-arm\publish\ + bin\arm\iOS\net7.0\ios-arm\publish\ FileSystem - net8.0 + net7.0 ios-arm True False diff --git a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM64.pubxml b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM64.pubxml index ec7144e..14fe938 100755 --- a/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM64.pubxml +++ b/HorseIsleServer/MPN00BS/Properties/PublishProfiles/iOSARM64.pubxml @@ -6,9 +6,9 @@ https://go.microsoft.com/fwlink/?LinkID=208121. iOS ARM64 - bin\arm64\iOS\net8.0\ios-arm64\publish\ + bin\arm64\iOS\net7.0\ios-arm64\publish\ FileSystem - net8.0 + net7.0 ios-arm64 True False diff --git a/HorseIsleServer/MPN00BS/RegisterWindow.axaml.cs b/HorseIsleServer/MPN00BS/RegisterWindow.axaml.cs index 670f462..31ffd04 100755 --- a/HorseIsleServer/MPN00BS/RegisterWindow.axaml.cs +++ b/HorseIsleServer/MPN00BS/RegisterWindow.axaml.cs @@ -127,19 +127,20 @@ namespace MPN00BS private void CreateAccount(object sender, RoutedEventArgs e) { - + int newUserId = Database.GetNextFreeUserId(); + + // Generate random salt + byte[] salt = new byte[64]; + new Random(Guid.NewGuid().GetHashCode()).NextBytes(salt); + + // Hash password + string saltText = BitConverter.ToString(salt).Replace("-", ""); + string hashsalt = BitConverter.ToString(Authentication.HashAndSalt(passwordBox.Text, salt)).Replace("-", ""); + // GENDer? I hardly knew THEM! string gender = ((ComboBoxItem)genderSelectionBox.SelectedItem).Content.ToString(); - - // Permissions - bool admin = (bool)adminCheckbox.IsChecked; - bool mod = (bool)modCheckbox.IsChecked; - - // Credentials - string password = passwordBox.Text; - string username = usernameBox.Text; - Authentication.CreateAccount(username, password, gender, admin, mod); + Database.CreateUser(newUserId, usernameBox.Text, hashsalt, saltText, gender, (bool)adminCheckbox.IsChecked, (bool)modCheckbox.IsChecked); this.Close(); } diff --git a/HorseIsleServer/MPN00BS/ServerStarter.cs b/HorseIsleServer/MPN00BS/ServerStarter.cs index 2024025..5399df2 100755 --- a/HorseIsleServer/MPN00BS/ServerStarter.cs +++ b/HorseIsleServer/MPN00BS/ServerStarter.cs @@ -1,4 +1,4 @@ -using HISP.Game.Chat; +using HISP.Game.Chat; using HISP.Game.Horse; using HISP.Game.Items; using HISP.Game.Services; @@ -60,12 +60,10 @@ namespace MPN00BS clientProcess = new Process(); -#if OS_WINDOWS || DEBUG +#if OS_WINDOWS string executable = Path.Combine(Directory.GetCurrentDirectory(), "flashplayer", "WINDOWS", "flash.exe"); #elif OS_LINUX string executable = Path.Combine(Directory.GetCurrentDirectory(), "flashplayer", "LINUX", "flash.elf"); -#elif OS_MACOS - string executable = Path.Combine(Directory.GetCurrentDirectory(), "flashplayer", "MACOS", "flash.app", "Contents", "MacOS", "Flash Player"); #else MessageBox.Show(null,"ERROR: No path for flash projector specified on this platform", "Porting error", MessageBoxButtons.Ok); string executable = Path.Combine(Directory.GetCurrentDirectory(), "flashplayer", "WINDOWS", "flash.exe"); @@ -78,7 +76,7 @@ namespace MPN00BS clientProcess.StartInfo.FileName = executable; -#if OS_LINUX || OS_MACOS +#if OS_LINUX clientProcess.StartInfo.Arguments = "http://"+cs.ipaddr+":"+cs.portnum+"/horseisle_mapfix.swf?SERVER=" + serverIp + "&PORT=" + serverPort.ToString(); #else clientProcess.StartInfo.Arguments = "http://"+cs.ipaddr+":"+cs.portnum+"/horseisle.swf?SERVER=" + serverIp + "&PORT=" + serverPort.ToString(); @@ -122,6 +120,11 @@ namespace MPN00BS ProgressCallback(); + if (Database.GetUsers().Length <= 0) + { + UserCreationCallback(); + } + // Start HI1 Server ProgressCallback(); @@ -129,7 +132,7 @@ namespace MPN00BS Entry.SetShutdownCallback(OnShutdown); ProgressCallback(); - CrossDomainPolicy.GetPolicyFile(); + CrossDomainPolicy.GetPolicy(); ProgressCallback(); GameDataJson.ReadGamedata(); @@ -179,11 +182,6 @@ namespace MPN00BS ProgressCallback(); HasServerStarted = true; ServerStartedCallback(); - - - - if (Database.GetUsers().Length <= 0) - UserCreationCallback(); } public static void ModifyConfig(string okey, string value) @@ -215,14 +213,14 @@ namespace MPN00BS public static void SetBaseDir() { -#if OS_WINDOWS || DEBUG +#if OS_WINDOWS string hispFolder = Environment.GetEnvironmentVariable("APPDATA"); if (hispFolder == null) return; BaseDir = Path.Combine(hispFolder, "HISP", "N00BS"); Directory.CreateDirectory(BaseDir); -#elif OS_LINUX || OS_MACOS +#elif OS_LINUX string hispFolder = Environment.GetEnvironmentVariable("HOME"); if (hispFolder == null) return; @@ -237,7 +235,7 @@ namespace MPN00BS try { -#if OS_LINUX || OS_MACOS +#if OS_LINUX cs = new ContentServer("127.0.0.1", 12322); #else cs = new ContentServer("127.0.0.1", 80); diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/CodeResources b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/CodeResources deleted file mode 100644 index 055a706..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/CodeResources and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Info.plist b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Info.plist deleted file mode 100644 index f9b4e00..0000000 --- a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Info.plist +++ /dev/null @@ -1,165 +0,0 @@ - - - - - BuildMachineOSBuild - 16G2136 - CFBundleDevelopmentRegion - en-US - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - swf - spl - - CFBundleTypeIconFile - document_swf.icns - CFBundleTypeName - Shockwave Flash Movie - CFBundleTypeOSTypes - - SWFL - - CFBundleTypeRole - Viewer - - - CFBundleTypeExtensions - - flv - - CFBundleTypeIconFile - document_flv.icns - CFBundleTypeName - Macromedia Flash Video - CFBundleTypeOSTypes - - MFLV - - CFBundleTypeRole - None - - - CFBundleTypeExtensions - - f4v - - CFBundleTypeIconFile - document_f4v.icns - CFBundleTypeMIMETypes - - video/mp4 - - CFBundleTypeName - Video for Adobe Flash Player - CFBundleTypeOSTypes - - F4V - - CFBundleTypeRole - None - - - CFBundleTypeExtensions - - f4p - - CFBundleTypeIconFile - document_f4p.icns - CFBundleTypeMIMETypes - - video/mp4 - - CFBundleTypeName - Protected Media for Adobe Flash Player - CFBundleTypeOSTypes - - F4P - - CFBundleTypeRole - Viewer - - - CFBundleTypeExtensions - - f4a - - CFBundleTypeIconFile - document_f4a.icns - CFBundleTypeMIMETypes - - audio/mp4 - - CFBundleTypeName - Audio for Adobe Flash Player - CFBundleTypeOSTypes - - F4A - - CFBundleTypeRole - Viewer - - - CFBundleExecutable - Flash Player - CFBundleGetInfoString - Adobe Flash Player 32.0 r0 Copyright 1996-2020 Adobe and its licensors. All rights reserved. - CFBundleIconFile - FlashPlayer.icns - CFBundleIdentifier - com.macromedia.Flash Player.app - CFBundleInfoDictionaryVersion - 6.0 - CFBundleLongVersionString - Adobe Flash Player 32.0 r0 - CFBundleName - Flash Player - CFBundlePackageType - APPL - CFBundleShortVersionString - 32.0.0.465 - CFBundleSignature - SWF2 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 32.0.0.465 - CSResourcesFileMapped - - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 8B62 - DTPlatformVersion - GM - DTSDKBuild - 16B2649 - DTSDKName - macosx10.12 - DTXcode - 0810 - DTXcodeBuild - 8B62 - LSPrefersCarbon - YES - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - NSAppleScriptEnabled - YES - NSHighResolutionCapable - - NSHumanReadableCopyright - Copyright ?? 1996-2020 Adobe and its licensors. All Rights Reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/MacOS/Flash Player b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/MacOS/Flash Player deleted file mode 100755 index 9c4689d..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/MacOS/Flash Player and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/PkgInfo b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/PkgInfo deleted file mode 100644 index 2d69ac5..0000000 --- a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPLSWF2 \ No newline at end of file diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/Flash Player.rsrc b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/Flash Player.rsrc deleted file mode 100644 index b1494eb..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/Flash Player.rsrc and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/FlashPlayer.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/FlashPlayer.icns deleted file mode 100644 index 4a0c8e4..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/FlashPlayer.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/MainMenu.nib deleted file mode 100644 index 62225a4..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/PlayerUILocalizable.strings deleted file mode 100644 index c1eeb48..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 5ee008f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/cs.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/MainMenu.nib deleted file mode 100644 index 4f46d9c..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/PlayerUILocalizable.strings deleted file mode 100644 index baf8133..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index da853fe..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/de.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4a.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4a.icns deleted file mode 100755 index 28e1c7d..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4a.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4p.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4p.icns deleted file mode 100755 index b40ebd2..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4p.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4v.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4v.icns deleted file mode 100644 index 26e01f1..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_f4v.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_flv.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_flv.icns deleted file mode 100755 index 8b55208..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_flv.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_swf.icns b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_swf.icns deleted file mode 100644 index 157f439..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/document_swf.icns and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/MainMenu.nib deleted file mode 100644 index af4eb0c..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 8968e35..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 5dfd350..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/en.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/MainMenu.nib deleted file mode 100644 index 3fb581b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/PlayerUILocalizable.strings deleted file mode 100644 index fb67ce1..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index f3cdae7..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/es.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/MainMenu.nib deleted file mode 100644 index 24717c4..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/PlayerUILocalizable.strings deleted file mode 100644 index e5fe360..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 956e50a..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/fr.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/MainMenu.nib deleted file mode 100644 index a5035fd..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/PlayerUILocalizable.strings deleted file mode 100644 index d4721d1..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 53d2429..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/it.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/MainMenu.nib deleted file mode 100644 index 72885ff..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 927e338..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index ab2099e..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ja.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/MainMenu.nib deleted file mode 100644 index 9fd97f6..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/PlayerUILocalizable.strings deleted file mode 100644 index b72724a..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 128a86a..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ko.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/MainMenu.nib deleted file mode 100644 index 2dc142b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 83201a2..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 19f4732..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/nl.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/MainMenu.nib deleted file mode 100644 index 51e2b8b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 173e59b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 5998dcc..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pl.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/MainMenu.nib deleted file mode 100644 index a83f4b2..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 837d875..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index f31a4f9..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/pt.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/MainMenu.nib deleted file mode 100644 index 0fff661..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 2dc84c6..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 060af0a..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/ru.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/MainMenu.nib deleted file mode 100644 index 9c28d7b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 26ca20f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index ced9751..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/sv.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/MainMenu.nib deleted file mode 100644 index cf3a1a8..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/PlayerUILocalizable.strings deleted file mode 100644 index ab83361..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 31d6ee3..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/tr.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/MainMenu.nib deleted file mode 100644 index e76a2b4..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/PlayerUILocalizable.strings deleted file mode 100644 index eec73d2..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 09c4ac1..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hans.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/InfoPlist.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/InfoPlist.strings deleted file mode 100644 index 9b30b9f..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/InfoPlist.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/MainMenu.nib b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/MainMenu.nib deleted file mode 100644 index 45f77be..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/MainMenu.nib and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/PlayerUILocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/PlayerUILocalizable.strings deleted file mode 100644 index 868bb3b..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/PlayerUILocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/StandalonePlayerLocalizable.strings b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/StandalonePlayerLocalizable.strings deleted file mode 100644 index 203dfee..0000000 Binary files a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/Resources/zh_Hant.lproj/StandalonePlayerLocalizable.strings and /dev/null differ diff --git a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/_CodeSignature/CodeResources b/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index ffb9d15..0000000 --- a/HorseIsleServer/MPN00BS/flashplayer/MACOS/flash.app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,1630 +0,0 @@ - - - - - files - - Resources/Flash Player.rsrc - - pvaoxAmCeX2xYmqprk5Wp0Izs2A= - - Resources/FlashPlayer.icns - - /Xn+VD3pothrOBKT8BKFgUBpXU8= - - Resources/cs.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/cs.lproj/MainMenu.nib - - hash - - xsqOjALId3WoFOmDhar8VJi3/qw= - - optional - - - Resources/cs.lproj/PlayerUILocalizable.strings - - hash - - BpmJ+9D9VFmHt8l86FrRYRve+VY= - - optional - - - Resources/cs.lproj/StandalonePlayerLocalizable.strings - - hash - - R5M+oYoi+62962XIdcCbsR6M4N4= - - optional - - - Resources/de.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/de.lproj/MainMenu.nib - - hash - - CJm9WXue3gBRrkPFw/yjRAU41Xg= - - optional - - - Resources/de.lproj/PlayerUILocalizable.strings - - hash - - MUJj+tQRrZkZy22RABnWKtZGOYk= - - optional - - - Resources/de.lproj/StandalonePlayerLocalizable.strings - - hash - - p6Bzkb8Kgun7e5W3It8GRJDoO3o= - - optional - - - Resources/document_f4a.icns - - NF+iPglsC8QiNTaSEWE5VMgBKfQ= - - Resources/document_f4p.icns - - SJKz4nnY/fPUhBvWoj/JbYwuWio= - - Resources/document_f4v.icns - - EJsaVBu2jX3g4acELuPpnvhxD8Y= - - Resources/document_flv.icns - - 4AnNDv11jgt0QvZTvjvZ+o9u01Y= - - Resources/document_swf.icns - - sw1C9KSCzrfFq4omzJnbeSlS67I= - - Resources/en.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/en.lproj/MainMenu.nib - - hash - - cA2HoQMzeG77hpx3B+DDyppZrCQ= - - optional - - - Resources/en.lproj/PlayerUILocalizable.strings - - hash - - mttbOiFFtyOKbcpN/CKGUHAhmHw= - - optional - - - Resources/en.lproj/StandalonePlayerLocalizable.strings - - hash - - QnCOzYW8W7iBvF8ocmkiQpEGts0= - - optional - - - Resources/es.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/es.lproj/MainMenu.nib - - hash - - IXP0UIUGAy/B3B7p+pWAVj8Mhp0= - - optional - - - Resources/es.lproj/PlayerUILocalizable.strings - - hash - - QH9+cSjlKR9VwioLAmeXuCrDEeM= - - optional - - - Resources/es.lproj/StandalonePlayerLocalizable.strings - - hash - - cJana3prz+poMLnWePHZDJAA23E= - - optional - - - Resources/fr.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/fr.lproj/MainMenu.nib - - hash - - KxtV0UTaMgUu4J6ubTQOz5bzkYE= - - optional - - - Resources/fr.lproj/PlayerUILocalizable.strings - - hash - - hAR7cvkDYrSbyXq3nNrSwnJ3Rko= - - optional - - - Resources/fr.lproj/StandalonePlayerLocalizable.strings - - hash - - zgL+fGyad5EKwj6Yib/4ciUkvNI= - - optional - - - Resources/it.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/it.lproj/MainMenu.nib - - hash - - M4T8zn1CsC9KvzCYHaFAdUXzBy0= - - optional - - - Resources/it.lproj/PlayerUILocalizable.strings - - hash - - n/3g5Z022GCHSTmibO7DUQ93gJY= - - optional - - - Resources/it.lproj/StandalonePlayerLocalizable.strings - - hash - - t8OnJOGpWRy1iSKKBF+T8JmOZlc= - - optional - - - Resources/ja.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/ja.lproj/MainMenu.nib - - hash - - 7aGWUz+2DAPYLKQH0ekVgWU1juY= - - optional - - - Resources/ja.lproj/PlayerUILocalizable.strings - - hash - - epE4rZEWFMnb+Z5sU8nPtUseqVs= - - optional - - - Resources/ja.lproj/StandalonePlayerLocalizable.strings - - hash - - WdnOxo8RkOeQ72rGFcEkzTUc99Y= - - optional - - - Resources/ko.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/ko.lproj/MainMenu.nib - - hash - - OFMzXfz+GCA1UffqwBltYslMUAY= - - optional - - - Resources/ko.lproj/PlayerUILocalizable.strings - - hash - - uAz/1Q1BXm3CGzj2g/vLLG0+Mnc= - - optional - - - Resources/ko.lproj/StandalonePlayerLocalizable.strings - - hash - - PDW5p6TTQQ0bOOcIZtY73nBpL8E= - - optional - - - Resources/nl.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/nl.lproj/MainMenu.nib - - hash - - YmIFWE6Ap3yx7NdN7pATUKb2GV8= - - optional - - - Resources/nl.lproj/PlayerUILocalizable.strings - - hash - - Wq/KjiAOeFxasTWndGbaeYzAkSg= - - optional - - - Resources/nl.lproj/StandalonePlayerLocalizable.strings - - hash - - 2mOKDtmf33ppZZdz9KWuKjV0MCg= - - optional - - - Resources/pl.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/pl.lproj/MainMenu.nib - - hash - - ELDo+lSUPFB7uCrsppdYUZQJ4Ls= - - optional - - - Resources/pl.lproj/PlayerUILocalizable.strings - - hash - - v/SKpWU+WCDtgQBntQ3RbrcoOBo= - - optional - - - Resources/pl.lproj/StandalonePlayerLocalizable.strings - - hash - - KurPjtb6vtchyvlgjJqLk1W7T/I= - - optional - - - Resources/pt.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/pt.lproj/MainMenu.nib - - hash - - 7oB50y6/eW8fCHouf2FyHIetkhQ= - - optional - - - Resources/pt.lproj/PlayerUILocalizable.strings - - hash - - 0XI2uXU8cASHdiGkxaSAmB6KJF8= - - optional - - - Resources/pt.lproj/StandalonePlayerLocalizable.strings - - hash - - ipnLxb9osseytQqNrWebmG1Zt0U= - - optional - - - Resources/ru.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/ru.lproj/MainMenu.nib - - hash - - GfwOWHOF/agzSm6qhv15eFhoJAQ= - - optional - - - Resources/ru.lproj/PlayerUILocalizable.strings - - hash - - U//VxPa224u1EOBmb+ef5HPF5z8= - - optional - - - Resources/ru.lproj/StandalonePlayerLocalizable.strings - - hash - - nS2Ei6hlaEq4yjOz24xBKNSUNAE= - - optional - - - Resources/sv.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/sv.lproj/MainMenu.nib - - hash - - p2S0CT+MjMDBAA1PsoscinQH+D0= - - optional - - - Resources/sv.lproj/PlayerUILocalizable.strings - - hash - - 6Ng6Cc8qTXZBAfvVO6oKHxeicS0= - - optional - - - Resources/sv.lproj/StandalonePlayerLocalizable.strings - - hash - - X843wzr99oR1l7akQozGHt044No= - - optional - - - Resources/tr.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/tr.lproj/MainMenu.nib - - hash - - 2WxpduLUo7fx/wbq8BVxgdDzCmw= - - optional - - - Resources/tr.lproj/PlayerUILocalizable.strings - - hash - - 9vLIPyxJPs1WPyEYGMrmary4GGU= - - optional - - - Resources/tr.lproj/StandalonePlayerLocalizable.strings - - hash - - K67p+bRCo6ykr5kgFp9jjaBnfPo= - - optional - - - Resources/zh_Hans.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/zh_Hans.lproj/MainMenu.nib - - hash - - wPojbwKTp8JOaVAfh+kXxx7A1nU= - - optional - - - Resources/zh_Hans.lproj/PlayerUILocalizable.strings - - hash - - trNb3nwxiOes0Z9penT+q6DNBIA= - - optional - - - Resources/zh_Hans.lproj/StandalonePlayerLocalizable.strings - - hash - - tdwerkYWytL/7me6VlurOW32psw= - - optional - - - Resources/zh_Hant.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - optional - - - Resources/zh_Hant.lproj/MainMenu.nib - - hash - - 45tcDxAV8jUbSWDxYpvdQNTf6Hg= - - optional - - - Resources/zh_Hant.lproj/PlayerUILocalizable.strings - - hash - - M8phM9+v+t0/bSDv1Mpoo9lRdXE= - - optional - - - Resources/zh_Hant.lproj/StandalonePlayerLocalizable.strings - - hash - - JSBPDMbuIDFZ4MHLO0TdlWI5w2k= - - optional - - - - files2 - - Resources/Flash Player.rsrc - - hash - - pvaoxAmCeX2xYmqprk5Wp0Izs2A= - - hash2 - - SYd91ZoMWBb7rqxG1gv20wFeOO0c2C8AvrCsnZp03/w= - - - Resources/FlashPlayer.icns - - hash - - /Xn+VD3pothrOBKT8BKFgUBpXU8= - - hash2 - - 5L7KsiG6190fOOtN8knSWcjOGd+pm64jIYmxMFofaEo= - - - Resources/cs.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/cs.lproj/MainMenu.nib - - hash - - xsqOjALId3WoFOmDhar8VJi3/qw= - - hash2 - - NWIC34GHfZf8DyRkCvxN5k1sPPBy8af5k5DOlt0JQV0= - - optional - - - Resources/cs.lproj/PlayerUILocalizable.strings - - hash - - BpmJ+9D9VFmHt8l86FrRYRve+VY= - - hash2 - - hihqezzwv5230npzedXLqS2YZyWn5sdvpcxnnfJSss8= - - optional - - - Resources/cs.lproj/StandalonePlayerLocalizable.strings - - hash - - R5M+oYoi+62962XIdcCbsR6M4N4= - - hash2 - - 18KAhv+hy9bAe8d8+gYsE6fjOMiMUTdfoZDnzgoMZYc= - - optional - - - Resources/de.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/de.lproj/MainMenu.nib - - hash - - CJm9WXue3gBRrkPFw/yjRAU41Xg= - - hash2 - - TPitNy3+ZQVU7IAE+hFnpe1URpZi1/2b6oWUjIERZPs= - - optional - - - Resources/de.lproj/PlayerUILocalizable.strings - - hash - - MUJj+tQRrZkZy22RABnWKtZGOYk= - - hash2 - - olzfOvpYh/Nl4WmUoEvRY9I+PaduCg+Zp7HW0JQkpvs= - - optional - - - Resources/de.lproj/StandalonePlayerLocalizable.strings - - hash - - p6Bzkb8Kgun7e5W3It8GRJDoO3o= - - hash2 - - ODYvv19PiKX18dcAsxOZuJ1Ax2kqQG6ScQlNmuKCv+A= - - optional - - - Resources/document_f4a.icns - - hash - - NF+iPglsC8QiNTaSEWE5VMgBKfQ= - - hash2 - - Cy/N9I6eL/v8z5qhKg04+KPXg2MmzZ7TujkQb46r+6s= - - - Resources/document_f4p.icns - - hash - - SJKz4nnY/fPUhBvWoj/JbYwuWio= - - hash2 - - GpXEe6JCZyDHlQcbs2IMXWjA14vyagVEW76wHQ/eloI= - - - Resources/document_f4v.icns - - hash - - EJsaVBu2jX3g4acELuPpnvhxD8Y= - - hash2 - - AP2KMQyjAUbgifkGvEqBxqEHRlSHvZpu8AoKx8dxkSE= - - - Resources/document_flv.icns - - hash - - 4AnNDv11jgt0QvZTvjvZ+o9u01Y= - - hash2 - - 1AG9FUNJ7qLfvLE85aktwJt+3lZ9xyeAjeuXMnrpYrI= - - - Resources/document_swf.icns - - hash - - sw1C9KSCzrfFq4omzJnbeSlS67I= - - hash2 - - 3zDwyAj3of87NgsmYZxfGOVn9mPCZN02IbN+HQ5eNcU= - - - Resources/en.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/en.lproj/MainMenu.nib - - hash - - cA2HoQMzeG77hpx3B+DDyppZrCQ= - - hash2 - - E6S7BvzO6OVytE5pY26GWjCxxZJK8l543sQDDvz89WQ= - - optional - - - Resources/en.lproj/PlayerUILocalizable.strings - - hash - - mttbOiFFtyOKbcpN/CKGUHAhmHw= - - hash2 - - PfhFZll6ZfzeHSZ87ore6kaSV4xK8YqoaVow+7TUSfg= - - optional - - - Resources/en.lproj/StandalonePlayerLocalizable.strings - - hash - - QnCOzYW8W7iBvF8ocmkiQpEGts0= - - hash2 - - bR9HeUIUdbLABV6WV6vB/nrt4jhBhI+s1a+UoD09qcE= - - optional - - - Resources/es.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/es.lproj/MainMenu.nib - - hash - - IXP0UIUGAy/B3B7p+pWAVj8Mhp0= - - hash2 - - 7/l4BCjeIKHisZqWJzH+rm/Wb7Sotoh7I+aghJo5KGs= - - optional - - - Resources/es.lproj/PlayerUILocalizable.strings - - hash - - QH9+cSjlKR9VwioLAmeXuCrDEeM= - - hash2 - - VizyNoDvpWcYtzEeTmyr7CYilpFNsxJIFXMeClcrx3g= - - optional - - - Resources/es.lproj/StandalonePlayerLocalizable.strings - - hash - - cJana3prz+poMLnWePHZDJAA23E= - - hash2 - - 62ne7P7V5bUyWUAAfRm5WFjqSCbUSzLtWMIpXRKieQY= - - optional - - - Resources/fr.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/fr.lproj/MainMenu.nib - - hash - - KxtV0UTaMgUu4J6ubTQOz5bzkYE= - - hash2 - - egptpboxYJXIr8m3KkHvMU3dM52B/+GV6L2+WvT2DpQ= - - optional - - - Resources/fr.lproj/PlayerUILocalizable.strings - - hash - - hAR7cvkDYrSbyXq3nNrSwnJ3Rko= - - hash2 - - wsPWsV+974wgBHiS+idsx6rqSJ/lqb9IF172JnTNyXk= - - optional - - - Resources/fr.lproj/StandalonePlayerLocalizable.strings - - hash - - zgL+fGyad5EKwj6Yib/4ciUkvNI= - - hash2 - - ubVdt1ewv3z9tnq6d/QpL+YgEnbzjDUE4SxMflAHKMk= - - optional - - - Resources/it.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/it.lproj/MainMenu.nib - - hash - - M4T8zn1CsC9KvzCYHaFAdUXzBy0= - - hash2 - - rbGW3ZP0eR8py5m7Xg0SHcVeTLgO5jCVDfLhokywENg= - - optional - - - Resources/it.lproj/PlayerUILocalizable.strings - - hash - - n/3g5Z022GCHSTmibO7DUQ93gJY= - - hash2 - - NWZUmirYDRYXghbBUZs7UDHCVWGpiuUibmcKlqbKHQ0= - - optional - - - Resources/it.lproj/StandalonePlayerLocalizable.strings - - hash - - t8OnJOGpWRy1iSKKBF+T8JmOZlc= - - hash2 - - Ql242hzai7Te07aCEAVFlAMn3Ud9HqHJ3HMf89DIKno= - - optional - - - Resources/ja.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/ja.lproj/MainMenu.nib - - hash - - 7aGWUz+2DAPYLKQH0ekVgWU1juY= - - hash2 - - sdRdC7+burU7WKpImc2FESOJIaGHF/hkSrMSTJ+Zmzw= - - optional - - - Resources/ja.lproj/PlayerUILocalizable.strings - - hash - - epE4rZEWFMnb+Z5sU8nPtUseqVs= - - hash2 - - aCfHGxRBa/iS5yJTD2XqZs764VNLRlaRjXWvU+DhHjs= - - optional - - - Resources/ja.lproj/StandalonePlayerLocalizable.strings - - hash - - WdnOxo8RkOeQ72rGFcEkzTUc99Y= - - hash2 - - M7iXyIwclSs2xwzz0LvWM3p/ILAyNER84nEekyJm99I= - - optional - - - Resources/ko.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/ko.lproj/MainMenu.nib - - hash - - OFMzXfz+GCA1UffqwBltYslMUAY= - - hash2 - - BpTKwt/G8WC/MUEbi7p5aGm+gsdNFrxeR/GDCgZCRQU= - - optional - - - Resources/ko.lproj/PlayerUILocalizable.strings - - hash - - uAz/1Q1BXm3CGzj2g/vLLG0+Mnc= - - hash2 - - nKclksc+KEkc/OmwmJ2vxyYdxHhJlCsJeE5WD5SxI88= - - optional - - - Resources/ko.lproj/StandalonePlayerLocalizable.strings - - hash - - PDW5p6TTQQ0bOOcIZtY73nBpL8E= - - hash2 - - zO4TXeVZtFHEy4n8vfbqN37EI6Cjmd64afH+lC+aTTA= - - optional - - - Resources/nl.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/nl.lproj/MainMenu.nib - - hash - - YmIFWE6Ap3yx7NdN7pATUKb2GV8= - - hash2 - - /YufeFohCsTubJnCC1d9tb/7d2wwpnxiv3Wx+5J5Jbs= - - optional - - - Resources/nl.lproj/PlayerUILocalizable.strings - - hash - - Wq/KjiAOeFxasTWndGbaeYzAkSg= - - hash2 - - PVIMRDZZjD7GtT7BoKC5oMO2IQFPYZun1alruK1DIIQ= - - optional - - - Resources/nl.lproj/StandalonePlayerLocalizable.strings - - hash - - 2mOKDtmf33ppZZdz9KWuKjV0MCg= - - hash2 - - cKns3ssgMZygRe8sEzVTCctKAcNPf2ByL1y6zuGuJYg= - - optional - - - Resources/pl.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/pl.lproj/MainMenu.nib - - hash - - ELDo+lSUPFB7uCrsppdYUZQJ4Ls= - - hash2 - - h9/CdIsUZCVFUkHAaGkCJ80J1kBYMYr4v7StYyxcGaY= - - optional - - - Resources/pl.lproj/PlayerUILocalizable.strings - - hash - - v/SKpWU+WCDtgQBntQ3RbrcoOBo= - - hash2 - - iki83KpxgLanxLCOIRmlOXovUEtvOg7G3+iAktc/y80= - - optional - - - Resources/pl.lproj/StandalonePlayerLocalizable.strings - - hash - - KurPjtb6vtchyvlgjJqLk1W7T/I= - - hash2 - - lxc9llOCzng12lEhGf1HzEz2tz0bQCh3RECxzpvonsg= - - optional - - - Resources/pt.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/pt.lproj/MainMenu.nib - - hash - - 7oB50y6/eW8fCHouf2FyHIetkhQ= - - hash2 - - HyyA/RXWH7ubiFU2j+7t4AQ30H9cNtmPgetwYpUyJv4= - - optional - - - Resources/pt.lproj/PlayerUILocalizable.strings - - hash - - 0XI2uXU8cASHdiGkxaSAmB6KJF8= - - hash2 - - bScoFlCXpACmO8GjnymV67WkEssh67DepwEHUoo6PyQ= - - optional - - - Resources/pt.lproj/StandalonePlayerLocalizable.strings - - hash - - ipnLxb9osseytQqNrWebmG1Zt0U= - - hash2 - - NSUDLV6HxUus3QB92j8tzrEjIoZwRPQZlC9uRBQkUfs= - - optional - - - Resources/ru.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/ru.lproj/MainMenu.nib - - hash - - GfwOWHOF/agzSm6qhv15eFhoJAQ= - - hash2 - - ALeHTj/bQ/7RTtCt837HrCrHcVbmdpgO8/OjGEQiDQI= - - optional - - - Resources/ru.lproj/PlayerUILocalizable.strings - - hash - - U//VxPa224u1EOBmb+ef5HPF5z8= - - hash2 - - 59LoCB7bvXPDKFz7iGYn8NCOBoeoOC5GfMbhZykaRNI= - - optional - - - Resources/ru.lproj/StandalonePlayerLocalizable.strings - - hash - - nS2Ei6hlaEq4yjOz24xBKNSUNAE= - - hash2 - - 0EfqX08W3HCUeB7zGgiWK0SbU9XRis25ytlqgIacBn4= - - optional - - - Resources/sv.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/sv.lproj/MainMenu.nib - - hash - - p2S0CT+MjMDBAA1PsoscinQH+D0= - - hash2 - - HGkMuMRMEOFaDqLvinBBNZbndbeV03/zIrOCxDuggQI= - - optional - - - Resources/sv.lproj/PlayerUILocalizable.strings - - hash - - 6Ng6Cc8qTXZBAfvVO6oKHxeicS0= - - hash2 - - dn94zv9NF7Kwbcv+nbR4ch/LUhXKW/5rywbw548Mf80= - - optional - - - Resources/sv.lproj/StandalonePlayerLocalizable.strings - - hash - - X843wzr99oR1l7akQozGHt044No= - - hash2 - - +vSWaEKWOmUFKuZZ6QHQ8AdFRlgkxV+viqGs5uwwEgQ= - - optional - - - Resources/tr.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/tr.lproj/MainMenu.nib - - hash - - 2WxpduLUo7fx/wbq8BVxgdDzCmw= - - hash2 - - tmqOSIP0G6j4Bc/HqIJTX6vMRSluOfQ2HGKS4mDeRCs= - - optional - - - Resources/tr.lproj/PlayerUILocalizable.strings - - hash - - 9vLIPyxJPs1WPyEYGMrmary4GGU= - - hash2 - - HKwc5E1yYvArRimKmw72iJ79SyRLcVULDetCcPDq8TY= - - optional - - - Resources/tr.lproj/StandalonePlayerLocalizable.strings - - hash - - K67p+bRCo6ykr5kgFp9jjaBnfPo= - - hash2 - - eEQU+eHoNDDoFGLuEUeHmFfUF/2rLQzf/KLO778MOU8= - - optional - - - Resources/zh_Hans.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/zh_Hans.lproj/MainMenu.nib - - hash - - wPojbwKTp8JOaVAfh+kXxx7A1nU= - - hash2 - - b19cEng9XMO9CpiPoXGdsdKZC+qYBjQRbEqQw1FbG1k= - - optional - - - Resources/zh_Hans.lproj/PlayerUILocalizable.strings - - hash - - trNb3nwxiOes0Z9penT+q6DNBIA= - - hash2 - - NlcxiVJ7bzXItYlOOYULgshvvjTTT6MU/ahuW9KkO/M= - - optional - - - Resources/zh_Hans.lproj/StandalonePlayerLocalizable.strings - - hash - - tdwerkYWytL/7me6VlurOW32psw= - - hash2 - - oZHFO9mNe0frUhlVyZcY6eCBP4hIAhQx/0tA5ix5lZA= - - optional - - - Resources/zh_Hant.lproj/InfoPlist.strings - - hash - - vhUTIvtAXah9gOxHz1L8TGZfTtc= - - hash2 - - Yez7HyzJhp3oe1tpd3a1zHB9XkcxK9h2jp8IMSlPdwE= - - optional - - - Resources/zh_Hant.lproj/MainMenu.nib - - hash - - 45tcDxAV8jUbSWDxYpvdQNTf6Hg= - - hash2 - - YUbe47oNFMZpIT1RlTpAnYdTJLAoGnReU65LcYXSLt8= - - optional - - - Resources/zh_Hant.lproj/PlayerUILocalizable.strings - - hash - - M8phM9+v+t0/bSDv1Mpoo9lRdXE= - - hash2 - - 3FT0kpW6HNWwpOk0CDjbNoeqSOaV8iNalDrAArul1eE= - - optional - - - Resources/zh_Hant.lproj/StandalonePlayerLocalizable.strings - - hash - - JSBPDMbuIDFZ4MHLO0TdlWI5w2k= - - hash2 - - 3Y6krqaiAi38nFE4cYcHVeIAOu9MjZC55As6wxEzGaM= - - optional - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/HorseIsleServer/MPN00BS/flashplayer/WINDOWS/flash.exe b/HorseIsleServer/MPN00BS/flashplayer/WINDOWS/flash.exe index 3cec515..6e7210d 100755 Binary files a/HorseIsleServer/MPN00BS/flashplayer/WINDOWS/flash.exe and b/HorseIsleServer/MPN00BS/flashplayer/WINDOWS/flash.exe differ diff --git a/README.md b/README.md index 992dedb..09a9ec6 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # HISP - HorseIsleServer Program + + [![Build](https://github.com/islehorse/HISP/workflows/build/badge.svg)](https://github.com/islehorse/HISP/actions?query=workflow%3Abuild) HISP is a "Server Emulator" for Horse Isle 1 @@ -10,55 +12,29 @@ well they essentailly run off "Server Emulators". **tl;dr, think "Club Penguin Rewritten" but with Horse Isle.** - # Installation: -Understand that there are differnet verisons of the HISP package; +- Linux: -HISPd - reimplementation of the Horse Isle 1.0 Server Software - -N00BS - a launcher for joining Multiplayer or running a local server for offline singleplayer play (deprecated) - -MPN00BS - Same as N00BS but multiplatform - -Game relies on a SQL Server, any should work, but i have only tested it with MariaDB, -(and i guess SQLLite for the one used in the launcher version) - -- APT: - -Install on Ubuntu or Debian via APT: +Install on Ubuntu via APT: ``` -sudo curl https://silica.codes/api/packages/islehorse/debian/repository.key -o /etc/apt/keyrings/forgejo-islehorse.asc -echo "deb [signed-by=/etc/apt/keyrings/forgejo-islehorse.asc] https://silica.codes/api/packages/islehorse/debian debian main" | sudo tee -a /etc/apt/sources.list.d/hisp.list +sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 34F644BC70C746CE48139C595129317F33AE659C +sudo add-apt-repository 'deb http://deb.silica.codes debian main' sudo apt update +sudo apt install hisp +``` + +Install on Debian via APT: +``` +sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 34F644BC70C746CE48139C595129317F33AE659C +sudo bash -c 'echo "deb http://deb.silica.codes debian main">>/etc/apt/sources.list' +sudo apt update +sudo apt install hisp ``` Then simply edit /etc/hisp/server.properties & change to correct database credentials and start the server using ``systemctl start hisp`` -- Manual Install: - -If you do not want to use APT, or are on Windows or MacOS, then you can simply download the latest HISPd binary: -here https://islehorse.com/download/ - -Run it and edit server.properties in the same folder as HISPd - -- Websites: - -Website is built in PHP 8.0 and based on the original Horse Isle Game Website -requires the following PHP modules to be loaded; "intl", "mysqli" and "mysqlnd" on Ubuntu - -you must edit config.php and server.php to configure before it'll work properly. -and is required to sign-up to the private server - -the master-site (equivilent to master.horseisle.com) can be found here: -consists of sign up page, and server list, -https://server.islehorse.com/binaries/download/HISP-Web-Master.zip - -and the game-site: -contains the actual game client .SWFs themselves -https://server.islehorse.com/binaries/download/HISP-Web-Game.zip - # Commands (legend: <> Required, [] Optional) ``` @@ -121,19 +97,22 @@ https://server.islehorse.com/binaries/download/HISP-Web-Game.zip !DANCE ``` + +# Depends + HISP Depends on a SQL Server, + its been tested and known to work specifically with MariaDB, https://mariadb.org/ + Set its information into server.properties or the server will just crash on first run /-/ # Building - Building the server from source requires Microsoft .NET Core SDK, targetting version 8.0 https://dotnet.microsoft.com/download/dotnet-core + Building the server from source requires Microsoft .NET Core SDK, targetting version 7.0 https://dotnet.microsoft.com/download/dotnet-core use ``dotnet build`` to build a debug build, (requires .NET Core Runtime) quickly or one of our publishing XML's ex: ``dotnet publish -p:PublishProfile=Linux64.pubxml`` to to build it standalone. + NOTE: At this current time, building projects targeting .NET Core 7.0 inside Visual Studio requires Visual Studio 2022 PREVIEW and does not work in the stable build - # Credits - -Li (They/Them) - -Supertiger (He/Him) - -Olebeck (They/Them) +# Web Server + Theres a bunch of saved files from the Horse Isle 1.0 website, as well as some basic functionality to make it work + like the original site, the files are in the "HorseIsleWeb" folder, it requires PHP 8.0, with the modules "intl" and "mysqli" + - Li