Repository navigation
KO UO Topic magic
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
홈 · C# · IDE · UO API · A–Z · 예 · 언어
마법을 이용한 주문, 능력 및 움직임. 타겟 액션을 위해서는 타겟을 미리 설정하고 적용 조건을 확인하세요.
| 주제 | 명령 및 설명 |
|---|---|
| Cast | UO.Cast |
| CastToObject | UO.CastToObject |
| CastAbility | UO.CastAbility |
| Active Spell Ability | UO.IsActiveSpellAbility |
| Spell Timers | UO.TicksSpell |
UO.Cast · UO.CastToObject · UO.CastAbility · UO.IsActiveSpellAbility · UO.TicksSpell
각 명령 카드에는 직접 코드, 함수 및 클래스 등 여러 가지 독립적인 시나리오가 있습니다. 다음은 선택된 짧은 시나리오입니다. 제한사항과 전체 분석이 카드에 포함되어 있습니다.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddGate(object? bookSerial);-
bookSerial는 호환 스크립트가 레거시 목록 항목으로 저장하는 식별자 값입니다. 현재 런타임에서는 값이 문자열로 직렬화됩니다. 이 명령은 월드에 객체가 있는지 확인하지 않습니다.
void. 팀은 책의 가용성이나 게임 포털 생성을 확인하지 않습니다.
- 값은 현재 런타임 상태의 목록
AddGate에 추가됩니다. ClassicUO에서 이 호환성 목록은 게임 작업을 호출하지 않으며 읽을 수 있는 문서화된 공개 getter가 없습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.AddGate");
UO.AddGate("0x40012345");매개변수와 실행 흐름:
- 게이트를 열지 않고도 ID를 레거시 데이터로 저장할 수 있습니다.
UO.AddGate("0x40012345");매개변수와 실행 흐름:
- 호환되는 스크립트에 전달된 문자열의 값을 사용합니다.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddGate(bookSerial);
return null;
}매개변수와 실행 흐름:
- 런타임 목록 AddGate에 값을 씁니다.
- 호출은 호환성 데이터를 저장합니다. 그는 세상에서 책을 사용하지 않습니다.
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()
{
RememberGateBook("0x40012345");
return null;
}
void RememberGateBook(dynamic bookSerial)
{
UO.AddGate(bookSerial);
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: bookSerial (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AddRecall(object? bookSerial);-
bookSerial는 호환 스크립트가 레거시 목록 항목으로 저장하는 식별자 값입니다. 런타임은 전달된 값을 문자열로 직렬화합니다.
void. 호출은 결과를 반환하지 않으며 책이 있는지 확인하지 않습니다.
- 값은 현재 런타임 상태의 목록
AddRecall에 추가됩니다. ClassicUO에서 이 호환성 목록 자체는 게임 명령을 보내지 않으며 읽을 수 있는 문서화된 공개 getter가 없습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.AddRecall");
UO.AddRecall("0x40012345");매개변수와 실행 흐름:
- 값을 호환성 데이터로 저장하고 Recall을 실행하지 마십시오.
UO.AddRecall("0x40012345");매개변수와 실행 흐름:
- 문자열 변수를 통해 식별자를 전달합니다.
return RunScenario();
object? RunScenario()
{
var bookSerial = "0x40012345";
UO.AddRecall(bookSerial);
return null;
}매개변수와 실행 흐름:
- 각 호출은 현재 런타임의 AddRecall에 별도의 항목을 추가합니다.
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.AddRecall("0x40012345");
UO.AddRecall("0x40012346");
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: bookSerial (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::LegacyList:LegacyList(name). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "adddir":
case "addfindlist":
case "addgate":
case "addrecall":
case "addstep":
LegacyList(name).Add(string.Join("|", arguments.Select(value => value.ToString())));
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Cast(object? spellName);이름으로 주문의 사용을 요청합니다. 정확히 하나의 매개변수: spellName(예: UO.Cast("Heal")). 대상은 별도로 선택됩니다. 마우스로 표시된 십자선을 사용하거나 Cast 전 WaitTargetObject를 통해 선택합니다. 요청을 수락한다고 해서 성공적인 효과가 확인되는 것은 아닙니다.
-
spellName- 필수 라인 - "Heal", "Cure", "Greater Heal"과 같이 따옴표로 묶인 주문의 영어 이름입니다. 이름은 인터페이스와 함께 번역되지 않습니다. 사전은 내장된 별칭과 철자 단어도 인식합니다. 문자열 "29"을 포함한 숫자 ID, 대상, 거리, 악명, maxZ 및 대기는 Cast 매개변수가 아닙니다. 모든 이름 및 학교.
int: 1/true — 클라이언트가 요청을 수락했습니다. 0/false - 이름이 인식되지 않거나 요청이 로컬에서 거부됩니다. if UO.Cast("Heal") { ... }라고 쓰거나 1/true와 비교할 수 있습니다. 이는 ID 주문이나 치유/피해의 증거가 아닙니다. 누락되거나 추가된 인수로 인해 오류가 발생합니다. 이 명령은 주문의 조준 및 완료를 기대하지 않습니다.
- 단일 형식: UO.Cast(spellName). 두 번째 또는 후속 인수가 없습니다. 대상 검색, 응답 준비, 대기, 삭제는 별도의 명령으로 수행됩니다.
- 수동으로 선택하려면 이전 대기열 CancelWaitTarget을 지우고 Cast을 호출한 다음 십자선으로 원하는 개체를 클릭하세요. Cast 자체는 대기열을 지우지 않습니다. 스크립트가 미리 대기열을 준비했을 수도 있습니다.
- 자동 대상의 경우 먼저 WaitTargetObject(serial/alias)를 호출한 다음 Cast(이름)을 호출합니다. 이 명령을 사용하면 서버의 빠른 조준에 대응할 수 있습니다. 범위가 없는 주문의 경우 답변을 준비하지 마세요.
- 서버는 주문의 가용성, 자원, 유효한 대상, 범위 및 효과를 결정합니다. 긍정적인 결과는 해당 요청이 현지에서 수락되었음을 확인하는 것입니다.
- 서버에 장애가 발생하면 준비된 대기열이 무인 상태로 유지될 수 있습니다. 제한된 대기 또는 로컬 오류가 발생한 후에는 CancelWaitTarget를 제거하세요. 대상과 동시에 다른 스크립트를 실행하지 마십시오.
- 수락된 요청이 TicksSpell를 업데이트합니다. Cast는 HP이 활성화되거나 치유되거나 변경될 때까지 기다리지 않습니다. 카탈로그 ID는 내부 프로토콜을 설명하지만 인수의 이름을 대체하지는 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.Cast("Cure");
UO.Print("Cast: " + Convert.ToString(result));매개변수와 실행 흐름:
- 치료는 Cast에 대한 유일한 주장입니다. 실행 후 게임 조준경을 사용하여 캐릭터를 선택하세요. 서버 장애 및 게임 결과를 확인해보세요.
UO.CancelWaitTarget();
if (Truth(UO.Cast("Cure")))
{
UO.Print("Choose the character with the spell cursor");
}
else
{
UO.Print("Cure request rejected");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- self — 인수 WaitTargetObject; 치유는 Cast의 유일한 주장입니다. 3000 - 이 예에서는 조준 시간이 3초이며, 치유 완료를 보장하는 것은 아닙니다. 마지막으로 남은 응답과 실패 시 삭제합니다.
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject("self");
if (Truth(UO.Cast("Heal")))
{
await Delay(3000);
}
}
finally
{
UO.CancelWaitTarget();
}
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;매개변수와 실행 흐름:
- spellName, 대상, cleanupDelayMs - 함수 CastAtObject의 매개변수, 과부하가 아닌 UO.Cast. 내부적으로 Cast는 spellName만 허용합니다. ASC는 문자열 ID을 숫자로 변환합니다. 4000 — 대기열 삭제 지연. true은 치료의 성공이 아니라 요청의 수락을 의미합니다.
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 target = Asc(UO.GetSerial("lasttarget"), 0);
if (Truth(await CastAtObject("Greater Heal", target, 4000)))
{
UO.Print("Request sent; verify healing in the game");
}
return null;
}
async Task<dynamic> CastAtObject(dynamic spellName, dynamic target, dynamic cleanupDelayMs)
{
if (!(Truth(UO.Connected())) || Truth(UO.Dead()) || Truth(target <= 0) || !(Truth(UO.Exists(target))))
{
return false;
}
dynamic accepted = false;
UO.CancelWaitTarget();
try
{
UO.WaitTargetObject(target);
accepted = UO.Cast(spellName);
if (Truth(accepted))
{
await Delay(cleanupDelayMs);
}
}
finally
{
UO.CancelWaitTarget();
}
return accepted;
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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을 사용하세요.
매개변수: spellName (String)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.Cast. -
InjectionScript.Runtime.NumberConversions.TryStr2Int:NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\")."). -
InjectionScript.Runtime.InjectionApiUO.CastCore:CastCore(spellName).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int Cast(string spellName)
{
if (NumberConversions.TryStr2Int((spellName ?? string.Empty).Trim(), out _))
{
SystemMessage("UO.Cast: use one spell name, for example UO.Cast(\"Heal\").");
return 0;
}
return CastCore(spellName) ? 1 : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CastAbility(object? abilityId);UseAbility를 통해 현재 무기의 현재 선택된 능력을 전환합니다. 이미 선택한 능력을 다시 호출하면 선택이 취소됩니다.
-
abilityId— ResolveClassicUOAbilityId로 해결되는 능력 이름 또는 번호 문자열; 알 수 없는 값은 0를 제공합니다.
int 1 — 클라이언트가 현재 기본/보조 능력을 호출했습니다. 0 - 캐릭터 없음, 알 수 없음 ID 또는 능력이 현재 무기와 일치하지 않습니다.
- 1는 서버가 리소스를 성공적으로 적중하거나 상쇄하는 것이 아니라 클라이언트 요청을 수락하는 것을 설명합니다. 현재 주/보조 능력이 아닌 ID는 디렉토리에 있어도 0를 반환합니다.
- GameActions.UsePrimaryAbility/UseSecondaryAbility 0x80 비트를 확인하세요. 비트가 꺼지면 다른 옵션을 선택 취소하고 선택한 능력을 보냅니다. 이미 활성화되어 있으면 ID 0를 보내 비활성화하세요. 그런 다음 비트가 전환됩니다. 1를 반환하면 종료를 포함하여 이 클라이언트 분기에 대한 호출이 확인됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.CastAbility(UO.GetAbilityID("Armor Ignore"));
UO.Print("CastAbility: " + Convert.ToString(result));매개변수와 실행 흐름:
- 카탈로그의 가용성은 무기 매칭과 별개입니다.
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.CastAbility(id);
UO.Print(Convert.ToString(accepted));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 이름은 ID로 확인되고 현재 무기와 비교하여 확인됩니다.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastAbility("Armor Ignore");
UO.Print(Convert.ToString(accepted));
return null;
}매개변수와 실행 흐름:
- 0은 디렉터리 외부에 있으며 활성화 없이 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 accepted = UO.CastAbility(0);
UO.Print(Convert.ToString(accepted));
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: abilityId (Integer/String)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int UseAbility(int abilityId) => bridge.UseAbility(abilityId);매개변수: abilityId (Integer/String)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.UseAbility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseAbility:bridge.UseAbility(abilityId).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int UseAbility(string abilityName)
{
int abilityId = bridge.ResolveAbility(abilityName);
return abilityId > 0 ? bridge.UseAbility(abilityId) : 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.CastToObject(object? spellName, object? objID);대기 중인 대상을 배치하고 이름이나 숫자 ID로 주문을 보냅니다.
-
spellName- string 공백 대신 밑줄을 포함한 주문 이름 또는 브리지의 경우 숫자 ID.Cast. -
objID— self/backpack/lasttarget/저장된 객체의 객체 일련번호 또는 지원되는 이름입니다. 숫자 문자열과 0x 문자열은 런타임에 의해 해결됩니다.
int/boolean 결과 1 — 클라이언트가 Cast 요청을 수락했습니다. 0 — 요청이 거부되었습니다. 주문의 성공 여부는 서버에서 확인되지 않습니다.
- 문자열 형식은 CastAtTarget를 거칩니다. 숫자 형식에서는 WaitTargetObject을 입력한 다음 브리지Cast를 입력합니다. Cast가 실패하면 보류 중인 대상이 취소됩니다. 승인되면 ticksSpell가 업데이트됩니다.
- Bridge는 비양성 spellId, 연결 없음 및 데드 문자를 거부합니다. 타이머는 캐스트의 끝이 아니라 전송을 표시합니다. 개체에 대한 영향의 결과는 서버에 따라 다릅니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.CastToObject("Heal", "self");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- Heal은 self를 다음 서버 커서의 대상으로 만듭니다.
var accepted = UO.CastToObject("Heal", "self");
UO.Print(Convert.ToString(accepted));매개변수와 실행 흐름:
- 숫자 형식은 ID 4를 클라이언트에 전달합니다. 1는 요청을 보내는 것을 의미합니다.
return RunScenario();
object? RunScenario()
{
var accepted = UO.CastToObject(4, UO.Self());
UO.Print(Convert.ToString(accepted));
return null;
}매개변수와 실행 흐름:
- 로컬 존재 확인은 누락된 lasttarget 사용을 방지하는 데 도움이 됩니다.
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 target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
var accepted = UO.CastToObject("Greater Heal", target);
UO.Print(Convert.ToString(accepted));
}
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을 사용하세요.
매개변수: spellName (Any), objID (Any)
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.CastAtTarget:CastAtTarget(arguments[0], arguments[1]). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetObject:WaitTargetObject(Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(1). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Cast:bridge.Cast(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CancelTarget:bridge.CancelTarget().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "casttoobject":
if (arguments[0].Kind == InjectionValueKind.String)
return CastAtTarget(arguments[0], arguments[1]) != 0 ? InjectionValue.True : InjectionValue.False;
WaitTargetObject(Arg(1));
int castAccepted = bridge.Cast(Arg(0));
if (castAccepted != 0)
{
ticksSpell = Timer();
return InjectionValue.True;
}
bridge.CancelTarget();
return InjectionValue.False;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.IsActiveSpellAbility(object? spellName);서버가 선택한 능력/주문의 활성 상태를 보고했는지 확인합니다. 채널링 능력을 다시 활성화하기 전에 유용합니다. 아무 것도 켜지지 않으며, 대상을 시전하거나 선택하지도 않습니다.
-
spellName- 유일한 필수 매개변수: 철자 카탈로그의 영어 이름 또는 전체 ID. 예를 들어, "Confidence"와 402는 동일한 Bushido 주문을 나타냅니다. 대소문자는 중요하지 않습니다. 이름의 밑줄은 공백으로 대체됩니다. 수직선도 인식됩니다. ID 캐릭터, type 아이템, 스킬번호를 넘기지 마세요.
int: 1 - 서버가 이 ID의 활성 상태를 보고했습니다. 0 - 현재는 그러한 활성 상태가 없습니다. C#에서 숫자 결과를 확인합니다: if (UO.IsActiveSpellAbility(402) != 0) { ... }. 이는 마지막 시전 횟수, 시간, 결과가 아닌 논리적 기호입니다. 알 수 없는 이름, ID 외부 1…65535 및 결과 상태도 0를 제공하지 않습니다.
- 목록은 서버 패키지 0xBF/0x25를 업데이트합니다. 활성화하면 ID가 추가되고, 비활성화하면 제거됩니다. 그래픽 창이나 화면의 맞춤법 버튼 없이 작동합니다. 창을 닫으면 상태가 저장됩니다. 연결을 끊으면 연결이 지워집니다. 0라고 대답한다고 해서 캐릭터가 주문을 시전할 수 없다는 것을 증명하는 것은 아닙니다. 서버는 이 상태를 보내야 합니다. 이는 모든 버프에 대한 보편적인 검사가 아닙니다. 즉시 치유/귀환의 경우 이러한 예시는 시전 성공을 확인하지 않습니다. 주문의 지속 시간, 남은 마나, 가용성 및 성공 여부는 이 명령에 의해 결정되지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.IsActiveSpellAbility(402);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 402 - ID 자신감. 활성 변수에는 1 또는 0가 포함됩니다. 여기서 true은 1와 동일합니다. 메시지는 캐스트 시도의 결과가 아니라 수신된 상태를 설명합니다.
var active = UO.IsActiveSpellAbility(402);
if (Truth(Truth(active) == true))
{
UO.Print("Confidence is active");
}
else
{
UO.Print("No active Confidence state received");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- "신뢰" - 동일 ID 402. Cast 이름만 허용됩니다. 활성 상태가 없으면 요청이 한 번 전송됩니다. 서버에서의 성공을 보장하지는 않습니다. 빠른 루프에서 이 코드 조각을 실행하지 마세요. 서버 응답이 지연될 수 있습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsActiveSpellAbility("Confidence") == 0))
{
UO.Cast("Confidence");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 철자 - 이름 또는 ID; 예상 — true 켜기, false 끄기; timeoutMs — 대기 제한(밀리초). Main은 25ms마다 확인하여 500ms까지 기다리며 아무것도 전송하지 않습니다. 이 함수는 일치하는 항목이 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 이는 지방정부의 제한된 기대일 뿐, 변경 이유를 입증하는 것은 아닙니다. 스크립트가 일시 중지되거나 로드 중인 경우 실제 시간이 늘어날 수 있습니다.
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(WaitAbilityState("Confidence", true, 500)))
{
UO.Print("Active state received");
}
else
{
UO.Print("No active state before timeout");
}
return null;
}
dynamic WaitAbilityState(dynamic spell, dynamic expected, dynamic timeoutMs)
{
var elapsed = 0;
while (Truth(elapsed < timeoutMs))
{
if (Truth((UO.IsActiveSpellAbility(spell) == 1) == expected))
{
return true;
}
UO.Wait(25);
elapsed = elapsed + 25;
}
return Truth((UO.IsActiveSpellAbility(spell) == 1) == expected);
}
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을 사용하세요.
매개변수: spellName (Any)
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ConvertSpellName:ConvertSpellName(Text(0).Replace('_', ' ')). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsActiveSpell:bridge.IsActiveSpell(spellId.Value).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "isactivespellability":
{
int? spellId = arguments[0].Kind == InjectionValueKind.String
? ConvertSpellName(Text(0).Replace('_', ' '))
: (int?)Arg(0);
return new InjectionValue(spellId.HasValue ? bridge.IsActiveSpell(spellId.Value) : 0);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.TicksSpell();저장된 마크 TicksSpell를 읽습니다.
매개변수가 없습니다.
int — 런타임 시작부터 10분의 1초 안에 UO.Timer를 표시합니다. 0 - 마크가 아직 설정되지 않았거나 처음 10분의 1초에 이벤트가 발생했습니다. 밀리초나 달력 시간이 아닙니다.
- ticksSpell 필드를 반환합니다. 성공적으로 수락된 Cast/CastAtTarget에 의해 업데이트됩니다. 모든 수동/서버 활동을 자동으로 관찰하는 것은 아닙니다. 명령 자체는 표시를 변경하지 않습니다.
- UO.Timer() - 이 표시는 10분의 1초 단위로 나이를 계산합니다. 마크는 서로 다른 런타임 간에 비교되지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.TicksSpell();
UO.Print("TicksSpell: " + Convert.ToString(result));매개변수와 실행 흐름:
- 저장된 마크 TicksSpell를 읽습니다.
var stamp = UO.TicksSpell();
UO.Print(stamp);매개변수와 실행 흐름:
- ticksSpell 필드를 반환합니다. 성공적으로 수락된 Cast/CastAtTarget에 의해 업데이트됩니다. 모든 수동/서버 활동을 자동으로 관찰하는 것은 아닙니다. 명령 자체는 표시를 변경하지 않습니다.
return RunScenario();
object? RunScenario()
{
var stamp = UO.TicksSpell();
var ageTenths = UO.Timer() - stamp;
UO.Print(ageTenths);
return null;
}매개변수와 실행 흐름:
- UO.Timer() - 이 표시는 10분의 1초 단위로 나이를 계산합니다. 마크는 서로 다른 런타임 간에 비교되지 않습니다.
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.TicksSpell();
UO.Wait(250);
var after = UO.TicksSpell();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int TicksSpell() => ticksSpell;ClassicUO — Bad Newbie & C# Scripts IDE