mirror of
https://git.muiegratis.online/suikoakari/Campofinale
synced 2025-12-12 17:44:37 +01:00
mission system now save, characters at start only 1 if quests are enabled
This commit is contained in:
@@ -12,19 +12,28 @@
|
|||||||
{
|
{
|
||||||
public int defaultSceneNumId = 87;
|
public int defaultSceneNumId = 87;
|
||||||
public int maxPlayers = 20;
|
public int maxPlayers = 20;
|
||||||
public CharactersOptions defaultCharacters = new();
|
/// <summary>
|
||||||
|
/// Experimental, Mission System is still a work in progress.
|
||||||
|
/// </summary>
|
||||||
|
public bool missionsEnabled = false;
|
||||||
|
public bool giveAllItems = false;
|
||||||
|
/// <summary>
|
||||||
|
/// Not yet implemented
|
||||||
|
/// </summary>
|
||||||
|
public bool useEncryption = false;
|
||||||
|
//public CharactersOptions defaultCharacters = new();
|
||||||
public ServerOptions()
|
public ServerOptions()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CharactersOptions
|
/*public class CharactersOptions
|
||||||
{
|
{
|
||||||
public int defaultLevel = 1;
|
public int defaultLevel = 1;
|
||||||
public bool giveAllCharacters = true;
|
public bool giveAllCharacters = true;
|
||||||
public List<string> characters = new List<string>(); //used if giveAllCharacters is false
|
public List<string> characters = new List<string>(); //used if giveAllCharacters is false
|
||||||
|
|
||||||
public CharactersOptions() { }
|
public CharactersOptions() { }
|
||||||
}
|
}*/
|
||||||
/* public struct WelcomeMail
|
/* public struct WelcomeMail
|
||||||
{
|
{
|
||||||
}*/
|
}*/
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using Campofinale.Game.Character;
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Game.Gacha;
|
using Campofinale.Game.Gacha;
|
||||||
using Campofinale.Game.Inventory;
|
using Campofinale.Game.Inventory;
|
||||||
|
using Campofinale.Game.MissionSys;
|
||||||
using Campofinale.Game.Spaceship;
|
using Campofinale.Game.Spaceship;
|
||||||
using MongoDB.Bson;
|
using MongoDB.Bson;
|
||||||
using MongoDB.Bson.Serialization.Attributes;
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
@@ -38,6 +39,14 @@ namespace Campofinale.Database
|
|||||||
public Gender gender = Gender.GenFemale;
|
public Gender gender = Gender.GenFemale;
|
||||||
public Dictionary<int, Item> bag = new();
|
public Dictionary<int, Item> bag = new();
|
||||||
}
|
}
|
||||||
|
public class MissionData
|
||||||
|
{
|
||||||
|
[BsonId]
|
||||||
|
public ulong roleId;
|
||||||
|
public List<GameMission> missions = new();
|
||||||
|
public List<GameQuest> quests = new();
|
||||||
|
public string curMission = "e0m0";
|
||||||
|
}
|
||||||
public class Account
|
public class Account
|
||||||
{
|
{
|
||||||
public string id;
|
public string id;
|
||||||
@@ -64,12 +73,17 @@ namespace Campofinale.Database
|
|||||||
public Database(string connectionString, string dbName)
|
public Database(string connectionString, string dbName)
|
||||||
{
|
{
|
||||||
var client = new MongoClient(connectionString);
|
var client = new MongoClient(connectionString);
|
||||||
|
|
||||||
_database = client.GetDatabase(dbName);
|
_database = client.GetDatabase(dbName);
|
||||||
}
|
}
|
||||||
public List<Mail> LoadMails(ulong roleId)
|
public List<Mail> LoadMails(ulong roleId)
|
||||||
{
|
{
|
||||||
return _database.GetCollection<Mail>("mails").Find(c => c.owner == roleId).ToList();
|
return _database.GetCollection<Mail>("mails").Find(c => c.owner == roleId).ToList();
|
||||||
}
|
}
|
||||||
|
public MissionData LoadMissionData(ulong roleId)
|
||||||
|
{
|
||||||
|
return _database.GetCollection<MissionData>("missionsData").Find(c => c.roleId == roleId).FirstOrDefault();
|
||||||
|
}
|
||||||
public List<Character> LoadCharacters(ulong roleId)
|
public List<Character> LoadCharacters(ulong roleId)
|
||||||
{
|
{
|
||||||
return _database.GetCollection<Character>("avatars").Find(c=>c.owner== roleId).ToList();
|
return _database.GetCollection<Character>("avatars").Find(c=>c.owner== roleId).ToList();
|
||||||
@@ -176,6 +190,19 @@ namespace Campofinale.Database
|
|||||||
new ReplaceOptions { IsUpsert = true }
|
new ReplaceOptions { IsUpsert = true }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
public void UpsertMissionData(MissionData data)
|
||||||
|
{
|
||||||
|
var collection = _database.GetCollection<MissionData>("missionsData");
|
||||||
|
|
||||||
|
var filter =
|
||||||
|
Builders<MissionData>.Filter.Eq(p => p.roleId, data.roleId);
|
||||||
|
|
||||||
|
collection.ReplaceOne(
|
||||||
|
filter,
|
||||||
|
data,
|
||||||
|
new ReplaceOptions { IsUpsert = true }
|
||||||
|
);
|
||||||
|
}
|
||||||
public void UpsertAccount(Account player)
|
public void UpsertAccount(Account player)
|
||||||
{
|
{
|
||||||
var collection = _database.GetCollection<Account>("accounts");
|
var collection = _database.GetCollection<Account>("accounts");
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Campofinale.Game.Entities
|
|||||||
{
|
{
|
||||||
CommonInfo = new()
|
CommonInfo = new()
|
||||||
{
|
{
|
||||||
Hp = 100,
|
Hp = 1,
|
||||||
|
|
||||||
Id = guid,
|
Id = guid,
|
||||||
Templateid = templateId,
|
Templateid = templateId,
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ namespace Campofinale.Game.Entities
|
|||||||
SceneNumId = sceneNumId,
|
SceneNumId = sceneNumId,
|
||||||
Position = Position.ToProto(),
|
Position = Position.ToProto(),
|
||||||
Rotation = Rotation.ToProto(),
|
Rotation = Rotation.ToProto(),
|
||||||
|
|
||||||
Type =(int) ObjectTypeIndex.Enemy,
|
Type =(int) ObjectTypeIndex.Enemy,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,13 @@ namespace Campofinale.Game.MissionSys
|
|||||||
}
|
}
|
||||||
public ScSyncAllMission ToProto()
|
public ScSyncAllMission ToProto()
|
||||||
{
|
{
|
||||||
|
if (!Server.config.serverOptions.missionsEnabled)
|
||||||
|
{
|
||||||
|
string json1 = File.ReadAllText("44_ScSyncAllMission.json");
|
||||||
|
ScSyncAllMission m = Newtonsoft.Json.JsonConvert.DeserializeObject<ScSyncAllMission>(json1);
|
||||||
|
m.TrackMissionId = "";
|
||||||
|
return m;
|
||||||
|
}
|
||||||
ScSyncAllMission sync = new ScSyncAllMission();
|
ScSyncAllMission sync = new ScSyncAllMission();
|
||||||
sync.TrackMissionId = curMission;
|
sync.TrackMissionId = curMission;
|
||||||
missions.ForEach(m =>
|
missions.ForEach(m =>
|
||||||
@@ -71,18 +78,23 @@ namespace Campofinale.Game.MissionSys
|
|||||||
}
|
}
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
|
DatabaseManager.db.UpsertMissionData(new MissionData()
|
||||||
|
{
|
||||||
|
roleId=owner.roleId,
|
||||||
|
curMission=curMission,
|
||||||
|
missions=missions,
|
||||||
|
quests=quests,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
|
MissionData data= DatabaseManager.db.LoadMissionData(owner.roleId);
|
||||||
if (ResourceManager.missionDataTable.Count < 1)
|
if (data != null)
|
||||||
{
|
{
|
||||||
//Disabling if no missions
|
curMission = data.curMission;
|
||||||
return;
|
missions = data.missions;
|
||||||
|
quests = data.quests;
|
||||||
}
|
}
|
||||||
//TODO Saving and first initialization
|
|
||||||
AddMission("e0m0",MissionState.Processing);
|
|
||||||
}
|
}
|
||||||
public void AddMission(string id,MissionState state = MissionState.Available, bool notify=false)
|
public void AddMission(string id,MissionState state = MissionState.Available, bool notify=false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -215,7 +215,6 @@ namespace Campofinale.Game
|
|||||||
{
|
{
|
||||||
return scenes.Find(s=>s.sceneNumId == sceneNumId).guid;
|
return scenes.Find(s=>s.sceneNumId == sceneNumId).guid;
|
||||||
}
|
}
|
||||||
//TODO Save and get
|
|
||||||
public void Load()
|
public void Load()
|
||||||
{
|
{
|
||||||
foreach (var level in ResourceManager.levelDatas)
|
foreach (var level in ResourceManager.levelDatas)
|
||||||
@@ -335,19 +334,20 @@ namespace Campofinale.Game
|
|||||||
lv_scene.levelData.enemies.ForEach(en =>
|
lv_scene.levelData.enemies.ForEach(en =>
|
||||||
{
|
{
|
||||||
if(GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId != 87) 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,
|
||||||
belongLevelScriptId=en.belongLevelScriptId,
|
belongLevelScriptId=en.belongLevelScriptId,
|
||||||
levelLogicId = en.levelLogicId
|
levelLogicId = en.levelLogicId,
|
||||||
|
|
||||||
};
|
};
|
||||||
entities.Add(entity);
|
entities.Add(entity);
|
||||||
});
|
});
|
||||||
lv_scene.levelData.npcs.ForEach(en =>
|
lv_scene.levelData.npcs.ForEach(en =>
|
||||||
{
|
{
|
||||||
if (en.defaultHide) return;
|
|
||||||
if (en.npcGroupId.Contains("chr")) return;
|
if (en.npcGroupId.Contains("chr") && sceneNumId== 99) return;
|
||||||
EntityNpc entity = new(en.entityDataIdKey,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
|
EntityNpc entity = new(en.entityDataIdKey,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
|
||||||
{
|
{
|
||||||
belongLevelScriptId = en.belongLevelScriptId,
|
belongLevelScriptId = en.belongLevelScriptId,
|
||||||
@@ -359,8 +359,19 @@ namespace Campofinale.Game
|
|||||||
});
|
});
|
||||||
GetEntityExcludingChar().ForEach(e =>
|
GetEntityExcludingChar().ForEach(e =>
|
||||||
{
|
{
|
||||||
// GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
if(e is EntityInteractive)
|
||||||
|
{
|
||||||
|
// e.spawned = true;
|
||||||
|
// GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e }));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
GetEntityExcludingChar().FindAll(e=> e is not EntityInteractive).ForEach(e =>
|
||||||
|
{
|
||||||
|
|
||||||
|
// e.spawned = true;
|
||||||
|
// GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e }));
|
||||||
});
|
});
|
||||||
UpdateShowEntities();
|
UpdateShowEntities();
|
||||||
|
|
||||||
@@ -370,10 +381,16 @@ namespace Campofinale.Game
|
|||||||
{
|
{
|
||||||
en.spawned = true;
|
en.spawned = true;
|
||||||
List<Entity> toSpawn = new List<Entity>();
|
List<Entity> toSpawn = new List<Entity>();
|
||||||
if(en.belongLevelScriptId != 0)
|
toSpawn.Add(en);
|
||||||
|
foreach (Entity e in GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == en.belongLevelScriptId && e.spawned == false))
|
||||||
|
{
|
||||||
|
e.spawned = true;
|
||||||
|
toSpawn.Add(e);
|
||||||
|
}
|
||||||
|
/*if(en.belongLevelScriptId != 0)
|
||||||
if (spawnedCheck)
|
if (spawnedCheck)
|
||||||
{
|
{
|
||||||
foreach (Entity e in GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == en.belongLevelScriptId && e.spawned == false))
|
foreach (Entity e in GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == en.belongLevelScriptId && e.spawned == false && e.Position.Distance(GetOwner().position) < 100))
|
||||||
{
|
{
|
||||||
e.spawned = true;
|
e.spawned = true;
|
||||||
toSpawn.Add(e);
|
toSpawn.Add(e);
|
||||||
@@ -387,8 +404,8 @@ namespace Campofinale.Game
|
|||||||
toSpawn.Add(e);
|
toSpawn.Add(e);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
toSpawn.Add(en);
|
|
||||||
toSpawn.ForEach(e =>
|
toSpawn.ForEach(e =>
|
||||||
{
|
{
|
||||||
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
||||||
@@ -397,9 +414,12 @@ namespace Campofinale.Game
|
|||||||
}
|
}
|
||||||
public void UpdateShowEntities()
|
public void UpdateShowEntities()
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach(Entity en in GetEntityExcludingChar())
|
foreach(Entity en in GetEntityExcludingChar())
|
||||||
{
|
{
|
||||||
if (en.Position.Distance(GetOwner().position) < 100)
|
float minDis = en is EntityInteractive ? 180 : 50;
|
||||||
|
//todo new system
|
||||||
|
if (en.Position.DistanceXZ(GetOwner().position) < minDis)
|
||||||
{
|
{
|
||||||
if (!en.spawned)
|
if (!en.spawned)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!Server.hideLog.Contains(cmdId) && Server.config.logOptions.packets)
|
if (!Server.csMessageToHide.Contains(cmdId) && Server.config.logOptions.packets)
|
||||||
Logger.PrintWarn($"Can't find handler for {(Enum.GetName(typeof(CsMsgId), cmdId)).ToString().Pastel(Color.FromArgb(165, 229, 250))} ({(cmdId).ToString().Pastel(Color.FromArgb(165, 229, 250))})");
|
Logger.PrintWarn($"Can't find handler for {(Enum.GetName(typeof(CsMsgId), cmdId)).ToString().Pastel(Color.FromArgb(165, 229, 250))} ({(cmdId).ToString().Pastel(Color.FromArgb(165, 229, 250))})");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
{
|
{
|
||||||
session.bitsetManager.AddValue((BitsetType)req.Type, (int)item);
|
session.bitsetManager.AddValue((BitsetType)req.Type, (int)item);
|
||||||
}
|
}
|
||||||
session.Send(new PacketScBitsetAdd(session,req.Type,req.Value.ToList()));
|
session.Send(new PacketScBitsetAdd(session,req.Type,req.Value.ToList()),packet.csHead.UpSeqid);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using BeyondTools.VFS.Crypto;
|
using BeyondTools.VFS.Crypto;
|
||||||
using Campofinale.Database;
|
using Campofinale.Database;
|
||||||
using Campofinale.Game;
|
using Campofinale.Game;
|
||||||
|
using Campofinale.Game.Character;
|
||||||
using Campofinale.Network;
|
using Campofinale.Network;
|
||||||
using Campofinale.Packets.Sc;
|
using Campofinale.Packets.Sc;
|
||||||
using Campofinale.Protocol;
|
using Campofinale.Protocol;
|
||||||
@@ -16,11 +17,42 @@ namespace Campofinale.Packets.Cs
|
|||||||
public static void HandleCsSetGender(Player session, CsMsgId cmdId, Packet packet)
|
public static void HandleCsSetGender(Player session, CsMsgId cmdId, Packet packet)
|
||||||
{
|
{
|
||||||
CsSetGender req = packet.DecodeBody<CsSetGender>();
|
CsSetGender req = packet.DecodeBody<CsSetGender>();
|
||||||
|
if(session.chars.Count < 2)
|
||||||
|
{
|
||||||
|
if (req.Gender == Gender.GenMale)
|
||||||
|
{
|
||||||
|
session.AddCharacter("chr_0002_endminm", true);
|
||||||
|
session.RemoveCharacter("chr_0003_endminf");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
session.AddCharacter("chr_0003_endminf", true);
|
||||||
|
session.RemoveCharacter("chr_0002_endminm");
|
||||||
|
}
|
||||||
|
session.teamIndex = 0;
|
||||||
|
session.teams[0].leader = session.chars[0].guid;
|
||||||
|
session.teams[0].members = new() { session.chars[0].guid };
|
||||||
|
ScCharBagSetTeam setTeam = new()
|
||||||
|
{
|
||||||
|
CharTeam = { session.teams[0].members },
|
||||||
|
LeaderId = session.teams[0].leader,
|
||||||
|
ScopeName = 1,
|
||||||
|
TeamIndex = 0,
|
||||||
|
TeamType = CharBagTeamType.Main,
|
||||||
|
};
|
||||||
|
|
||||||
|
session.Send(ScMsgId.ScCharBagSetTeam, setTeam);
|
||||||
|
session.Send(new PacketScCharBagSetCurrTeamIndex(session));
|
||||||
|
|
||||||
|
session.Send(new PacketScSelfSceneInfo(session,SelfInfoReasonType.SlrChangeTeam));
|
||||||
|
}
|
||||||
|
|
||||||
ScSetGender rsp = new()
|
ScSetGender rsp = new()
|
||||||
{
|
{
|
||||||
Gender = req.Gender,
|
Gender = req.Gender,
|
||||||
};
|
};
|
||||||
session.gender = rsp.Gender;
|
session.gender = rsp.Gender;
|
||||||
|
|
||||||
session.Send(ScMsgId.ScSetGender, rsp);
|
session.Send(ScMsgId.ScSetGender, rsp);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -95,29 +127,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
session.Send(new PacketScSyncBaseData(session));
|
session.Send(new PacketScSyncBaseData(session));
|
||||||
ScItemBagCommonSync common = new()
|
|
||||||
{
|
|
||||||
LostAndFound = new()
|
|
||||||
{
|
|
||||||
InstList =
|
|
||||||
{
|
|
||||||
new ScdItemGrid()
|
|
||||||
{
|
|
||||||
GridIndex=0,
|
|
||||||
Count=1,
|
|
||||||
Id="item_port_power_pole_2",
|
|
||||||
Inst = new()
|
|
||||||
{
|
|
||||||
InstId=300000000000,
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
};
|
|
||||||
session.Send(ScMsgId.ScItemBagCommonSync, common);
|
|
||||||
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Weapon));
|
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Weapon));
|
||||||
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.WeaponGem));
|
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.WeaponGem));
|
||||||
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Equip));
|
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Equip));
|
||||||
@@ -126,132 +136,7 @@ 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));
|
||||||
string json1 = File.ReadAllText("44_ScSyncAllMission.json");
|
session.Send(new PacketScSyncAllMission(session));
|
||||||
|
|
||||||
|
|
||||||
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 =
|
|
||||||
{
|
|
||||||
{"e0m0", new Mission()
|
|
||||||
{
|
|
||||||
MissionId="e0m0",
|
|
||||||
MissionState=(int)MissionState.Processing,
|
|
||||||
SucceedId=-1,
|
|
||||||
Properties =
|
|
||||||
{
|
|
||||||
{1,new DynamicParameter()
|
|
||||||
{
|
|
||||||
RealType=1,
|
|
||||||
ValueType=1,
|
|
||||||
ValueBoolList =
|
|
||||||
{
|
|
||||||
false
|
|
||||||
}
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
} }
|
|
||||||
},
|
|
||||||
TrackMissionId = "e0m0",
|
|
||||||
|
|
||||||
CurQuests =
|
|
||||||
{
|
|
||||||
|
|
||||||
{"e0m0_q#1", new Quest()
|
|
||||||
{
|
|
||||||
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 =
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
|
|
||||||
session.Send(new PacketScGachaSync(session));
|
session.Send(new PacketScGachaSync(session));
|
||||||
ScSettlementSyncAll settlements = new ScSettlementSyncAll()
|
ScSettlementSyncAll settlements = new ScSettlementSyncAll()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
ScSceneInteractSpInteractive rsp = new()
|
ScSceneInteractSpInteractive rsp = new()
|
||||||
{
|
{
|
||||||
ObjId = req.ObjId,
|
ObjId = req.ObjId,
|
||||||
|
|
||||||
};
|
};
|
||||||
session.Send(ScMsgId.ScSceneInteractSpInteractive, rsp);
|
session.Send(ScMsgId.ScSceneInteractSpInteractive, rsp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,17 +20,14 @@ namespace Campofinale.Packets.Cs
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
ScSceneTriggerClientInteractiveEvent tr = new()
|
||||||
{
|
{
|
||||||
ScSceneTriggerClientInteractiveEvent tr = new()
|
EventName = req.EventName,
|
||||||
{
|
Id = req.Id,
|
||||||
EventName = req.EventName,
|
SceneNumId = req.SceneNumId,
|
||||||
Id = req.Id,
|
|
||||||
SceneNumId = req.SceneNumId,
|
};
|
||||||
|
session.Send(ScMsgId.ScSceneTriggerClientInteractiveEvent, tr);
|
||||||
};
|
|
||||||
session.Send(ScMsgId.ScSceneTriggerClientInteractiveEvent, tr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,16 +11,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
{
|
{
|
||||||
CsSceneSetLastSafeZone req = packet.DecodeBody<CsSceneSetLastSafeZone>();
|
CsSceneSetLastSafeZone req = packet.DecodeBody<CsSceneSetLastSafeZone>();
|
||||||
|
|
||||||
//TODO understand how to work
|
|
||||||
if (req.SceneNumId != session.curSceneNumId)
|
|
||||||
{
|
|
||||||
//session.sceneManager.UnloadCurrent(true);
|
|
||||||
session.curSceneNumId = req.SceneNumId;
|
|
||||||
Logger.Print("Cur Scene id changed by SetLastSafeZone");
|
|
||||||
|
|
||||||
//session.sceneManager.LoadCurrent();
|
|
||||||
//session.EnterScene(req.SceneNumId,new Vector3f(req.Position),new Vector3f(req.Rotation));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using Campofinale.Protocol;
|
|||||||
using Campofinale.Resource;
|
using Campofinale.Resource;
|
||||||
using Campofinale.Resource.Table;
|
using Campofinale.Resource.Table;
|
||||||
using Pastel;
|
using Pastel;
|
||||||
|
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
||||||
|
|
||||||
namespace Campofinale.Packets.Cs
|
namespace Campofinale.Packets.Cs
|
||||||
{
|
{
|
||||||
@@ -34,16 +35,18 @@ namespace Campofinale.Packets.Cs
|
|||||||
public static void HandleCsSceneSetLevelScriptStart(Player session, CsMsgId cmdId, Packet packet)
|
public static void HandleCsSceneSetLevelScriptStart(Player session, CsMsgId cmdId, Packet packet)
|
||||||
{
|
{
|
||||||
CsSceneSetLevelScriptStart req = packet.DecodeBody<CsSceneSetLevelScriptStart>();
|
CsSceneSetLevelScriptStart req = packet.DecodeBody<CsSceneSetLevelScriptStart>();
|
||||||
|
|
||||||
if (req.IsStart)
|
if (req.IsStart)
|
||||||
{
|
{
|
||||||
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
|
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
|
||||||
{
|
{
|
||||||
SceneNumId = req.SceneNumId,
|
SceneNumId = req.SceneNumId,
|
||||||
ScriptId = req.ScriptId,
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
State = 4
|
State = 4
|
||||||
};
|
};
|
||||||
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
|
|
||||||
|
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp,packet.csHead.UpSeqid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -62,6 +65,10 @@ namespace Campofinale.Packets.Cs
|
|||||||
case ScriptActionType.SpawnEnemy:
|
case ScriptActionType.SpawnEnemy:
|
||||||
player.sceneManager.GetCurScene().SpawnEnemy(action.valueUlong[0]);
|
player.sceneManager.GetCurScene().SpawnEnemy(action.valueUlong[0]);
|
||||||
break;
|
break;
|
||||||
|
case ScriptActionType.UnlockSystem:
|
||||||
|
UnlockSystemType type = (UnlockSystemType)Enum.Parse(typeof(UnlockSystemType), action.valueStr[0]);
|
||||||
|
player.UnlockSystem(type);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Logger.PrintWarn("Script Action not implemented");
|
Logger.PrintWarn("Script Action not implemented");
|
||||||
break;
|
break;
|
||||||
@@ -73,7 +80,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
|
|
||||||
CsSceneLevelScriptEventTrigger req = packet.DecodeBody<CsSceneLevelScriptEventTrigger>();
|
CsSceneLevelScriptEventTrigger req = packet.DecodeBody<CsSceneLevelScriptEventTrigger>();
|
||||||
Logger.Print(req.Properties.ToString());
|
Logger.Print(req.Properties.ToString());
|
||||||
|
|
||||||
if (ResourceManager.levelScriptsEvents.TryGetValue(req.EventName, out LevelScriptEvent levelScriptEvent))
|
if (ResourceManager.levelScriptsEvents.TryGetValue(req.EventName, out LevelScriptEvent levelScriptEvent))
|
||||||
{
|
{
|
||||||
Logger.Print($"Event {req.EventName.Pastel(ConsoleColor.Yellow)} Executed.");
|
Logger.Print($"Event {req.EventName.Pastel(ConsoleColor.Yellow)} Executed.");
|
||||||
@@ -90,84 +97,6 @@ namespace Campofinale.Packets.Cs
|
|||||||
Logger.PrintWarn($" ScriptID: {req.ScriptId.ToString().Pastel(ConsoleColor.White)} ");
|
Logger.PrintWarn($" ScriptID: {req.ScriptId.ToString().Pastel(ConsoleColor.White)} ");
|
||||||
Logger.PrintWarn($"]");
|
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()
|
ScSceneUpdateLevelScriptProperty update1 = new()
|
||||||
{
|
{
|
||||||
@@ -175,8 +104,16 @@ namespace Campofinale.Packets.Cs
|
|||||||
ScriptId = req.ScriptId,
|
ScriptId = req.ScriptId,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
LevelScriptData levelscript= ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.Find(l=>l.scriptId == req.ScriptId);
|
||||||
|
if (levelscript != null) {
|
||||||
|
foreach (var item in req.Properties)
|
||||||
|
{
|
||||||
|
int key = levelscript.GetPropertyId(item.Key, new List<int>());
|
||||||
|
update1.Properties.Add(key, item.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1);
|
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1);
|
||||||
ScSceneTriggerClientLevelScriptEvent trigger = new()
|
/*ScSceneTriggerClientLevelScriptEvent trigger = new()
|
||||||
{
|
{
|
||||||
EventName = req.EventName,
|
EventName = req.EventName,
|
||||||
SceneNumId = req.SceneNumId,
|
SceneNumId = req.SceneNumId,
|
||||||
@@ -191,7 +128,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update2);
|
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update2);*/
|
||||||
ScSceneLevelScriptEventTrigger rsp = new ScSceneLevelScriptEventTrigger()
|
ScSceneLevelScriptEventTrigger rsp = new ScSceneLevelScriptEventTrigger()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,12 @@ namespace Campofinale.Packets.Cs
|
|||||||
{
|
{
|
||||||
CsTrackMission req = packet.DecodeBody<CsTrackMission>();
|
CsTrackMission req = packet.DecodeBody<CsTrackMission>();
|
||||||
session.missionSystem.curMission = req.MissionId;
|
session.missionSystem.curMission = req.MissionId;
|
||||||
|
|
||||||
ScTrackMissionChange rsp = new()
|
ScTrackMissionChange rsp = new()
|
||||||
{
|
{
|
||||||
MissionId = req.MissionId
|
MissionId = req.MissionId
|
||||||
};
|
};
|
||||||
session.Send(ScMsgId.ScTrackMissionChange, rsp);
|
session.Send(ScMsgId.ScTrackMissionChange, rsp,packet.csHead.UpSeqid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace Campofinale.Packets.Sc
|
|||||||
SceneNumId = sceneNumId,
|
SceneNumId = sceneNumId,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SetData(ScMsgId.ScEnterSceneNotify, proto);
|
SetData(ScMsgId.ScEnterSceneNotify, proto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ namespace Campofinale.Packets.Sc
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Levelscripts here?
|
//Levelscripts here?
|
||||||
|
if(infoReason!= SelfInfoReasonType.SlrChangeTeam)
|
||||||
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
|
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
|
||||||
{
|
{
|
||||||
LevelScriptInfo script = new LevelScriptInfo()
|
LevelScriptInfo script = new LevelScriptInfo()
|
||||||
|
|||||||
16
Campofinale/Packets/Sc/PacketScSyncAllMission.cs
Normal file
16
Campofinale/Packets/Sc/PacketScSyncAllMission.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using Campofinale.Network;
|
||||||
|
using Campofinale.Protocol;
|
||||||
|
|
||||||
|
namespace Campofinale.Packets.Sc
|
||||||
|
{
|
||||||
|
public class PacketScSyncAllMission : Packet
|
||||||
|
{
|
||||||
|
|
||||||
|
public PacketScSyncAllMission(Player client) {
|
||||||
|
|
||||||
|
|
||||||
|
SetData(ScMsgId.ScSyncAllMission, client.missionSystem.ToProto());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -170,12 +170,13 @@ namespace Campofinale
|
|||||||
}
|
}
|
||||||
bitsetManager.Load(data.bitsets);
|
bitsetManager.Load(data.bitsets);
|
||||||
savedSaveZone = data.savedSafeZone;
|
savedSaveZone = data.savedSafeZone;
|
||||||
|
if(Server.config.serverOptions.missionsEnabled) missionSystem.Load();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Initialize(); //only if no account found
|
Initialize(); //only if no account found
|
||||||
}
|
}
|
||||||
missionSystem.Load();
|
|
||||||
sceneManager.Load();
|
sceneManager.Load();
|
||||||
factoryManager.Load();
|
factoryManager.Load();
|
||||||
return (data != null);
|
return (data != null);
|
||||||
@@ -202,39 +203,80 @@ namespace Campofinale
|
|||||||
{
|
{
|
||||||
return chars.Find(c => c.id==templateId);
|
return chars.Find(c => c.id==templateId);
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Add a character with template id if not present in the chars list *Added in 1.1.6*
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
public void AddCharacter(string id, bool notify = false)
|
||||||
|
{
|
||||||
|
Character chara = GetCharacter(id);
|
||||||
|
if (chara == null)
|
||||||
|
{
|
||||||
|
Character c = new Character(roleId, id, 1);
|
||||||
|
chars.Add(c);
|
||||||
|
if (notify)
|
||||||
|
{
|
||||||
|
Send(new PacketScCharBagAddChar(this,c));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Remove a character using template id *Added in 1.1.6*
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
public void RemoveCharacter(string id)
|
||||||
|
{
|
||||||
|
Character chara = GetCharacter(id);
|
||||||
|
if (chara == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chars.Remove(chara);
|
||||||
|
Send(new PacketScCharBagDelChar(this,chara));
|
||||||
|
}
|
||||||
|
public void ReplaceCharacter(string id, string newId)
|
||||||
|
{
|
||||||
|
Character chara = GetCharacter(id);
|
||||||
|
if (chara == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chara.id = newId;
|
||||||
|
Send(new PacketScSyncCharBagInfo(this));
|
||||||
|
}
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
if (Server.config.serverOptions.defaultCharacters.giveAllCharacters)
|
if (Server.config.serverOptions.missionsEnabled)
|
||||||
{
|
{
|
||||||
foreach (var item in ResourceManager.characterTable)
|
chars.Add(new Character(roleId, "chr_0002_endminm", 1));
|
||||||
{
|
missionSystem.AddMission("e0m0", MissionState.Processing);
|
||||||
chars.Add(new Character(roleId, item.Key, Server.config.serverOptions.defaultCharacters.defaultLevel));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var item in Server.config.serverOptions.defaultCharacters.characters)
|
foreach (var item in ResourceManager.characterTable)
|
||||||
{
|
{
|
||||||
chars.Add(new Character(roleId, item, Server.config.serverOptions.defaultCharacters.defaultLevel));
|
chars.Add(new Character(roleId, item.Key, 1));
|
||||||
|
}
|
||||||
|
UnlockImportantSystems();
|
||||||
|
}
|
||||||
|
if (Server.config.serverOptions.giveAllItems)
|
||||||
|
{
|
||||||
|
foreach (var item in itemTable)
|
||||||
|
{
|
||||||
|
if (item.Value.GetStorage() != ItemStorageSpace.BagAndFactoryDepot)
|
||||||
|
{
|
||||||
|
if (item.Value.maxStackCount == -1)
|
||||||
|
{
|
||||||
|
inventoryManager.items.Add(new Item(roleId, item.Value.id, 10000000));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inventoryManager.items.Add(new Item(roleId, item.Value.id, item.Value.maxStackCount));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(var item in itemTable)
|
|
||||||
{
|
|
||||||
if(item.Value.GetStorage()!= ItemStorageSpace.BagAndFactoryDepot)
|
|
||||||
{
|
|
||||||
if (item.Value.maxStackCount == -1)
|
|
||||||
{
|
|
||||||
inventoryManager.items.Add(new Item(roleId, item.Value.id, 10000000));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
inventoryManager.items.Add(new Item(roleId, item.Value.id, item.Value.maxStackCount));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
teams.Add(new Team()
|
teams.Add(new Team()
|
||||||
{
|
{
|
||||||
leader = chars[0].guid,
|
leader = chars[0].guid,
|
||||||
@@ -262,8 +304,8 @@ namespace Campofinale
|
|||||||
}
|
}
|
||||||
|
|
||||||
});*/
|
});*/
|
||||||
|
|
||||||
|
|
||||||
UnlockImportantSystems();
|
|
||||||
spaceshipManager.Load();
|
spaceshipManager.Load();
|
||||||
}
|
}
|
||||||
public void UnlockImportantSystems()
|
public void UnlockImportantSystems()
|
||||||
@@ -511,6 +553,7 @@ namespace Campofinale
|
|||||||
DatabaseManager.db.SavePlayerData(this);
|
DatabaseManager.db.SavePlayerData(this);
|
||||||
inventoryManager.Save();
|
inventoryManager.Save();
|
||||||
spaceshipManager.Save();
|
spaceshipManager.Save();
|
||||||
|
if(Server.config.serverOptions.missionsEnabled) missionSystem.Save();
|
||||||
SaveCharacters();
|
SaveCharacters();
|
||||||
SaveMails();
|
SaveMails();
|
||||||
|
|
||||||
@@ -636,5 +679,17 @@ namespace Campofinale
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Unlock a system
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="none"></param>
|
||||||
|
public void UnlockSystem(UnlockSystemType t)
|
||||||
|
{
|
||||||
|
unlockedSystems.Add((int)t);
|
||||||
|
Send(ScMsgId.ScUnlockSystem, new ScUnlockSystem()
|
||||||
|
{
|
||||||
|
UnlockSystemType = (int)t
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ class Program
|
|||||||
private static void StartServer(string[] args)
|
private static void StartServer(string[] args)
|
||||||
{
|
{
|
||||||
Console.Title = "Initializing...";
|
Console.Title = "Initializing...";
|
||||||
|
|
||||||
//bool disableLogs = args.Length > 0 && args[0].ToLower() == "nologs";
|
|
||||||
|
|
||||||
ConfigFile config = new ConfigFile();
|
ConfigFile config = new ConfigFile();
|
||||||
if (File.Exists("server_config.json"))
|
if (File.Exists("server_config.json"))
|
||||||
{
|
{
|
||||||
@@ -27,7 +24,7 @@ class Program
|
|||||||
}).Start();
|
}).Start();
|
||||||
AppDomain.CurrentDomain.ProcessExit += (_, _) =>
|
AppDomain.CurrentDomain.ProcessExit += (_, _) =>
|
||||||
{
|
{
|
||||||
Console.WriteLine("Shutting down...");
|
Logger.Print("Shutting down...");
|
||||||
|
|
||||||
Server.Shutdown();
|
Server.Shutdown();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -480,6 +480,8 @@ namespace Campofinale.Resource
|
|||||||
public List<string> levelDataPaths;
|
public List<string> levelDataPaths;
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public LevelData levelData;
|
public LevelData levelData;
|
||||||
|
|
||||||
|
//public List<LevelData> levelDataList;
|
||||||
public class LevelData
|
public class LevelData
|
||||||
{
|
{
|
||||||
public string sceneId="";
|
public string sceneId="";
|
||||||
@@ -757,6 +759,13 @@ namespace Campofinale.Resource
|
|||||||
float dz = z - other.z;
|
float dz = z - other.z;
|
||||||
return MathF.Sqrt(dx * dx + dy * dy + dz * dz);
|
return MathF.Sqrt(dx * dx + dy * dy + dz * dz);
|
||||||
}
|
}
|
||||||
|
public float DistanceXZ(Vector3f other)
|
||||||
|
{
|
||||||
|
float dx = x - other.x;
|
||||||
|
float dy = 0;
|
||||||
|
float dz = z - other.z;
|
||||||
|
return MathF.Sqrt(dx * dx + dy * dy + dz * dz);
|
||||||
|
}
|
||||||
public ScdVec3Int ToProtoScd()
|
public ScdVec3Int ToProtoScd()
|
||||||
{
|
{
|
||||||
return new ScdVec3Int()
|
return new ScdVec3Int()
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ namespace Campofinale.Resource.Table
|
|||||||
None = 0,
|
None = 0,
|
||||||
CompleteQuest = 1,
|
CompleteQuest = 1,
|
||||||
ProcessQuest = 2,
|
ProcessQuest = 2,
|
||||||
SpawnEnemy = 3
|
SpawnEnemy = 3,
|
||||||
|
UnlockSystem = 4,
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,7 +174,6 @@ namespace Campofinale
|
|||||||
dispatch = new Dispatch();
|
dispatch = new Dispatch();
|
||||||
dispatch.Start();
|
dispatch.Start();
|
||||||
}
|
}
|
||||||
public static CsMsgId[] hideLog = [];
|
|
||||||
|
|
||||||
public static string ColoredText(string text, string color)
|
public static string ColoredText(string text, string color)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user