602 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			602 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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);
 | |
|     }
 | |
| 
 | |
|     //发送弹窗公告包(可自定义文字需要客户端修复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();
 | |
|     }
 | |
| 
 | |
|     //发送自定义包
 | |
|     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;
 | |
|     }
 | |
| }
 | |
| 
 | |
| //获取公会名称
 | |
| 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();
 | |
|     }
 | |
| } |