hardcoded stuff and every entity is sent only one time when the distance is lower than 250

This commit is contained in:
AlessandroCH 2025-05-17 19:44:21 +02:00
parent 4432406caa
commit e75ada13c0
4 changed files with 147 additions and 28 deletions

View File

@ -301,7 +301,7 @@ namespace Campofinale.Game
lv_scene.levelData.interactives.ForEach(en =>
{
if (en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId))
if (GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId != 87)
{
return;
}
@ -318,7 +318,7 @@ namespace Campofinale.Game
});
lv_scene.levelData.factoryRegions.ForEach(en =>
{
if (en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId))
if (GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId!=87)
{
return;
}
@ -329,11 +329,12 @@ namespace Campofinale.Game
levelLogicId = en.levelLogicId,
type = en.entityType,
};
entities.Add(entity);
});
lv_scene.levelData.enemies.ForEach(en =>
{
if(en.defaultHide || GetOwner().noSpawnAnymore.Contains(en.levelLogicId)) return;
if(GetOwner().noSpawnAnymore.Contains(en.levelLogicId) && sceneNumId != 87) return;
EntityMonster entity = new(en.entityDataIdKey,en.level,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
{
type=en.entityType,
@ -344,7 +345,7 @@ namespace Campofinale.Game
});
lv_scene.levelData.npcs.ForEach(en =>
{
if (en.defaultHide) return;
if (en.npcGroupId.Contains("chr")) return;
EntityNpc entity = new(en.entityDataIdKey,ownerId,en.position,en.rotation, sceneNumId, en.levelLogicId)
{
@ -355,48 +356,71 @@ namespace Campofinale.Game
};
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();
}
public void SpawnEntity(Entity en,bool spawnedCheck=true)
{
en.spawned = true;
List<Entity> toSpawn = new List<Entity>();
toSpawn.Add(en);
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.ForEach(e =>
{
//GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { e}));
});
UpdateShowEntities();
}
public void UpdateShowEntities()
{
foreach(Entity en in GetEntityExcludingChar())
{
if (en.Position.Distance(GetOwner().position) < 200)
if (en.Position.Distance(GetOwner().position) < 250)
{
if (!en.spawned)
{
en.spawned = true;
try
{
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), new List<Entity>() { en }));
}
catch(Exception e)
{
}
SpawnEntity(en);
}
}
else
{
if (en.spawned)
/*if (en.spawned)
{
en.spawned = false;
GetOwner().Send(new PacketScObjectLeaveView(GetOwner(), new List<ulong>() { en.guid }));
en.Position=en.BornPos;
en.Rotation = en.Rotation;
}
}*/
}
}
}
public Player GetOwner()
{
return Server.clients.Find(c => c.roleId == ownerId);

View File

@ -133,8 +133,8 @@ namespace Campofinale.Packets.Cs
m.TrackMissionId = "";
session.Send(ScMsgId.ScSyncAllMission, m);
/* session.Send(ScMsgId.ScSyncAllMission, new ScSyncAllMission()
// session.Send(ScMsgId.ScSyncAllMission, m);
session.Send(ScMsgId.ScSyncAllMission, new ScSyncAllMission()
{
NewMissionTags =
{
@ -180,9 +180,49 @@ namespace Campofinale.Packets.Cs
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 =
{
}
} }
}
});*/
});
session.Send(new PacketScGachaSync(session));
ScSettlementSyncAll settlements = new ScSettlementSyncAll()

View File

@ -2,6 +2,7 @@
using Campofinale.Game.Entities;
using Campofinale.Network;
using Campofinale.Protocol;
using Campofinale.Resource;
namespace Campofinale.Packets.Cs
{
@ -41,6 +42,59 @@ namespace Campofinale.Packets.Cs
{
CsSceneLevelScriptEventTrigger req = packet.DecodeBody<CsSceneLevelScriptEventTrigger>();
Logger.Print(req.Properties.ToString());
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,
});
}
ScSceneUpdateLevelScriptProperty update1 = new()
{
SceneNumId = req.SceneNumId,
@ -67,7 +121,7 @@ namespace Campofinale.Packets.Cs
};
session.Send(ScMsgId.ScSceneLevelScriptEventTrigger, rsp);
session.Send(ScMsgId.ScSceneLevelScriptEventTrigger, rsp,packet.csHead.UpSeqid);
}
}

View File

@ -689,14 +689,15 @@ namespace Campofinale.Resource
public float ToFloat()
{
int intValueFromBit64 = (int)valueBit64; // Converti long in int
float floatValueFromBit64 = BitConverter.ToSingle(BitConverter.GetBytes(intValueFromBit64), 0);
int intValueFromBit64 = (int)valueBit64;
float floatValueFromBit64 = (float)BitConverter.Int64BitsToDouble(valueBit64);
//float floatValueFromBit64 = BitConverter.ToSingle(BitConverter.GetBytes(intValueFromBit64), 0);
return floatValueFromBit64;
}
public int ToInt()
{
int intValueFromBit64 = (int)valueBit64; // Converti long in int
int intValueFromBit64 = (int)valueBit64;
return intValueFromBit64;
}
}