角色添加城镇 和移除的 网络通信逻辑完成
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\Socket.nut
|
||||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Socket\Packet.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\LodingStage.nut
|
||||||
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Stage\TestStage.nut
|
l:\Yosin_Engine\Yosin&Kiwano_DOF\sqr\User\Stage\TestStage.nut
|
||||||
|
|
|
||||||
|
|
@ -64,9 +64,12 @@ class GameObject.Character extends GameObject.ActiveObject {
|
||||||
//构造属性对象
|
//构造属性对象
|
||||||
// Attribute = AttributeClass();
|
// Attribute = AttributeClass();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//开启控制
|
||||||
|
function OpenControl() {
|
||||||
//分配控制器
|
//分配控制器
|
||||||
Controller = Object_Controller(this);
|
Controller = Object_Controller(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -175,13 +178,12 @@ class GameObject.Character extends GameObject.ActiveObject {
|
||||||
function OnUpdate(Dt) {
|
function OnUpdate(Dt) {
|
||||||
base.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();
|
local Character = GameObject.Character();
|
||||||
Character.Init(Job);
|
Character.Init(Job);
|
||||||
|
|
@ -191,5 +193,9 @@ GameObject.CreateCharacter <- function(Job = 0, EquIdList = []) {
|
||||||
Character.ChangeEquipment(EquObj);
|
Character.ChangeEquipment(EquObj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//如果是玩家开启控制器
|
||||||
|
if (IsPlayer) Character.OpenControl();
|
||||||
|
//设置站立模式Ani
|
||||||
|
Character.SetAnimation("RestAni");
|
||||||
return Character;
|
return Character;
|
||||||
}
|
}
|
||||||
|
|
@ -281,18 +281,6 @@ class Map extends Actor {
|
||||||
m_data.npc = Arr;
|
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) {
|
function AddObject(obj, IsPlayer = false) {
|
||||||
|
|
@ -319,11 +307,24 @@ class Map extends Actor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//移动城镇的回包
|
//移除对象
|
||||||
function MoveTownCallBack(Jso) {
|
function RemoveObject(obj) {
|
||||||
//我自己的移动城镇添加角色对象
|
LayerObject.normal.Removechild(obj);
|
||||||
local MapObj = GlobalTownManager.TownList[Jso.town].map[Jso.region];
|
//角色对象
|
||||||
MapObj.AddObjectByChangeTown(ClientCharacter, Jso.pos);
|
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") {
|
if (typeof obj == "character") {
|
||||||
//角色原城镇
|
//角色原城镇
|
||||||
local FromMapobj = obj.MySelfMap;
|
local FromMapobj = obj.MySelfMap;
|
||||||
|
//清除原城镇里的玩家
|
||||||
|
FromMapobj.RemoveAllCharacterObject();
|
||||||
//背景音乐处理
|
//背景音乐处理
|
||||||
BackGroundMusic = {};
|
BackGroundMusic = {};
|
||||||
if (FromMapobj.BackGroundMusic != null) {
|
if (FromMapobj.BackGroundMusic != null) {
|
||||||
|
|
@ -359,12 +362,12 @@ class Map extends Actor {
|
||||||
m_camera.SetFromParent(obj);
|
m_camera.SetFromParent(obj);
|
||||||
//获取当前场景
|
//获取当前场景
|
||||||
local Stage = sq_GetCurrentStage();
|
local Stage = sq_GetCurrentStage();
|
||||||
if (GlobalTownManager.CurrentTown) {
|
if (GlobalTownManager.CurrentMap) {
|
||||||
Stage.Removechild(GlobalTownManager.CurrentTown);
|
Stage.Removechild(GlobalTownManager.CurrentMap);
|
||||||
}
|
}
|
||||||
Stage.Addchild(this);
|
Stage.Addchild(this);
|
||||||
//添加全局
|
//添加全局
|
||||||
GlobalTownManager.CurrentTown = this.weakref();
|
GlobalTownManager.CurrentMap = this.weakref();
|
||||||
|
|
||||||
|
|
||||||
//如果已经处于某个地图中 则先移除
|
//如果已经处于某个地图中 则先移除
|
||||||
|
|
@ -414,9 +417,6 @@ class Map extends Actor {
|
||||||
|
|
||||||
// OpenMovableAreaBorder();
|
// OpenMovableAreaBorder();
|
||||||
|
|
||||||
|
|
||||||
MySocket.RegisterHandler(PACKET_ID.CHANGE_TOWN_AREA_CALLBACK, MoveTownCallBack.bindenv(this));
|
|
||||||
MySocket.RegisterBinaryHandler(PACKET_ID.TOWN_ADD_CHARACTER_CALLBACK, AddCharacterCallBack.bindenv(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DEBUG方法
|
//DEBUG方法
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@
|
||||||
if (!getroottable().rawin("GlobalTownManager")) {
|
if (!getroottable().rawin("GlobalTownManager")) {
|
||||||
GlobalTownManager <- {};
|
GlobalTownManager <- {};
|
||||||
GlobalTownManager.TownList <- {};
|
GlobalTownManager.TownList <- {};
|
||||||
GlobalTownManager.CurrentTown <- null;
|
//全局当前所在城镇地图
|
||||||
|
GlobalTownManager.CurrentMap <- null;
|
||||||
}
|
}
|
||||||
class Town {
|
class Town {
|
||||||
//城镇编号
|
//城镇编号
|
||||||
|
|
@ -92,13 +93,13 @@ class Town {
|
||||||
function AddObject(obj, IsPlayer = false) {
|
function AddObject(obj, IsPlayer = false) {
|
||||||
//获取当前场景
|
//获取当前场景
|
||||||
local Stage = sq_GetCurrentStage();
|
local Stage = sq_GetCurrentStage();
|
||||||
if (GlobalTownManager.CurrentTown) {
|
if (GlobalTownManager.CurrentMap) {
|
||||||
Stage.Removechild(GlobalTownManager.CurrentTown);
|
Stage.Removechild(GlobalTownManager.CurrentMap);
|
||||||
}
|
}
|
||||||
local SariaRoomMap = map[SariaRoomID];
|
local SariaRoomMap = map[SariaRoomID];
|
||||||
Stage.Addchild(SariaRoomMap);
|
Stage.Addchild(SariaRoomMap);
|
||||||
//添加全局
|
//添加全局
|
||||||
GlobalTownManager.CurrentTown = SariaRoomMap.weakref();
|
GlobalTownManager.CurrentMap = SariaRoomMap.weakref();
|
||||||
SariaRoomMap.AddObject(obj, IsPlayer);
|
SariaRoomMap.AddObject(obj, IsPlayer);
|
||||||
obj.SetPosition(SariaRoomPos);
|
obj.SetPosition(SariaRoomPos);
|
||||||
obj.SetAnimation("RestAni");
|
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) {
|
function Get_String(len) {
|
||||||
return stream_myreadstring(len);
|
return stream_myreadstring.pcall(this.Data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取字节数组
|
//获取字节数组
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@
|
||||||
function InitGame() {
|
function InitGame() {
|
||||||
//初始化Socekt连接
|
//初始化Socekt连接
|
||||||
MySocket("192.168.200.15", 19003);
|
MySocket("192.168.200.15", 19003);
|
||||||
|
//注册功能包
|
||||||
|
RegisterFunctionalPack();
|
||||||
|
|
||||||
// MySocket("127.0.0.1", 19666);
|
// 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) {
|
MySocket.RegisterHandler(PACKET_ID.SELECT_CHARACTER_ENTER_GAME_CALLBACK, function(Jso) {
|
||||||
local Info = Jso.charac;
|
local Info = Jso.charac;
|
||||||
local TownObj = Town(Info.town);
|
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);
|
TownObj.AddObject(Charc, true);
|
||||||
ClientCharacter = Charc;
|
ClientCharacter = Charc;
|
||||||
}.bindenv(this));
|
}.bindenv(this));
|
||||||
|
|
|
||||||
|
|
@ -43,4 +43,6 @@ enum PACKET_ID {
|
||||||
CHANGE_TOWN_AREA_CALLBACK = 10001
|
CHANGE_TOWN_AREA_CALLBACK = 10001
|
||||||
//城镇添加角色回包
|
//城镇添加角色回包
|
||||||
TOWN_ADD_CHARACTER_CALLBACK = 10002
|
TOWN_ADD_CHARACTER_CALLBACK = 10002
|
||||||
|
//城镇中移除角色的回包
|
||||||
|
TOWN_REMOVE_CHARACTER_CALLBACK = 10003
|
||||||
}
|
}
|
||||||
|
|
@ -250,5 +250,8 @@
|
||||||
},
|
},
|
||||||
"User/Socket/Packet.nut": {
|
"User/Socket/Packet.nut": {
|
||||||
"description": "数据包类"
|
"description": "数据包类"
|
||||||
|
},
|
||||||
|
"User/Socket/FunctionalPack.nut": {
|
||||||
|
"description": "功能数据包"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue