DP-S-Script/Dps_A/BaseClass/WorldClass/WorldClass.nut

207 lines
6.5 KiB
Plaintext

/*
文件名:WorldClass.nut
路径:BaseClass/WorldClass/WorldClass.nut
创建日期:2024-04-07 21:25
文件用途:游戏世界类
*/
class World {
constructor() {}
// 根据UID获取Session
function GetSessionByUid(Uid) {
return Sq_GameWorld_GetSessionByUid(Sq_Get_GameWorld(), Uid);
}
// 根据Session获取玩家
function GetUserBySession(Session) {
local CUser = Sq_GameWorld_GetUserBySession(Sq_Get_GameWorld(), Session);
if (CUser)
return User(CUser);
else
return null;
}
// 根据UID获取玩家
function GetUserByUid(Uid) {
local CUser = Sq_GameWorld_GetUserByUid(Sq_Get_GameWorld(), Uid);
if (CUser)
return User(CUser);
else
return null;
}
// 根据名字获取玩家
function GetUserByName(Name) {
local CUser = Sq_GameWorld_GetUserByName(Sq_Get_GameWorld(), Name);
if (CUser)
return User(CUser);
else
return null;
}
// 获取玩家数量
function GetUserCount() {
return Sq_GameWorld_GetUserCount(Sq_Get_GameWorld());
}
// 给所有玩家发包
function SendAll(Pack) {
Sq_GameWorld_SendAll(Sq_Get_GameWorld(), Pack.C_Object);
}
// 给所有玩家发送公告
function SendNotiPacketMessage(String, Type) {
local Pack = Packet();
Pack.Put_Header(0, 12);
Pack.Put_Byte(Type);
Pack.Put_Short(0);
Pack.Put_Byte(0);
Pack.Put_Int(String.len());
Pack.Put_Binary(String);
Pack.Finalize(true);
World.SendAll(Pack)
Pack.Delete();
}
//发送公告消息 字符串数组
function SendNotiForColorPacketMessage(StringArr, Type) {
local ColorArr = [];
local SendStrBlob = blob(1);
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
foreach(sobj in StringArr) {
local StrPoint = Str_Ptr(sobj[0]);
local StrPointB = Sq_Point2Blob(StrPoint, sobj[0].len());
if (sobj[1]) {
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
SendStrBlob.writeblob(StrPointB);
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
local ColorBlob = blob(104);
for (local i = 0; i< 3; i++) {
ColorBlob.writen(sobj[2][i], 'c');
}
for (local i = 0; i< 101; i++) {
ColorBlob.writen(0xff, 'c');
}
local ColorPoint = Sq_New_Point(104);
Sq_WriteBlobToAddress(ColorPoint, ColorBlob);
ColorArr.append(ColorPoint);
} else {
SendStrBlob.writeblob(StrPointB);
}
}
local SendStrLen = SendStrBlob.len();
local SendStrPoint = Sq_New_Point(SendStrLen);
Sq_WriteBlobToAddress(SendStrPoint, SendStrBlob);
local Pack = Packet();
Pack.Put_Header(0, 370);
Pack.Put_Byte(Type);
Pack.Put_Short(0);
Pack.Put_Byte(3);
Pack.Put_Int(SendStrLen);
Pack.Put_BinaryEx(SendStrPoint, SendStrLen);
Pack.Put_Byte(ColorArr.len());
foreach(color in ColorArr) {
Pack.Put_BinaryEx(color, 104);
}
Pack.Finalize(true);
World.SendAll(Pack)
Pack.Delete();
// SendItemSpace(0);
Sq_Delete_Point(SendStrPoint);
for (local i = 0; i< ColorArr.len(); i++) {
Sq_Delete_Point(ColorArr[i]);
}
}
//发送公告消息 字符串数组 带ID
function SendNotiForColorAIdPacketMessage(StringArr, Type) {
local ColorArr = [];
local SendStrBlob = blob(1);
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
foreach(sobj in StringArr) {
local StrPoint = Str_Ptr(sobj[0]);
local StrPointB = Sq_Point2Blob(StrPoint, sobj[0].len());
if (sobj[1]) {
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
SendStrBlob.writeblob(StrPointB);
SendStrBlob.writen(0xc2, 'c');
SendStrBlob.writen(0x80, 'c');
local ColorBlob = blob(104);
for (local i = 0; i< 3; i++) {
ColorBlob.writen(sobj[2][i], 'c');
}
if (sobj[3]) {
ColorBlob.seek(4);
ColorBlob.writen(sobj[3], 'i');
} else {
for (local i = 0; i< 101; i++) {
ColorBlob.writen(0xff, 'c');
}
}
local ColorPoint = Sq_New_Point(104);
Sq_WriteBlobToAddress(ColorPoint, ColorBlob);
ColorArr.append(ColorPoint);
} else {
SendStrBlob.writeblob(StrPointB);
}
}
local SendStrLen = SendStrBlob.len();
local SendStrPoint = Sq_New_Point(SendStrLen);
Sq_WriteBlobToAddress(SendStrPoint, SendStrBlob);
local Pack = Packet();
Pack.Put_Header(0, 370);
Pack.Put_Byte(Type);
Pack.Put_Short(0);
Pack.Put_Byte(3);
Pack.Put_Int(SendStrLen);
Pack.Put_BinaryEx(SendStrPoint, SendStrLen);
Pack.Put_Byte(ColorArr.len());
foreach(color in ColorArr) {
Pack.Put_BinaryEx(color, 104);
}
Pack.Finalize(true);
World.SendAll(Pack)
Pack.Delete();
// SendItemSpace(0);
Sq_Delete_Point(SendStrPoint);
for (local i = 0; i< ColorArr.len(); i++) {
Sq_Delete_Point(ColorArr[i]);
}
}
//通过UID和CID获取玩家
function GetUserByUidCid(Uid, Cid) {
local SUser = GetUserByUid(Uid);
if (SUser) {
if (SUser.GetState() >= 3) {
if (SUser.GetCID() == Cid) {
return SUser;
}
}
}
return null;
}
//指定角色移动区域
function MoveArea(SUser, TownIndex, AreaIndex, Xpos, Ypos) {
Sq_GameWorld_MoveArea(Sq_Get_GameWorld(), SUser.C_Object, TownIndex, AreaIndex, Xpos, Ypos);
}
//副本进出
function SendDungeonInOut(SUser, Index, Model) {
Sq_GameWorld_SendDungeonInOut(Sq_Get_GameWorld(), SUser.C_Object, Index, Model);
}
//给所有玩家发送队伍包
function SendPartyInfoToAll(Party) {
Sq_GameWorld_SendPartyInfoToAll(Sq_Get_GameWorld(), Party.C_Object);
}
}