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 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 class CharactersOptions
|
||||
/*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
|
||||
{
|
||||
}*/
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Campofinale.Game.Character;
|
||||
using Campofinale.Game.Gacha;
|
||||
using Campofinale.Game.Inventory;
|
||||
using Campofinale.Game.MissionSys;
|
||||
using Campofinale.Game.Spaceship;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
@@ -38,6 +39,14 @@ namespace Campofinale.Database
|
||||
public Gender gender = Gender.GenFemale;
|
||||
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 string id;
|
||||
@@ -64,12 +73,17 @@ namespace Campofinale.Database
|
||||
public Database(string connectionString, string dbName)
|
||||
{
|
||||
var client = new MongoClient(connectionString);
|
||||
|
||||
_database = client.GetDatabase(dbName);
|
||||
}
|
||||
public List<Mail> LoadMails(ulong roleId)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return _database.GetCollection<Character>("avatars").Find(c=>c.owner== roleId).ToList();
|
||||
@@ -176,6 +190,19 @@ namespace Campofinale.Database
|
||||
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)
|
||||
{
|
||||
var collection = _database.GetCollection<Account>("accounts");
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Campofinale.Game.Entities
|
||||
{
|
||||
CommonInfo = new()
|
||||
{
|
||||
Hp = 100,
|
||||
Hp = 1,
|
||||
|
||||
Id = guid,
|
||||
Templateid = templateId,
|
||||
|
||||
@@ -19,6 +19,13 @@ namespace Campofinale.Game.MissionSys
|
||||
}
|
||||
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();
|
||||
sync.TrackMissionId = curMission;
|
||||
missions.ForEach(m =>
|
||||
@@ -71,18 +78,23 @@ namespace Campofinale.Game.MissionSys
|
||||
}
|
||||
public void Save()
|
||||
{
|
||||
|
||||
DatabaseManager.db.UpsertMissionData(new MissionData()
|
||||
{
|
||||
roleId=owner.roleId,
|
||||
curMission=curMission,
|
||||
missions=missions,
|
||||
quests=quests,
|
||||
});
|
||||
}
|
||||
public void Load()
|
||||
{
|
||||
|
||||
if (ResourceManager.missionDataTable.Count < 1)
|
||||
MissionData data= DatabaseManager.db.LoadMissionData(owner.roleId);
|
||||
if (data != null)
|
||||
{
|
||||
//Disabling if no missions
|
||||
return;
|
||||
curMission = data.curMission;
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -215,7 +215,6 @@ namespace Campofinale.Game
|
||||
{
|
||||
return scenes.Find(s=>s.sceneNumId == sceneNumId).guid;
|
||||
}
|
||||
//TODO Save and get
|
||||
public void Load()
|
||||
{
|
||||
foreach (var level in ResourceManager.levelDatas)
|
||||
@@ -335,19 +334,20 @@ namespace Campofinale.Game
|
||||
lv_scene.levelData.enemies.ForEach(en =>
|
||||
{
|
||||
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)
|
||||
{
|
||||
type=en.entityType,
|
||||
belongLevelScriptId=en.belongLevelScriptId,
|
||||
levelLogicId = en.levelLogicId
|
||||
levelLogicId = en.levelLogicId,
|
||||
|
||||
};
|
||||
entities.Add(entity);
|
||||
});
|
||||
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)
|
||||
{
|
||||
belongLevelScriptId = en.belongLevelScriptId,
|
||||
@@ -359,8 +359,19 @@ namespace Campofinale.Game
|
||||
});
|
||||
GetEntityExcludingChar().ForEach(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();
|
||||
|
||||
@@ -370,10 +381,16 @@ namespace Campofinale.Game
|
||||
{
|
||||
en.spawned = true;
|
||||
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)
|
||||
{
|
||||
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;
|
||||
toSpawn.Add(e);
|
||||
@@ -387,8 +404,8 @@ namespace Campofinale.Game
|
||||
toSpawn.Add(e);
|
||||
|
||||
}
|
||||
}
|
||||
toSpawn.Add(en);
|
||||
}*/
|
||||
|
||||
toSpawn.ForEach(e =>
|
||||
{
|
||||
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
|
||||
@@ -397,9 +414,12 @@ namespace Campofinale.Game
|
||||
}
|
||||
public void UpdateShowEntities()
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
}
|
||||
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))})");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace Campofinale.Packets.Cs
|
||||
{
|
||||
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 Campofinale.Database;
|
||||
using Campofinale.Game;
|
||||
using Campofinale.Game.Character;
|
||||
using Campofinale.Network;
|
||||
using Campofinale.Packets.Sc;
|
||||
using Campofinale.Protocol;
|
||||
@@ -16,11 +17,42 @@ namespace Campofinale.Packets.Cs
|
||||
public static void HandleCsSetGender(Player session, CsMsgId cmdId, Packet packet)
|
||||
{
|
||||
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()
|
||||
{
|
||||
Gender = req.Gender,
|
||||
};
|
||||
session.gender = rsp.Gender;
|
||||
|
||||
session.Send(ScMsgId.ScSetGender, rsp);
|
||||
|
||||
}
|
||||
@@ -95,29 +127,7 @@ namespace Campofinale.Packets.Cs
|
||||
return;
|
||||
}
|
||||
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.WeaponGem));
|
||||
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 PacketScSyncAllMail(session));
|
||||
session.Send(new PacketScSceneCollectionSync(session));
|
||||
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 =
|
||||
{
|
||||
{"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 PacketScSyncAllMission(session));
|
||||
session.Send(new PacketScGachaSync(session));
|
||||
ScSettlementSyncAll settlements = new ScSettlementSyncAll()
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@ namespace Campofinale.Packets.Cs
|
||||
ScSceneInteractSpInteractive rsp = new()
|
||||
{
|
||||
ObjId = req.ObjId,
|
||||
|
||||
};
|
||||
session.Send(ScMsgId.ScSceneInteractSpInteractive, rsp);
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ namespace Campofinale.Packets.Cs
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
ScSceneTriggerClientInteractiveEvent tr = new()
|
||||
{
|
||||
EventName = req.EventName,
|
||||
@@ -31,7 +29,6 @@ namespace Campofinale.Packets.Cs
|
||||
};
|
||||
session.Send(ScMsgId.ScSceneTriggerClientInteractiveEvent, tr);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -11,16 +11,7 @@ namespace Campofinale.Packets.Cs
|
||||
{
|
||||
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.Table;
|
||||
using Pastel;
|
||||
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
|
||||
|
||||
namespace Campofinale.Packets.Cs
|
||||
{
|
||||
@@ -34,6 +35,7 @@ namespace Campofinale.Packets.Cs
|
||||
public static void HandleCsSceneSetLevelScriptStart(Player session, CsMsgId cmdId, Packet packet)
|
||||
{
|
||||
CsSceneSetLevelScriptStart req = packet.DecodeBody<CsSceneSetLevelScriptStart>();
|
||||
|
||||
if (req.IsStart)
|
||||
{
|
||||
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
|
||||
@@ -43,7 +45,8 @@ namespace Campofinale.Packets.Cs
|
||||
|
||||
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:
|
||||
player.sceneManager.GetCurScene().SpawnEnemy(action.valueUlong[0]);
|
||||
break;
|
||||
case ScriptActionType.UnlockSystem:
|
||||
UnlockSystemType type = (UnlockSystemType)Enum.Parse(typeof(UnlockSystemType), action.valueStr[0]);
|
||||
player.UnlockSystem(type);
|
||||
break;
|
||||
default:
|
||||
Logger.PrintWarn("Script Action not implemented");
|
||||
break;
|
||||
@@ -90,84 +97,6 @@ namespace Campofinale.Packets.Cs
|
||||
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()
|
||||
{
|
||||
@@ -175,8 +104,16 @@ namespace Campofinale.Packets.Cs
|
||||
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);
|
||||
ScSceneTriggerClientLevelScriptEvent trigger = new()
|
||||
/*ScSceneTriggerClientLevelScriptEvent trigger = new()
|
||||
{
|
||||
EventName = req.EventName,
|
||||
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()
|
||||
{
|
||||
|
||||
|
||||
@@ -10,11 +10,12 @@ namespace Campofinale.Packets.Cs
|
||||
{
|
||||
CsTrackMission req = packet.DecodeBody<CsTrackMission>();
|
||||
session.missionSystem.curMission = req.MissionId;
|
||||
|
||||
ScTrackMissionChange rsp = new()
|
||||
{
|
||||
MissionId = req.MissionId
|
||||
};
|
||||
session.Send(ScMsgId.ScTrackMissionChange, rsp);
|
||||
session.Send(ScMsgId.ScTrackMissionChange, rsp,packet.csHead.UpSeqid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ namespace Campofinale.Packets.Sc
|
||||
});
|
||||
|
||||
//Levelscripts here?
|
||||
if(infoReason!= SelfInfoReasonType.SlrChangeTeam)
|
||||
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
|
||||
{
|
||||
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);
|
||||
savedSaveZone = data.savedSafeZone;
|
||||
if(Server.config.serverOptions.missionsEnabled) missionSystem.Load();
|
||||
}
|
||||
else
|
||||
{
|
||||
Initialize(); //only if no account found
|
||||
}
|
||||
missionSystem.Load();
|
||||
|
||||
sceneManager.Load();
|
||||
factoryManager.Load();
|
||||
return (data != null);
|
||||
@@ -202,23 +203,64 @@ namespace Campofinale
|
||||
{
|
||||
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()
|
||||
{
|
||||
if (Server.config.serverOptions.defaultCharacters.giveAllCharacters)
|
||||
if (Server.config.serverOptions.missionsEnabled)
|
||||
{
|
||||
foreach (var item in ResourceManager.characterTable)
|
||||
{
|
||||
chars.Add(new Character(roleId, item.Key, Server.config.serverOptions.defaultCharacters.defaultLevel));
|
||||
}
|
||||
chars.Add(new Character(roleId, "chr_0002_endminm", 1));
|
||||
missionSystem.AddMission("e0m0", MissionState.Processing);
|
||||
}
|
||||
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)
|
||||
@@ -232,9 +274,9 @@ namespace Campofinale
|
||||
inventoryManager.items.Add(new Item(roleId, item.Value.id, item.Value.maxStackCount));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
teams.Add(new Team()
|
||||
{
|
||||
leader = chars[0].guid,
|
||||
@@ -263,7 +305,7 @@ namespace Campofinale
|
||||
|
||||
});*/
|
||||
|
||||
UnlockImportantSystems();
|
||||
|
||||
spaceshipManager.Load();
|
||||
}
|
||||
public void UnlockImportantSystems()
|
||||
@@ -511,6 +553,7 @@ namespace Campofinale
|
||||
DatabaseManager.db.SavePlayerData(this);
|
||||
inventoryManager.Save();
|
||||
spaceshipManager.Save();
|
||||
if(Server.config.serverOptions.missionsEnabled) missionSystem.Save();
|
||||
SaveCharacters();
|
||||
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)
|
||||
{
|
||||
Console.Title = "Initializing...";
|
||||
|
||||
//bool disableLogs = args.Length > 0 && args[0].ToLower() == "nologs";
|
||||
|
||||
ConfigFile config = new ConfigFile();
|
||||
if (File.Exists("server_config.json"))
|
||||
{
|
||||
@@ -27,7 +24,7 @@ class Program
|
||||
}).Start();
|
||||
AppDomain.CurrentDomain.ProcessExit += (_, _) =>
|
||||
{
|
||||
Console.WriteLine("Shutting down...");
|
||||
Logger.Print("Shutting down...");
|
||||
|
||||
Server.Shutdown();
|
||||
};
|
||||
|
||||
@@ -480,6 +480,8 @@ namespace Campofinale.Resource
|
||||
public List<string> levelDataPaths;
|
||||
[JsonIgnore]
|
||||
public LevelData levelData;
|
||||
|
||||
//public List<LevelData> levelDataList;
|
||||
public class LevelData
|
||||
{
|
||||
public string sceneId="";
|
||||
@@ -757,6 +759,13 @@ namespace Campofinale.Resource
|
||||
float dz = z - other.z;
|
||||
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()
|
||||
{
|
||||
return new ScdVec3Int()
|
||||
|
||||
@@ -24,7 +24,8 @@ namespace Campofinale.Resource.Table
|
||||
None = 0,
|
||||
CompleteQuest = 1,
|
||||
ProcessQuest = 2,
|
||||
SpawnEnemy = 3
|
||||
SpawnEnemy = 3,
|
||||
UnlockSystem = 4,
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +174,6 @@ namespace Campofinale
|
||||
dispatch = new Dispatch();
|
||||
dispatch.Start();
|
||||
}
|
||||
public static CsMsgId[] hideLog = [];
|
||||
|
||||
public static string ColoredText(string text, string color)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user