2021-04-08 20:09:59 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Cal.DataTable;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace ET
|
|
|
|
|
{
|
|
|
|
|
[ActorMessageHandler]
|
|
|
|
|
public class G2M_CreateUnitHandler : AMActorRpcHandler<Scene, G2M_CreateUnit, M2G_CreateUnit>
|
|
|
|
|
{
|
|
|
|
|
protected override async ETTask Run(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Log.Debug($"*********************************************************UserId = {request.PlayerId} 开始进入游戏");
|
|
|
|
|
bool isNewUser = false;
|
|
|
|
|
User user = UserComponent.Instance.Get(request.PlayerId);
|
|
|
|
|
if (user == null)
|
|
|
|
|
{
|
|
|
|
|
isNewUser = true;
|
|
|
|
|
user = await UserComponent.Instance.Query(request.PlayerId);
|
|
|
|
|
}
|
|
|
|
|
if (user == null)
|
|
|
|
|
{
|
|
|
|
|
response.Message = $"没有这个玩家";
|
|
|
|
|
Log.Error($"服务器没有这个玩家Id={ request.PlayerId}");
|
|
|
|
|
reply();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!await CheckChangeDB(user))
|
|
|
|
|
{
|
|
|
|
|
response.Message = $"数据调整完毕,请重新登录";
|
|
|
|
|
reply();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Unit unit = MapUnitComponent.Instance.Get(user.Id);
|
|
|
|
|
long id = user.Id;
|
2021-06-29 11:28:15 +08:00
|
|
|
|
int zone = scene.DomainZone();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
NumericComponent num;
|
|
|
|
|
PlayerData data;
|
|
|
|
|
bool isOnline = false;
|
|
|
|
|
if (unit)
|
|
|
|
|
{
|
|
|
|
|
isOnline = true;
|
|
|
|
|
unit.isAgainOnLine = true;
|
|
|
|
|
unit.IsOffline = false;
|
|
|
|
|
Log.Debug($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】 断线之后重新进入游戏了");
|
|
|
|
|
|
|
|
|
|
num = unit.GetComponent<NumericComponent>();
|
|
|
|
|
data = unit.GetComponent<PlayerData>();
|
|
|
|
|
|
|
|
|
|
unit.RemoveComponent<UserGateComponent>();
|
|
|
|
|
unit.AddComponent<UserGateComponent, long>(request.GateSessionId);
|
|
|
|
|
|
2021-04-18 15:54:51 +08:00
|
|
|
|
TeamComponent.Instance.Get(unit.TeamLeaderId);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Log.Debug($"【{request.PlayerId}】 新进入游戏");
|
|
|
|
|
|
|
|
|
|
unit = EntityFactory.CreateWithId<Unit, UnitType>(scene, user.Id, UnitType.Player);
|
|
|
|
|
unit.isAgainOnLine = false;
|
|
|
|
|
user.SkinId = 0;
|
|
|
|
|
|
|
|
|
|
//!移动
|
|
|
|
|
unit.AddComponent<MoveComponent>();
|
|
|
|
|
unit.AddComponent<Position>();
|
|
|
|
|
unit.AddComponent<UnitPathFindComponent>();
|
|
|
|
|
|
2021-08-06 15:04:29 +08:00
|
|
|
|
//!存档
|
|
|
|
|
await UnitHelper.AddComponentFromDB(unit,user.JobId);
|
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
//!自动技能AI
|
|
|
|
|
unit.AddComponent<SkillAI>();
|
|
|
|
|
unit.AddComponent<SkillMgrComponent>();
|
|
|
|
|
unit.AddComponent<ModifierContainerComponent>();
|
2021-05-01 11:27:41 +08:00
|
|
|
|
unit.AddComponent<MapMonsterComponent>();
|
2021-08-06 15:04:29 +08:00
|
|
|
|
|
2021-04-08 20:09:59 +08:00
|
|
|
|
//!通讯相关
|
|
|
|
|
unit.AddComponent<MailBoxComponent>();
|
|
|
|
|
await unit.AddLocation();
|
2021-08-06 15:04:29 +08:00
|
|
|
|
unit.AddComponent<UserGateComponent, long>(request.GateSessionId);
|
|
|
|
|
unit.AddComponent<BrocastComponent, bool>(true);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
MapScene map = unit.GetMapByUnitScene();
|
|
|
|
|
await map.Enter(unit);
|
|
|
|
|
//!队伍
|
2021-04-18 15:54:51 +08:00
|
|
|
|
TeamComponent.Instance.CreateTeam(unit.Id);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
//!战斗组件
|
|
|
|
|
unit.AddComponent<BattleComponent>().BattleType = BattleType.None;
|
2021-04-18 15:54:51 +08:00
|
|
|
|
unit.AddComponent<AttackComponent>();
|
|
|
|
|
unit.AddComponent<TargetableUnitComponent>();
|
2021-08-06 15:04:29 +08:00
|
|
|
|
unit.AddComponent<Combat>();
|
2021-04-09 00:48:56 +08:00
|
|
|
|
|
2021-08-06 15:04:29 +08:00
|
|
|
|
var pet = unit.GetComponent<Pet>();
|
2021-04-10 19:49:32 +08:00
|
|
|
|
Game.EventSystem.Change(pet);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
}
|
|
|
|
|
Log.Debug($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】 组件添加完毕");
|
|
|
|
|
|
|
|
|
|
if (isNewUser)
|
2021-06-29 11:28:15 +08:00
|
|
|
|
{
|
2021-04-08 20:09:59 +08:00
|
|
|
|
UserComponent.Instance.Add(user);
|
2021-06-29 11:28:15 +08:00
|
|
|
|
UserComponent.Instance.Save(user);
|
|
|
|
|
}
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
response.IsOnLine = isOnline;
|
|
|
|
|
reply();
|
2021-05-25 01:14:19 +08:00
|
|
|
|
|
|
|
|
|
//添加技能
|
|
|
|
|
SkillMgrComponent skillMgr = unit.GetComponent<SkillMgrComponent>();
|
|
|
|
|
UnitSkillComponent skillComponent = unit.GetComponent<UnitSkillComponent>();
|
|
|
|
|
foreach (UnitSkill unitSkill in skillComponent.GetLearnedSkills())
|
|
|
|
|
{
|
|
|
|
|
skillMgr.AddSkill(unit, unitSkill);
|
|
|
|
|
}
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
CharacterHelper.SyncNumeric(unit);
|
|
|
|
|
CharacterHelper.RecoverUnit(unit);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Log.Debug($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】请求进入地图完成");
|
|
|
|
|
}
|
|
|
|
|
catch (System.Exception e)
|
|
|
|
|
{
|
|
|
|
|
Log.Error(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async ETTask<bool> CheckChangeDB(User user)
|
|
|
|
|
{
|
|
|
|
|
if (user.isChangeDB) return true;
|
|
|
|
|
Log.Warning($"开始修改{user.Id}的数据");
|
2021-04-11 19:50:39 +08:00
|
|
|
|
Unit unit = await DBComponent.Instance.Query<Unit>(user.Id);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
if (unit == null) return false;
|
|
|
|
|
unit.Domain = Game.Scene;
|
|
|
|
|
|
|
|
|
|
|
2021-04-11 19:50:39 +08:00
|
|
|
|
PlayerData data = unit.GetComponent<PlayerData>();
|
|
|
|
|
Character character = unit.GetComponent<Character>();
|
|
|
|
|
NumericComponent num = unit.GetComponent<NumericComponent>();
|
|
|
|
|
UnitSkillComponent unitSkill = unit.GetComponent<UnitSkillComponent>();
|
|
|
|
|
UserSetting setting = unit.GetComponent<UserSetting>();
|
|
|
|
|
UnitTask unitTask = unit.GetComponent<UnitTask>();
|
|
|
|
|
Bag bag = unit.GetComponent<Bag>();
|
|
|
|
|
UnitScene unitScene = unit.GetComponent<UnitScene>();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
if (unitScene == null)
|
|
|
|
|
unitScene = EntityFactory.CreateWithId<UnitScene>(Game.Scene, user.Id);
|
|
|
|
|
unitScene.Id = user.Id;
|
|
|
|
|
|
2021-06-29 11:28:15 +08:00
|
|
|
|
UnitHelper.SaveComponenet(data);
|
|
|
|
|
UnitHelper.SaveComponenet(character);
|
|
|
|
|
UnitHelper.SaveComponenet(num);
|
|
|
|
|
UnitHelper.SaveComponenet(unitSkill);
|
|
|
|
|
UnitHelper.SaveComponenet(setting);
|
|
|
|
|
UnitHelper.SaveComponenet(unitTask);
|
|
|
|
|
UnitHelper.SaveComponenet(bag);
|
|
|
|
|
UnitHelper.SaveComponenet(unitScene);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
|
|
|
|
|
unit.Dispose();
|
|
|
|
|
user.isChangeDB = true;
|
2021-06-29 11:28:15 +08:00
|
|
|
|
UserComponent.Instance.Save(user);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|