| 
									
										
										
										
											2024-09-16 17:05:26 +08:00
										 |  |  | class User extends Base_C_Object { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     constructor(gObject) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         base.constructor(gObject); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得当前区域 | 
					
						
							|  |  |  |     //@param b boolean | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetArea(b) { | 
					
						
							|  |  |  |         return Sq_CUser_GetAreaIndex(this.C_Object, b); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得当前区域位置 | 
					
						
							|  |  |  |     //@return integer, integer | 
					
						
							|  |  |  |     function GetAreaPos() { | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             X = Sq_CUser_GetPosX(this.C_Object), | 
					
						
							|  |  |  |             Y = Sq_CUser_GetPosY(this.C_Object) | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得朝向 | 
					
						
							|  |  |  |     //@return integer, integer | 
					
						
							|  |  |  |     function GetDirections() { | 
					
						
							|  |  |  |         return Sq_CUser_Direction(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得可见values | 
					
						
							|  |  |  |     //@return integer, integer | 
					
						
							|  |  |  |     function GetVisibleValues() { | 
					
						
							|  |  |  |         return Sq_CUser_GetVisibleValues(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得当前城镇位置 | 
					
						
							|  |  |  |     //@return integer, integer, integer, integer @城镇, 区域, X, Y | 
					
						
							|  |  |  |     function GetLocation() { | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             Pos = this.GetAreaPos(), | 
					
						
							|  |  |  |             Town = Sq_CUser_GetTownIndex(this.C_Object), | 
					
						
							|  |  |  |             Area = Sq_CUser_GetAreaIndex(this.C_Object) | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //账号状态 | 
					
						
							|  |  |  |     //@return integer @after login >= 3 | 
					
						
							|  |  |  |     function GetState() { | 
					
						
							|  |  |  |         return Sq_CUser_GetState(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色数量 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCharacCount() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacCount(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //账号ID | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetUID() { | 
					
						
							|  |  |  |         return Sq_CUser_GetAccId(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //唯一ID | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetUniqueId() { | 
					
						
							|  |  |  |         return Sq_CUser_GetUniqueId(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色ID | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCID() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacNo(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色职业 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCharacJob() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacJob(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色名称 | 
					
						
							|  |  |  |     //@return string | 
					
						
							|  |  |  |     function GetCharacName() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacName(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色等级 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCharacLevel() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacLevel(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //设置角色等级 | 
					
						
							|  |  |  |     //@param new_level integer | 
					
						
							|  |  |  |     //@return boolean | 
					
						
							|  |  |  |     function SetCharacLevel(new_level) { | 
					
						
							|  |  |  |         Sq_CUser_ChangeGmQuestFlag(this.C_Object, 1); | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x0858EFDE"), "int", ["pointer", "pointer", "int"], S_Ptr("0x0"), this.C_Object, new_level); | 
					
						
							|  |  |  |         Sq_CUser_ChangeGmQuestFlag(this.C_Object, 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色转职职业 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCharacGrowType() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacGrowType(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //角色觉醒职业 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetCharacSecondGrowType() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCharacSecondGrowType(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //更改转职职业 转职职业 是否觉醒 | 
					
						
							|  |  |  |     function ChangeGrowType(GrowType, IsAwa) { | 
					
						
							|  |  |  |         Sq_CUser_ChangeGrowType(this.C_Object, GrowType, IsAwa); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //已用疲劳值 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetFatigue() { | 
					
						
							|  |  |  |         return Sq_CUser_GetFatigue(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //最大疲劳值 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetMaxFatigue() { | 
					
						
							|  |  |  |         return Sq_CUser_GetMaxFatigue(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取背包 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetInven() { | 
					
						
							|  |  |  |         local P = Sq_Inven_GetInven(this.C_Object); | 
					
						
							|  |  |  |         if (P) { | 
					
						
							|  |  |  |             return Inven(P, this); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //踢人 | 
					
						
							|  |  |  |     //@param src integer @渠道 | 
					
						
							|  |  |  |     //@param p2 integer | 
					
						
							|  |  |  |     //@param p3 integer | 
					
						
							|  |  |  |     //@return integer @错误码? | 
					
						
							|  |  |  |     function Kick(...) { | 
					
						
							|  |  |  |         local src; | 
					
						
							|  |  |  |         local p2; | 
					
						
							|  |  |  |         local p3; | 
					
						
							|  |  |  |         for (local i = 0; i< vargv.len(); i++) { | 
					
						
							|  |  |  |             if (i == 0) src = vargv[i]; | 
					
						
							|  |  |  |             if (i == 1) p2 = vargv[i]; | 
					
						
							|  |  |  |             if (i == 2) p3 = vargv[i]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return Sq_CUser_DisConnSig(this.C_Object, src ? src : 0, p2 ? p2 : 0, p3 ? p3 : 0) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //踢人 | 
					
						
							|  |  |  |     //@param err @错误号 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function DisConn(err) { | 
					
						
							|  |  |  |         return this.Kick(10, 1, err ? err : 1) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //当前小队/副本 | 
					
						
							|  |  |  |     //@return CParty | 
					
						
							|  |  |  |     function GetParty() { | 
					
						
							|  |  |  |         local Ret = Sq_CUser_GetParty(this.C_Object); | 
					
						
							|  |  |  |         if (Ret) { | 
					
						
							|  |  |  |             return Party(Ret); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //是否在领主塔 | 
					
						
							|  |  |  |     //@return boolean | 
					
						
							|  |  |  |     function CheckInBossTower() { | 
					
						
							|  |  |  |         return (Sq_CUser_CheckInBossTower(this.C_Object) == 1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //是否在龙之路 | 
					
						
							|  |  |  |     //@return boolean | 
					
						
							|  |  |  |     function CheckInBlueMarble() { | 
					
						
							|  |  |  |         return (Sq_CUser_CheckInBlueMarble(this.C_Object) == 1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //是否开启GM权限 | 
					
						
							|  |  |  |     //@return boolean | 
					
						
							|  |  |  |     function IsGmMode() { | 
					
						
							|  |  |  |         return (Sq_CUser_IsGmMode(this.C_Object) != 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取账号上次退出游戏的时间 | 
					
						
							|  |  |  |     function GetCurCharacLastPlayTick() { | 
					
						
							|  |  |  |         return Sq_CUser_GetCurCharacLastPlayTick(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取账号本次登录游戏的时间 | 
					
						
							|  |  |  |     function GetCurCharacLoginTick() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x822F692"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获得公网地址 | 
					
						
							|  |  |  |     //@return integer | 
					
						
							|  |  |  |     function GetIpAddress() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x84EC90A"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发包 | 
					
						
							|  |  |  |     function Send(SPacket) { | 
					
						
							|  |  |  |         Sq_Packet_Send(this.C_Object, SPacket.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-20 19:24:32 +08:00
										 |  |  |     //发送弹窗公告包(可自定义文字需要客户端修复233dll搭配) | 
					
						
							|  |  |  |     function SendNotiBox(Msg, Type) { | 
					
						
							|  |  |  |         local Pack = Packet(); | 
					
						
							|  |  |  |         Pack.Put_Header(0, 233); | 
					
						
							|  |  |  |         Pack.Put_Byte(1); | 
					
						
							|  |  |  |         Pack.Put_Byte(5); | 
					
						
							|  |  |  |         Pack.Put_Int(Msg.len()); | 
					
						
							|  |  |  |         Pack.Put_BinaryEx(Str_Ptr(Msg), Msg.len()); | 
					
						
							|  |  |  |         Pack.Finalize(true); | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x867B8FE"), "int", ["pointer", "int", "pointer"], this.C_Object, Type, Pack.C_Object); | 
					
						
							|  |  |  |         Pack.Delete(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-16 17:05:26 +08:00
										 |  |  |     //发送自定义包 | 
					
						
							|  |  |  |     function SendJso(Jso) { | 
					
						
							|  |  |  |         local Str = Json.Encode(Jso); | 
					
						
							|  |  |  |         if (PacketDebugModel) print("发送包给客户端: " + Str); | 
					
						
							|  |  |  |         local Pack = Packet(); | 
					
						
							|  |  |  |         Pack.Put_Header(1, 130); | 
					
						
							|  |  |  |         Pack.Put_Byte(1); | 
					
						
							|  |  |  |         Pack.Put_Int(Str.len()); | 
					
						
							|  |  |  |         Pack.Put_Binary(Str); | 
					
						
							|  |  |  |         Pack.Finalize(true); | 
					
						
							|  |  |  |         Send(Pack); | 
					
						
							|  |  |  |         Pack.Delete(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发送消息包 | 
					
						
							|  |  |  |     function SendNotiPacket(Type1, Type2, Type3) { | 
					
						
							|  |  |  |         Sq_CUser_SendNotiPacket(this.C_Object, Type1, Type2, Type3); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取技能树 | 
					
						
							|  |  |  |     function GetSkillW() { | 
					
						
							|  |  |  |         return Sq_CUser_GetSkillW(this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //重置技能树 转职编号 是否觉醒 | 
					
						
							|  |  |  |     function InitSkillW(GrowType, IsAwa) { | 
					
						
							|  |  |  |         Sq_CUser_InitSkillW(Sq_CUser_GetSkillW(this.C_Object), GrowType, IsAwa); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发送公告消息 | 
					
						
							|  |  |  |     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); | 
					
						
							|  |  |  |         this.Send(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, 3); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         Pack.Finalize(true); | 
					
						
							|  |  |  |         Send(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); | 
					
						
							|  |  |  |         Send(Pack); | 
					
						
							|  |  |  |         Pack.Delete(); | 
					
						
							|  |  |  |         SendItemSpace(0); | 
					
						
							|  |  |  |         Sq_Delete_Point(SendStrPoint); | 
					
						
							|  |  |  |         for (local i = 0; i< ColorArr.len(); i++) { | 
					
						
							|  |  |  |             Sq_Delete_Point(ColorArr[i]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //调试信息包 | 
					
						
							|  |  |  |     function Debug(Any) { | 
					
						
							|  |  |  |         local Time = date(); | 
					
						
							|  |  |  |         local TStr = format("[%d年%d月%d日%d时%d分%d秒]\n", Time.year, Time.month, Time.day, Time.hour, Time.min, Time.sec); | 
					
						
							|  |  |  |         SendNotiPacketMessage(TStr + Any.tostring(), 8); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发送道具 | 
					
						
							|  |  |  |     function GiveItem(ItemId, ItemCount) { | 
					
						
							|  |  |  |         //如果开了调试 | 
					
						
							|  |  |  |         if ("DebugModelFlag" in getroottable()) { | 
					
						
							|  |  |  |             local Flag = PvfItem.GetPvfItemById(ItemId); | 
					
						
							|  |  |  |             if (!Flag) { | 
					
						
							|  |  |  |                 print("未找到Pvf道具: " + ItemId); | 
					
						
							|  |  |  |                 return null; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         local Info = Sq_CUser_GiveUserItem(this.C_Object, ItemId, ItemCount); | 
					
						
							|  |  |  |         if (Info) { //发送成功就刷新背包 | 
					
						
							|  |  |  |             Sq_CUser_SendUpdateItemList(this.C_Object, 1, Info[0], Info[1]); | 
					
						
							|  |  |  |             return Info; | 
					
						
							|  |  |  |         } else return null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //发送道具 如果背包满则发送邮件 | 
					
						
							|  |  |  |     function GiveItemEx(GiveTab) { | 
					
						
							|  |  |  |         local mitems = {}; | 
					
						
							|  |  |  |         foreach(i, v in GiveTab) { | 
					
						
							|  |  |  |             local Ret = GiveItem(v.id, v.count); | 
					
						
							|  |  |  |             if (!Ret) mitems[v.id] <- v.count; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (mitems.len() > 0) { | 
					
						
							|  |  |  |             SendMail(mitems, { | 
					
						
							|  |  |  |                 Title = "系统", | 
					
						
							|  |  |  |                 Text = "由于你的包裹已满, 请留出足够的空间来接收道具." | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //更新背包栏 | 
					
						
							|  |  |  |     function SendItemSpace(ItemSpace) { | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x865DB6C"), "int", ["pointer", "int"], this.C_Object, ItemSpace); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //更新道具信息 | 
					
						
							|  |  |  |     function SendUpdateItemList(Type, ItemSpace, Slot) { | 
					
						
							|  |  |  |         Sq_CUser_SendUpdateItemList(this.C_Object, Type, ItemSpace, Slot); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //发送系统邮件 | 
					
						
							|  |  |  |     function SendMail(ItemList, ...) { | 
					
						
							|  |  |  |         local SGold = 0; | 
					
						
							|  |  |  |         local STitle = "GM邮件"; | 
					
						
							|  |  |  |         local SText = "这是Gm给您发送的邮件"; | 
					
						
							|  |  |  |         if (vargv.len() > 0) { | 
					
						
							|  |  |  |             local T = vargv[0]; | 
					
						
							|  |  |  |             if ("Gold" in T) SGold = T.Gold; | 
					
						
							|  |  |  |             if ("Title" in T) STitle = T.Title; | 
					
						
							|  |  |  |             if ("Text" in T) SText = T.Text; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         Sq_CUser_SendMail(GetCID(), ItemList, SGold, STitle, SText); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //无条件完成指定任务并领取奖励 | 
					
						
							|  |  |  |     function ClearQuest_Gm(QuestId) { | 
					
						
							|  |  |  |         Sq_CUser_ChangeGmQuestFlag(this.C_Object, 1); | 
					
						
							|  |  |  |         Sq_CUser_QuestAction(this.C_Object, 33, QuestId, 0, 0); | 
					
						
							|  |  |  |         Sq_CUser_QuestAction(this.C_Object, 35, QuestId, 0, 0); | 
					
						
							|  |  |  |         Sq_CUser_QuestAction(this.C_Object, 36, QuestId, -1, 1); | 
					
						
							|  |  |  |         Sq_CUser_RefreshLastQuestTime(this.C_Object); | 
					
						
							|  |  |  |         Sq_CUser_ChangeGmQuestFlag(this.C_Object, 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //充值点券 | 
					
						
							|  |  |  |     function RechargeCera(Amount) { | 
					
						
							|  |  |  |         Sq_CUser_RechargeCoupons(this.C_Object, Amount); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //获取点券 | 
					
						
							|  |  |  |     function GetCera() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x080FDF7A"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //充值代币券 | 
					
						
							|  |  |  |     function RechargeCeraPoint(Amount) { | 
					
						
							|  |  |  |         Sq_CUser_RechargeCouponsPoint(this.C_Object, Amount); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //获取代币券 | 
					
						
							|  |  |  |     function GetCeraPoint() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x08692af6"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //充值金币 | 
					
						
							|  |  |  |     function RechargeMoney(Amount) { | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x84FF29C"), "int", ["pointer", "int", "int", "int", "int"], Sq_CallFunc(S_Ptr("0x80DA28E"), "pointer", ["pointer"], this.C_Object), Amount, 0, 0, 0); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //充值胜点 | 
					
						
							|  |  |  |     function RechargeWinPoint(Amount) { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x0864fd2c"), "int", ["pointer", "int", "int"], this.C_Object, Amount, 6); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //获取胜点 | 
					
						
							|  |  |  |     function GetWinPoint() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x0817a17c"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     //获取复活币 | 
					
						
							|  |  |  |     function GetCoin() { | 
					
						
							|  |  |  |         local Count = Sq_CallFunc(S_Ptr("0x086966b4"), "int", ["pointer"], this.C_Object) + Sq_CallFunc(S_Ptr("0x086966e0"), "int", ["pointer"], this.C_Object) + Sq_CallFunc(S_Ptr("0x0869670c"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |         return Count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //离开队伍 | 
					
						
							|  |  |  |     function LeaveParty() { | 
					
						
							|  |  |  |         local PartyObj = GetParty(); | 
					
						
							|  |  |  |         if (PartyObj) { | 
					
						
							|  |  |  |             PartyObj.LeaveUser(this); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //放弃副本 | 
					
						
							|  |  |  |     function GiveupDgn() { | 
					
						
							|  |  |  |         local PartyObj = GetParty(); | 
					
						
							|  |  |  |         if (PartyObj) { | 
					
						
							|  |  |  |             PartyObj.LeaveUserOnDgn(this); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //设置玩家坐标 | 
					
						
							|  |  |  |     function SetPosition(Xpos, Ypos, Direction) { | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x082F0E2A"), "pointer", ["pointer", "int", "int", "short"], this.C_Object, Xpos, Ypos, Direction); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取玩家任务信息 | 
					
						
							|  |  |  |     function GetQuest() { | 
					
						
							|  |  |  |         return Sq_CallFunc(S_Ptr("0x814AA5E"), "pointer", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //获取玩家账号金库 | 
					
						
							|  |  |  |     function GetAccountCargo() { | 
					
						
							|  |  |  |         local Ret = Sq_CallFunc(S_Ptr("0x0822fc22"), "pointer", ["pointer"], this.C_Object); | 
					
						
							|  |  |  |         if (Ret) return AccountCargo(Ret, this); | 
					
						
							|  |  |  |         else return null; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-10-02 21:00:21 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //获取公会名称 | 
					
						
							|  |  |  | function User::GetGuildName() { | 
					
						
							|  |  |  |     return Sq_CallFunc(S_Ptr("0x869742a"), "string", ["pointer"], this.C_Object); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //获取副职业对象指针 | 
					
						
							|  |  |  | function User::GetCurCharacExpertJob() { | 
					
						
							|  |  |  |     return Sq_CallFunc(S_Ptr("0x822f8d4"), "pointer", ["pointer"], this.C_Object); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //获得角色副职业 | 
					
						
							|  |  |  | function User::GetCurCharacExpertJobType() { | 
					
						
							|  |  |  |     return Sq_CallFunc(S_Ptr("0x822f894"), "int", ["pointer"], this.C_Object); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //调用分解机 | 
					
						
							|  |  |  | function User::DisPatcher_DisJointItem_disjoint(Slot, ...) { | 
					
						
							|  |  |  |     local UseIdx = 239; | 
					
						
							|  |  |  |     local UsePtr = this.C_Object; | 
					
						
							|  |  |  |     if (vargv.len() > 1) { | 
					
						
							|  |  |  |         UseIdx = vargv[0]; | 
					
						
							|  |  |  |         UsePtr = vargv[1]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return Sq_CallFunc(S_Ptr("0x81f92ca"), "int", ["pointer", "int", "int", "int", "pointer", "int"], this.C_Object, Slot, 0, UseIdx, UsePtr, 0xFFFF); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //发送Item邮件 Pubilc | 
					
						
							|  |  |  | function User::SendItemMail(UID, CID, ItemList, title, content) { | 
					
						
							|  |  |  |     local SUser = World.GetUserByUid(UID); | 
					
						
							|  |  |  |     local sql = "select letter_id from taiwan_cain_2nd.postal order by letter_id DESC"; | 
					
						
							|  |  |  |     local column_type_list = ["int"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     local SqlObj = MysqlPool.GetInstance().GetConnect(); | 
					
						
							|  |  |  |     local result = SqlObj.Select(sql, column_type_list); | 
					
						
							|  |  |  |     local sl = 1; | 
					
						
							|  |  |  |     if (result.len() > 0) { | 
					
						
							|  |  |  |         sl = result[0][0] + 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     local time = date(); | 
					
						
							|  |  |  |     local timeStr = time["year"] + "-" + (time["month"] + 1) + "-" + time["day"] + " " + time["hour"] + ":" + time["min"] + ":" + time["sec"]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     foreach(value in ItemList) { | 
					
						
							|  |  |  |         local sql1 = "insert into taiwan_cain_2nd.postal (occ_time,send_charac_name,receive_charac_no,amplify_option,amplify_value,seperate_upgrade,seal_flag,item_id,add_info,upgrade,gold,letter_id,avata_flag,creature_flag) values ('" + timeStr + "','" + title + "'," + CID + ",0,0,0,0," + value.item + "," + value.num + ",0,0," + sl + ",'0','0')"; | 
					
						
							|  |  |  |         SqlObj.Select(sql1, []); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     local sql2 = "insert into taiwan_cain_2nd.letter (letter_id,charac_no,send_charac_name,letter_text,reg_date,stat) values ('" + sl + "'," + CID + ",'" + title + "','" + content + "','" + timeStr + "','1')"; | 
					
						
							|  |  |  |     SqlObj.Select(sql2, []); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MysqlPool.GetInstance().PutConnect(SqlObj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (SUser) { | 
					
						
							|  |  |  |         local Pack = Packet(); | 
					
						
							|  |  |  |         Pack.Put_Header(0, 9); | 
					
						
							|  |  |  |         local MailBox = Sq_CallFunc(S_Ptr("0x0823020C"), "int", ["pointer"], SUser.C_Object); | 
					
						
							|  |  |  |         Sq_CallFunc(S_Ptr("0x0823455A"), "int", ["int"], MailBox); | 
					
						
							|  |  |  |         local Not_Count = Sq_CallFunc(S_Ptr("0x084ED330"), "int", ["int"], MailBox); | 
					
						
							|  |  |  |         Pack.Put_Short(Not_Count); | 
					
						
							|  |  |  |         Pack.Finalize(true); | 
					
						
							|  |  |  |         SUser.Send(Pack); | 
					
						
							|  |  |  |         Pack.Delete(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-09-16 17:05:26 +08:00
										 |  |  | } |