add handlr input

This commit is contained in:
CuongNV
2026-03-16 11:25:31 +07:00
parent 67b6d6f388
commit 37bc21271b
6 changed files with 543 additions and 563 deletions
+231
View File
@@ -0,0 +1,231 @@
/*
using UnityEngine;
using System.Collections.Generic;
using BrewMonster.Network;
using CSNetwork.GPDataType;
namespace BrewMonster.Scripts.ChatUI
{
public class ChatCommandProcessor
{
private struct ChatHistoryEntry
{
public ChatChannel channel;
public float time;
public string message;
}
private static List<ChatHistoryEntry> _history = new List<ChatHistoryEntry>();
private const int MAX_HISTORY = 10;
private static float _lastFarCryTime = 0;
private static float _lastSuperFarCryTime = 0;
public struct ProcessResult
{
public bool success;
public ChatChannel channel;
public string message;
public string targetPlayer; // For whisper
public int itemPack;
public int itemSlot;
public string errorString;
public bool showConfirmation;
public int confirmationStringId;
}
public static ProcessResult Process(string text, int itemPack = -1, int itemSlot = -1)
{
ProcessResult result = new ProcessResult
{
success = false,
channel = ChatChannel.GP_CHAT_LOCAL,
message = text,
itemPack = itemPack,
itemSlot = itemSlot,
showConfirmation = false
};
if (string.IsNullOrWhiteSpace(text))
{
return result;
}
// Flood protection
float now = Time.time;
if (_history.Count > 0)
{
var last = _history[_history.Count - 1];
if (now - last.time <= 1.0f)
{
result.errorString = GetStringFromTable(272);
return result;
}
foreach (var entry in _history)
{
if (entry.channel != ChatChannel.GP_CHAT_WHISPER &&
entry.message == text &&
now - entry.time <= 6.0f)
{
result.errorString = GetStringFromTable(273);
return result;
}
}
}
// Debug commands
if (text == "##debug")
{
// Toggle console logic here if needed
result.success = true;
return result;
}
string pszMsg = text;
ChatChannel channel = ChatChannel.GP_CHAT_LOCAL;
if (text.Length >= 2 && text.StartsWith("!!"))
{
channel = ChatChannel.GP_CHAT_TEAM;
pszMsg = text.Substring(2);
}
else if (text.Length >= 2 && text.StartsWith("!~"))
{
channel = ChatChannel.GP_CHAT_FACTION;
pszMsg = text.Substring(2);
}
else if (text.Length >= 2 && text.StartsWith("!@"))
{
channel = ChatChannel.GP_CHAT_FARCRY;
pszMsg = text.Substring(2);
// Requirement check
int itemNum = GetPlayerItemCount(12979) + GetPlayerItemCount(36092);
if (itemNum < 1 || GetPlayerLevel() < 5)
{
result.errorString = GetStringFromTable(731);
return result;
}
if (now - _lastFarCryTime <= 1.0f)
{
result.errorString = GetStringFromTable(730);
return result;
}
result.showConfirmation = true;
result.confirmationStringId = 732;
}
else if (text.Length >= 2 && text.StartsWith("!#"))
{
channel = ChatChannel.GP_CHAT_SUPERFARCRY;
pszMsg = text.Substring(2);
int itemNum = GetPlayerItemCount(27728) + GetPlayerItemCount(27729);
if (itemNum < 1)
{
result.errorString = GetStringFromTable(8531);
return result;
}
if (now - _lastSuperFarCryTime <= 1.0f)
{
result.errorString = GetStringFromTable(8530);
return result;
}
result.showConfirmation = true;
result.confirmationStringId = 8532;
}
else if (text.Length >= 1 && text.StartsWith("$"))
{
if (HasCountryChannel())
{
channel = ChatChannel.GP_CHAT_COUNTRY;
pszMsg = text.Substring(1);
// Add king/money checks if needed
}
else
{
channel = ChatChannel.GP_CHAT_TRADE;
pszMsg = text.Substring(1);
if (GetPlayerLevel() <= 30)
{
result.errorString = GetStringFromTable(530);
return result;
}
}
}
else if (text.Length >= 1 && text.StartsWith("/"))
{
string cmdPart = text.Substring(1);
int spaceIdx = cmdPart.IndexOf(' ');
if (spaceIdx > 0)
{
result.targetPlayer = cmdPart.Substring(0, spaceIdx);
pszMsg = cmdPart.Substring(spaceIdx + 1);
channel = ChatChannel.GP_CHAT_WHISPER;
}
else
{
// Maybe just showing help or something
result.errorString = GetStringFromTable(234);
return result;
}
}
else
{
channel = HasCountryWarChannel() ? ChatChannel.GP_CHAT_BATTLE : ChatChannel.GP_CHAT_LOCAL;
pszMsg = text;
}
if (string.IsNullOrWhiteSpace(pszMsg))
{
return result;
}
result.success = true;
result.channel = channel;
result.message = pszMsg;
// Update history
if (_history.Count >= MAX_HISTORY)
_history.RemoveAt(0);
_history.Add(new ChatHistoryEntry { channel = channel, time = now, message = text });
if (channel == ChatChannel.GP_CHAT_FARCRY) _lastFarCryTime = now;
if (channel == ChatChannel.GP_CHAT_SUPERFARCRY) _lastSuperFarCryTime = now;
return result;
}
private static string GetStringFromTable(int id)
{
return CECUIManager.Instance?.GetInGameUIMan()?.GetStringFromTable(id) ?? $"[STR_{id}]";
}
private static int GetPlayerItemCount(int tid)
{
return 0;
//return EC_GameRun.Instance?.GetHostPlayer()?.GetPack()?.GetItemTotalNum(tid) ?? 0;
}
private static int GetPlayerLevel()
{
return 0;
//return EC_GameRun.Instance?.GetHostPlayer()?.GetBasicProps()?.iLevel ?? 0;
}
private static bool HasCountryChannel()
{
return false;
//return EC_GameRun.Instance?.GetHostPlayer()?.HasCountryChannel() ?? false;
}
private static bool HasCountryWarChannel()
{
return false;
//return EC_GameRun.Instance?.GetHostPlayer()?.HasCountryWarChannel() ?? false;
}
}
}
*/