component TCModelGlobalChat { TCMessageManagerList _globalChatMessageList; public TCModelGlobalChat() { _globalChatMessageList = new TCMessageManagerList(); _globalChatMessageList.SetLayerName(CHAT_TYPE_PUBLIC); _globalChatMessageList.SetMessageListType(TC_MESSAGELIST_TYPE_ID_GLOBAL); } public void Update(){ _globalChatMessageList.Update(); } public void Exit() { _globalChatMessageList.Clear(); } public void Close() { } //テキストチャットを送信 public void SendTextChat(string message) { _SendChat(message, false); } //エモートスタンプを送信 public void SendEmoteStamp(string emoteIndex) { _SendChat(emoteIndex, true); } //チャット送信用APIのラッパー関数 public void _SendChat(string message, bool IsEmote) { TCModelCommon tcModelCommon; tcModelCommon = system.Layer_GetComponentByName("textchat_common"); // 公開チャット JsVal sendVal = tcModelCommon.GetSharedSendParam(message, IsEmote); if(sendVal === null || sendVal.IsNull()) return; // メッセージを送信 heliport.v3.api.textChat.sendChat(sendVal); // メッセージ送信後の後処理 tcModelCommon.DoSharedSendProcess(); } public void OnReceiveCustomData(string id, string type, string data) { if(type != "NotifyChatGPTMessage"){ return; } _ReceiveChatGPTMessage(data); } public void NotifyChatMessageFromJS(string param) { Json messageJson = hsLoadJson(param); if(messageJson === null) return; } //公開チャットを受け取った際のコールバック public void ReceiveTextChatMessage(string param) { Json messageJson = hsLoadJson(param); if(messageJson === null) return; JsVal messageData = CreateMessageByJson(messageJson); TCMessageGUIManager messageManager = new TCMessageGUIManager(); bool selfMessageFlag = false; messageManager.LoadMessageData(messageData, selfMessageFlag); AddChatMessageList(messageManager); } // ChatGPTからチャットを受け取った時 public void NotifyChatGPTMessageFromJS(string param) { if(param.IsEmpty()) return; _ReceiveChatGPTMessage(param); // 他のプレイヤーに通知 hsNetSendCustomData("NotifyChatGPTMessage", param); } void _ReceiveChatGPTMessage(string param) { if(param.IsEmpty()) return; Json messageJson = hsLoadJson(param); if(messageJson === null) return; TCMessageGUIManager messageManager = new TCMessageGUIManager(); messageManager.LoadChatGPTMessage(messageJson); AddChatMessageList(messageManager); } //メッセージリストに追加(全体テキチャ) void AddChatMessageList(TCMessageGUIManager messageManager){ // 全体チャットのメッセージリストに追加する _globalChatMessageList.Add(messageManager); } private JsVal CreateMessageByJson(Json messageJson){ JsVal messageData = makeJsObj(); // 送信タイプ string messageTypeCode = ""; messageJson.FindValueString("MessageType", messageTypeCode); // 送信者名 string userName = ""; messageJson.FindValueString("UserNameJA", userName); if(userName.IsEmpty()){ messageJson.FindValueString("UserNameEN", userName); } // 送信者アイコン画像URL string userIconURL = ""; messageJson.FindValueString("UserIcon", userIconURL); // 送信者ID (vket_id / guest_id) string userUUID = ""; messageJson.FindValueString("VketID", userUUID); // ログイン判定 string userLogInType = "login"; if(userUUID.IsEmpty()){ // vketIDが無い場合はゲストを取ってくる messageJson.FindValueString("GuestUserID", userUUID); userLogInType = "guest"; } // 送信タイムスタンプ string messageCreatedAt = ""; messageJson.FindValueString("MessageCreatedAt", messageCreatedAt); // 送信内容 string message = ""; messageJson.FindValueString("Message", message); // JsValに登録 messageData.AddPropertyByVal("messageType", makeJsStrFrom(messageTypeCode)); messageData.AddPropertyByVal("userName", makeJsStrFrom(userName)); messageData.AddPropertyByVal("userIconURL", makeJsStrFrom(userIconURL)); messageData.AddPropertyByVal("userID", makeJsStrFrom(userUUID)); messageData.AddPropertyByVal("logInTypeCode", makeJsStrFrom(userLogInType)); messageData.AddPropertyByVal("timestamp", makeJsStrFrom(messageCreatedAt)); messageData.AddPropertyByVal("message", makeJsStrFrom(message)); return messageData; } }