角色添加城镇 和移除的 网络通信逻辑完成
This commit is contained in:
parent
9e7cce285a
commit
ddf3166eae
|
|
@ -70,6 +70,7 @@ l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Object\ActiveObject\CharacterObjectCla
|
|||
|
||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Socket\Socket.nut
|
||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Socket\Packet.nut
|
||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Socket\FunctionalPack.nut
|
||||
|
||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Stage\LodingStage.nut
|
||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Stage\TestStage.nut
|
||||
|
|
|
|||
|
|
@ -64,9 +64,12 @@ class GameObject.Character extends GameObject.ActiveObject {
|
|||
//构造属性对象
|
||||
// Attribute = AttributeClass();
|
||||
|
||||
}
|
||||
|
||||
//开启控制
|
||||
function OpenControl() {
|
||||
//分配控制器
|
||||
Controller = Object_Controller(this);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -175,13 +178,12 @@ class GameObject.Character extends GameObject.ActiveObject {
|
|||
function OnUpdate(Dt) {
|
||||
base.OnUpdate(Dt);
|
||||
//控制器逻辑更新
|
||||
Controller.OnUpdate(Dt);
|
||||
if (Controller) Controller.OnUpdate(Dt);
|
||||
}
|
||||
}
|
||||
|
||||
//通过职业和装备列表来构造一个角色
|
||||
GameObject.CreateCharacter <- function(Job = 0, EquIdList = []) {
|
||||
|
||||
GameObject.CreateCharacter <- function(Job = 0, EquIdList = [], IsPlayer = false) {
|
||||
//构造角色
|
||||
local Character = GameObject.Character();
|
||||
Character.Init(Job);
|
||||
|
|
@ -191,5 +193,9 @@ GameObject.CreateCharacter <- function(Job = 0, EquIdList = []) {
|
|||
Character.ChangeEquipment(EquObj);
|
||||
}
|
||||
}
|
||||
//如果是玩家开启控制器
|
||||
if (IsPlayer) Character.OpenControl();
|
||||
//设置站立模式Ani
|
||||
Character.SetAnimation("RestAni");
|
||||
return Character;
|
||||
}
|
||||
|
|
@ -281,18 +281,6 @@ class Map extends Actor {
|
|||
m_data.npc = Arr;
|
||||
}
|
||||
|
||||
//添加角色的回包
|
||||
function AddCharacterCallBack(Binary) {
|
||||
local Pack = Packet(Binary);
|
||||
|
||||
/*
|
||||
local Charc = GameObject.CreateCharacter(Info.job, Info.equ);
|
||||
local NPCobj = GameObject.NPC(info.id);
|
||||
NPCobj.SetDirection(info.direction);
|
||||
NPCobj.SetPosition(info.xpos, info.ypos, info.zpos);
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
//添加对象
|
||||
function AddObject(obj, IsPlayer = false) {
|
||||
|
|
@ -319,11 +307,24 @@ class Map extends Actor {
|
|||
}
|
||||
}
|
||||
|
||||
//移动城镇的回包
|
||||
function MoveTownCallBack(Jso) {
|
||||
//我自己的移动城镇添加角色对象
|
||||
local MapObj = GlobalTownManager.TownList[Jso.town].map[Jso.region];
|
||||
MapObj.AddObjectByChangeTown(ClientCharacter, Jso.pos);
|
||||
//移除对象
|
||||
function RemoveObject(obj) {
|
||||
LayerObject.normal.Removechild(obj);
|
||||
//角色对象
|
||||
if (typeof obj == "character") {
|
||||
//将地图信息写入角色中
|
||||
obj.MySelfMap = null;
|
||||
}
|
||||
}
|
||||
|
||||
//移除地图中所有的角色对象
|
||||
function RemoveAllCharacterObject() {
|
||||
foreach(obj in LayerObject.normal.Children) {
|
||||
//角色对象
|
||||
if (typeof obj == "character") {
|
||||
RemoveObject(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//移动城镇的添加对象
|
||||
|
|
@ -332,6 +333,8 @@ class Map extends Actor {
|
|||
if (typeof obj == "character") {
|
||||
//角色原城镇
|
||||
local FromMapobj = obj.MySelfMap;
|
||||
//清除原城镇里的玩家
|
||||
FromMapobj.RemoveAllCharacterObject();
|
||||
//背景音乐处理
|
||||
BackGroundMusic = {};
|
||||
if (FromMapobj.BackGroundMusic != null) {
|
||||
|
|
@ -359,12 +362,12 @@ class Map extends Actor {
|
|||
m_camera.SetFromParent(obj);
|
||||
//获取当前场景
|
||||
local Stage = sq_GetCurrentStage();
|
||||
if (GlobalTownManager.CurrentTown) {
|
||||
Stage.Removechild(GlobalTownManager.CurrentTown);
|
||||
if (GlobalTownManager.CurrentMap) {
|
||||
Stage.Removechild(GlobalTownManager.CurrentMap);
|
||||
}
|
||||
Stage.Addchild(this);
|
||||
//添加全局
|
||||
GlobalTownManager.CurrentTown = this.weakref();
|
||||
GlobalTownManager.CurrentMap = this.weakref();
|
||||
|
||||
|
||||
//如果已经处于某个地图中 则先移除
|
||||
|
|
@ -414,9 +417,6 @@ class Map extends Actor {
|
|||
|
||||
// OpenMovableAreaBorder();
|
||||
|
||||
|
||||
MySocket.RegisterHandler(PACKET_ID.CHANGE_TOWN_AREA_CALLBACK, MoveTownCallBack.bindenv(this));
|
||||
MySocket.RegisterBinaryHandler(PACKET_ID.TOWN_ADD_CHARACTER_CALLBACK, AddCharacterCallBack.bindenv(this));
|
||||
}
|
||||
|
||||
//DEBUG方法
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@
|
|||
if (!getroottable().rawin("GlobalTownManager")) {
|
||||
GlobalTownManager <- {};
|
||||
GlobalTownManager.TownList <- {};
|
||||
GlobalTownManager.CurrentTown <- null;
|
||||
//全局当前所在城镇地图
|
||||
GlobalTownManager.CurrentMap <- null;
|
||||
}
|
||||
class Town {
|
||||
//城镇编号
|
||||
|
|
@ -92,13 +93,13 @@ class Town {
|
|||
function AddObject(obj, IsPlayer = false) {
|
||||
//获取当前场景
|
||||
local Stage = sq_GetCurrentStage();
|
||||
if (GlobalTownManager.CurrentTown) {
|
||||
Stage.Removechild(GlobalTownManager.CurrentTown);
|
||||
if (GlobalTownManager.CurrentMap) {
|
||||
Stage.Removechild(GlobalTownManager.CurrentMap);
|
||||
}
|
||||
local SariaRoomMap = map[SariaRoomID];
|
||||
Stage.Addchild(SariaRoomMap);
|
||||
//添加全局
|
||||
GlobalTownManager.CurrentTown = SariaRoomMap.weakref();
|
||||
GlobalTownManager.CurrentMap = SariaRoomMap.weakref();
|
||||
SariaRoomMap.AddObject(obj, IsPlayer);
|
||||
obj.SetPosition(SariaRoomPos);
|
||||
obj.SetAnimation("RestAni");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
文件名:FunctionalPack.nut
|
||||
路径:User/Socket/FunctionalPack.nut
|
||||
创建日期:2025-01-05 00:07
|
||||
文件用途:功能数据包
|
||||
*/
|
||||
|
||||
//注册功能包
|
||||
function RegisterFunctionalPack() {
|
||||
//城镇中添加角色的回包
|
||||
MySocket.RegisterBinaryHandler(PACKET_ID.TOWN_ADD_CHARACTER_CALLBACK, function(Binary) {
|
||||
local Pack = Packet(Binary);
|
||||
local op = Pack.Get_Int();
|
||||
local cid = Pack.Get_Int();
|
||||
local namelen = Pack.Get_Byte();
|
||||
local name = Pack.Get_String(namelen);
|
||||
local job = Pack.Get_Byte();
|
||||
local lv = Pack.Get_Byte();
|
||||
local posx = Pack.Get_Int();
|
||||
local posy = Pack.Get_Int();
|
||||
local posz = 0;
|
||||
local equcount = Pack.Get_Byte();
|
||||
local equ = [];
|
||||
for (local i = 0; i< equcount; i++) {
|
||||
equ.push(Pack.Get_Int());
|
||||
}
|
||||
//构造角色
|
||||
local Charc = GameObject.CreateCharacter(job, equ);
|
||||
Charc.Cid = cid;
|
||||
Charc.SetPosition(posx, posy, posz);
|
||||
//从全局地图中找到城镇并添加角色
|
||||
if (GlobalTownManager.CurrentMap) {
|
||||
GlobalTownManager.CurrentMap.AddObject(Charc);
|
||||
}
|
||||
});
|
||||
|
||||
//城镇中移除角色的回包
|
||||
MySocket.RegisterHandler(PACKET_ID.TOWN_REMOVE_CHARACTER_CALLBACK, function(Jso) {
|
||||
//从全局地图中找到城镇并移除角色
|
||||
if (GlobalTownManager.CurrentMap) {
|
||||
//遍历所有角色
|
||||
foreach(obj in GlobalTownManager.CurrentMap.LayerObject.normal.Children) {
|
||||
//角色对象
|
||||
if (typeof obj == "character" && obj.Cid == Jso.cid) {
|
||||
GlobalTownManager.CurrentMap.RemoveObject(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//移动城镇的回包
|
||||
MySocket.RegisterHandler(PACKET_ID.CHANGE_TOWN_AREA_CALLBACK, function(Jso) {
|
||||
//我自己的移动城镇添加角色对象
|
||||
local MapObj = GlobalTownManager.TownList[Jso.town].map[Jso.region];
|
||||
MapObj.AddObjectByChangeTown(ClientCharacter, Jso.pos);
|
||||
});
|
||||
}
|
||||
|
|
@ -82,7 +82,7 @@ class Packet {
|
|||
|
||||
//获取字符串
|
||||
function Get_String(len) {
|
||||
return stream_myreadstring(len);
|
||||
return stream_myreadstring.pcall(this.Data, len);
|
||||
}
|
||||
|
||||
//获取字节数组
|
||||
|
|
|
|||
|
|
@ -7,6 +7,9 @@
|
|||
function InitGame() {
|
||||
//初始化Socekt连接
|
||||
MySocket("192.168.200.15", 19003);
|
||||
//注册功能包
|
||||
RegisterFunctionalPack();
|
||||
|
||||
// MySocket("127.0.0.1", 19666);
|
||||
|
||||
//设定全局默认音量
|
||||
|
|
|
|||
|
|
@ -360,7 +360,7 @@ class _Select_Character_Window extends Yosin_Window {
|
|||
MySocket.RegisterHandler(PACKET_ID.SELECT_CHARACTER_ENTER_GAME_CALLBACK, function(Jso) {
|
||||
local Info = Jso.charac;
|
||||
local TownObj = Town(Info.town);
|
||||
local Charc = GameObject.CreateCharacter(Info.job, Info.equ);
|
||||
local Charc = GameObject.CreateCharacter(Info.job, Info.equ, true);
|
||||
TownObj.AddObject(Charc, true);
|
||||
ClientCharacter = Charc;
|
||||
}.bindenv(this));
|
||||
|
|
|
|||
|
|
@ -43,4 +43,6 @@ enum PACKET_ID {
|
|||
CHANGE_TOWN_AREA_CALLBACK = 10001
|
||||
//城镇添加角色回包
|
||||
TOWN_ADD_CHARACTER_CALLBACK = 10002
|
||||
//城镇中移除角色的回包
|
||||
TOWN_REMOVE_CHARACTER_CALLBACK = 10003
|
||||
}
|
||||
|
|
@ -250,5 +250,8 @@
|
|||
},
|
||||
"User/Socket/Packet.nut": {
|
||||
"description": "数据包类"
|
||||
},
|
||||
"User/Socket/FunctionalPack.nut": {
|
||||
"description": "功能数据包"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue