Repository navigation
ZH TW UO Topic conversion compatibility
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
轉換數字、serial 和舊腳本格式。相容名稱可能有限製或明確禁止的操作 - 這在卡上註明。
| 主題 | 命令與解釋 |
|---|---|
| Hex / int | UO.Hex2Int · UO.Int2Hex |
| EUO ↔ Injection | UO.EUO2ID · UO.EUO2Type · UO.EUO2Inj · UO.Inj2EUO |
| EasyUO | UO.GetEasyUO · UO.SetEasyUO |
| Type Conversion | C# 和標準庫 · C# 和標準庫 · C# 和標準庫 · C# 和標準庫 · C# 和標準庫 · C# 和標準庫 |
UO.Hex2Int · UO.Int2Hex · UO.ScanInt · UO.EUO2ID · UO.EUO2Inj · UO.EUO2Type · UO.Inj2EUO
UO.BoxHack · UO.ShutdownWindows
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
UO.Print(UO.Int2Hex(1073746484));var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BoxHack();列印通知,表示 ClassicUO 不需要舊版機用戶端補丁 BoxHack。
沒有參數。
void - 無回傳值。
- ExecuteLegacyManualAlias分支僅呼叫SystemMessage。它不糾正運動、語音、容器或網路協定。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.BoxHack");
UO.BoxHack();參數與執行流程:
- 該訊息描述了不需要舊補丁。
UO.BoxHack();參數與執行流程:
- 相容性程式不會改變遊戲世界。
return RunScenario();
object? RunScenario()
{
CompatibilityNotice();
return null;
}
void CompatibilityNotice()
{
UO.BoxHack();
}參數與執行流程:
- 診斷訊息出現後,繼續執行。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.BoxHack();
UO.Print("continued");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.").
內部實作程式碼,不能作為獨立腳本執行。
case "boxhack":
case "fixtalk":
case "fixwalk":
SystemMessage($"{name}: obsolete native-client patch; ClassicUO does not require it.");
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EUO2ID(object? euo);以 A=0 解碼基數 26 中的 EasyUO 文字表示法。
-
euo— EasyUO 字串/值。字母轉換為大寫;非字母字元將被跳過。
int — 結果 32 位數值;這不是十六進位字串。
- 依序計算value=value*26+(字母-A)。 uint 累加器運作時不受檢查,因此溢位會圍繞 32 位元。空字串和沒有字母的字串給出0。不要尋找世界上的任何物體。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.EUO2ID("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- B 編碼數字1。
var value = UO.EUO2ID("B");
UO.Print(Convert.ToString(value));參數與執行流程:
- 大小寫並不重要;連字符和感嘆號被跳過。
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2ID("b-!");
UO.Print(Convert.ToString(value));
return null;
}參數與執行流程:
- A 代碼為零;結果並未表示找到了物件。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2ID("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: euo (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.EUO2Inj(object? easyValue);以 A=0 解碼基數 26 中的 EasyUO 文字表示法。
-
easyValue— EasyUO 字串/值。字母轉換為大寫;非字母字元將被跳過。
string 是結果serial 注入的十六進位字串。
- 依序計算value=value*26+(字母-A)。 uint 累加器運作時不受檢查,因此溢位會圍繞 32 位元。空字串和沒有字母的字串給出0。不要尋找世界上的任何物體。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.EUO2Inj("B");
UO.Print("EUO2Inj: " + Convert.ToString(result));參數與執行流程:
- B 編碼數字1。
var value = UO.EUO2Inj("B");
UO.Print(Convert.ToString(value));參數與執行流程:
- 大小寫並不重要;連字符和感嘆號被跳過。
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Inj("b-!");
UO.Print(Convert.ToString(value));
return null;
}參數與執行流程:
- A 代碼為零;結果並未表示找到了物件。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2Inj("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: easyValue (Any)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.EUO2Inj. -
InjectionScript.Runtime.InjectionValue.ToString:easyValue.ToString(). -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(unchecked((int)value)).
內部實作程式碼,不能作為獨立腳本執行。
public string EUO2Inj(InjectionValue easyValue)
{
uint value = 0;
foreach (char c in easyValue.ToString().ToUpperInvariant())
{
if (c < 'A' || c > 'Z')
continue;
value = unchecked(value * 26 + (uint)(c - 'A'));
}
return NumberConversions.ToHex(unchecked((int)value));
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.EUO2Type(object? euo);以 A=0 解碼基數 26 中的 EasyUO 文字表示法。
-
euo— EasyUO 字串/值。字母轉換為大寫;非字母字元將被跳過。
int — 結果 32 位數值;這不是十六進位字串。
- 依序計算value=value*26+(字母-A)。 uint 累加器運作時不受檢查,因此溢位會圍繞 32 位元。空字串和沒有字母的字串給出0。不要尋找世界上的任何物體。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.EUO2Type("B");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- B 編碼數字1。
var value = UO.EUO2Type("B");
UO.Print(Convert.ToString(value));參數與執行流程:
- 大小寫並不重要;連字符和感嘆號被跳過。
return RunScenario();
object? RunScenario()
{
var value = UO.EUO2Type("b-!");
UO.Print(Convert.ToString(value));
return null;
}參數與執行流程:
- A 代碼為零;結果並未表示找到了物件。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.EUO2Type("A");
UO.Print(Convert.ToString(value));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: euo (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.DecodeEasyUoId:DecodeEasyUoId(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "euo2id":
case "euo2type": return new InjectionValue(DecodeEasyUoId(Text(0)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Hex2Int(object? value);將數值或數字文字轉換為 int。
-
value— int、double、double-文本或帶有 0x 的十六進位文字。邊緣和標誌周圍允許有空格。這裡不允許使用別名字串“self”/“lasttarget”。
具有 32 位元的 int;十六進位0xFFFFFFFF給出-1。透過範圍檢查將 double 截斷為零。 NumberConversions.ToInt 中的陣列和 null 會導致 0。
- 儘管有這個名稱,十進位文字仍然被接受。無效文字給出FormatException,不支援的類型給出InvalidCastException;溢出double—轉換錯誤。
- 反向格式化為UO.Int2Hex。變換並不能證明對象的存在。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Hex2Int("0x40001234");
UO.Print("Hex2Int: " + Convert.ToString(result));參數與執行流程:
- 將數值或數字文字轉換為 int。
UO.Print(UO.Hex2Int("0x40001234"));參數與執行流程:
- 儘管有這個名稱,十進位文字仍然被接受。無效文字給出FormatException,不支援的類型給出InvalidCastException;溢出double—轉換錯誤。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Hex2Int("255"));
UO.Print(UO.Hex2Int("0xFFFFFFFF"));
return null;
}參數與執行流程:
- 反向格式化為UO.Int2Hex。變換並不能證明對象的存在。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var number = UO.Hex2Int("0x000000FF");
UO.Print(UO.Int2Hex(number));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: value (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Hex2Int. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
內部實作程式碼,不能作為獨立腳本執行。
public int Hex2Int(InjectionValue value) => NumberConversions.ToInt(value);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Inj2EUO(object? serialValue);對於 EasyUO,使用字母 A..Z 編碼32位數serial。
-
serialValue— 到NumberConversions.ToInt 的數字,然後是保留位的無符號 uint。對於別名,首先取得GetSerial/Hex2Int。
string 是常用的基數26,其中 A=0..Z=25。零給出“A”。這不是十六進位或物件名稱。
- 演算法在左側插入字母 A + 值 % 26 並將 uint 除以 26 為零。這是專案自己的轉換,不是Excel A1列號。
- EUO2Inj 執行反向轉換為十六進位字串。編碼不會建立對象,也不會向客戶端請求對象。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Inj2EUO(0);
UO.Print("Inj2EUO: " + Convert.ToString(result));參數與執行流程:
- 對於 EasyUO,使用字母 A..Z 編碼32位數serial。
UO.Print(UO.Inj2EUO(0));參數與執行流程:
- 演算法在左側插入字母 A + 值 % 26 並將 uint 除以 26 為零。這是專案自己的轉換,不是Excel A1列號。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Inj2EUO(26));
UO.Print(UO.Inj2EUO(25));
return null;
}參數與執行流程:
- EUO2Inj 執行反向轉換為十六進位字串。編碼不會建立對象,也不會向客戶端請求對象。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var value = UO.Hex2Int("0x40001234");
var encoded = UO.Inj2EUO(value);
UO.Print(encoded);
UO.Print(UO.EUO2Inj(encoded));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: serialValue (Any)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Inj2EUO. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(serialValue).
內部實作程式碼,不能作為獨立腳本執行。
public string Inj2EUO(InjectionValue serialValue)
{
uint value = unchecked((uint)NumberConversions.ToInt(serialValue));
if (value == 0)
return "A";
var result = new StringBuilder();
while (value > 0)
{
result.Insert(0, (char)('A' + value % 26));
value /= 26;
}
return result.ToString();
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.Int2Hex(object? value);將 int 格式化為十六進位 serial 字串。
-
value- int 或數字/十六進位文字;透過溢位檢查將double截斷為零。找不到物件別名。
string「0xXXXXXXXX」:八個十六進位數字,所有32位int。負值以二進制補碼表示。
- NumberConversions.ToInt 執行轉換,然後 ToHex 使用 X8 格式。例如 -1 給出「0xFFFFFFFF」。無效的數字文字會導致錯誤;這不是對serial是否存在的測試。
- 要表示一個數字,轉換就足夠了;物件的存在由UO.Exists單獨檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Int2Hex(1073746484);
UO.Print("Int2Hex: " + Convert.ToString(result));參數與執行流程:
- 將 int 格式化為十六進位 serial 字串。
UO.Print(UO.Int2Hex(1073746484));參數與執行流程:
- NumberConversions.ToInt 執行轉換,然後 ToHex 使用 X8 格式。例如 -1 給出「0xFFFFFFFF」。無效的數字文字會導致錯誤;這不是對serial是否存在的測試。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Int2Hex(-1));
return null;
}參數與執行流程:
- 要表示一個數字,轉換就足夠了;物件的存在由UO.Exists單獨檢查。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var encoded = UO.Int2Hex(255);
UO.Print(encoded);
UO.Print(UO.Hex2Int(encoded));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: value (Any)
結果: string / String.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Int2Hex. -
InjectionScript.Runtime.NumberConversions.ToHex:NumberConversions.ToHex(NumberConversions.ToInt(value)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(value).
內部實作程式碼,不能作為獨立腳本執行。
public string Int2Hex(InjectionValue value) => NumberConversions.ToHex(NumberConversions.ToInt(value));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ScanInt(object? textValue, object? startValue);尋找字串中第一個帶符號的double/十六進位數字,從位置開始。
-
textValue— 透過 ToString 傳簡訊。搜尋正規表示式 [-+]?(?:0[xX][0-9A-Fa-f]+|\d+) 的第一個符合項。 -
startValue- int,零位UTF-16。限制為0..text.Length;不是1的索引。
int 是第一個被辨識的 32 位數字。沒有符合或號碼不適合 - 0;實數零也給0。
- Regex.Match 套用於 Substring(start)。如果第一个匹配无法转换TryStr2Int,则不会搜索下一个数字。小数部分,例如 .5,不包含在数字标记中。
- 負數開頭變為0,超出行尾的開頭變為text.Length,結果為0。原線不變。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.ScanInt("gold=123", 0);
UO.Print("ScanInt: " + Convert.ToString(result));參數與執行流程:
- 尋找字串中第一個帶符號的double/十六進位數字,從位置開始。
UO.Print(UO.ScanInt("gold=123", 0));參數與執行流程:
- Regex.Match 套用於 Substring(start)。如果第一个匹配无法转换TryStr2Int,则不会搜索下一个数字。小数部分,例如 .5,不包含在数字标记中。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.ScanInt("-7 0xFF", 3));
return null;
}參數與執行流程:
- 負數開頭變為0,超出行尾的開頭變為text.Length,結果為0。原線不變。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
var text = "count=0x20";
var amount = UO.ScanInt(text, 6);
UO.Print(amount);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: textValue (Any), startValue (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ScanInt. -
InjectionScript.Runtime.InjectionValue.ToString:textValue.ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(startValue). -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int(match.Value, out int value).
內部實作程式碼,不能作為獨立腳本執行。
public int ScanInt(InjectionValue textValue, InjectionValue startValue)
{
string text = textValue.ToString() ?? string.Empty;
int start = Math.Max(0, Math.Min(text.Length, NumberConversions.ToInt(startValue)));
Match match = Regex.Match(text.Substring(start), @"[-+]?(?:0[xX][0-9A-Fa-f]+|\d+)", RegexOptions.CultureInvariant);
return match.Success && NumberConversions.TryStr2Int(match.Value, out int value) ? value : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ShutdownWindows(object? state);始終拒絕透過腳本關閉 Windows 的嘗試。
-
state- 舊參數儲存在簽名中,但未使用:任何呼叫都會被阻止。
沒有正常結果:NativeSubrutineException,並顯示訊息「shutdownwindows 被故意阻止:腳本可能無法關閉 Windows」。
- ExecuteLegacyManualAlias 立即拋出異常。不執行任何關閉、重新啟動或啟動外部程序的操作。
- 所有三個範例都故意顯示禁止的呼叫並在運行時失敗。它們不能作為成功關閉的條件。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
try { UO.ShutdownWindows(0); }
catch (Exception error) { UO.Print(error.Message); }參數與執行流程:
- 始終拒絕透過腳本關閉 Windows 的嘗試。
UO.ShutdownWindows(0);參數與執行流程:
- ExecuteLegacyManualAlias 立即拋出異常。不執行任何關閉、重新啟動或啟動外部程序的操作。
return RunScenario();
object? RunScenario()
{
UO.ShutdownWindows(1);
return null;
}參數與執行流程:
- 所有三個範例都故意顯示禁止的呼叫並在運行時失敗。它們不能作為成功關閉的條件。
return new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
private readonly Func<int, Task> WaitAsync;
private readonly string[] Args;
private readonly CancellationToken Cancellation;
private readonly Action Checkpoint;
public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
{
UO = api;
WaitAsync = wait;
Args = args;
Cancellation = cancellation;
Checkpoint = checkpoint;
}
public object? RunScenario()
{
UO.Print("The next command is expected to fail");
UO.ShutdownWindows(0);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: state (Any)
結果: void / Unit.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "shutdownwindows":
throw new NativeSubrutineException("shutdownwindows is intentionally blocked: scripts may not shut down Windows.");ClassicUO — Bad Newbie & C# Scripts IDE