mirror of
https://github.com/Campofinale/CampofinaleBackup.git
synced 2025-12-16 15:44:37 +00:00
commit
1c5cd8fafc
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Protocol
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Protocol
|
|
||||||
{
|
{
|
||||||
public enum CsMsgId : int
|
public enum CsMsgId : int
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Protocol
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Protocol
|
|
||||||
{
|
{
|
||||||
public enum ScMsgId : int
|
public enum ScMsgId : int
|
||||||
{
|
{
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Platforms>AnyCPU;x86;ARM32</Platforms>
|
<Platforms>AnyCPU;x86;ARM32</Platforms>
|
||||||
<StartupObject>Program</StartupObject>
|
<StartupObject>Program</StartupObject>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -29,6 +30,7 @@
|
|||||||
<PackageReference Include="Pastel" Version="5.1.0" />
|
<PackageReference Include="Pastel" Version="5.1.0" />
|
||||||
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
|
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
|
||||||
<PackageReference Include="SQLiteNetExtensions" Version="2.1.0" />
|
<PackageReference Include="SQLiteNetExtensions" Version="2.1.0" />
|
||||||
|
<PackageReference Include="System.ServiceProcess.ServiceController" Version="9.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -1,15 +1,4 @@
|
|||||||
using Campofinale.Database;
|
namespace Campofinale.Commands
|
||||||
using Campofinale.Game.Entities;
|
|
||||||
using Campofinale.Protocol;
|
|
||||||
using Campofinale.Resource;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands
|
|
||||||
{
|
{
|
||||||
public static class BaseCommands
|
public static class BaseCommands
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,10 @@
|
|||||||
namespace Campofinale.Commands
|
namespace Campofinale.Commands
|
||||||
{
|
{
|
||||||
using Pastel;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Net.Sockets;
|
|
||||||
using Campofinale.Protocol;
|
|
||||||
using Campofinale.Network;
|
|
||||||
|
|
||||||
public static class CommandManager
|
public static class CommandManager
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Game.Inventory;
|
using Campofinale.Game.Inventory;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
@ -28,15 +23,12 @@ public static class CommandAdd
|
|||||||
case "item":
|
case "item":
|
||||||
Item item=target.inventoryManager.AddItem(args[1], int.Parse(args[2]));
|
Item item=target.inventoryManager.AddItem(args[1], int.Parse(args[2]));
|
||||||
message = $"Item {args[1]} was added to {target.nickname}";
|
message = $"Item {args[1]} was added to {target.nickname}";
|
||||||
|
|
||||||
target.Send(new PacketScItemBagScopeModify(target, item));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "weapon":
|
case "weapon":
|
||||||
Item wep = target.inventoryManager.AddWeapon(args[1], Convert.ToUInt64(args[2]));
|
Item wep = target.inventoryManager.AddWeapon(args[1], Convert.ToUInt64(args[2]));
|
||||||
message = $"Weapon {args[1]} was added to {target.nickname}";
|
message = $"Weapon {args[1]} was added to {target.nickname}";
|
||||||
|
|
||||||
target.Send(new PacketScItemBagScopeModify(target, wep));
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "char":
|
case "char":
|
||||||
@ -77,7 +69,7 @@ public static class CommandAdd
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
target.inventoryManager.Save();
|
|
||||||
CommandManager.SendMessage(sender, $"{message}.");
|
CommandManager.SendMessage(sender, $"{message}.");
|
||||||
}
|
}
|
||||||
catch (Exception err)
|
catch (Exception err)
|
||||||
|
|||||||
@ -1,11 +1,4 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MongoDB.Bson;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Game.Inventory;
|
using Campofinale.Game.Inventory;
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Commands.Handlers
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
|
||||||
{
|
{
|
||||||
public static class CommandClear
|
public static class CommandClear
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,12 +1,6 @@
|
|||||||
using Campofinale.Game.Entities;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Commands.Handlers
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
|
||||||
{
|
{
|
||||||
public static class CommandHelp
|
public static class CommandHelp
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Campofinale.Commands;
|
using Campofinale.Commands;
|
||||||
using Campofinale.Database;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
|
|
||||||
@ -61,7 +60,7 @@ namespace Campofinale.Game.Character
|
|||||||
}
|
}
|
||||||
|
|
||||||
int updatedItemCount = 0;
|
int updatedItemCount = 0;
|
||||||
foreach (var item in target.inventoryManager.items)
|
foreach (var item in target.inventoryManager.items.items)
|
||||||
{
|
{
|
||||||
if (item.id.StartsWith("wpn_"))
|
if (item.id.StartsWith("wpn_"))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
@ -19,11 +14,6 @@ namespace Campofinale.Commands.Handlers
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i < args.Length; i++)
|
|
||||||
{
|
|
||||||
args[i] = Uri.UnescapeDataString(args[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
target.nickname = string.Join(" ", args);
|
target.nickname = string.Join(" ", args);
|
||||||
target.Save();
|
target.Save();
|
||||||
target.Send(new PacketScSetName(target, target.nickname));
|
target.Send(new PacketScSetName(target, target.nickname));
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Commands.Handlers
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
|
||||||
{
|
{
|
||||||
public static class CommandPlayers
|
public static class CommandPlayers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,8 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
using Campofinale.Game.Entities;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
|
using System.Globalization;
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
@ -23,20 +19,25 @@ namespace Campofinale.Commands.Handlers
|
|||||||
|
|
||||||
for (int i=0; i < args.Length; i++)
|
for (int i=0; i < args.Length; i++)
|
||||||
{
|
{
|
||||||
args[i] = Uri.UnescapeDataString(args[i]).Replace(".", ",");
|
args[i] = args[i].Replace(",", ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
float x, y, z;
|
float[] pos = [target.position.x, target.position.y, target.position.z];
|
||||||
|
|
||||||
x = args[0] == "~" ? target.position.x : float.Parse(args[0]);
|
for (int i=0; i < args.Length; i++) {
|
||||||
y = args[1] == "~" ? target.position.y : float.Parse(args[1]);
|
if(args[i] == "~") continue;
|
||||||
z = args[2] == "~" ? target.position.z : float.Parse(args[2]);
|
|
||||||
|
float curPos = pos[i];
|
||||||
|
pos[i] = float.Parse(args[i].StartsWith("--") ? args[i].Trim('-') : args[i], CultureInfo.InvariantCulture);
|
||||||
|
if (args[i].StartsWith('+')) pos[i] += curPos;
|
||||||
|
if (args[i].StartsWith("--")) pos[i] = curPos - pos[i];
|
||||||
|
}
|
||||||
|
|
||||||
Vector3f position = new Vector3f(new Vector()
|
Vector3f position = new Vector3f(new Vector()
|
||||||
{
|
{
|
||||||
X = x,
|
X = pos[0],
|
||||||
Y = y,
|
Y = pos[1],
|
||||||
Z = z
|
Z = pos[2]
|
||||||
});
|
});
|
||||||
|
|
||||||
target.position = position;
|
target.position = position;
|
||||||
|
|||||||
@ -1,12 +1,6 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Commands.Handlers
|
namespace Campofinale.Commands.Handlers
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale
|
|
||||||
{
|
{
|
||||||
public class ConfigFile
|
public class ConfigFile
|
||||||
{
|
{
|
||||||
@ -14,30 +8,39 @@ namespace Campofinale
|
|||||||
public ServerOptions serverOptions = new();
|
public ServerOptions serverOptions = new();
|
||||||
public LogSettings logOptions = new();
|
public LogSettings logOptions = new();
|
||||||
}
|
}
|
||||||
public struct ServerOptions
|
public class ServerOptions
|
||||||
{
|
{
|
||||||
public int defaultSceneNumId = 98;
|
public int defaultSceneNumId = 87;
|
||||||
public int maxPlayers = 20;
|
public int maxPlayers = 20;
|
||||||
|
public CharactersOptions defaultCharacters = new();
|
||||||
public ServerOptions()
|
public ServerOptions()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CharactersOptions
|
||||||
|
{
|
||||||
|
public int defaultLevel = 1;
|
||||||
|
public bool giveAllCharacters = true;
|
||||||
|
public List<string> characters = new List<string>(); //used if giveAllCharacters is false
|
||||||
|
|
||||||
|
public CharactersOptions() { }
|
||||||
|
}
|
||||||
/* public struct WelcomeMail
|
/* public struct WelcomeMail
|
||||||
{
|
{
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
public struct LogSettings
|
public class LogSettings
|
||||||
{
|
{
|
||||||
public bool packets;
|
public bool packets = true;
|
||||||
|
public bool packetWarnings = true;
|
||||||
|
public bool packetBodies = false;
|
||||||
public bool debugPrint = false;
|
public bool debugPrint = false;
|
||||||
|
|
||||||
public LogSettings()
|
public LogSettings()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public struct GameserverSettings
|
public class GameserverSettings
|
||||||
{
|
{
|
||||||
public string bindAddress = "127.0.0.1";
|
public string bindAddress = "127.0.0.1";
|
||||||
public int bindPort = 30000;
|
public int bindPort = 30000;
|
||||||
@ -47,10 +50,9 @@ namespace Campofinale
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public struct DispatchServerSettings
|
public class DispatchServerSettings
|
||||||
{
|
{
|
||||||
public string bindAddress = "127.0.0.1";
|
public string bindAddress = "127.0.0.1";
|
||||||
|
|
||||||
public int bindPort = 5000;
|
public int bindPort = 5000;
|
||||||
public string accessAddress = "127.0.0.1";
|
public string accessAddress = "127.0.0.1";
|
||||||
public int accessPort = 5000;
|
public int accessPort = 5000;
|
||||||
@ -60,7 +62,7 @@ namespace Campofinale
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public struct MongoDatabaseSettings
|
public class MongoDatabaseSettings
|
||||||
{
|
{
|
||||||
public string uri = "mongodb://localhost:27017";
|
public string uri = "mongodb://localhost:27017";
|
||||||
public string collection = "Campofinale";
|
public string collection = "Campofinale";
|
||||||
|
|||||||
@ -15,9 +15,6 @@
|
|||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Runtime.Intrinsics;
|
using System.Runtime.Intrinsics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
|||||||
@ -154,7 +154,7 @@
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const url = new URL('%dispatchip%/pcSdk/console');
|
const url = new URL('%dispatchip%/pcSdk/console');
|
||||||
url.searchParams.append('command', command);
|
url.searchParams.append('command', btoa(unescape(encodeURIComponent(command))));
|
||||||
url.searchParams.append('token', token);
|
url.searchParams.append('token', token);
|
||||||
|
|
||||||
const response = await fetch(url.toString(), {
|
const response = await fetch(url.toString(), {
|
||||||
|
|||||||
@ -0,0 +1 @@
|
|||||||
|
{"isInitial":true,"files":[{"index":1,"name":"VFS/CA2A581090AB4133/CA2A581090AB4133.blc","hash":"e75b8886d2426ec6b1e7f362bcd5255d","size":302,"urlPath":null,"manifest":7},{"index":2,"name":"VFS/CA2A581090AB4133/0DBA81C558A36AFC1D7D1C0A5A704A09.chk","hash":null,"size":80879438,"urlPath":null,"manifest":0},{"index":3,"name":"VFS/8F0DD938C04FD953/8F0DD938C04FD953.blc","hash":"d236d4691a5815ba973fa365ff6357f9","size":59,"urlPath":null,"manifest":3},{"index":4,"name":"VFS/16BB5AC00009A71B/16BB5AC00009A71B.blc","hash":"689374e7c7ec263dfd66fd255351fded","size":331,"urlPath":null,"manifest":3},{"index":5,"name":"VFS/16BB5AC00009A71B/6A2B02D8FCE1ED28849D1596D779CFA9.chk","hash":null,"size":14236423,"urlPath":null,"manifest":4},{"index":6,"name":"VFS/16BB5AC00009A71B/DA88C18EED8D9DEE8326BAA9AB78AA78.chk","hash":null,"size":1193655,"urlPath":null,"manifest":4},{"index":7,"name":"VFS/AAD6005BEB6AE986/AAD6005BEB6AE986.blc","hash":"51603590679e7d8590a3a1f908a38ed1","size":27360,"urlPath":null,"manifest":3},{"index":8,"name":"VFS/AAD6005BEB6AE986/1745D582258DFD069CDA135DDC740D34.chk","hash":null,"size":124467976,"urlPath":null,"manifest":4},{"index":9,"name":"VFS/B28236B7FAB03015/B28236B7FAB03015.blc","hash":"1baf1a032b9e204652eac0a7256621a7","size":15912,"urlPath":null,"manifest":7},{"index":10,"name":"VFS/B28236B7FAB03015/86BC72728AE017306E7CBE8DC67C93A9.chk","hash":null,"size":46679427,"urlPath":null,"manifest":0}],"types":null,"version":null}
|
||||||
1
Campofinale/Data/res_versions/2089329-32/ori.json
Normal file
1
Campofinale/Data/res_versions/2089329-32/ori.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
4Fmf1Xuly6yikdJUcayl2cpjWMibo8erW2rBrVmhocjKr1icY2OEppqdy1RxWomquGZ5o2R4l3BqYJ9ieHpnlZhqZaVzaaNtcWGWa2d5dZiWammQlKPFWmVSzpOqoFWeh5xtl5RvmnBvlJhmaW6Yx5uZZ8dpnZVua5LJlmxqaJnJWWKEpaDcnVtqmWJpZFXZ16OGw6afhHKnpdKeY1qgxdOgnMelq4RycK2SrVmhocjKr1icZGOEppqdy1RxWomquGZ5o2R4l3BqYJ9ieHpnlZhqZZJ2eaNwanObZ295ZpqmfXmTdm6maXxgp2d4b2OYpmdvkJWfzVplUs6TqqBVntOsos5eWdWhs5WIbG9oa5uea2maXlnXqqWAx6afWm3S2qOijlSkw6ailsulq1ptlOJjsYSbpcadsVKgZWNaocXSnFicVI2oi2horGJ7fGyXnXpmlnh7m21sX554Z3x3nZhveZJmfaZxbmOUlKObVZCHn5fVmlmcWp1imWibbGmdlphrmmNsxJlyZ5mYmGtpmcudbJVnbshxW1yIpaCymIafbG+OVKzUpImR2ppZcqHZ0aNihJ+Y0KGfldmmWXJm4ZGyWMugm8ewW2qaXlmmlNHKWXCEiH21Z2pmqHRseXaUlWdmm3Nuk3poYZx0eW10p5VnZpJreJlpe17InppaX4bNmKnKVHGEbnFpmWlrnWrHnJyZlGhqxp6dZpyYm2pomZhsZ8iWnMZaZVLZm7GdVZ6YameOVKzUpImR2ppZcqHZ0aNihJ+Y0KGfldmmWXJm4ZGyWMugm8ewW2qbXlmmlNHKWXCEiH21Z2pmqHRseXaUlWdmm3Nuk3poZqdkeWhlqJ19eadjfKZqcWiaa3tpaJ2be22Za3qoeXJeyZqiWl+GzZipylRx0K2lnJJUqqGtyYdxZ5Zkaphsa2OSVKyqn7TGq56EbKXXpKVciJ+YppzKyqqqhGxr32S0Us+gm52rhp9tYoSgmM+dW2qIiH2LYpWbeXiXc3qSaGlgn3NuaXWTqXhumnVomn1+dJ52cHx4qZ1qaJh0eKNxenKdanh5apyTmp7NVGOEoJqjzlRxpqjQ0WNY1Zuxx1pzYZdram5omZFZq9Seh8OsoVKgoKykn5CHpJfQm53Hq61SoGa0ZK6GzqWax6pZnG9lUtSTpJ1VnoeNfLVheKN8b2CWZ3l9dZqmfG+aaGajeX1mlmJsenimm3h7m2ptkJqlk4heWaCU181ZcIRnaJhobGWfYm1vbMmcm26Xa2fDa5phzGtncJSXnZyak1RjhKuiqstUcWpql5tnYoSnqc6ImqTOVHGmqNDRY1jPk6XLnp6j2lRxa7CQ4Fmf0Jac2lpzaJJUpZmgyYdxWLh4ipF5enScYmdtdamnbXena2+YZ2pnmmd7bWuWl2xupnh7km5yc6pzaGtoqKl6bZZie5VsZ5POnVlkVczGqp6EbKXXpKVciKWgspiGn2holmZtmXFwZpJUrKqftMarnoRspdekpVyIn5imnMrKqqqEbGvfZLRSz6CbnauGn3BihKCYz51baoiIfYtippdvaJVoeZl+enKWZWdpaJOnaW6UZW2kb39xqGJqaGSZk5mixVRjhKCao85UcVpkxsadZ8NiapSacpWYYmtuaJbKmJmSk26UbW9mmGOYb1WQh6qf3JdZnGluaZdkY1qo1tGHl9aaWZymrpzSXlmllNLOnZvVplmcb7Zc4VSgppfJ3Vlwk2JjhKaanctUcVqJqrhmeJRqaZVue2esc3loZpSWbGWaaHmlb2tnmGp4fWOVnGpmmHdupXp+aKp1bW92nZh4b5CVn81aZVLOk6qgVZ7TrKLOXlnVobOViGxrbmmbnmtomV5Z16qlgMemn1pt0tqjoo5UpMOmopbLpatabZTilGKEprDSnaxSoKCspJ+Qh62b1KWg0aZbatSno6Sw
|
||||||
@ -3,19 +3,12 @@ using Campofinale.Game.Character;
|
|||||||
using Campofinale.Game.Gacha;
|
using Campofinale.Game.Gacha;
|
||||||
using Campofinale.Game.Inventory;
|
using Campofinale.Game.Inventory;
|
||||||
using Campofinale.Game.Spaceship;
|
using Campofinale.Game.Spaceship;
|
||||||
using Campofinale.Resource;
|
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Player;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static SQLite.SQLite3;
|
|
||||||
|
|
||||||
namespace Campofinale.Database
|
namespace Campofinale.Database
|
||||||
{
|
{
|
||||||
@ -42,6 +35,8 @@ namespace Campofinale.Database
|
|||||||
public List<Scene> scenes = new();
|
public List<Scene> scenes = new();
|
||||||
public Dictionary<int, List<int>> bitsets = new();
|
public Dictionary<int, List<int>> bitsets = new();
|
||||||
public PlayerSafeZoneInfo savedSafeZone = new();
|
public PlayerSafeZoneInfo savedSafeZone = new();
|
||||||
|
public Gender gender = Gender.GenFemale;
|
||||||
|
public Dictionary<int, Item> bag = new();
|
||||||
}
|
}
|
||||||
public class Account
|
public class Account
|
||||||
{
|
{
|
||||||
@ -141,7 +136,9 @@ namespace Campofinale.Database
|
|||||||
noSpawnAnymore = player.noSpawnAnymore,
|
noSpawnAnymore = player.noSpawnAnymore,
|
||||||
scenes=player.sceneManager.scenes,
|
scenes=player.sceneManager.scenes,
|
||||||
bitsets=player.bitsetManager.bitsets,
|
bitsets=player.bitsetManager.bitsets,
|
||||||
savedSafeZone = player.savedSaveZone
|
savedSafeZone = player.savedSaveZone,
|
||||||
|
gender=player.gender,
|
||||||
|
bag=player.inventoryManager.items.bag
|
||||||
};
|
};
|
||||||
UpsertPlayerData(data);
|
UpsertPlayerData(data);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,9 @@
|
|||||||
using MongoDB.Bson.Serialization.Serializers;
|
using MongoDB.Bson.Serialization;
|
||||||
using MongoDB.Bson.Serialization;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MongoDB.Bson.IO;
|
using MongoDB.Bson.IO;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
using Campofinale.Game.Inventory;
|
||||||
|
|
||||||
namespace Campofinale.Database
|
namespace Campofinale.Database
|
||||||
{
|
{
|
||||||
@ -68,6 +63,8 @@ namespace Campofinale.Database
|
|||||||
{
|
{
|
||||||
BsonSerializer.RegisterSerializer(typeof(Dictionary<int, ulong>), new CustomDictionarySerializer<int, ulong>());
|
BsonSerializer.RegisterSerializer(typeof(Dictionary<int, ulong>), new CustomDictionarySerializer<int, ulong>());
|
||||||
BsonSerializer.RegisterSerializer(typeof(Dictionary<int, List<int>>), new CustomDictionarySerializer<int, List<int>>());
|
BsonSerializer.RegisterSerializer(typeof(Dictionary<int, List<int>>), new CustomDictionarySerializer<int, List<int>>());
|
||||||
|
BsonSerializer.RegisterSerializer(typeof(Dictionary<int, Item>), new CustomDictionarySerializer<int, Item>());
|
||||||
|
|
||||||
RegisterSubclasses<FComponent>();
|
RegisterSubclasses<FComponent>();
|
||||||
Logger.Print("Connecting to MongoDB...");
|
Logger.Print("Connecting to MongoDB...");
|
||||||
try
|
try
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game
|
namespace Campofinale.Game
|
||||||
|
|||||||
@ -6,13 +6,6 @@ using Google.Protobuf.Collections;
|
|||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
using MongoDB.Bson.Serialization.IdGenerators;
|
||||||
using MongoDB.Driver;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static Campofinale.Resource.ResourceManager.CharGrowthTable;
|
using static Campofinale.Resource.ResourceManager.CharGrowthTable;
|
||||||
using static Campofinale.Resource.ResourceManager.WeaponUpgradeTemplateTable;
|
using static Campofinale.Resource.ResourceManager.WeaponUpgradeTemplateTable;
|
||||||
@ -149,6 +142,11 @@ namespace Campofinale.Game.Character
|
|||||||
guid = GetOwner().random.Next();
|
guid = GetOwner().random.Next();
|
||||||
this.weaponGuid = GetOwner().inventoryManager.AddWeapon(ResourceManager.charGrowthTable[id].defaultWeaponId, 1).guid;
|
this.weaponGuid = GetOwner().inventoryManager.AddWeapon(ResourceManager.charGrowthTable[id].defaultWeaponId, 1).guid;
|
||||||
this.curHp = CalcAttributes()[AttributeType.MaxHp].val;
|
this.curHp = CalcAttributes()[AttributeType.MaxHp].val;
|
||||||
|
if (level < 20) breakNode = "";
|
||||||
|
if (level >= 20 && level <= 40) breakNode = "charBreak20";
|
||||||
|
if (level > 40 && level <= 60) breakNode = "charBreak40";
|
||||||
|
if (level > 60 && level <= 70) breakNode = "charBreak60";
|
||||||
|
if (level > 70) breakNode = "charBreak70";
|
||||||
}
|
}
|
||||||
public int GetSkillMaxLevel()
|
public int GetSkillMaxLevel()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using System;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Game.Dungeons
|
namespace Campofinale.Game.Dungeons
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Protocol;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game.Entities
|
namespace Campofinale.Game.Entities
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game.Entities
|
namespace Campofinale.Game.Entities
|
||||||
@ -88,6 +83,7 @@ namespace Campofinale.Game.Entities
|
|||||||
|
|
||||||
Type =(int) ObjectTypeIndex.Enemy,
|
Type =(int) ObjectTypeIndex.Enemy,
|
||||||
},
|
},
|
||||||
|
|
||||||
Attrs =
|
Attrs =
|
||||||
{
|
{
|
||||||
GetAttributes()
|
GetAttributes()
|
||||||
|
|||||||
@ -1,11 +1,4 @@
|
|||||||
using Campofinale.Protocol;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using Campofinale.Resource;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Game.Entities
|
namespace Campofinale.Game.Entities
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Factory.FactoryNode;
|
using static Campofinale.Game.Factory.FactoryNode;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory.Components
|
namespace Campofinale.Game.Factory.Components
|
||||||
|
|||||||
@ -1,14 +1,9 @@
|
|||||||
using Campofinale.Game.Factory.Components;
|
using Campofinale.Game.Entities;
|
||||||
|
using Campofinale.Game.Factory.Components;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game.Factory
|
namespace Campofinale.Game.Factory
|
||||||
@ -133,8 +128,12 @@ namespace Campofinale.Game.Factory
|
|||||||
GetOwner().Send(new PacketScFactorySyncChapter(GetOwner(), chapterId));
|
GetOwner().Send(new PacketScFactorySyncChapter(GetOwner(), chapterId));
|
||||||
edit.Nodes.Add(node.ToProto());
|
edit.Nodes.Add(node.ToProto());
|
||||||
Logger.Print(Newtonsoft.Json.JsonConvert.SerializeObject(edit, Newtonsoft.Json.Formatting.Indented));
|
Logger.Print(Newtonsoft.Json.JsonConvert.SerializeObject(edit, Newtonsoft.Json.Formatting.Indented));
|
||||||
|
EntityInteractive e = new(place.TemplateId, GetOwner().roleId, new Vector3f(place.Position), new Vector3f(place.Direction), GetOwner().sceneManager.GetCurScene().sceneNumId, node.guid);
|
||||||
|
GetOwner().sceneManager.GetCurScene().entities.Add(e);
|
||||||
|
GetOwner().sceneManager.GetCurScene().SpawnEntity(e);
|
||||||
GetOwner().Send(ScMsgId.ScFactoryModifyChapterNodes, edit);
|
GetOwner().Send(ScMsgId.ScFactoryModifyChapterNodes, edit);
|
||||||
GetOwner().Send(new PacketScFactoryOpRet(GetOwner(), node.nodeId,FactoryOpType.Place),seq);
|
GetOwner().Send(new PacketScFactoryOpRet(GetOwner(), node.nodeId,FactoryOpType.Place),seq);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public FactoryChapter(string chapterId,ulong ownerId)
|
public FactoryChapter(string chapterId,ulong ownerId)
|
||||||
@ -266,6 +265,7 @@ namespace Campofinale.Game.Factory
|
|||||||
TemplateId=templateId,
|
TemplateId=templateId,
|
||||||
StableId= GetStableId(),
|
StableId= GetStableId(),
|
||||||
IsDeactive= deactive,
|
IsDeactive= deactive,
|
||||||
|
|
||||||
Power = new()
|
Power = new()
|
||||||
{
|
{
|
||||||
InPower= InPower(),
|
InPower= InPower(),
|
||||||
@ -289,7 +289,7 @@ namespace Campofinale.Game.Factory
|
|||||||
node.Transform.WorldRotation = direction.ToProto();
|
node.Transform.WorldRotation = direction.ToProto();
|
||||||
node.InteractiveObject = new()
|
node.InteractiveObject = new()
|
||||||
{
|
{
|
||||||
|
ObjectId=guid,
|
||||||
};
|
};
|
||||||
node.Flag = 0;
|
node.Flag = 0;
|
||||||
node.InstKey = "";
|
node.InstKey = "";
|
||||||
|
|||||||
@ -1,12 +1,6 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game.Gacha
|
namespace Campofinale.Game.Gacha
|
||||||
@ -16,7 +10,7 @@ namespace Campofinale.Game.Gacha
|
|||||||
|
|
||||||
public Player player;
|
public Player player;
|
||||||
internal ulong upSeqId;
|
internal ulong upSeqId;
|
||||||
const double fiftyfifty = 0.45; // 50% (make it less than real 50, because the randomness make win fifty fifty every time
|
const double fiftyfifty = 0.50;
|
||||||
|
|
||||||
private static readonly Random random = new Random();
|
private static readonly Random random = new Random();
|
||||||
public GachaManager(Player player)
|
public GachaManager(Player player)
|
||||||
@ -176,7 +170,6 @@ namespace Campofinale.Game.Gacha
|
|||||||
RewardIds =
|
RewardIds =
|
||||||
{
|
{
|
||||||
$"reward_{transaction.rarity}starChar_weaponCoin",
|
$"reward_{transaction.rarity}starChar_weaponCoin",
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -220,11 +213,7 @@ namespace Campofinale.Game.Gacha
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int index = random.Next(0,items.Count); // Miglior randomizzazione
|
int index = random.Next(0,items.Count);
|
||||||
// index = (int)((1 - Math.Pow(random.NextDouble(), 2)) * (items.Count - 1));
|
|
||||||
|
|
||||||
// Se vuoi evitare di prendere spesso i primi 2-3 elementi:
|
|
||||||
// index = (int)Math.Pow(random.NextDouble(), 1.5) * items.Count;
|
|
||||||
if (index > items.Count-1)
|
if (index > items.Count-1)
|
||||||
{
|
{
|
||||||
index = items.Count-1;
|
index = items.Count-1;
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
using MongoDB.Bson.Serialization.IdGenerators;
|
||||||
|
|
||||||
namespace Campofinale.Game.Gacha
|
namespace Campofinale.Game.Gacha
|
||||||
|
|||||||
@ -1,16 +1,33 @@
|
|||||||
using System;
|
namespace Campofinale.Game
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Game
|
|
||||||
{
|
{
|
||||||
public static class GameConstants
|
public static class GameConstants
|
||||||
{
|
{
|
||||||
|
//TODO, have to check if this is really userful for support different platform or if android version doesn't need the GAME_VERSION_ASSET_URL (probably not?)
|
||||||
|
//So, in case is useful only if the android build it's different than 0.5.28
|
||||||
|
/*public static List<GameVersionConst> GAME_VERSIONS = new()
|
||||||
|
{
|
||||||
|
new GameVersionConst("0.5.28"), //Windows CBT2
|
||||||
|
new GameVersionConst("0.5.5"), //Android CBT2
|
||||||
|
|
||||||
|
};*/
|
||||||
|
|
||||||
|
//Not used on top ^
|
||||||
public static string GAME_VERSION = "0.5.28"; //CBT 2
|
public static string GAME_VERSION = "0.5.28"; //CBT 2
|
||||||
|
public static string GAME_VERSION_ANDROID = "0.5.5"; //CBT 2 ANDROID
|
||||||
public static string GAME_VERSION_ASSET_URL = "https://beyond.hg-cdn.com/uXUuLlNbIYmMMTlN/0.5/update/6/1/Windows/0.5.28_U1mgxrslUitdn3hb/files";//CBT 2
|
public static string GAME_VERSION_ASSET_URL = "https://beyond.hg-cdn.com/uXUuLlNbIYmMMTlN/0.5/update/6/1/Windows/0.5.28_U1mgxrslUitdn3hb/files";//CBT 2
|
||||||
public static int MAX_TEAMS_NUMBER = 5; //Not used yet
|
public static int MAX_TEAMS_NUMBER = 5; //Not used yet
|
||||||
public static (long, string) SERVER_UID = (99, "99"); //Not used yet, no friend chat in current Beta
|
public static (long, string) SERVER_UID = (99, "99"); //Not used yet, no friend chat in current Beta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* public class GameVersionConst
|
||||||
|
{
|
||||||
|
public string GAME_VERSION = "0.5.28";
|
||||||
|
public string GAME_VERSION_ASSET_URL = "https://beyond.hg-cdn.com/uXUuLlNbIYmMMTlN/0.5/update/6/1/Windows/0.5.28_U1mgxrslUitdn3hb/files";//CBT 2
|
||||||
|
public GameVersionConst() { }
|
||||||
|
|
||||||
|
public GameVersionConst(string version)
|
||||||
|
{
|
||||||
|
this.GAME_VERSION = version;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|||||||
272
Campofinale/Game/Inventory/InventoryList.cs
Normal file
272
Campofinale/Game/Inventory/InventoryList.cs
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
using Campofinale.Database;
|
||||||
|
using Campofinale.Packets.Sc;
|
||||||
|
|
||||||
|
namespace Campofinale.Game.Inventory
|
||||||
|
{
|
||||||
|
public class InventoryList
|
||||||
|
{
|
||||||
|
public List<Item> items = new();
|
||||||
|
public Dictionary<int, Item> bag = new();
|
||||||
|
public int maxBagSize = 30;
|
||||||
|
|
||||||
|
public Player player;
|
||||||
|
public InventoryList(Player player)
|
||||||
|
{
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
public enum FindType
|
||||||
|
{
|
||||||
|
Items,
|
||||||
|
FactoryDepots,
|
||||||
|
Bag
|
||||||
|
}
|
||||||
|
public void UpdateInventoryPacket()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public void UpdateBagInventoryPacket()
|
||||||
|
{
|
||||||
|
player.Send(new PacketScItemBagScopeSync(this.player,Resource.ItemValuableDepotType.Invalid));
|
||||||
|
|
||||||
|
}
|
||||||
|
private void AddToBagAvailableSlot(Item item)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < maxBagSize; i++)
|
||||||
|
{
|
||||||
|
if (!bag.ContainsKey(i))
|
||||||
|
{
|
||||||
|
bag.Add(i, item);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
///
|
||||||
|
///<summary>Add a item directly to the bag if there is enough space or increment current stack value</summary>
|
||||||
|
///
|
||||||
|
public bool AddToBag(Item item)
|
||||||
|
{
|
||||||
|
Item existOne = Find(i=>i.id == item.id && i.amount < item.GetItemTable().maxStackCount,FindType.Bag);
|
||||||
|
if (existOne != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(existOne.amount+item.amount > item.GetItemTable().maxStackCount)
|
||||||
|
{
|
||||||
|
int max = existOne.GetItemTable().maxStackCount;
|
||||||
|
int toAddInNewSlotAmount = existOne.amount + item.amount - max;
|
||||||
|
item.amount = toAddInNewSlotAmount;
|
||||||
|
if (SlotAvailableInBag())
|
||||||
|
{
|
||||||
|
existOne.amount = max;
|
||||||
|
AddToBagAvailableSlot(item);
|
||||||
|
UpdateBagInventoryPacket();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
existOne.amount += item.amount;
|
||||||
|
UpdateBagInventoryPacket();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(bag.Count < maxBagSize)
|
||||||
|
{
|
||||||
|
AddToBagAvailableSlot(item);
|
||||||
|
UpdateBagInventoryPacket();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public bool SlotAvailableInBag()
|
||||||
|
{
|
||||||
|
bool availableSlot = false;
|
||||||
|
for (int i = 0; i < maxBagSize; i++)
|
||||||
|
{
|
||||||
|
if (!bag.ContainsKey(i))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return availableSlot;
|
||||||
|
}
|
||||||
|
public Item FindInAll(Predicate<Item> match)
|
||||||
|
{
|
||||||
|
var item = items.Find(match);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
var itemB = bag.Values.ToList().Find(match);
|
||||||
|
if (itemB != null)
|
||||||
|
{
|
||||||
|
return itemB;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public Item Find(Predicate<Item> match,FindType findType = FindType.Items)
|
||||||
|
{
|
||||||
|
switch (findType)
|
||||||
|
{
|
||||||
|
case FindType.Items:
|
||||||
|
var item = items.Find(match);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case FindType.FactoryDepots:
|
||||||
|
//TODO
|
||||||
|
break;
|
||||||
|
case FindType.Bag:
|
||||||
|
var itemB = bag.Values.ToList().Find(match);
|
||||||
|
if (itemB != null)
|
||||||
|
{
|
||||||
|
return itemB;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public List<Item> FindAll(Predicate<Item> match, FindType findType = FindType.Items)
|
||||||
|
{
|
||||||
|
switch (findType)
|
||||||
|
{
|
||||||
|
case FindType.Items:
|
||||||
|
return items.FindAll(match);
|
||||||
|
break;
|
||||||
|
case FindType.FactoryDepots:
|
||||||
|
//TODO
|
||||||
|
break;
|
||||||
|
case FindType.Bag:
|
||||||
|
var itemB = bag.Values.ToList().FindAll(match);
|
||||||
|
if (itemB != null)
|
||||||
|
{
|
||||||
|
return itemB;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
///<summary>
|
||||||
|
///Add an item to the inventory (or increment it's amount if it's not an instance type, else add a new one or add to bag if it's a Factory item
|
||||||
|
///</summary>
|
||||||
|
public Item Add(Item item)
|
||||||
|
{
|
||||||
|
if (item.StorageSpace() == Resource.ItemStorageSpace.BagAndFactoryDepot)
|
||||||
|
{
|
||||||
|
AddToBag(item);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (item.InstanceType())
|
||||||
|
{
|
||||||
|
items.Add(item);
|
||||||
|
DatabaseManager.db.UpsertItem(item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Item exist=Find(i=>i.id==item.id);
|
||||||
|
if (exist != null)
|
||||||
|
{
|
||||||
|
exist.amount += item.amount;
|
||||||
|
DatabaseManager.db.UpsertItem(exist);
|
||||||
|
return exist;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
items.Add(item);
|
||||||
|
DatabaseManager.db.UpsertItem(item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get the item amount from all depots
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public int GetItemAmount(string id)
|
||||||
|
{
|
||||||
|
int amt = 0;
|
||||||
|
Item item=Find(i=>i.id==id);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
amt += item.amount;
|
||||||
|
}
|
||||||
|
List<Item> bagItems = FindAll(i=>i.id==id,FindType.Bag);
|
||||||
|
foreach (Item bagItem in bagItems)
|
||||||
|
{
|
||||||
|
amt += bagItem.amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return amt;
|
||||||
|
}
|
||||||
|
public void Remove(Item item)
|
||||||
|
{
|
||||||
|
if (items.Remove(item))
|
||||||
|
{
|
||||||
|
this.player.Send(new PacketScItemBagScopeModify(this.player, item));
|
||||||
|
DatabaseManager.db.DeleteItem(item);
|
||||||
|
}
|
||||||
|
else if (RemoveFromBag(item))
|
||||||
|
{
|
||||||
|
UpdateBagInventoryPacket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool RemoveFromBag(Item item)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < maxBagSize; i++)
|
||||||
|
{
|
||||||
|
Item bagItem = null;
|
||||||
|
if (bag.ContainsKey(i))
|
||||||
|
{
|
||||||
|
bagItem = bag[i];
|
||||||
|
if (bagItem.guid == item.guid)
|
||||||
|
{
|
||||||
|
bag.Remove(i);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Move item from bag grid to another position
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fromGrid"></param>
|
||||||
|
/// <param name="toGrid"></param>
|
||||||
|
public void MoveBagItem(int fromGrid, int toGrid)
|
||||||
|
{
|
||||||
|
Item item1 = bag[fromGrid];
|
||||||
|
Item item2 = null;
|
||||||
|
if (bag.ContainsKey(toGrid))
|
||||||
|
{
|
||||||
|
item2 = bag[toGrid];
|
||||||
|
}
|
||||||
|
bag[toGrid] = item1;
|
||||||
|
if (item2 != null)
|
||||||
|
{
|
||||||
|
bag[fromGrid] = item2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bag.Remove(fromGrid);
|
||||||
|
}
|
||||||
|
UpdateBagInventoryPacket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,13 +1,6 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Resource;
|
|
||||||
using Google.Protobuf.Collections;
|
using Google.Protobuf.Collections;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Game.Inventory
|
namespace Campofinale.Game.Inventory
|
||||||
@ -15,7 +8,7 @@ namespace Campofinale.Game.Inventory
|
|||||||
public class InventoryManager
|
public class InventoryManager
|
||||||
{
|
{
|
||||||
public Player owner;
|
public Player owner;
|
||||||
public List<Item> items= new List<Item>();
|
public InventoryList items;
|
||||||
|
|
||||||
public int item_diamond_amt
|
public int item_diamond_amt
|
||||||
{
|
{
|
||||||
@ -36,12 +29,12 @@ namespace Campofinale.Game.Inventory
|
|||||||
|
|
||||||
public Item GetItemById(string id)
|
public Item GetItemById(string id)
|
||||||
{
|
{
|
||||||
return items.Find(i => i.id == id);
|
return items.FindInAll(i => i.id == id);
|
||||||
}
|
}
|
||||||
public InventoryManager(Player o) {
|
public InventoryManager(Player o) {
|
||||||
|
|
||||||
owner = o;
|
owner = o;
|
||||||
|
items=new(o);
|
||||||
}
|
}
|
||||||
public void AddRewards(string rewardTemplateId, Vector3f pos, int sourceType=1)
|
public void AddRewards(string rewardTemplateId, Vector3f pos, int sourceType=1)
|
||||||
{
|
{
|
||||||
@ -110,46 +103,25 @@ namespace Campofinale.Game.Inventory
|
|||||||
}
|
}
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
foreach (Item item in items)
|
foreach (Item item in items.items)
|
||||||
{
|
{
|
||||||
DatabaseManager.db.UpsertItem(item);
|
DatabaseManager.db.UpsertItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
items = DatabaseManager.db.LoadInventoryItems(owner.roleId);
|
items.items = DatabaseManager.db.LoadInventoryItems(owner.roleId);
|
||||||
}
|
}
|
||||||
public Item AddItem(string id, int amt)
|
public Item AddItem(string id, int amt, bool notify=false)
|
||||||
{
|
{
|
||||||
Item it = new()
|
|
||||||
{
|
|
||||||
id = id,
|
|
||||||
};
|
|
||||||
if(!it.InstanceType())
|
|
||||||
{
|
|
||||||
|
|
||||||
Item item = items.Find(i=>i.id == id);
|
|
||||||
if (item != null)
|
|
||||||
{
|
|
||||||
// Logger.Print(id + ": " + amt+" added to existing");
|
|
||||||
item.amount += amt;
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Logger.Print(id + ": " + amt + " added to new");
|
|
||||||
item = new Item(owner.roleId, id, amt);
|
|
||||||
items.Add(item);
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//Logger.Print(id + ": " + amt + " added to new as instance");
|
|
||||||
Item item = new Item(owner.roleId, id, amt);
|
Item item = new Item(owner.roleId, id, amt);
|
||||||
items.Add(item);
|
|
||||||
return item;
|
Item itemNew = items.Add(item);
|
||||||
|
if (notify && itemNew != null)
|
||||||
|
{
|
||||||
|
this.owner.Send(new PacketScItemBagScopeModify(this.owner, itemNew));
|
||||||
}
|
}
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
public void RemoveItem(Item item,int amt)
|
public void RemoveItem(Item item,int amt)
|
||||||
{
|
{
|
||||||
@ -157,9 +129,46 @@ namespace Campofinale.Game.Inventory
|
|||||||
if(item.amount <= 0)
|
if(item.amount <= 0)
|
||||||
{
|
{
|
||||||
items.Remove(item);
|
items.Remove(item);
|
||||||
DatabaseManager.db.DeleteItem(item);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
this.owner.Send(new PacketScItemBagScopeModify(this.owner, item));
|
this.owner.Send(new PacketScItemBagScopeModify(this.owner, item));
|
||||||
|
items.UpdateBagInventoryPacket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ConsumeItem(string id, int amt)
|
||||||
|
{
|
||||||
|
Item item=items.FindInAll(i=>i.id== id);
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
if(item.amount >= amt)
|
||||||
|
{
|
||||||
|
item.amount -= amt;
|
||||||
|
|
||||||
|
if(item.amount < 1)
|
||||||
|
{
|
||||||
|
items.Remove(item);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.owner.Send(new PacketScItemBagScopeModify(this.owner, item));
|
||||||
|
items.UpdateBagInventoryPacket();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int toConsume = amt - item.amount;
|
||||||
|
item.amount = 0;
|
||||||
|
items.Remove(item);
|
||||||
|
return ConsumeItem(id, toConsume);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public bool ConsumeItems(MapField<string, ulong> costItemId2Count)
|
public bool ConsumeItems(MapField<string, ulong> costItemId2Count)
|
||||||
{
|
{
|
||||||
@ -179,16 +188,8 @@ namespace Campofinale.Game.Inventory
|
|||||||
bool found = true;
|
bool found = true;
|
||||||
foreach (ItemInfo item in items)
|
foreach (ItemInfo item in items)
|
||||||
{
|
{
|
||||||
Item i= GetItemById(item.ResId);
|
int amount = this.items.GetItemAmount(item.ResId);
|
||||||
if (i != null)
|
if(amount < item.ResCount)
|
||||||
{
|
|
||||||
if(i.amount < item.ResCount)
|
|
||||||
{
|
|
||||||
found = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
found = false;
|
found = false;
|
||||||
break;
|
break;
|
||||||
@ -196,14 +197,7 @@ namespace Campofinale.Game.Inventory
|
|||||||
}
|
}
|
||||||
foreach (ItemInfo item in items)
|
foreach (ItemInfo item in items)
|
||||||
{
|
{
|
||||||
Item i = GetItemById(item.ResId);
|
ConsumeItem(item.ResId, item.ResCount);
|
||||||
if (i != null)
|
|
||||||
{
|
|
||||||
if (i.amount >= item.ResCount)
|
|
||||||
{
|
|
||||||
RemoveItem(i,item.ResCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
@ -211,13 +205,37 @@ namespace Campofinale.Game.Inventory
|
|||||||
public Dictionary<uint, int> GetInventoryChapter(string chapterId)
|
public Dictionary<uint, int> GetInventoryChapter(string chapterId)
|
||||||
{
|
{
|
||||||
Dictionary<uint, int> dir= new Dictionary<uint, int>();
|
Dictionary<uint, int> dir= new Dictionary<uint, int>();
|
||||||
List<Item> citems = items.FindAll(i=>!i.InstanceType());
|
/*List<Item> citems = items.FindAll(i=>!i.InstanceType());
|
||||||
foreach (Item item in citems)
|
foreach (Item item in citems)
|
||||||
{
|
{
|
||||||
dir.Add((uint)ResourceManager.strIdNumTable.item_id.dic[item.id], item.amount);
|
dir.Add((uint)ResourceManager.strIdNumTable.item_id.dic[item.id], item.amount);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DropItemsBag(CsItemBagAbandonInBag req)
|
||||||
|
{
|
||||||
|
if(req.TargetObjectId == 0)
|
||||||
|
{
|
||||||
|
foreach (var i in req.GridCut)
|
||||||
|
{
|
||||||
|
Item item = items.bag[i.Key];
|
||||||
|
item.amount -= i.Value;
|
||||||
|
if(item.amount <= 0)
|
||||||
|
{
|
||||||
|
items.bag.Remove(i.Key);
|
||||||
|
}
|
||||||
|
owner.sceneManager.CreateDrop(owner.position, new RewardTable.ItemBundle()
|
||||||
|
{
|
||||||
|
count=i.Value,
|
||||||
|
id=item.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
items.UpdateBagInventoryPacket();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,10 @@ namespace Campofinale.Game.Inventory
|
|||||||
this.level = level;
|
this.level = level;
|
||||||
guid = GetOwner().random.Next();
|
guid = GetOwner().random.Next();
|
||||||
}
|
}
|
||||||
|
public ItemStorageSpace StorageSpace()
|
||||||
|
{
|
||||||
|
return ResourceManager.itemTypeTable[GetItemTable().type].storageSpace;
|
||||||
|
}
|
||||||
public ulong GetDefaultLevel()
|
public ulong GetDefaultLevel()
|
||||||
{
|
{
|
||||||
switch (ItemType)
|
switch (ItemType)
|
||||||
@ -68,10 +72,15 @@ namespace Campofinale.Game.Inventory
|
|||||||
}
|
}
|
||||||
public ItemValuableDepotType ItemType
|
public ItemValuableDepotType ItemType
|
||||||
{
|
{
|
||||||
get{
|
get
|
||||||
|
{
|
||||||
return ResourceManager.GetItemTable(id).valuableTabType;
|
return ResourceManager.GetItemTable(id).valuableTabType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public ItemTable GetItemTable()
|
||||||
|
{
|
||||||
|
return ResourceManager.GetItemTable(id);
|
||||||
|
}
|
||||||
public virtual ScdItemGrid ToProto()
|
public virtual ScdItemGrid ToProto()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
using MongoDB.Bson.Serialization.IdGenerators;
|
||||||
|
|
||||||
namespace Campofinale.Game
|
namespace Campofinale.Game
|
||||||
|
|||||||
252
Campofinale/Game/MissionSys/MissionSystem.cs
Normal file
252
Campofinale/Game/MissionSys/MissionSystem.cs
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
using Campofinale.Database;
|
||||||
|
using Campofinale.Protocol;
|
||||||
|
using Campofinale.Resource;
|
||||||
|
using Campofinale.Resource.Table;
|
||||||
|
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||||
|
|
||||||
|
namespace Campofinale.Game.MissionSys
|
||||||
|
{
|
||||||
|
public class MissionSystem
|
||||||
|
{
|
||||||
|
public Player owner;
|
||||||
|
public List<GameMission> missions=new();
|
||||||
|
public List<GameQuest> quests=new();
|
||||||
|
public string curMission = "e0m0";
|
||||||
|
|
||||||
|
public MissionSystem(Player o)
|
||||||
|
{
|
||||||
|
owner = o;
|
||||||
|
}
|
||||||
|
public ScSyncAllMission ToProto()
|
||||||
|
{
|
||||||
|
ScSyncAllMission sync = new ScSyncAllMission();
|
||||||
|
sync.TrackMissionId = curMission;
|
||||||
|
missions.ForEach(m =>
|
||||||
|
{
|
||||||
|
sync.Missions.Add(m.missionId, new Mission()
|
||||||
|
{
|
||||||
|
MissionId = m.missionId,
|
||||||
|
MissionState = (int)m.state,
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
quests.ForEach(q =>
|
||||||
|
{
|
||||||
|
Quest quest=new Quest()
|
||||||
|
{
|
||||||
|
QuestId = q.questId,
|
||||||
|
QuestState = (int)q.state,
|
||||||
|
|
||||||
|
};
|
||||||
|
var data = GetQuestData(q.questId);
|
||||||
|
data.objectiveList.ForEach(o =>
|
||||||
|
{
|
||||||
|
quest.QuestObjectives.Add(new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId = o.condition.uniqueId,
|
||||||
|
Values =
|
||||||
|
{
|
||||||
|
{o.condition.uniqueId,0 }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
sync.CurQuests.Add(q.questId, quest);
|
||||||
|
|
||||||
|
});
|
||||||
|
return sync;
|
||||||
|
}
|
||||||
|
public MissionDataTable.QuestInfo GetQuestData(string id)
|
||||||
|
{
|
||||||
|
MissionDataTable.QuestInfo quest = null;
|
||||||
|
foreach(MissionDataTable m in ResourceManager.missionDataTable)
|
||||||
|
{
|
||||||
|
if(m.questDic.TryGetValue(id, out quest))
|
||||||
|
{
|
||||||
|
return quest;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return quest;
|
||||||
|
}
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public void Load()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (ResourceManager.missionDataTable.Count < 1)
|
||||||
|
{
|
||||||
|
//Disabling if no missions
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//TODO Saving and first initialization
|
||||||
|
AddMission("e0m0",MissionState.Processing);
|
||||||
|
}
|
||||||
|
public void AddMission(string id,MissionState state = MissionState.Available, bool notify=false)
|
||||||
|
{
|
||||||
|
MissionDataTable data = ResourceManager.missionDataTable.Find(m=>m.missionId == id);
|
||||||
|
if (data != null)
|
||||||
|
{
|
||||||
|
missions.Add(new GameMission(id, state));
|
||||||
|
if (notify)
|
||||||
|
{
|
||||||
|
ScMissionStateUpdate s = new()
|
||||||
|
{
|
||||||
|
MissionId = data.missionId,
|
||||||
|
MissionState = (int)state,
|
||||||
|
SucceedId=-1,
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
foreach (var q in data.questDic.Values)
|
||||||
|
{
|
||||||
|
AddQuest(q, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public GameQuest GetQuestById(string id)
|
||||||
|
{
|
||||||
|
return quests.Find(q => q.questId == id);
|
||||||
|
}
|
||||||
|
public void AddQuest(MissionDataTable.QuestInfo data,bool notify=false)
|
||||||
|
{
|
||||||
|
GameQuest quest = GetQuestById(data.questId);
|
||||||
|
if (quest == null)
|
||||||
|
{
|
||||||
|
quest = new GameQuest(data.questId);
|
||||||
|
quest.state = QuestState.Available;
|
||||||
|
if (notify)
|
||||||
|
{
|
||||||
|
ScQuestObjectivesUpdate upd = new()
|
||||||
|
{
|
||||||
|
QuestId = data.questId,
|
||||||
|
|
||||||
|
};
|
||||||
|
data.objectiveList.ForEach(o =>
|
||||||
|
{
|
||||||
|
upd.QuestObjectives.Add(new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId=o.condition.uniqueId,
|
||||||
|
Values =
|
||||||
|
{
|
||||||
|
{o.condition.uniqueId,0 }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
ScQuestStateUpdate update = new()
|
||||||
|
{
|
||||||
|
QuestId = quest.questId,
|
||||||
|
QuestState = (int)quest.state,
|
||||||
|
RoleBaseInfo = owner.GetRoleBaseInfo()
|
||||||
|
};
|
||||||
|
owner.Send(ScMsgId.ScQuestStateUpdate, update);
|
||||||
|
owner.Send(ScMsgId.ScQuestObjectivesUpdate, upd);
|
||||||
|
}
|
||||||
|
|
||||||
|
quests.Add(quest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void ProcessQuest(string id)
|
||||||
|
{
|
||||||
|
GameQuest quest = GetQuestById(id);
|
||||||
|
if (quest != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
quest.state = QuestState.Processing;
|
||||||
|
var data = GetQuestData(id);
|
||||||
|
ScQuestStateUpdate update = new()
|
||||||
|
{
|
||||||
|
QuestId = quest.questId,
|
||||||
|
QuestState = (int)quest.state,
|
||||||
|
RoleBaseInfo = owner.GetRoleBaseInfo()
|
||||||
|
};
|
||||||
|
ScQuestObjectivesUpdate upd = new()
|
||||||
|
{
|
||||||
|
QuestId = data.questId,
|
||||||
|
|
||||||
|
};
|
||||||
|
data.objectiveList.ForEach(o =>
|
||||||
|
{
|
||||||
|
upd.QuestObjectives.Add(new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId = o.condition.uniqueId,
|
||||||
|
Values =
|
||||||
|
{
|
||||||
|
{o.condition.uniqueId,0 }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
owner.Send(ScMsgId.ScQuestObjectivesUpdate, upd);
|
||||||
|
owner.Send(ScMsgId.ScQuestStateUpdate, update);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void CompleteQuest(string id)
|
||||||
|
{
|
||||||
|
GameQuest quest = GetQuestById(id);
|
||||||
|
if (quest != null)
|
||||||
|
{
|
||||||
|
quest.state = QuestState.Completed;
|
||||||
|
var data = GetQuestData(id);
|
||||||
|
ScQuestStateUpdate update = new()
|
||||||
|
{
|
||||||
|
QuestId = quest.questId,
|
||||||
|
QuestState=(int)quest.state,
|
||||||
|
};
|
||||||
|
ScQuestObjectivesUpdate upd = new()
|
||||||
|
{
|
||||||
|
QuestId = data.questId,
|
||||||
|
|
||||||
|
};
|
||||||
|
data.objectiveList.ForEach(o =>
|
||||||
|
{
|
||||||
|
upd.QuestObjectives.Add(new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId = o.condition.uniqueId,
|
||||||
|
IsComplete=true,
|
||||||
|
Values =
|
||||||
|
{
|
||||||
|
{o.condition.uniqueId,1 }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
owner.Send(ScMsgId.ScQuestObjectivesUpdate, upd);
|
||||||
|
owner.Send(ScMsgId.ScQuestStateUpdate, update);
|
||||||
|
quests.Remove(quest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class GameQuest
|
||||||
|
{
|
||||||
|
public string questId;
|
||||||
|
public QuestState state;
|
||||||
|
public GameQuest()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public GameQuest(string id, QuestState state = QuestState.Available)
|
||||||
|
{
|
||||||
|
questId = id;
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class GameMission
|
||||||
|
{
|
||||||
|
public string missionId;
|
||||||
|
public MissionState state;
|
||||||
|
|
||||||
|
public GameMission()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public GameMission(string id, MissionState state = MissionState.Available)
|
||||||
|
{
|
||||||
|
missionId = id;
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,14 +3,7 @@ using Campofinale.Game.Inventory;
|
|||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using SharpCompress.Common;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
||||||
|
|
||||||
@ -308,7 +301,7 @@ namespace Campofinale.Game
|
|||||||
|
|
||||||
lv_scene.levelData.interactives.ForEach(en =>
|
lv_scene.levelData.interactives.ForEach(en =>
|
||||||
{
|
{
|
||||||
if (en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId))
|
if (GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId != 87)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -325,7 +318,7 @@ namespace Campofinale.Game
|
|||||||
});
|
});
|
||||||
lv_scene.levelData.factoryRegions.ForEach(en =>
|
lv_scene.levelData.factoryRegions.ForEach(en =>
|
||||||
{
|
{
|
||||||
if (en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId))
|
if (GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId!=87)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -336,11 +329,13 @@ namespace Campofinale.Game
|
|||||||
levelLogicId = en.levelLogicId,
|
levelLogicId = en.levelLogicId,
|
||||||
type = en.entityType,
|
type = en.entityType,
|
||||||
};
|
};
|
||||||
|
|
||||||
entities.Add(entity);
|
entities.Add(entity);
|
||||||
});
|
});
|
||||||
lv_scene.levelData.enemies.ForEach(en =>
|
lv_scene.levelData.enemies.ForEach(en =>
|
||||||
{
|
{
|
||||||
if(en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId)) return;
|
if(GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId != 87) return;
|
||||||
|
if (en.defaultHide) return;
|
||||||
EntityMonster entity = new(en.entityDataIdKey,en.level,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
|
EntityMonster entity = new(en.entityDataIdKey,en.level,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
|
||||||
{
|
{
|
||||||
type=en.entityType,
|
type=en.entityType,
|
||||||
@ -362,36 +357,68 @@ namespace Campofinale.Game
|
|||||||
};
|
};
|
||||||
entities.Add(entity);
|
entities.Add(entity);
|
||||||
});
|
});
|
||||||
/*GetEntityExcludingChar().ForEach(e =>
|
GetEntityExcludingChar().ForEach(e =>
|
||||||
{
|
{
|
||||||
GetOwner().Send(new PacketScObjectEnterView(GetOwner(),new List<Entity>() { e}));
|
// GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
||||||
});*/
|
|
||||||
|
});
|
||||||
UpdateShowEntities();
|
UpdateShowEntities();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
public void SpawnEntity(Entity en,bool spawnedCheck=true)
|
||||||
|
{
|
||||||
|
en.spawned = true;
|
||||||
|
List<Entity> toSpawn = new List<Entity>();
|
||||||
|
if(en.belongLevelScriptId != 0)
|
||||||
|
if (spawnedCheck)
|
||||||
|
{
|
||||||
|
foreach (Entity e in GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == en.belongLevelScriptId && e.spawned == false))
|
||||||
|
{
|
||||||
|
e.spawned = true;
|
||||||
|
toSpawn.Add(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (Entity e in GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == en.belongLevelScriptId && e != en))
|
||||||
|
{
|
||||||
|
e.spawned = true;
|
||||||
|
toSpawn.Add(e);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toSpawn.Add(en);
|
||||||
|
toSpawn.ForEach(e =>
|
||||||
|
{
|
||||||
|
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
public void UpdateShowEntities()
|
public void UpdateShowEntities()
|
||||||
{
|
{
|
||||||
foreach(Entity en in GetEntityExcludingChar())
|
foreach(Entity en in GetEntityExcludingChar())
|
||||||
{
|
{
|
||||||
if (en.Position.Distance(GetOwner().position) < 200)
|
if (en.Position.Distance(GetOwner().position) < 100)
|
||||||
{
|
{
|
||||||
if (!en.spawned)
|
if (!en.spawned)
|
||||||
{
|
{
|
||||||
en.spawned = true;
|
SpawnEntity(en);
|
||||||
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { en }));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (en.spawned)
|
|
||||||
|
/*if (en.spawned)
|
||||||
{
|
{
|
||||||
|
|
||||||
en.spawned = false;
|
en.spawned = false;
|
||||||
GetOwner().Send(new PacketScObjectLeaveView(GetOwner(), new List<ulong>() { en.guid }));
|
GetOwner().Send(new PacketScObjectLeaveView(GetOwner(), new List<ulong>() { en.guid }));
|
||||||
en.Position=en.BornPos;
|
en.Position=en.BornPos;
|
||||||
en.Rotation = en.Rotation;
|
en.Rotation = en.Rotation;
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -400,5 +427,22 @@ namespace Campofinale.Game
|
|||||||
{
|
{
|
||||||
return Server.clients.Find(c => c.roleId == ownerId);
|
return Server.clients.Find(c => c.roleId == ownerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SpawnEnemy(ulong v)
|
||||||
|
{
|
||||||
|
LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId);
|
||||||
|
LevelEnemyData en = lv_scene.levelData.enemies.Find(e=>e.levelLogicId == v);
|
||||||
|
if(en!=null)
|
||||||
|
{
|
||||||
|
EntityMonster entity = new(en.entityDataIdKey, en.level, ownerId, en.position, en.rotation, sceneNumId, en.levelLogicId)
|
||||||
|
{
|
||||||
|
type = en.entityType,
|
||||||
|
belongLevelScriptId = en.belongLevelScriptId,
|
||||||
|
levelLogicId = en.levelLogicId
|
||||||
|
};
|
||||||
|
entities.Add(entity);
|
||||||
|
SpawnEntity(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
using MongoDB.Bson.Serialization.IdGenerators;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
|
|
||||||
@ -46,6 +40,7 @@ namespace Campofinale.Game.Spaceship
|
|||||||
IsWorking = isWorking,
|
IsWorking = isWorking,
|
||||||
PhysicalStrength = physicalStrength,
|
PhysicalStrength = physicalStrength,
|
||||||
StationedRoomId = stationedRoomId,
|
StationedRoomId = stationedRoomId,
|
||||||
|
|
||||||
Skills =
|
Skills =
|
||||||
{
|
{
|
||||||
new ScdSpaceshipCharSkill()
|
new ScdSpaceshipCharSkill()
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Game.Inventory;
|
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
|
||||||
using MongoDB.Bson;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
|
using Campofinale.Resource.Table;
|
||||||
|
|
||||||
namespace Campofinale.Game.Spaceship
|
namespace Campofinale.Game.Spaceship
|
||||||
{
|
{
|
||||||
@ -84,6 +75,39 @@ namespace Campofinale.Game.Spaceship
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GiftToChar(CsSpaceshipPresentGiftToChar req)
|
||||||
|
{
|
||||||
|
SpaceshipChar chara = GetChar(req.CharId);
|
||||||
|
if (chara != null)
|
||||||
|
{
|
||||||
|
foreach (var item in req.Gifts)
|
||||||
|
{
|
||||||
|
GiftItemTable giftItem = ResourceManager.giftItemTable[item.Id];
|
||||||
|
chara.favorability += giftItem.favorablePoint * item.Count;
|
||||||
|
//TODO item consume
|
||||||
|
}
|
||||||
|
ScSpaceshipPresentGiftToChar confirm = new()
|
||||||
|
{
|
||||||
|
CurFav = chara.favorability,
|
||||||
|
CharId = chara.id,
|
||||||
|
RecvGiftCnt = req.Gifts.Count,
|
||||||
|
};
|
||||||
|
//TODO packet class
|
||||||
|
/*ScSpaceshipCharFavorabilityChange change = new()
|
||||||
|
{
|
||||||
|
ChangeInfos =
|
||||||
|
{
|
||||||
|
new SpaceshipCharFavorabilityChangeInfo()
|
||||||
|
{
|
||||||
|
CharId = chara.id,
|
||||||
|
CurFav=chara.favorability,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};*/
|
||||||
|
owner.Send(Protocol.ScMsgId.ScSpaceshipPresentGiftToChar, confirm);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,5 @@
|
|||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using MongoDB.Bson.Serialization.IdGenerators;
|
using MongoDB.Bson.Serialization.IdGenerators;
|
||||||
|
|||||||
@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace Campofinale.Game
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Campofinale.Game
|
|
||||||
{
|
{
|
||||||
public class Team
|
public class Team
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,18 +1,5 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Game;
|
||||||
using Campofinale.Game;
|
|
||||||
using Campofinale.Game.Gacha;
|
|
||||||
using Google.Protobuf.WellKnownTypes;
|
|
||||||
using HttpServerLite;
|
using HttpServerLite;
|
||||||
using MongoDB.Bson.IO;
|
|
||||||
using SQLite;
|
|
||||||
using SQLiteNetExtensions.Extensions;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Channels;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Gacha.GachaManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Http
|
namespace Campofinale.Http
|
||||||
{
|
{
|
||||||
@ -65,7 +52,17 @@ namespace Campofinale.Http
|
|||||||
await data(ctx);
|
await data(ctx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/serverStatus")]
|
||||||
|
public static async Task serverStatus(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{\"maxPlayers\":" + Server.config.serverOptions.maxPlayers + ", \"players\":" + Server.clients.Count + ", \"status\":\"Online\", \"gameVersion\": \"" + GameConstants.GAME_VERSION + "\", \"serverVersion\": \"" + Server.ServerVersion + "\"}";
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.POST, "/u8/pay/getAllProductList")]
|
[StaticRoute(HttpServerLite.HttpMethod.POST, "/u8/pay/getAllProductList")]
|
||||||
public static async Task getAllProductList(HttpContext ctx)
|
public static async Task getAllProductList(HttpContext ctx)
|
||||||
{
|
{
|
||||||
@ -77,6 +74,7 @@ namespace Campofinale.Http
|
|||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
await ctx.Response.SendAsync(resp);
|
||||||
}
|
}
|
||||||
|
//WINDOWS
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/game/get_latest")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/game/get_latest")]
|
||||||
public static async Task get_latest(HttpContext ctx)
|
public static async Task get_latest(HttpContext ctx)
|
||||||
{
|
{
|
||||||
@ -89,6 +87,18 @@ namespace Campofinale.Http
|
|||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
await ctx.Response.SendAsync(resp);
|
||||||
}
|
}
|
||||||
|
//ANDROID
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/game/get_latest_game_info")]
|
||||||
|
public static async Task get_latest_game_info(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{\"version\":\""+ GameConstants.GAME_VERSION_ANDROID + "\",\"action\":0,\"update_type\":0,\"update_info\":{\"package\":null,\"patch\":null,\"custom_info\":\"\",\"source_package\":null},\"client_version\":\"\"}";
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/default/network_config")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/default/network_config")]
|
||||||
public static async Task network_config(HttpContext ctx)
|
public static async Task network_config(HttpContext ctx)
|
||||||
{
|
{
|
||||||
@ -100,21 +110,11 @@ namespace Campofinale.Http
|
|||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
await ctx.Response.SendAsync(resp);
|
||||||
}
|
}
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/default/network_config")]
|
|
||||||
public static async Task network_config_cn(HttpContext ctx)
|
|
||||||
{
|
|
||||||
string resp = "{\"asset\":\"https://beyond.hg-cdn.com/asset/\",\"hgage\":\"\",\"sdkenv\":\"2\",\"u8root\":\"https://u8.gryphline.com/u8\",\"appcode\":4,\"channel\":\"prod\",\"netlogid\":\"GFz8RRMDN45w\",\"gameclose\":false,\"netlogurl\":\"http://native-log-collect.gryphline.com:32000/\",\"accounturl\":\"https://binding-api-account-prod.gryphline.com\",\"launcherurl\":\"https://launcher.gryphline.com\"}";
|
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
|
||||||
ctx.Response.ContentLength = resp.Length;
|
|
||||||
ctx.Response.ContentType = "application/json";
|
|
||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
|
||||||
}
|
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/Windows/game_config")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/Windows/game_config")]
|
||||||
public static async Task game_config(HttpContext ctx)
|
public static async Task game_config(HttpContext ctx)
|
||||||
{
|
{
|
||||||
string resp = "{\"mockLogin\": false, \"selectSrv\": false, \"enableHotUpdate\": false, \"enableEntitySpawnLog\": false}";
|
string resp = "{\"mockLogin\": false, \"selectSrv\": false, \"enableHotUpdate\": false, \"enableEntitySpawnLog\": false, \"enableCBT2AccessForbidden\": false}";
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
ctx.Response.StatusCode = 200;
|
||||||
ctx.Response.ContentLength = resp.Length;
|
ctx.Response.ContentLength = resp.Length;
|
||||||
@ -122,17 +122,7 @@ namespace Campofinale.Http
|
|||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
await ctx.Response.SendAsync(resp);
|
||||||
}
|
}
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Windows/game_config")]
|
|
||||||
public static async Task game_config_cn(HttpContext ctx)
|
|
||||||
{
|
|
||||||
string resp = "{\"mockLogin\": false, \"selectSrv\": false, \"enableHotUpdate\": false, \"enableEntitySpawnLog\": false}";
|
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
|
||||||
ctx.Response.ContentLength = resp.Length;
|
|
||||||
ctx.Response.ContentType = "application/json";
|
|
||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
|
||||||
}
|
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/gameBulletin/version")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/gameBulletin/version")]
|
||||||
public static async Task Version(HttpContext ctx)
|
public static async Task Version(HttpContext ctx)
|
||||||
{
|
{
|
||||||
@ -151,8 +141,27 @@ namespace Campofinale.Http
|
|||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/app/v1/config")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/app/v1/config")]
|
||||||
public static async Task config_check(HttpContext ctx)
|
public static async Task config_check(HttpContext ctx)
|
||||||
{
|
{
|
||||||
|
string appCode = ctx.Request.Query.Elements["appCode"];
|
||||||
|
|
||||||
|
|
||||||
string resp = "{\"data\":{\"agreementUrl\":{\"register\":\"https://user.gryphline.com/{language}/protocol/plain/terms_of_service\",\"privacy\":\"https://user.gryphline.com/{language}/protocol/plain/privacy_policy\",\"unbind\":\"https://user.gryphline.com/{language}/protocol/plain/endfield/privacy_policy\",\"account\":\"https://user.gryphline.com/{language}/protocol/plain/terms_of_service\",\"game\":\"https://user.gryphline.com/{language}/protocol/plain/endfield/privacy_policy\"},\"app\":{\"googleAndroidClientId\":\"\",\"googleIosClientId\":\"\",\"enableAutoLogin\":true,\"enablePayment\":true,\"enableGuestRegister\":false,\"needShowName\":true,\"displayName\":{\"en-us\":\"Arknights: Endfield\",\"ja-jp\":\"アークナイツ:エンドフィールド\",\"ko-kr\":\"명일방주:엔드필드\",\"zh-cn\":\"明日方舟:终末地\",\"zh-tw\":\"明日方舟:終末地\"},\"unbindAgreement\":[],\"unbindLimitedDays\":30,\"unbindCoolDownDays\":14,\"customerServiceUrl\":\"https://gryphline.helpshift.com/hc/{language}/4-arknights-endfield\",\"enableUnbindGrant\":false},\"customerServiceUrl\":\"https://gryphline.helpshift.com/hc/{language}/4-arknights-endfield\",\"thirdPartyRedirectUrl\":\"https://web-api.gryphline.com/callback/thirdPartyAuth.html\",\"scanUrl\":{\"login\":\"yj://scan_login\"},\"loginChannels\":[],\"userCenterUrl\":\"https://user.gryphline.com/pcSdk/userInfo?language={language}\"},\"msg\":\"OK\",\"status\":0,\"type\":\"A\"}";
|
string resp = "{\"data\":{\"agreementUrl\":{\"register\":\"https://user.gryphline.com/{language}/protocol/plain/terms_of_service\",\"privacy\":\"https://user.gryphline.com/{language}/protocol/plain/privacy_policy\",\"unbind\":\"https://user.gryphline.com/{language}/protocol/plain/endfield/privacy_policy\",\"account\":\"https://user.gryphline.com/{language}/protocol/plain/terms_of_service\",\"game\":\"https://user.gryphline.com/{language}/protocol/plain/endfield/privacy_policy\"},\"app\":{\"googleAndroidClientId\":\"\",\"googleIosClientId\":\"\",\"enableAutoLogin\":true,\"enablePayment\":true,\"enableGuestRegister\":false,\"needShowName\":true,\"displayName\":{\"en-us\":\"Arknights: Endfield\",\"ja-jp\":\"アークナイツ:エンドフィールド\",\"ko-kr\":\"명일방주:엔드필드\",\"zh-cn\":\"明日方舟:终末地\",\"zh-tw\":\"明日方舟:終末地\"},\"unbindAgreement\":[],\"unbindLimitedDays\":30,\"unbindCoolDownDays\":14,\"customerServiceUrl\":\"https://gryphline.helpshift.com/hc/{language}/4-arknights-endfield\",\"enableUnbindGrant\":false},\"customerServiceUrl\":\"https://gryphline.helpshift.com/hc/{language}/4-arknights-endfield\",\"thirdPartyRedirectUrl\":\"https://web-api.gryphline.com/callback/thirdPartyAuth.html\",\"scanUrl\":{\"login\":\"yj://scan_login\"},\"loginChannels\":[],\"userCenterUrl\":\"https://user.gryphline.com/pcSdk/userInfo?language={language}\"},\"msg\":\"OK\",\"status\":0,\"type\":\"A\"}";
|
||||||
|
|
||||||
|
if(appCode == "a65356244d22261b")
|
||||||
|
{
|
||||||
|
resp = "{ \"data\": { \"antiAddiction\": { \"minorPeriodEnd\": 21, \"minorPeriodStart\": 20 }, \"payment\": [ { \"key\": \"alipay\", \"recommend\": true }, { \"key\": \"wechat\", \"recommend\": false }, { \"key\": \"pcredit\", \"recommend\": false } ], \"customerServiceUrl\": \"https://chat.hypergryph.com/chat/h5/v2/index.html?sysnum=889ee281e3564ddf883942fe85764d44&channelid=2\", \"cancelDeactivateUrl\": \"https://user-stable.hypergryph.com/cancellation\", \"agreementUrl\": { \"game\": \"https://hg-protocol-static-web-stable.hypergryph.net/protocol/plain/ak/index\", \"unbind\": \"https://hg-protocol-static-web-stable.hypergryph.net/protocol/plain/ak/cancellation\", \"gameService\": \"https://hg-protocol-static-web-stable.hypergryph.net/protocol/plain/ak/service\", \"account\": \"https://user.hypergryph.com/protocol/plain/index\", \"privacy\": \"https://user.hypergryph.com/protocol/plain/privacy\", \"register\": \"https://user.hypergryph.com/protocol/plain/registration\", \"updateOverview\": \"https://user.hypergryph.com/protocol/plain/overview_of_changes\", \"childrenPrivacy\": \"https://user.hypergryph.com/protocol/plain/children_privacy\" }, \"app\": { \"enablePayment\": true, \"enableAutoLogin\": true, \"enableAuthenticate\": true, \"enableAntiAddiction\": true, \"enableUnbindGrant\": true, \"wechatAppId\": \"wxeea7cc50e03edb28\", \"alipayAppId\": \"2021004129658342\", \"oneLoginAppId\": \"496b284079be97612a46266a9fdbfbd7\", \"enablePaidApp\": false, \"appName\": \"明日方舟终末地\", \"appAmount\": 600, \"needShowName\": true, \"customerServiceUrl\": \"https://web-biz-platform-cs-center-stable.hypergryph.net/hg/?hg_token={hg_token}&source_from=sdk\", \"needAntiAddictionAlert\": true, \"enableScanLogin\": false, \"deviceCheckMode\": 0, \"enableGiftCode\": false }, \"scanUrl\": { \"login\": \"hypergryph://scan_login\" }, \"userCenterUrl\": \"https://user-center-account-stable.hypergryph.net/pcSdk/userInfo\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}";
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
//ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/general/v1/server_time")]
|
||||||
|
public static async Task server_time(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{\"data\":{\"serverTime\":1748021408,\"isHoliday\":true},\"msg\":\"OK\",\"status\":0,\"type\":\"A\"}";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
ctx.Response.StatusCode = 200;
|
||||||
@ -169,35 +178,8 @@ namespace Campofinale.Http
|
|||||||
public string password;
|
public string password;
|
||||||
}
|
}
|
||||||
|
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Windows/res_version")]
|
|
||||||
public static async Task cn_res_version(HttpContext ctx)
|
|
||||||
{
|
|
||||||
|
|
||||||
string resp = "{\"version\": \"2089329-32\", \"kickFlag\": true}";
|
|
||||||
|
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
|
||||||
//ctx.Response.ContentLength = resp.Length;
|
|
||||||
ctx.Response.ContentType = "application/json";
|
|
||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
|
||||||
}
|
|
||||||
|
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/default/server_config_China")]
|
|
||||||
public static async Task server_config_China(HttpContext ctx)
|
|
||||||
{
|
|
||||||
string requestBody = ctx.Request.DataAsString;
|
|
||||||
Console.WriteLine(requestBody);
|
|
||||||
string resp = "{\"addr\": \"" + Server.config.gameServer.accessAddress + "\", \"port\": " + Server.config.gameServer.accessPort + "}";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
|
||||||
|
|
||||||
ctx.Response.ContentType = "application/json";
|
|
||||||
|
|
||||||
await ctx.Response.SendAsync(resp);
|
|
||||||
}
|
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/default/server_config_EUAndUS")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/1003/prod-cbt/default/default/server_config_EUAndUS")]
|
||||||
public static async Task server_config_EUAndUS(HttpContext ctx)
|
public static async Task server_config_EUAndUS(HttpContext ctx)
|
||||||
{
|
{
|
||||||
|
|||||||
90
Campofinale/Http/DispatchCN.cs
Normal file
90
Campofinale/Http/DispatchCN.cs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
using HttpServerLite;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Campofinale.Http
|
||||||
|
{
|
||||||
|
internal class DispatchCN
|
||||||
|
{
|
||||||
|
//SERVER
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/default/server_config_China")]
|
||||||
|
public static async Task server_config_China(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string requestBody = ctx.Request.DataAsString;
|
||||||
|
Console.WriteLine(requestBody);
|
||||||
|
string resp = "{\"addr\": \"" + Server.config.gameServer.accessAddress + "\", \"port\": " + Server.config.gameServer.accessPort + "}";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
//DEFAULT
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/default/network_config")]
|
||||||
|
public static async Task network_config_cn(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{ \"asset\": \"https://beyond.hycdn.cn/asset/\", \"hgage\": \"https://web.hycdn.cn/endfield/protocol/cadpa-age.txt\", \"sdkenv\": \"2\", \"u8root\": \"https://as.hypergryph.com/u8\", \"appcode\": 4, \"channel\": \"prod\", \"netlogid\": \"56RqF5G2gU9j\", \"gameclose\": false, \"netlogurl\": \"http://native-log-collect.hypergryph.com:32000\", \"accounturl\": \"https://binding-api-account-prod.hypergryph.com\", \"launcherurl\": \"https://launcher.hypergryph.com\"}";
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
//WINDOWS
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Windows/res_version")]
|
||||||
|
public static async Task cn_res_version(HttpContext ctx)
|
||||||
|
{
|
||||||
|
|
||||||
|
string resp = "{\"version\": \"2089329-32\", \"kickFlag\": false}";
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
//ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Windows/game_config")]
|
||||||
|
public static async Task game_config_cn_windows(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{\"mockLogin\": false, \"selectSrv\": false, \"enableHotUpdate\": true, \"enableEntitySpawnLog\": false, \"enableCBT2AccessForbidden\": false}";
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
//ANDROID
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Android/res_version")]
|
||||||
|
public static async Task cn_android_res_version(HttpContext ctx)
|
||||||
|
{
|
||||||
|
|
||||||
|
string resp = "{\"version\": \"2377591-182\", \"kickFlag\": false}";
|
||||||
|
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
//ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/api/remote_config/get_remote_config/3/prod-cbt/default/Android/game_config")]
|
||||||
|
public static async Task game_config_cn_android(HttpContext ctx)
|
||||||
|
{
|
||||||
|
string resp = "{\"mockLogin\": false, \"selectSrv\": false, \"enableHotUpdate\": true, \"enableNpcOptimize\": false, \"enableEntitySpawnLog\": false, \"enableCBT2AccessForbidden\": false, \"enableMobileFullScreenWaterMark\": false}";
|
||||||
|
|
||||||
|
ctx.Response.StatusCode = 200;
|
||||||
|
ctx.Response.ContentLength = resp.Length;
|
||||||
|
ctx.Response.ContentType = "application/json";
|
||||||
|
|
||||||
|
await ctx.Response.SendAsync(resp);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +1,6 @@
|
|||||||
using Campofinale.Commands;
|
using Campofinale.Commands;
|
||||||
using Campofinale.Commands.Handlers;
|
|
||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using HttpServerLite;
|
using HttpServerLite;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
|
|
||||||
@ -30,7 +26,8 @@ namespace Campofinale.Http
|
|||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/pcSdk/console")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/pcSdk/console")]
|
||||||
public static async Task ConsoleResponce(HttpContext ctx)
|
public static async Task ConsoleResponce(HttpContext ctx)
|
||||||
{
|
{
|
||||||
string cmd = ctx.Request.Query.Elements["command"].Replace("+"," ");
|
string encodedCmd = Uri.UnescapeDataString(ctx.Request.Query.Elements["command"]);
|
||||||
|
string cmd = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCmd));
|
||||||
string token = ctx.Request.Query.Elements["token"];
|
string token = ctx.Request.Query.Elements["token"];
|
||||||
string message = "";
|
string message = "";
|
||||||
string[] split = cmd.Split(" ");
|
string[] split = cmd.Split(" ");
|
||||||
|
|||||||
@ -1,11 +1,5 @@
|
|||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Resource;
|
|
||||||
using HttpServerLite;
|
using HttpServerLite;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Campofinale.Game.Gacha.GachaManager;
|
using static Campofinale.Game.Gacha.GachaManager;
|
||||||
using static Campofinale.Http.Dispatch;
|
using static Campofinale.Http.Dispatch;
|
||||||
|
|
||||||
@ -79,7 +73,11 @@ namespace Campofinale.Http
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/batch_event")]
|
||||||
|
public static async Task batch_event(HttpContext ctx)
|
||||||
|
{
|
||||||
|
await ctx.Response.SendAsync("OK");
|
||||||
|
}
|
||||||
[StaticRoute(HttpServerLite.HttpMethod.GET, "/user/info/v1/basic")]
|
[StaticRoute(HttpServerLite.HttpMethod.GET, "/user/info/v1/basic")]
|
||||||
public static async Task account_info_get(HttpContext ctx)
|
public static async Task account_info_get(HttpContext ctx)
|
||||||
{
|
{
|
||||||
@ -88,7 +86,10 @@ namespace Campofinale.Http
|
|||||||
string resp = "{\"data\":{\"hgId\":\"1799321925\",\"email\":\"dispatch@endfield.ps\",\"realEmail\":\"dispatch@endfield.ps\",\"isLatestUserAgreement\":true,\"nickName\":\"Campofinale\"},\"msg\":\"OK\",\"status\":0,\"type\":1}";
|
string resp = "{\"data\":{\"hgId\":\"1799321925\",\"email\":\"dispatch@endfield.ps\",\"realEmail\":\"dispatch@endfield.ps\",\"isLatestUserAgreement\":true,\"nickName\":\"Campofinale\"},\"msg\":\"OK\",\"status\":0,\"type\":1}";
|
||||||
if (account != null)
|
if (account != null)
|
||||||
{
|
{
|
||||||
resp = "{\"data\":{\"idCardNum\": 110102200610048887,\"hgId\":\"" + account.id + "\",\"email\":\"" + account.username +Server.config.dispatchServer.emailFormat +"\",\"realEmail\":\"" + account.username + Server.config.dispatchServer.emailFormat + "\",\"isLatestUserAgreement\":true,\"nickName\":\"" + account.username + "\",\"name\":\"AAAA\"},\"msg\":\"OK\",\"status\":0,\"type\":1}";
|
/*
|
||||||
|
* {"data":{"hgId":"1326618825955","phone":"153****5243","email":null,"identityNum":"5002**********1619","identityName":"金*","isMinor":false,"isLatestUserAgreement":true},"msg":"OK","status":0,"type":"A"}
|
||||||
|
*/
|
||||||
|
resp = "{\"data\":{\"phone\":\"153****5243\", \"identityNum\": \"5002**********1619\",\"identityName\":\"金*\",\"isMinor\":false,\"hgId\":\"" + account.id + "\",\"email\":\"" + account.username +Server.config.dispatchServer.emailFormat +"\",\"realEmail\":\"" + account.username + Server.config.dispatchServer.emailFormat + "\",\"isLatestUserAgreement\":true,\"nickName\":\"" + account.username + "\"},\"msg\":\"OK\",\"status\":0,\"type\":\"A\"}";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -138,7 +139,8 @@ namespace Campofinale.Http
|
|||||||
string resp = "{\"msg\": \"Error\", \"status\": 2, \"type\": \"A\"}";
|
string resp = "{\"msg\": \"Error\", \"status\": 2, \"type\": \"A\"}";
|
||||||
if (account != null)
|
if (account != null)
|
||||||
{
|
{
|
||||||
resp = "{\"data\": { \"uid\": \"" + account.id + "\", \"code\": \"" + account.grantToken + "\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}";
|
|
||||||
|
resp = "{\"data\": { \"token\": \"" + account.token + "\", \"uid\": \"" + account.id + "\", \"code\": \"" + account.grantToken + "\" }, \"msg\": \"OK\", \"status\": 0, \"type\": \"A\"}";
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Response.StatusCode = 200;
|
ctx.Response.StatusCode = 200;
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
using Campofinale;
|
using Campofinale;
|
||||||
|
|
||||||
using Pastel;
|
using Pastel;
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
|
||||||
using static System.Net.Mime.MediaTypeNames;
|
|
||||||
public static class Logger
|
public static class Logger
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -20,6 +18,10 @@ public static class Logger
|
|||||||
var method = frame?.GetMethod();
|
var method = frame?.GetMethod();
|
||||||
return method?.DeclaringType?.Name ?? "Server";
|
return method?.DeclaringType?.Name ?? "Server";
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Print a text in the console
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="text"></param>
|
||||||
public static void Print(string text)
|
public static void Print(string text)
|
||||||
{
|
{
|
||||||
string className = GetCallingClassName();
|
string className = GetCallingClassName();
|
||||||
@ -27,6 +29,10 @@ public static class Logger
|
|||||||
string prefix = "<" + "INFO".Pastel("03fcce") + $":{className.Pastel("999")}>";
|
string prefix = "<" + "INFO".Pastel("03fcce") + $":{className.Pastel("999")}>";
|
||||||
Console.WriteLine($"{prefix} " + text);
|
Console.WriteLine($"{prefix} " + text);
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Print a text in the console as Error
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="text"></param>
|
||||||
public static void PrintError(string text)
|
public static void PrintError(string text)
|
||||||
{
|
{
|
||||||
string className = GetCallingClassName();
|
string className = GetCallingClassName();
|
||||||
@ -34,8 +40,15 @@ public static class Logger
|
|||||||
string prefix = "<" + "ERROR".Pastel("eb4034") + $":{className.Pastel("999")}>";
|
string prefix = "<" + "ERROR".Pastel("eb4034") + $":{className.Pastel("999")}>";
|
||||||
Console.WriteLine($"{prefix} " + text.Pastel("917e7e"));
|
Console.WriteLine($"{prefix} " + text.Pastel("917e7e"));
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Print a text in the console as a Warn
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="text"></param>
|
||||||
public static void PrintWarn(string text)
|
public static void PrintWarn(string text)
|
||||||
{
|
{
|
||||||
|
if (!Server.config.logOptions.packetWarnings)
|
||||||
|
return;
|
||||||
|
|
||||||
string className = GetCallingClassName();
|
string className = GetCallingClassName();
|
||||||
Logger.Log(text);
|
Logger.Log(text);
|
||||||
string prefix = "<" + "WARN".Pastel("ff9100") + $":{className.Pastel("999")}>";
|
string prefix = "<" + "WARN".Pastel("ff9100") + $":{className.Pastel("999")}>";
|
||||||
@ -43,7 +56,9 @@ public static class Logger
|
|||||||
}
|
}
|
||||||
public static string GetColor(string c)
|
public static string GetColor(string c)
|
||||||
{
|
{
|
||||||
if (ClassColors.ContainsKey(c)) return ClassColors[c];
|
if (ClassColors.ContainsKey(c))
|
||||||
|
return ClassColors[c];
|
||||||
|
|
||||||
return "999";
|
return "999";
|
||||||
}
|
}
|
||||||
private static StreamWriter logWriter;
|
private static StreamWriter logWriter;
|
||||||
@ -52,24 +67,27 @@ public static class Logger
|
|||||||
public static void Initialize(bool hideLogs = false)
|
public static void Initialize(bool hideLogs = false)
|
||||||
{
|
{
|
||||||
Logger.hideLogs = hideLogs;
|
Logger.hideLogs = hideLogs;
|
||||||
logWriter = new StreamWriter("latest.log", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Log(string message)
|
logWriter = new StreamWriter("latest.log", false);
|
||||||
{
|
logWriter.AutoFlush = true;
|
||||||
if (!hideLogs)
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Log a message
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="message"></param>
|
||||||
|
private static void Log(string message)
|
||||||
{
|
{
|
||||||
|
if(hideLogs)
|
||||||
|
return;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logWriter.WriteLine($"{DateTime.Now}: {message}");
|
logWriter.WriteLine($"{DateTime.Now}: {message}");
|
||||||
logWriter.Flush();
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Close()
|
public static void Close()
|
||||||
|
|||||||
@ -1,20 +1,9 @@
|
|||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
using Google.Protobuf;
|
||||||
using Pastel;
|
using Pastel;
|
||||||
using System;
|
|
||||||
using System.Buffers.Binary;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
|
||||||
|
|
||||||
namespace Campofinale.Network
|
namespace Campofinale.Network
|
||||||
{
|
{
|
||||||
@ -61,6 +50,11 @@ namespace Campofinale.Network
|
|||||||
byte networkValue = buf[index];
|
byte networkValue = buf[index];
|
||||||
return networkValue;
|
return networkValue;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Parse the body using a specific IMessage proto class
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TBody"></typeparam>
|
||||||
|
/// <returns></returns>
|
||||||
public TBody DecodeBody<TBody>() where TBody : IMessage<TBody>, new()
|
public TBody DecodeBody<TBody>() where TBody : IMessage<TBody>, new()
|
||||||
{
|
{
|
||||||
return new MessageParser<TBody>(() => new()).ParseFrom(finishedBody);
|
return new MessageParser<TBody>(() => new()).ParseFrom(finishedBody);
|
||||||
@ -76,35 +70,10 @@ namespace Campofinale.Network
|
|||||||
|
|
||||||
Buffer.BlockCopy(source, 0, destination, offset, source.Length);
|
Buffer.BlockCopy(source, 0, destination, offset, source.Length);
|
||||||
}
|
}
|
||||||
public static byte[] ToByteArray(IntPtr ptr, int length)
|
|
||||||
{
|
|
||||||
if (ptr == IntPtr.Zero)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Pointer cannot be null", nameof(ptr));
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] byteArray = new byte[length];
|
|
||||||
Marshal.Copy(ptr, byteArray, 0, length);
|
|
||||||
return byteArray;
|
|
||||||
}
|
|
||||||
public static IntPtr ByteArrayToIntPtr(byte[] data)
|
|
||||||
{
|
|
||||||
if (data == null) throw new ArgumentNullException(nameof(data));
|
|
||||||
|
|
||||||
// Allocate unmanaged memory
|
|
||||||
IntPtr ptr = Marshal.AllocHGlobal(data.Length);
|
|
||||||
|
|
||||||
// Copy the byte array to the unmanaged memory
|
|
||||||
Marshal.Copy(data, 0, ptr, data.Length);
|
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
public static byte[] EncryptWithPublicKey(byte[] data, string publicKey)
|
public static byte[] EncryptWithPublicKey(byte[] data, string publicKey)
|
||||||
{
|
{
|
||||||
// Crea un oggetto RSA
|
|
||||||
using (RSA rsa = RSA.Create())
|
using (RSA rsa = RSA.Create())
|
||||||
{
|
{
|
||||||
|
|
||||||
publicKey = publicKey.Replace("-----BEGIN PUBLIC KEY-----", "");
|
publicKey = publicKey.Replace("-----BEGIN PUBLIC KEY-----", "");
|
||||||
publicKey = publicKey.Replace("\r", "");
|
publicKey = publicKey.Replace("\r", "");
|
||||||
publicKey = publicKey.Replace("\n", "");
|
publicKey = publicKey.Replace("\n", "");
|
||||||
@ -112,24 +81,44 @@ namespace Campofinale.Network
|
|||||||
publicKey = publicKey.Trim();
|
publicKey = publicKey.Trim();
|
||||||
Logger.Print(publicKey);
|
Logger.Print(publicKey);
|
||||||
byte[] publicKey_ = Convert.FromBase64String(publicKey);
|
byte[] publicKey_ = Convert.FromBase64String(publicKey);
|
||||||
// Importa la chiave pubblica
|
|
||||||
rsa.ImportSubjectPublicKeyInfo(publicKey_, out _);
|
rsa.ImportSubjectPublicKeyInfo(publicKey_, out _);
|
||||||
|
|
||||||
// Crittografa i dati
|
|
||||||
return rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);
|
return rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Set the data of the packet with the Message Id and the body
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="msgId"></param>
|
||||||
|
/// <param name="body">The proto message</param>
|
||||||
|
/// <returns>The current Packet</returns>
|
||||||
public Packet SetData(ScMsgId msgId, IMessage body)
|
public Packet SetData(ScMsgId msgId, IMessage body)
|
||||||
{
|
{
|
||||||
set_body = body;
|
set_body = body;
|
||||||
cmdId = (int)msgId;
|
cmdId = (int)msgId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Encode the packet using the Packet class
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="packet">The packet</param>
|
||||||
|
/// <param name="seq">the sequence id</param>
|
||||||
|
/// <param name="totalPackCount">the pack count</param>
|
||||||
|
/// <param name="currentPackIndex"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public static byte[] EncodePacket(Packet packet,ulong seq = 0, uint totalPackCount = 1, uint currentPackIndex = 0)
|
public static byte[] EncodePacket(Packet packet,ulong seq = 0, uint totalPackCount = 1, uint currentPackIndex = 0)
|
||||||
{
|
{
|
||||||
return EncodePacket(packet.cmdId,packet.set_body,seq, totalPackCount, currentPackIndex);
|
return EncodePacket(packet.cmdId,packet.set_body,seq, totalPackCount, currentPackIndex);
|
||||||
}
|
}
|
||||||
public static ulong seqNext = 1;
|
public static ulong seqNext = 1;
|
||||||
|
/// <summary>
|
||||||
|
/// Encode the packet using the msgId and the body
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="msgId"></param>
|
||||||
|
/// <param name="body"></param>
|
||||||
|
/// <param name="seqNext_"></param>
|
||||||
|
/// <param name="totalPackCount"></param>
|
||||||
|
/// <param name="currentPackIndex"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public static byte[] EncodePacket(int msgId, IMessage body, ulong seqNext_ = 0, uint totalPackCount=1,uint currentPackIndex=0)
|
public static byte[] EncodePacket(int msgId, IMessage body, ulong seqNext_ = 0, uint totalPackCount=1,uint currentPackIndex=0)
|
||||||
{
|
{
|
||||||
if (seqNext_ == 0)
|
if (seqNext_ == 0)
|
||||||
@ -145,10 +134,19 @@ namespace Campofinale.Network
|
|||||||
PutByteArray(data, head.ToByteArray(), 3);
|
PutByteArray(data, head.ToByteArray(), 3);
|
||||||
PutByteArray(data, body.ToByteArray(), 3+head.ToByteArray().Length);
|
PutByteArray(data, body.ToByteArray(), 3+head.ToByteArray().Length);
|
||||||
if(Server.config.logOptions.packets && !Server.scMessageToHide.Contains((ScMsgId)msgId))
|
if(Server.config.logOptions.packets && !Server.scMessageToHide.Contains((ScMsgId)msgId))
|
||||||
Logger.Print($"Sending packet: {((ScMsgId)msgId).ToString().Pastel(Color.LightBlue)} id: {msgId} with {data.Length} bytes");
|
Logger.Print($"Sending Packet: {((ScMsgId)msgId).ToString().Pastel(Color.LightBlue)} Id: {msgId} with {data.Length} Bytes");
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Encode the packet with msgId and body as byte array
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="msgId"></param>
|
||||||
|
/// <param name="body"></param>
|
||||||
|
/// <param name="seqNext_"></param>
|
||||||
|
/// <param name="totalPackCount"></param>
|
||||||
|
/// <param name="currentPackIndex"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public static byte[] EncodePacket(int msgId, byte[] body, ulong seqNext_ = 0, uint totalPackCount = 1, uint currentPackIndex = 0)
|
public static byte[] EncodePacket(int msgId, byte[] body, ulong seqNext_ = 0, uint totalPackCount = 1, uint currentPackIndex = 0)
|
||||||
{
|
{
|
||||||
if (seqNext_ == 0)
|
if (seqNext_ == 0)
|
||||||
@ -168,10 +166,16 @@ namespace Campofinale.Network
|
|||||||
PutByteArray(data, head.ToByteArray(), 3);
|
PutByteArray(data, head.ToByteArray(), 3);
|
||||||
PutByteArray(data, body, 3 + head.ToByteArray().Length);
|
PutByteArray(data, body, 3 + head.ToByteArray().Length);
|
||||||
if (Server.config.logOptions.packets && !Server.scMessageToHide.Contains((ScMsgId)msgId))
|
if (Server.config.logOptions.packets && !Server.scMessageToHide.Contains((ScMsgId)msgId))
|
||||||
Logger.Print($"Sending packet: {((ScMsgId)msgId).ToString().Pastel(Color.LightBlue)} id: {msgId} with {data.Length} bytes");
|
Logger.Print($"Sending Packet: {((ScMsgId)msgId).ToString().Pastel(Color.LightBlue)} Id: {msgId} with {data.Length} Bytes");
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Read the byteArray as a valid packet
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="client"></param>
|
||||||
|
/// <param name="byteArray"></param>
|
||||||
|
/// <returns>The decoded packet</returns>
|
||||||
public static Packet Read(Player client,byte[] byteArray)
|
public static Packet Read(Player client,byte[] byteArray)
|
||||||
{
|
{
|
||||||
byte headLength = GetByte(byteArray, 0);
|
byte headLength = GetByte(byteArray, 0);
|
||||||
@ -182,10 +186,10 @@ namespace Campofinale.Network
|
|||||||
Array.Copy(byteArray, 3, csHeadBytes, 0, headLength);
|
Array.Copy(byteArray, 3, csHeadBytes, 0, headLength);
|
||||||
Array.Copy(byteArray, 3+ headLength, BodyBytes, 0, bodyLength);
|
Array.Copy(byteArray, 3+ headLength, BodyBytes, 0, bodyLength);
|
||||||
CSHead csHead_ = CSHead.Parser.ParseFrom(csHeadBytes);
|
CSHead csHead_ = CSHead.Parser.ParseFrom(csHeadBytes);
|
||||||
if (Server.config.logOptions.packets)
|
/*if (Server.config.logOptions.packets && !Server.csMessageToHide.Contains((CsMsgId)csHead_.Msgid))
|
||||||
{
|
{
|
||||||
Logger.Print(csHead_.ToString());
|
Logger.Print(csHead_.ToString());
|
||||||
}
|
}*/
|
||||||
seqNext = csHead_.UpSeqid;
|
seqNext = csHead_.UpSeqid;
|
||||||
return new Packet() { csHead = csHead_, finishedBody = BodyBytes,cmdId=csHead_.Msgid };
|
return new Packet() { csHead = csHead_, finishedBody = BodyBytes,cmdId=csHead_.Msgid };
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,6 @@
|
|||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Net.Sockets;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
|
|
||||||
|
|||||||
@ -2,16 +2,6 @@
|
|||||||
using Campofinale.Game.Entities;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using MongoDB.Driver.Core.Clusters;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,17 +1,7 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Network;
|
||||||
using Campofinale.Network;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,17 +1,7 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Network;
|
||||||
using Campofinale.Network;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,21 +1,7 @@
|
|||||||
using BeyondTools.VFS.Crypto;
|
using Campofinale.Network;
|
||||||
using Campofinale.Network;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Google.Protobuf;
|
|
||||||
using Google.Protobuf.WellKnownTypes;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
using static System.Net.Mime.MediaTypeNames;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,16 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
@ -26,6 +16,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
if (character != null)
|
if (character != null)
|
||||||
{
|
{
|
||||||
character.potential=req.Level;
|
character.potential=req.Level;
|
||||||
|
|
||||||
//TODO consume Item ID
|
//TODO consume Item ID
|
||||||
|
|
||||||
ScCharPotentialUnlock unlock = new()
|
ScCharPotentialUnlock unlock = new()
|
||||||
|
|||||||
@ -1,16 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,17 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
|
||||||
using Google.Protobuf;
|
|
||||||
using Google.Protobuf.WellKnownTypes;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
public class HandleCsGetMail
|
public class HandleCsGetMail
|
||||||
|
|||||||
17
Campofinale/Packets/Cs/HandleCsItemBagAbandonInBag.cs
Normal file
17
Campofinale/Packets/Cs/HandleCsItemBagAbandonInBag.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using Campofinale.Network;
|
||||||
|
using Campofinale.Protocol;
|
||||||
|
|
||||||
|
namespace Campofinale.Packets.Cs
|
||||||
|
{
|
||||||
|
public class HandleCsItemBagAbandonInBag
|
||||||
|
{
|
||||||
|
|
||||||
|
[Server.Handler(CsMsgId.CsItemBagAbandonInBag)]
|
||||||
|
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
||||||
|
{
|
||||||
|
CsItemBagAbandonInBag req = packet.DecodeBody<CsItemBagAbandonInBag>();
|
||||||
|
session.inventoryManager.DropItemsBag(req);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
17
Campofinale/Packets/Cs/HandleCsItemBagMoveInBag.cs
Normal file
17
Campofinale/Packets/Cs/HandleCsItemBagMoveInBag.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using Campofinale.Network;
|
||||||
|
using Campofinale.Protocol;
|
||||||
|
|
||||||
|
namespace Campofinale.Packets.Cs
|
||||||
|
{
|
||||||
|
public class HandleCsItemBagMoveInBag
|
||||||
|
{
|
||||||
|
|
||||||
|
[Server.Handler(CsMsgId.CsItemBagMoveInBag)]
|
||||||
|
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
||||||
|
{
|
||||||
|
CsItemBagMoveInBag req = packet.DecodeBody<CsItemBagMoveInBag>();
|
||||||
|
session.inventoryManager.items.MoveBagItem(req.FromGrid, req.ToGrid);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -7,17 +7,21 @@ using Campofinale.Protocol;
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
public class HandleCsLogin
|
public class HandleCsLogin
|
||||||
{
|
{
|
||||||
[Server.Handler(CsMsgId.CsCreateRole)]
|
[Server.Handler(CsMsgId.CsSetGender)]
|
||||||
public static void HandleCsCreateRole(Player session, CsMsgId cmdId, Packet packet)
|
public static void HandleCsSetGender(Player session, CsMsgId cmdId, Packet packet)
|
||||||
{
|
{
|
||||||
CsCreateRole req = packet.DecodeBody<CsCreateRole>();
|
CsSetGender req = packet.DecodeBody<CsSetGender>();
|
||||||
|
ScSetGender rsp = new()
|
||||||
|
{
|
||||||
|
Gender = req.Gender,
|
||||||
|
};
|
||||||
|
session.gender = rsp.Gender;
|
||||||
|
session.Send(ScMsgId.ScSetGender, rsp);
|
||||||
|
|
||||||
}
|
}
|
||||||
[Server.Handler(CsMsgId.CsLogin)]
|
[Server.Handler(CsMsgId.CsLogin)]
|
||||||
@ -53,7 +57,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
// rsp.ServerPublicKey = ByteString.CopyFrom(encryptedEncKey);
|
// rsp.ServerPublicKey = ByteString.CopyFrom(encryptedEncKey);
|
||||||
|
|
||||||
CSChaCha20 cipher = new CSChaCha20(encKey, serverEncrypNonce, 1);
|
CSChaCha20 cipher = new CSChaCha20(encKey, serverEncrypNonce, 1);
|
||||||
if (req.ClientVersion == GameConstants.GAME_VERSION)
|
if (req.ClientVersion == GameConstants.GAME_VERSION || req.ClientVersion == GameConstants.GAME_VERSION_ANDROID)
|
||||||
{
|
{
|
||||||
if (account == null)
|
if (account == null)
|
||||||
{
|
{
|
||||||
@ -65,9 +69,18 @@ namespace Campofinale.Packets.Cs
|
|||||||
session.Disconnect();
|
session.Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
session.Load(account.id);
|
bool exist=session.Load(account.id);
|
||||||
|
|
||||||
rsp.Uid = ""+session.accountId;
|
rsp.Uid = ""+session.accountId;
|
||||||
|
if (!exist)
|
||||||
|
{
|
||||||
|
rsp.IsFirstLogin = true;
|
||||||
|
//session.gender = Gender.GenInvalid;
|
||||||
|
|
||||||
|
//session.Send(ScMsgId.ScLogin, rsp);
|
||||||
|
//session.Send(new PacketScSyncBaseData(session));
|
||||||
|
//return;
|
||||||
|
}
|
||||||
session.Send(ScMsgId.ScLogin, rsp);
|
session.Send(ScMsgId.ScLogin, rsp);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -113,70 +126,131 @@ namespace Campofinale.Packets.Cs
|
|||||||
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.SpecialItem));
|
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.SpecialItem));
|
||||||
session.Send(new PacketScSyncAllMail(session));
|
session.Send(new PacketScSyncAllMail(session));
|
||||||
session.Send(new PacketScSceneCollectionSync(session));
|
session.Send(new PacketScSceneCollectionSync(session));
|
||||||
/*ScSyncAllMission missions = new()
|
string json1 = File.ReadAllText("44_ScSyncAllMission.json");
|
||||||
|
|
||||||
|
|
||||||
|
ScSyncAllMission m = Newtonsoft.Json.JsonConvert.DeserializeObject<ScSyncAllMission>(json1);
|
||||||
|
m.TrackMissionId = "";
|
||||||
|
|
||||||
|
//Disabled the hardcoded one and enable the missionSystem one
|
||||||
|
//session.Send(ScMsgId.ScSyncAllMission, session.missionSystem.ToProto());
|
||||||
|
session.Send(ScMsgId.ScSyncAllMission, m);
|
||||||
|
/*ession.Send(ScMsgId.ScSyncAllMission, new ScSyncAllMission()
|
||||||
{
|
{
|
||||||
|
NewMissionTags =
|
||||||
|
{
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
Missions =
|
Missions =
|
||||||
{
|
{
|
||||||
{"e0m0",
|
{"e0m0", new Mission()
|
||||||
new Mission()
|
|
||||||
{
|
{
|
||||||
MissionId="e0m0",
|
MissionId="e0m0",
|
||||||
MissionState=(int)MissionState.Processing,
|
MissionState=(int)MissionState.Processing,
|
||||||
|
SucceedId=-1,
|
||||||
Properties =
|
Properties =
|
||||||
{
|
{
|
||||||
{1,new DynamicParameter()
|
{1,new DynamicParameter()
|
||||||
{
|
{
|
||||||
ValueType=1,
|
|
||||||
RealType=1,
|
RealType=1,
|
||||||
ValueBoolList =
|
|
||||||
{
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{2,new DynamicParameter()
|
|
||||||
{
|
|
||||||
ValueType=1,
|
ValueType=1,
|
||||||
RealType=1,
|
|
||||||
ValueBoolList =
|
ValueBoolList =
|
||||||
{
|
{
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
} }
|
||||||
}
|
}
|
||||||
},
|
} }
|
||||||
{3,new DynamicParameter()
|
|
||||||
{
|
|
||||||
ValueType=1,
|
|
||||||
RealType=1,
|
|
||||||
ValueBoolList =
|
|
||||||
{
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
TrackMissionId = "e0m0",
|
TrackMissionId = "e0m0",
|
||||||
|
|
||||||
CurQuests =
|
CurQuests =
|
||||||
{
|
{
|
||||||
{"e0m0#1", new Quest(){
|
|
||||||
QuestId="e0m0#1",
|
{"e0m0_q#1", new Quest()
|
||||||
QuestState=2,
|
{
|
||||||
|
QuestId="e0m0_q#1",
|
||||||
|
QuestState=(int)QuestState.Processing,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId="f6415b84",
|
||||||
|
|
||||||
|
IsComplete=false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#2", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#2",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
new QuestObjective()
|
||||||
|
{
|
||||||
|
ConditionId="81736ca7",
|
||||||
|
IsComplete=false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#3", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#3",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#4", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#4",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#5", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#5",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#6", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#6",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#7", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#7",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
|
QuestObjectives =
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
} },
|
||||||
|
{"e0m0_q#8", new Quest()
|
||||||
|
{
|
||||||
|
QuestId="e0m0_q#8",
|
||||||
|
QuestState=(int)QuestState.Available,
|
||||||
QuestObjectives =
|
QuestObjectives =
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
};*/
|
});*/
|
||||||
//session.Send(ScMessageId.ScSyncAllMission, missions);
|
|
||||||
string json1 = File.ReadAllText("44_ScSyncAllMission.json");
|
|
||||||
ScSyncAllMission m = Newtonsoft.Json.JsonConvert.DeserializeObject<ScSyncAllMission>(json1);
|
|
||||||
m.TrackMissionId = "";
|
|
||||||
session.Send(ScMsgId.ScSyncAllMission, m);
|
|
||||||
|
|
||||||
|
|
||||||
session.Send(new PacketScGachaSync(session));
|
session.Send(new PacketScGachaSync(session));
|
||||||
ScSettlementSyncAll settlements = new ScSettlementSyncAll()
|
ScSettlementSyncAll settlements = new ScSettlementSyncAll()
|
||||||
@ -232,7 +306,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
session.Send(new PacketScSpaceshipSync(session));
|
session.Send(new PacketScSpaceshipSync(session));
|
||||||
session.Send(new PacketScSyncFullDungeonStatus(session));
|
session.Send(new PacketScSyncFullDungeonStatus(session));
|
||||||
session.Send(new PacketScActivitySync(session));
|
session.Send(new PacketScActivitySync(session));
|
||||||
|
session.Send(new PacketScSnsGetChatList(session));
|
||||||
session.Send(ScMsgId.ScSyncFullDataEnd, new ScSyncFullDataEnd());
|
session.Send(ScMsgId.ScSyncFullDataEnd, new ScSyncFullDataEnd());
|
||||||
session.EnterScene();
|
session.EnterScene();
|
||||||
session.Initialized = true;
|
session.Initialized = true;
|
||||||
|
|||||||
@ -1,14 +1,9 @@
|
|||||||
using Campofinale.Network;
|
using System.Drawing;
|
||||||
|
|
||||||
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
using Pastel;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
@ -39,7 +34,8 @@ namespace Campofinale.Packets.Cs
|
|||||||
};
|
};
|
||||||
if (Server.config.logOptions.packets)
|
if (Server.config.logOptions.packets)
|
||||||
{
|
{
|
||||||
Logger.Print("CmdId: " + (CsMsgId)packet.csHead.Msgid);
|
Logger.Print("Recieved Packet: " + ((CsMsgId)packet.csHead.Msgid).ToString().Pastel(Color.LightCyan) + $" Id: {packet.csHead.Msgid} with {packet.finishedBody.Length} Bytes");
|
||||||
|
if (Server.config.logOptions.packetBodies)
|
||||||
Logger.Print(BitConverter.ToString(packet.finishedBody).Replace("-", string.Empty).ToLower());
|
Logger.Print(BitConverter.ToString(packet.finishedBody).Replace("-", string.Empty).ToLower());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Game.Entities;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,18 +1,8 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Game.Entities;
|
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
|
|||||||
@ -1,16 +1,6 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Game.Entities;
|
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,21 +1,8 @@
|
|||||||
using BeyondTools.VFS.Crypto;
|
using Campofinale.Network;
|
||||||
using Campofinale.Network;
|
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Google.Protobuf;
|
|
||||||
using Google.Protobuf.WellKnownTypes;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
using static System.Net.Mime.MediaTypeNames;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
@ -31,11 +18,11 @@ namespace Campofinale.Packets.Cs
|
|||||||
session.sceneManager.LoadCurrentTeamEntities();
|
session.sceneManager.LoadCurrentTeamEntities();
|
||||||
session.sceneManager.LoadCurrent();
|
session.sceneManager.LoadCurrent();
|
||||||
session.LoadFinish = true;
|
session.LoadFinish = true;
|
||||||
/*session.Send(ScMessageId.ScSceneClientIdInfo, new ScSceneClientIdInfo()
|
session.Send(ScMsgId.ScSceneClientIdInfo, new ScSceneClientIdInfo()
|
||||||
{
|
{
|
||||||
RoleIdx = (uint)session.roleId,
|
RoleIdx = (uint)session.roleId,
|
||||||
LastMaxIdx = session.random.usedGuids.Max()
|
LastMaxIdx = session.random.usedGuids.Max()
|
||||||
});*/
|
});
|
||||||
if (session.curSceneNumId == 98)
|
if (session.curSceneNumId == 98)
|
||||||
{
|
{
|
||||||
session.Send(new PacketScSyncGameMode(session, "spaceship"));
|
session.Send(new PacketScSyncGameMode(session, "spaceship"));
|
||||||
|
|||||||
@ -1,14 +1,5 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
|
|||||||
@ -1,16 +1,5 @@
|
|||||||
using Campofinale.Game;
|
using Campofinale.Network;
|
||||||
using Campofinale.Network;
|
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
204
Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs
Normal file
204
Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
using Campofinale.Game.Character;
|
||||||
|
using Campofinale.Game.Entities;
|
||||||
|
using Campofinale.Network;
|
||||||
|
using Campofinale.Protocol;
|
||||||
|
using Campofinale.Resource;
|
||||||
|
using Campofinale.Resource.Table;
|
||||||
|
using Pastel;
|
||||||
|
|
||||||
|
namespace Campofinale.Packets.Cs
|
||||||
|
{
|
||||||
|
public class HandleCsSceneSetLevelScriptActive
|
||||||
|
{
|
||||||
|
[Server.Handler(CsMsgId.CsSceneSetLevelScriptActive)]
|
||||||
|
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
||||||
|
{
|
||||||
|
CsSceneSetLevelScriptActive req = packet.DecodeBody<CsSceneSetLevelScriptActive>();
|
||||||
|
if (req.IsActive)
|
||||||
|
{
|
||||||
|
|
||||||
|
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
|
||||||
|
{
|
||||||
|
SceneNumId = req.SceneNumId,
|
||||||
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
|
State = 3
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Server.Handler(CsMsgId.CsSceneSetLevelScriptStart)]
|
||||||
|
public static void HandleCsSceneSetLevelScriptStart(Player session, CsMsgId cmdId, Packet packet)
|
||||||
|
{
|
||||||
|
CsSceneSetLevelScriptStart req = packet.DecodeBody<CsSceneSetLevelScriptStart>();
|
||||||
|
if (req.IsStart)
|
||||||
|
{
|
||||||
|
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
|
||||||
|
{
|
||||||
|
SceneNumId = req.SceneNumId,
|
||||||
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
|
State = 4
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ExecuteEventAction(Player player, ScriptAction action)
|
||||||
|
{
|
||||||
|
switch (action.action)
|
||||||
|
{
|
||||||
|
case ScriptActionType.CompleteQuest:
|
||||||
|
player.missionSystem.CompleteQuest(action.valueStr[0]);
|
||||||
|
break;
|
||||||
|
case ScriptActionType.ProcessQuest:
|
||||||
|
player.missionSystem.ProcessQuest(action.valueStr[0]);
|
||||||
|
break;
|
||||||
|
case ScriptActionType.SpawnEnemy:
|
||||||
|
player.sceneManager.GetCurScene().SpawnEnemy(action.valueUlong[0]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Logger.PrintWarn("Script Action not implemented");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[Server.Handler(CsMsgId.CsSceneLevelScriptEventTrigger)]
|
||||||
|
public static void HandleCsSceneLevelScriptEventTrigger(Player session, CsMsgId cmdId, Packet packet)
|
||||||
|
{
|
||||||
|
|
||||||
|
CsSceneLevelScriptEventTrigger req = packet.DecodeBody<CsSceneLevelScriptEventTrigger>();
|
||||||
|
Logger.Print(req.Properties.ToString());
|
||||||
|
|
||||||
|
if (ResourceManager.levelScriptsEvents.TryGetValue(req.EventName, out LevelScriptEvent levelScriptEvent))
|
||||||
|
{
|
||||||
|
Logger.Print($"Event {req.EventName.Pastel(ConsoleColor.Yellow)} Executed.");
|
||||||
|
Logger.Print($"{levelScriptEvent.comment}");
|
||||||
|
levelScriptEvent.actions.ForEach(a =>
|
||||||
|
{
|
||||||
|
ExecuteEventAction(session, a);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.PrintWarn($"Event {req.EventName.Pastel(ConsoleColor.White)} is NOT implemented. INFO: [");
|
||||||
|
Logger.PrintWarn($" Scene: {req.SceneNumId.ToString().Pastel(ConsoleColor.White)}, Pos: {session.position.ToProto().ToString()} ");
|
||||||
|
Logger.PrintWarn($" ScriptID: {req.ScriptId.ToString().Pastel(ConsoleColor.White)} ");
|
||||||
|
Logger.PrintWarn($"]");
|
||||||
|
}
|
||||||
|
/*if(req.EventName== "#8777e316")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#1",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#2",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(req.EventName== "#6ea2690d")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#2",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#3",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (req.EventName == "#bb79de30")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#3",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#4",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (req.EventName == "#4c76ec3c")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#4",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#5",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (req.EventName == "#251df3ad")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#5",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#6",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (req.EventName == "#e6ac322b")
|
||||||
|
{
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#6",
|
||||||
|
QuestState = (int)QuestState.Completed,
|
||||||
|
});
|
||||||
|
session.Send(ScMsgId.ScQuestStateUpdate, new ScQuestStateUpdate()
|
||||||
|
{
|
||||||
|
QuestId = "e0m0_q#7",
|
||||||
|
QuestState = (int)QuestState.Processing,
|
||||||
|
});
|
||||||
|
}*/
|
||||||
|
|
||||||
|
ScSceneUpdateLevelScriptProperty update1 = new()
|
||||||
|
{
|
||||||
|
SceneNumId = req.SceneNumId,
|
||||||
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1);
|
||||||
|
ScSceneTriggerClientLevelScriptEvent trigger = new()
|
||||||
|
{
|
||||||
|
EventName = req.EventName,
|
||||||
|
SceneNumId = req.SceneNumId,
|
||||||
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneTriggerClientLevelScriptEvent, trigger);
|
||||||
|
ScSceneUpdateLevelScriptProperty update2 = new()
|
||||||
|
{
|
||||||
|
SceneNumId = req.SceneNumId,
|
||||||
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update2);
|
||||||
|
ScSceneLevelScriptEventTrigger rsp = new ScSceneLevelScriptEventTrigger()
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
session.Send(ScMsgId.ScSceneLevelScriptEventTrigger, rsp,packet.csHead.UpSeqid);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,16 +1,6 @@
|
|||||||
using Campofinale.Game;
|
using Campofinale.Game.Entities;
|
||||||
using Campofinale.Game.Entities;
|
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using static Campofinale.Resource.ResourceManager;
|
using static Campofinale.Resource.ResourceManager;
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
@ -22,7 +12,12 @@ namespace Campofinale.Packets.Cs
|
|||||||
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
||||||
{
|
{
|
||||||
CsSceneSetSafeZone req = packet.DecodeBody<CsSceneSetSafeZone>();
|
CsSceneSetSafeZone req = packet.DecodeBody<CsSceneSetSafeZone>();
|
||||||
|
ScSceneSetSafeZone rsp = new()
|
||||||
|
{
|
||||||
|
Id = req.Id,
|
||||||
|
InZone = req.InZone,
|
||||||
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneSetSafeZone, rsp);
|
||||||
if (req.InZone)
|
if (req.InZone)
|
||||||
{
|
{
|
||||||
var entity = session.sceneManager.GetEntity(req.Id) as EntityInteractive;
|
var entity = session.sceneManager.GetEntity(req.Id) as EntityInteractive;
|
||||||
|
|||||||
@ -1,15 +1,6 @@
|
|||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
using Google.Protobuf;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user