Repository navigation
KO UO Topic client connection
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
홈 · C# · IDE · UO API · A–Z · 예 · 언어
연결, 월드 입장 상태, 대기 시간, 서버 주소 및 캐릭터 목록입니다.
| 주제 | 명령 및 설명 |
|---|---|
| Connect | UO.Connect |
| Disconnect | UO.Disconnect |
| Connected | UO.Connected |
| Online | UO.Online |
| Ping | UO.GetPing |
| Server IP | UO.GameServerIPString |
| Shard Name | UO.ShardName |
| Shard Path | UO.ShardPath |
| 캐릭터 목록 | UO.GetCharsListForShard |
| Resend | UO.Resend |
| CheckLag | UO.CheckLag |
UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO
각 명령 카드에는 직접 코드, 함수 및 클래스 등 여러 가지 독립적인 시나리오가 있습니다. 다음은 선택된 짧은 시나리오입니다. 제한사항과 전체 분석이 카드에 포함되어 있습니다.
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;var address = UO.GameServerIPString();
UO.Print(address);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);할당된 시간 내에 게임 서버로부터 새로운 응답을 받았는지 확인합니다. 네트워크 지연 후 스크립트를 계속하기 전에 편리합니다.
-
timeout- 시간 초과 / timeoutMS - 한 번의 시도에 대한 대기 시간(밀리초)으로, int로 변환됩니다. 음수 값은 0으로 제한됩니다. 0를 사용하면 요청이 전송될 수 있지만 응답을 기대할 수는 없습니다. 무한정 타임아웃이 아닙니다. -
timeoutMS- 시간 초과 / timeoutMS - 한 번의 시도에 대한 대기 시간(밀리초)으로, int로 변환됩니다. 음수 값은 0으로 제한됩니다. 0를 사용하면 요청이 전송될 수 있지만 응답을 기대할 수는 없습니다. 무한정 타임아웃이 아닙니다. -
retries- 재시도 - 추가 반복 횟수가 아닌 총 시도 횟수입니다. int로 변환되며 아래는 1로 제한됩니다. 예를 들어 (250, 3) - 250ms에서 최대 3번 시도합니다. 성공적인 응답은 검사를 조기에 완료합니다.
숫자 플래그 int: 1 (조건 충족) - 새로운 응답을 받았습니다. 0 (조건 미충족) - 요청이 불가능하거나 제한 시간이 만료되었습니다. 단일 매개변수 등록 object? 실제로는 이것을 int로 반환합니다. 이는 핑 값이나 시도 횟수가 아닙니다.
- CheckLag()는 한 번 시도하고 최대 10000ms 동안 기다립니다. CheckLag(timeoutMS) - 지정된 기대치를 가지고 한 번 시도합니다. CheckLag(timeout, retries)는 성공하거나 총 시도 횟수가 소진될 때까지 확인을 반복합니다.
- 기다리면 게임 동작을 확인하는 대신 호출 스크립트가 지연됩니다. 이 명령은 다시 연결되지 않으며 네트워크 설정을 변경하지 않습니다. 서버가 에코에 응답하지 않을 수 있습니다. 실패 자체로는 연결이 끊어졌다는 것을 증명할 수 없습니다. 타이밍은 흐름 일정에 따라 달라집니다. 모든 프레임에서 활성 검사를 호출하지 마세요. 스크립트를 중지하면 대기가 중단됩니다.
- UO.GetPing · UO.CheckLag · UO.IsOnline
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.CheckLag();
UO.Print("CheckLag: " + Convert.ToString(result));매개변수와 실행 흐름:
- 매개변수가 없는 양식은 최대 10초까지 기다릴 수 있습니다. true는 새로운 에코 응답을 의미합니다. 숨기기는 별도의 명령으로 호출되며 게임 메커니즘에 의해 무시될 수 있습니다.
if (Truth(Truth(UO.CheckLag()) == true))
{
UO.UseSkill("Hiding");
}
else
{
UO.Print("No fresh server response");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 250 — 한 번의 시도를 기다리는 중, 3 — 총 시도 횟수. 성공하면 더 이상 시도하지 않습니다. 0를 사용하면 스크립트가 계속되지 않습니다. 이는 250 ms 핑 측정이나 세 번의 추가 반복이 아닙니다.
return RunScenario();
object? RunScenario()
{
var responsive = UO.CheckLag(250, 3);
if (Truth(responsive == 0))
{
UO.Print("No response after the allowed attempts");
return null;
}
UO.Print("Fresh response received; the script can continue");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- CanContinue(timeoutMs, 시도)는 먼저 UO.IsOnline를 확인한 다음 최신 답변을 확인합니다. false 및 0는 이 술어와 동일합니다. 500 ms 및 2 시도는 별도로 지정됩니다. 이 기능은 자동 재연결을 트리거하지 않습니다.
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()
{
if (!(Truth(CanContinue(500, 2))))
{
return null;
}
UO.UseSkill("Hiding");
return null;
}
dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
{
if (Truth(Truth(UO.IsOnline()) == false))
{
return false;
}
return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(10_000).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int CheckLag() => bridge.CheckLag(10_000);매개변수: timeoutMS (Any)
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(Arg(0, 10_000)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0, 10_000).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));매개변수: timeout (Any), retries (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.CheckLag. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CheckLag:bridge.CheckLag(timeoutMs).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int CheckLag(InjectionValue timeout, InjectionValue retries)
{
int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));
int attempts = Math.Max(1, NumberConversions.ToInt(retries));
for (int attempt = 0; attempt < attempts; attempt++)
{
if (bridge.CheckLag(timeoutMs) != 0)
return 1;
}
return 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseUO();Client.Game.Exit를 통해 현재 클라이언트 애플리케이션을 종료하도록 요청합니다.
매개변수가 없습니다.
void - 반환 값이 없습니다.
- CloseUO은 같은 다리로 향하고 있습니다. CloseHandle. 종료는 게임 스레드에서 실행됩니다. Client.Game이 누락된 경우 아무런 조치도 취하지 않습니다. 이 명령은 별도의 검프를 종료하는 것이 아닙니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.CloseUO");
UO.CloseUO();매개변수와 실행 흐름:
- 호출은 클라이언트 애플리케이션 종료를 요청합니다.
UO.CloseUO();매개변수와 실행 흐름:
- 이 예에서는 제어된 조건을 보여줍니다. 0 값은 클라이언트를 열린 상태로 유지합니다.
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseUO();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseUO();
}
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseHandle:bridge.CloseHandle().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "closeuo": bridge.CloseHandle(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Connect();현재 클라이언트 세션의 연결 또는 재연결을 요청합니다.
매개변수가 없습니다.
void - 반환 값이 없습니다.
- 관리자 세션에서 SessionControl.RequestConnect을 호출합니다. 독립 실행형 클라이언트에서는 활성/준비된 연결이 변경되지 않은 상태로 유지됩니다.
- GameScene의 경우 업데이트 중에 장면이 변경되지 않도록 저장된 재접속을 계획합니다. LoginScene는 현재 계정과 저장된 비밀번호를 사용하여 Reconnect를 켜고 자동 재연결이 꺼진 경우에도 기억된 샤드/캐릭터로 Connect를 호출합니다.
- 팀은 세상에 들어가기를 기다리고 있지 않습니다. 추가 작업에 연결이 필요한 경우 별도의 대기 후 UO.Connected를 확인하세요.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.Connect");
UO.Connect();매개변수와 실행 흐름:
- 호출은 연결을 시작하기만 합니다.
UO.Connect();매개변수와 실행 흐름:
- 검증을 통해 재요청을 피할 수 있습니다.
return RunScenario();
object? RunScenario()
{
if (!(Truth(UO.Connected())))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 1000ms를 기다린다고 해서 진입이 보장되는 것은 아닙니다. 출력에는 실제 현재 플래그가 표시됩니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
UO.Connect();
await Delay(1000);
UO.Print(Convert.ToString(UO.Connected()));
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ConnectClient:bridge.ConnectClient().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "connect": bridge.ConnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.Connected();현재 세션이 게임 세계에 있는지, 게임 연결이 열려 있는지 확인합니다. 캐릭터 행동 전이나 입장 대기 중에 사용하세요.
매개변수가 없습니다.
int. 1 - 플레이어, 로드된 카드 및 활성 게임 소켓이 동시에 있습니다. 그렇지 않으면 0. 열린 클라이언트 창, 캐릭터 목록 또는 로그인 단계의 TCP 연결은 1를 의미하지 않습니다. 숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이는 숫자 플래그입니다. C#에서 결과를 확인하세요!= 0 또는 결과 == 0입니다. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다.
명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.
- 매개변수가 없습니다: serial, type, 캐릭터 이름 및 IP는 전송할 수 없습니다. UO.Online(), UO.Connected(), UO.IsOnline()도 같은 것을 확인하세요. 이는 다른 관리자 프로필이 아닌 해당 세션 소유자의 상태입니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.Connected();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- false는 0와 동일합니다. return은 Main을 UseSkill로 종료합니다. 스킬 이름인 UseSkill의 유일한 매개변수는 하이드입니다. 1를 사용하면 스크립트는 스킬 사용만을 요청합니다. 결과는 캐릭터와 서버의 상태에 따라 달라집니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
if (Truth(Truth(UO.Connected()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 0과의 비교는 자동 재연결 설정이 아닌 현재 연결 상태를 확인합니다. 인수가 없는 Connect는 저장된 설정을 사용하고 로그인이 완료될 때까지 기다리지 않습니다. 이미 시작된 로그인 중에 명령을 반복해도 두 번째 세션이 생성되어서는 안 됩니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- WaitForWorld(timeoutMs)는 내장 명령이 아닌 완전히 표시된 사용자 정의 함수입니다. 5000 — 예산(밀리초), UO.Wait(50) — 확인 간격. 음수 값은 false를 제공합니다. 0 기성 세계만 허용됩니다. Timer는 초를 측정하므로 그 차이에 1000을 곱합니다. 자동 일시중지는 미리 꺼야 하며, 그렇지 않으면 기본 종료됩니다. 이 함수는 Connect를 호출하지 않으며 시간이 만료되어도 시작된 입력을 취소하지 않습니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Connected())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "connected": return new InjectionValue(bridge.IsOnline());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ConnectedTime();캐릭터가 마지막으로 월드에 성공적으로 진입한 달력 스탬프를 반환합니다. 동일한 작업을 계속하기 전에 대기하거나 일시 중지하는 동안 연결이 변경되었는지 이해하는 데 도움이 됩니다.
매개변수가 없습니다.
double: 1899-12-30의 일수, 소수부 - 시간(OLE 자동화 날짜). 0는 해당 세션 소유자가 아직 세상에 들어오지 않았음을 의미합니다. 연결이 끊긴 후에도 마지막 입력 표시가 유지됩니다. 이것은 bool 또는 초 단위의 기간이 아닙니다.
- 논쟁이 없습니다. 기록은 동일한 세션 소유자의 스크립트에 공통됩니다. 늦은 시작, 일시 중지 및 닫기 IDE는 표시를 변경하지 않습니다. 새로운 세션 프로세스는 새로운 이야기를 시작합니다. 모든 연결에 대한 로그는 아닙니다.
- 월드에 캐릭터가 나타나지 않고 로그인 시도에 실패하면 로그인 성공으로 간주되지 않습니다. 오프라인 확인을 반복해도 종료 시간은 변경되지 않습니다. 현재 상태의 경우 0이 아닌 날짜 대신 UO.Connected()를 사용하세요.
- 시계는 컴퓨터의 로컬 시계에서 가져옵니다. 차이에 86400을 곱하면 달력 초가 됩니다. 시계/시간대를 변경하면 결과가 왜곡될 수 있습니다. 시간 초과의 경우 단조로운 Timer()를 사용합니다. 개별 호출은 원자적 스냅샷을 형성하지 않습니다. 동일한 표시는 고유한 ID 연결이 아닙니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.ConnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 0는 이 특정 프로세스에 입력이 없는지 확인합니다. Connect 저장된 프로필을 사용하며 로그인만 요청합니다. 이 예에서는 이미 종료된 연결을 의도적으로 복원하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
if (Truth(UO.ConnectedTime() == 0))
{
UO.Connect();
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 30.0 — 몇 초 만에 예산 모니터링 Timer; 250 — 간격 UO.Wait(밀리초) 진입 표시를 변경한 후 CancelWaitTarget는 이전 지연 대상을 지웁니다. 새로운 입력이 없으면 이 작업 없이 루프가 종료됩니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
{
UO.CancelWaitTarget();
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- SameConnection(로그인)은 bool을 반환합니다. 표시를 저장하고 500ms 동안 기다린 후 연결이 없거나 입력이 변경되면 계속을 금지합니다. 이는 재테스트이며 향후 서버 가용성을 보장하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var login = UO.ConnectedTime();
await Delay(500);
if (!(Truth(SameConnection(login))))
{
return null;
}
UO.AddToSystemJournal("Same connection; continue this batch");
return null;
}
dynamic SameConnection(dynamic login)
{
return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "connectedtime":
UpdateConnectionState();
return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Disconnect();현재 또는 설치된 클라이언트 전송의 연결을 끊고 다시 연결하기 위한 스크립트를 준비합니다.
매개변수가 없습니다.
void - 반환 값이 없습니다.
- 자동 재연결이 꺼진 경우 BeginScriptControlledDisconnect는 작업자가 나중에 전화할 수 있도록 저장합니다 UO.Connect. 관리자 세션은 RequestDisconnect를 수신합니다.
- 독립형 클라이언트는 Socket.Disconnect 및 PrepareForReconnect를 호출합니다. 전역 재연결이 활성화되면 저장된 장면 전환을 명시적으로 예약합니다. LoginScene에서는 팝업을 지우고 Main을 반환합니다.
- void를 반환하면 재접속 결과가 보고되지 않습니다. 연결 상태는 별도로 읽혀집니다. 자동 재연결 설정을 통해 새로운 로그인을 시작할 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.Disconnect");
UO.Disconnect();매개변수와 실행 흐름:
- 이 명령은 활성 전송과 설치된 전송을 모두 취소합니다.
UO.Disconnect();매개변수와 실행 흐름:
- AR가 비활성화되면 호출 작업자는 스스로 Connect에 연결할 수 있습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.Disconnect();
await Delay(1000);
UO.Connect();
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));매개변수와 실행 흐름:
- 조건은 현재 세션에 대한 로컬 플래그를 사용합니다.
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()
{
if (Truth(UO.Connected()))
{
UO.Disconnect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.DisconnectClient:bridge.DisconnectClient().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.DisconnectedTime();마지막으로 게임 연결이 끊어졌을 때의 달력 스탬프를 반환합니다. 중단을 진단하고 연결 완료 기간을 추정하는 데 필요하며 로그인 시도 횟수를 결정하는 데는 필요하지 않습니다.
매개변수가 없습니다.
double: 하루 중 분수 부분이 포함된 1899-12-30의 일수입니다. 휴식 후 - 클라이언트가 중단을 인지한 시간입니다. 첫 번째 중단 전은 세션 소유자가 생성된 시간입니다. 이는 오프라인 플래그가 아니며 밀리초도 아닙니다.
- 논쟁이 없습니다. 기록은 동일한 세션 소유자의 스크립트에 공통됩니다. 늦은 시작, 일시 중지 및 닫기 IDE는 표시를 변경하지 않습니다. 새로운 세션 프로세스는 새로운 이야기를 시작합니다. 모든 연결에 대한 로그는 아닙니다.
- 월드에 캐릭터가 나타나지 않고 로그인 시도에 실패하면 로그인 성공으로 간주되지 않습니다. 오프라인 확인을 반복해도 종료 시간은 변경되지 않습니다. 현재 상태의 경우 0이 아닌 날짜 대신 UO.Connected()를 사용하세요.
- 시계는 컴퓨터의 로컬 시계에서 가져옵니다. 차이에 86400을 곱하면 달력 초가 됩니다. 시계/시간대를 변경하면 결과가 왜곡될 수 있습니다. 시간 초과의 경우 단조로운 Timer()를 사용합니다. 개별 호출은 원자적 스냅샷을 형성하지 않습니다. 동일한 표시는 고유한 ID 연결이 아닙니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.DisconnectedTime();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- CompletedConnectionSeconds()는 연결이 완료되지 않았거나 읽기 사이에 입력이 변경된 경우 초 또는 -1를 반환합니다. 86400 — 하루의 초. 마지막 입력/중단 쌍만 다시 계산됩니다. 이 기능은 모든 세션의 기록을 요약하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}
dynamic CompletedConnectionSeconds()
{
var login = UO.ConnectedTime();
var loss = UO.DisconnectedTime();
if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
{
return -1;
}
if (Truth(UO.ConnectedTime() != login))
{
return -1;
}
return (loss - login) * 86400.0;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 자동 일시 중지가 활성화되면 이 컨트롤러는 즉시 종료됩니다. 오프라인으로 작업하려면 미리 꺼야 합니다. UO.Wait(1000) 오프라인 이후 이전 구분 기호를 다시 확인합니다. Connect는 성공을 보장하지 않으며 자동 재연결 설정을 대체하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(UO.Connected()))
{
return null;
}
var loss = UO.DisconnectedTime();
await Delay(1000);
if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
{
UO.Connect();
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- previousLoss와 비교하면 이미 재진입이 발생한 후에도 중단이 발생함을 알 수 있습니다. 30초는 스크립트가 실행되는 동안 모니터링을 제한하고, WaitAsync(250)는 검사 사이에 스레드를 해제합니다. 여러 방해 요소를 하나의 알림으로 결합할 수 있습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var previousLoss = UO.DisconnectedTime();
var started = Environment.TickCount;
while (Truth(Environment.TickCount - started < 30.0))
{
if (Truth(UO.DisconnectedTime() != previousLoss))
{
UO.AddToSystemJournal("A connection loss occurred; check the session");
return null;
}
await Delay(250);
}
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.UpdateConnectionState:UpdateConnectionState().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "disconnectedtime":
UpdateConnectionState();
return new InjectionValue(state.DisconnectedTime.ToOADate());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GameServerIPString();클라이언트의 전역 설정에서 구성된 서버 주소를 읽습니다.
매개변수가 없습니다.
string — Settings.GlobalSettings.IP 또는 값이 없는 경우 빈 문자열입니다.
- 현재 브리지의 GameServerAddress는 전역 설정 IP을 읽습니다. 이는 DNS/network 요청도 아니고 실제 피어의 주소를 확인하는 것도 아닙니다. 관리자 세션은 자체 연결 매개변수를 가질 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GameServerIPString();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 현재 전역 설정 IP이 반환됩니다.
var address = UO.GameServerIPString();
UO.Print(address);매개변수와 실행 흐름:
- 공백 값은 구성이 없음을 나타내며 측정된 네트워크 오류가 아님을 나타냅니다.
return RunScenario();
object? RunScenario()
{
var address = UO.GameServerIPString();
if (Truth(Len(address) == 0))
{
UO.Print("no configured address");
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 변수는 첫 번째 호출에서 얻은 문자열을 저장합니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var address = UO.GameServerIPString();
await Delay(100);
UO.Print(address);
return null;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GameServerAddress:bridge.GameServerAddress.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetCharsListForShard();클라이언트에 알려진 현재 샤드의 캐릭터 이름을 반환합니다.
매개변수가 없습니다.
문자열 배열. 알려진 이름이 없으며 현재 문자는 빈 배열입니다.
- 관리자 세션은 SessionControl.Characters를 읽습니다. 독립 실행형에서는 LastCharacterManager가 계정/서버에 먼저 사용됩니다. 목록이 비어 있으면 LoginScene.문자가 없는 이름을 읽으세요. 그러면 현재 Player.Name가 유일한 요소로 사용됩니다.
- 이는 지역적으로 유명한 이름입니다. 이 명령은 서버에서 전체 목록을 요청하지 않으며 캐시의 최신성을 보장하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GetCharsListForShard();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 루프는 알려진 이름의 실제 배열에서 작동합니다.
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
UO.Print(names[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;매개변수와 실행 흐름:
- 인덱스 0는 비어 있지 않은 배열에만 사용됩니다.
return RunScenario();
object? RunScenario()
{
var names = UO.GetCharsListForShard();
if (Truth(ArrayLength(names) > 0))
{
UO.Print(names[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 names = UO.GetCharsListForShard();
UO.Print(Convert.ToString(ArrayLength(names)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetCharactersForCurrentShard()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetCharactersForCurrentShard:bridge.GetCharactersForCurrentShard().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetPing();
int UO.GetPing(object? timeout);게임 서버 응답 지연을 읽습니다. 인수가 없으면 마지막 차원을 사용합니다. 시간 초과가 발생하면 새로운 응답을 요청합니다.
-
timeout- 시간 초과 / timeoutMS - 한 번의 시도에 대한 대기 시간(밀리초)으로, int로 변환됩니다. 음수 값은 0으로 제한됩니다. 0를 사용하면 요청이 전송될 수 있지만 응답을 기대할 수는 없습니다. 무한정 타임아웃이 아닙니다.
int, 밀리초. 값 >= 0 – 측정; 0 ms도 허용됩니다. -1 - 측정 없음: 인수가 있는 양식의 경우 요청이 완료되지 않았거나 응답이 제때에 수신되지 않았습니다. 이것은 bool이 아닙니다. 0는 실패로 간주할 수 없으며 -1는 성공으로 간주할 수 있습니다.
- GetPing()는 아무 것도 보내지 않고 즉시 마지막 ServerPing을 읽습니다. 이전 값 자체로는 연결이 현재 작동하고 있음을 증명하지 않습니다. 이것은 평활화/백업 TCP 표시기 ping 및 ICMP Ping(호스트)이 아닌 마지막 서버 에코 측정입니다. GetPing(timeout)은 새로운 응답을 기다린 후 마지막 서버 측정값을 읽습니다.
- 기다리면 게임 동작을 확인하는 대신 호출 스크립트가 지연됩니다. 이 명령은 다시 연결되지 않으며 네트워크 설정을 변경하지 않습니다. 서버가 에코에 응답하지 않을 수 있습니다. 실패 자체로는 연결이 끊어졌다는 것을 증명할 수 없습니다. 타이밍은 흐름 일정에 따라 달라집니다. 모든 프레임에서 활성 검사를 호출하지 마세요. 스크립트를 중지하면 대기가 중단됩니다.
- UO.GetPing · UO.CheckLag · UO.IsOnline
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.GetPing();
UO.Print("GetPing: " + Convert.ToString(result));매개변수와 실행 흐름:
- 새로운 네트워크 요청 없이 캐시를 읽습니다. 이 예에서는 50 또는 200ms를 선택하여 250ms 임계값에서 스크립트 자체를 기다립니다. 알 수 없는 차원은 별도로 처리됩니다. 이 숫자는 범용 서버 제한이 아닌 예시 설정입니다.
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
UO.Print("No server latency sample");
return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
delayMs = 200;
}
await Delay(delayMs);
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 1000 — 새로운 응답을 기다리는 최대 시간(밀리초)입니다. -1에서 절차가 종료됩니다. 측정이 성공하면 Hiding이 요청됩니다. 에코 응답은 해당 스킬의 성공적인 사용을 증명하지 않습니다.
return RunScenario();
object? RunScenario()
{
var pingMs = UO.GetPing(1000);
if (Truth(pingMs == -1))
{
UO.Print("No fresh server response");
return null;
}
UO.UseSkill("Hiding");
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- MeanPing(샘플, timeoutMs) 전체가 표시됨: 3는 500ms를 시도합니다. 실패한 측정은 평균에서 제외됩니다. 성공한 것이 없으면 -1가 반환됩니다. 샘플은 1–10로 제한됩니다. UO.Wait(100)는 시도 간 요청 비율을 줄입니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
var meanMs = await MeanPing(3, 500);
if (Truth(meanMs < 0))
{
UO.Print("No successful samples");
}
else
{
UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
}
return null;
}
async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
{
if (Truth(samples < 1) || Truth(samples > 10))
{
return -1;
}
var total = 0;
var count = 0;
for (int i = (int)(1); i <= samples; i += (int)(1))
{
var current = UO.GetPing(timeoutMs);
if (Truth(current >= 0))
{
total = total + current;
count = count + 1;
}
await Delay(100);
}
if (Truth(count == 0))
{
return -1;
}
return total / count;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int GetPing() => bridge.GetPing();매개변수: timeout (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.GetPing. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetPing:bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout))). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(timeout).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsOnline();현재 세션이 게임 세계에 있는지, 게임 연결이 열려 있는지 확인합니다. 캐릭터 행동 전이나 입장 대기 중에 사용하세요.
매개변수가 없습니다.
int. 1 - 플레이어, 로드된 카드 및 활성 게임 소켓이 동시에 있습니다. 그렇지 않으면 0. 열린 클라이언트 창, 캐릭터 목록 또는 로그인 단계의 TCP 연결은 1를 의미하지 않습니다. 숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이는 숫자 플래그입니다. C#에서 결과를 확인하세요!= 0 또는 결과 == 0입니다. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다.
명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.
- 매개변수가 없습니다: serial, type, 캐릭터 이름 및 IP는 전송할 수 없습니다. UO.Online(), UO.Connected(), UO.IsOnline()도 같은 것을 확인하세요. 이는 다른 관리자 프로필이 아닌 해당 세션 소유자의 상태입니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.IsOnline();
UO.Print("IsOnline: " + Convert.ToString(result));매개변수와 실행 흐름:
- false는 0와 동일합니다. return은 Main을 UseSkill로 종료합니다. 스킬 이름인 UseSkill의 유일한 매개변수는 하이드입니다. 1를 사용하면 스크립트는 스킬 사용만을 요청합니다. 결과는 캐릭터와 서버의 상태에 따라 달라집니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
if (Truth(Truth(UO.IsOnline()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 0과의 비교는 자동 재연결 설정이 아닌 현재 연결 상태를 확인합니다. 인수가 없는 Connect는 저장된 설정을 사용하고 로그인이 완료될 때까지 기다리지 않습니다. 이미 시작된 로그인 중에 명령을 반복해도 두 번째 세션이 생성되어서는 안 됩니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- WaitForWorld(timeoutMs)는 내장 명령이 아닌 완전히 표시된 사용자 정의 함수입니다. 5000 — 예산(밀리초), UO.Wait(50) — 확인 간격. 음수 값은 false를 제공합니다. 0 기성 세계만 허용됩니다. Timer는 초를 측정하므로 그 차이에 1000을 곱합니다. 자동 일시중지는 미리 꺼야 하며, 그렇지 않으면 기본 종료됩니다. 이 함수는 Connect를 호출하지 않으며 시간이 만료되어도 시작된 입력을 취소하지 않습니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.IsOnline())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.IsOnline. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int IsOnline() => bridge.IsOnline();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Online();현재 세션이 게임 세계에 있는지, 게임 연결이 열려 있는지 확인합니다. 캐릭터 행동 전이나 입장 대기 중에 사용하세요.
매개변수가 없습니다.
int. 1 - 플레이어, 로드된 카드 및 활성 게임 소켓이 동시에 있습니다. 그렇지 않으면 0. 열린 클라이언트 창, 캐릭터 목록 또는 로그인 단계의 TCP 연결은 1를 의미하지 않습니다. 숫자 플래그 int: 1(조건 충족), 0(조건 충족되지 않음). 이는 숫자 플래그입니다. C#에서 결과를 확인하세요!= 0 또는 결과 == 0입니다. int와 true/false 및 if(결과)를 직접 비교하는 것은 허용되지 않습니다.
명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.
- 매개변수가 없습니다: serial, type, 캐릭터 이름 및 IP는 전송할 수 없습니다. UO.Online(), UO.Connected(), UO.IsOnline()도 같은 것을 확인하세요. 이는 다른 관리자 프로필이 아닌 해당 세션 소유자의 상태입니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
- UO.Wait에는 밀리초가 걸립니다. 연결이 끊어지면 자동 일시 중지하고 예제 실행을 수동으로 일시 중지합니다. 시간 초과 확인은 일시 중지가 제거된 후에만 계속됩니다. 이러한 명령은 일시 중지를 해제하지 않으며 자동 재연결을 활성화하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.Online();
UO.Print("Online: " + Convert.ToString(result));매개변수와 실행 흐름:
- false는 0와 동일합니다. return은 Main을 UseSkill로 종료합니다. 스킬 이름인 UseSkill의 유일한 매개변수는 하이드입니다. 1를 사용하면 스크립트는 스킬 사용만을 요청합니다. 결과는 캐릭터와 서버의 상태에 따라 달라집니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
if (Truth(Truth(UO.Online()) == false))
{
return null;
}
UO.UseSkill("Hiding");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 0과의 비교는 자동 재연결 설정이 아닌 현재 연결 상태를 확인합니다. 인수가 없는 Connect는 저장된 설정을 사용하고 로그인이 완료될 때까지 기다리지 않습니다. 이미 시작된 로그인 중에 명령을 반복해도 두 번째 세션이 생성되어서는 안 됩니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Online() == 0))
{
UO.Connect();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- WaitForWorld(timeoutMs)는 내장 명령이 아닌 완전히 표시된 사용자 정의 함수입니다. 5000 — 예산(밀리초), UO.Wait(50) — 확인 간격. 음수 값은 false를 제공합니다. 0 기성 세계만 허용됩니다. Timer는 초를 측정하므로 그 차이에 1000을 곱합니다. 자동 일시중지는 미리 꺼야 하며, 그렇지 않으면 기본 종료됩니다. 이 함수는 Connect를 호출하지 않으며 시간이 만료되어도 시작된 입력을 취소하지 않습니다.
- 이 명령은 로컬 상태만 읽습니다. 핑을 보내지 않고, 연결하지 않고, 일시 중지하지 않으며, 인터넷 가용성을 확인하지 않습니다. 읽은 후 연결이 변경될 수 있습니다. 1는 다음 작업의 성공을 보장하지 않습니다.
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
}
async public Task<object?> RunScenarioAsync()
{
if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
{
return null;
}
if (Truth(await WaitForWorld(5000)))
{
UO.UseSkill("Hiding");
}
return null;
}
async Task<dynamic> WaitForWorld(dynamic timeoutMs)
{
if (Truth(timeoutMs < 0))
{
return false;
}
var started = Environment.TickCount;
while (!(Truth(UO.Online())))
{
if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
{
return false;
}
await Delay(50);
}
return true;
}
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCharacterGetterAliases [Online]. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsOnline:bridge.IsOnline().
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
() => bridge.IsOnline()API 생성: 이 함수들은 API를 등록합니다. 명령을 호출할 때마다 다시 실행되지 않습니다.
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Resend();세계를 다시 동기화하라는 요청을 보냅니다.
매개변수가 없습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- Resync는 게임 스레드에서 NetClient.Socket.Send_Resync를 보냅니다. 이는 재연결이나 데이터 수신 확인이 아닌 업데이트 요청입니다.
- 예제에서 UO.Wait는 스크립트 일시 중지만 지정합니다. 일시 중지가 끝났다고 해서 서버가 요청을 완료했음을 증명하는 것은 아닙니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.Resend");
UO.Resend();매개변수와 실행 흐름:
- 세계를 다시 동기화하라는 요청을 보냅니다.
UO.Resend();매개변수와 실행 흐름:
- Resync는 게임 스레드에서 NetClient.Socket.Send_Resync를 보냅니다. 이는 재연결이나 데이터 수신 확인이 아닌 업데이트 요청입니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.Resend();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 예제에서 UO.Wait는 스크립트 일시 중지만 지정합니다. 일시 중지가 끝났다고 해서 서버가 요청을 완료했음을 증명하는 것은 아닙니다.
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.Resend();
UO.Wait(500);
UO.Print(UO.GetX());
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Resync:bridge.Resync().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "resend": bridge.Resync(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardName();샤드 이름을 읽습니다.
매개변수가 없습니다.
string — 브리지 필드의 텍스트.ShardName; 사용 가능한 데이터가 없으면 빈 문자열이 가능합니다. 이것은 연결 기호가 아니며 숫자 ID도 아닙니다.
- ExecuteClientApiCompatibility는 프로필이나 서버 선택을 변경하지 않고 브리지를 반환합니다.ShardName.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.ShardName();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 샤드 이름을 읽습니다.
var value = UO.ShardName();
UO.Print(value);매개변수와 실행 흐름:
- ExecuteClientApiCompatibility는 프로필이나 서버 선택을 변경하지 않고 브리지를 반환합니다.ShardName.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardName();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 before = UO.ShardName();
UO.Wait(500);
var after = UO.ShardName();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShardName:bridge.ShardName.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "shardname":
case "profileshardname": return new InjectionValue(bridge.ShardName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ShardPath();현재 프로필의 경로를 읽습니다.
매개변수가 없습니다.
string — 브리지 필드의 텍스트.CurrentProfilePath; 사용 가능한 데이터가 없으면 빈 문자열이 가능합니다. 이것은 연결 기호가 아니며 숫자 ID도 아닙니다.
- ExecuteClientApiCompatibility는 프로필이나 서버 선택을 변경하지 않고 브리지를 반환합니다.CurrentProfilePath.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.ShardPath();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 현재 프로필의 경로를 읽습니다.
var value = UO.ShardPath();
UO.Print(value);매개변수와 실행 흐름:
- ExecuteClientApiCompatibility는 프로필이나 서버 선택을 변경하지 않고 브리지를 반환합니다.CurrentProfilePath.
return RunScenario();
object? RunScenario()
{
var value = UO.ShardPath();
if (Truth(Len(value) > 0))
{
UO.TextPrint(value);
}
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 before = UO.ShardPath();
UO.Wait(500);
var after = UO.ShardPath();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CurrentProfilePath:bridge.CurrentProfilePath.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "shardpath":
case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);ClassicUO — Bad Newbie & C# Scripts IDE