Repository navigation
KO UO Topic combat
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
홈 · C# · IDE · UO API · A–Z · 예 · 언어
공격, 전투 모드, 무기 능력 및 붕대 치유. 클라이언트의 요청과 서버가 취하는 조치는 다릅니다.
| 주제 | 명령 및 설명 |
|---|---|
| Attack | UO.Attack |
| AttackNearest | UO.AttackNearest |
| LastAttack | UO.LastAttack |
| WarMode | UO.WarMode |
| WarTarget | UO.WarTargetID |
| 무기 능력 | UO.GetWeaponAbilities · UO.GetAbilityID · UO.GetAbilityName · UO.GetActiveAbility |
| Primary Ability | UO.UsePrimaryAbility |
| Secondary Ability | UO.UseSecondaryAbility |
| Special Moves | UO.Specmove |
| BandageSelf | UO.BandageSelf |
UO.Attack · UO.AttackNearest · UO.LastAttack · UO.WarMode · UO.IsWarMode · UO.SetWarMode · UO.WarTargetID
UO.GetWeaponAbilities · UO.GetAbilityID · UO.GetAbilityName · UO.GetActiveAbility · UO.UseAbility · UO.UsePrimaryAbility · UO.UseSecondaryAbility · UO.Specmove
UO.SetClassMask · UO.ClearClassMask · UO.AttackNearest
그룹의 이름과 착용하는 아이템의 유형은 스크립트에 의해 지정됩니다. |까지의 이름 순서에 따라 우선순위가 지정됩니다.
각 명령 카드에는 직접 코드, 함수 및 클래스 등 여러 가지 독립적인 시나리오가 있습니다. 다음은 선택된 짧은 시나리오입니다. 제한사항과 전체 분석이 카드에 포함되어 있습니다.
var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
if (Truth(allowed[i] == selected))
{
UO.Attack(selected);
return null;
}
i += 1;
}
UO.Print("Selected target does not pass the filters");
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;var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Attack(object? objID);특정 serial에 공격 요청을 보냅니다. 사용자가 이미 대상을 선택했거나 다른 팀에서 찾은 경우에 적합합니다. 여기서는 의류/거리에 따른 독립적인 검색이 없습니다.
-
objID— 직렬 mobile: int, 10진수/16진수 문자열 또는 확인 가능한 개체 이름(예: lasttarget 또는 이름 AddObject). graphic/type 또는 클래스 이름이 아닙니다. 필수 인수입니다. 0은 싸움을 멈추라는 명령이 아닙니다. ID 없이 대상을 선택하려면 검색 또는 게임 대상을 사용하세요.
void - 값이 없습니다. var result=UO.Attack(...)가 아닌 UO.Attack(enemy)를 별도의 줄에 작성하세요. 통화를 종료한다고 해서 히트, 손상 또는 서버 승인이 확인되는 것은 아닙니다.
- 도전 자체는 죽거나, 멀리 떨어져 있거나, self, 아군, 빈 serial 또는 아이템을 밀어내지 않습니다. 선택한 대상을 확인하세요. 바람직하게는 GetMobiles/FindMan에서 mobile를 필터링합니다.
- 표준 GameActions.Attack가 사용됩니다. EnabledCriminalActionQuery를 사용한 범죄 공격 문제가 가능합니다. 정상적으로 진행되면 LastAttack/NewTargetSystemSerial가 업데이트되고 공격 요청 패킷이 전송됩니다.
- 이 명령은 WarMode를 활성화하지 않고, 마우스를 더블 클릭하지 않으며, 경로를 계산하거나 반복 공격 루프를 시작하지 않습니다. 전투 모드와 이후 전투 처리는 서버에 따라 달라집니다.
- 알 수 없는 개체 이름을 가진 문자열의 경우 확인 오류가 발생할 수 있습니다. Exists 테스트는 객체의 존재를 증명하지만 그것이 mobile인지는 증명하지 않습니다. GetMobiles는 모바일로 제공됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.Attack");
UO.Attack(UO.LastTarget());매개변수와 실행 흐름:
- lasttarget는 아이템일 수도 있고 친근한 캐릭터일 수도 있습니다. 허용 목록에서는 이러한 경우를 제외합니다. Attack은 최대 한 번 호출됩니다.
var selected = UO.LastTarget();
var allowed = UO.GetMobiles(10, "5|6", -1, 8, false, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(allowed)))
{
if (Truth(allowed[i] == selected))
{
UO.Attack(selected);
return null;
}
i += 1;
}
UO.Print("Selected target does not pass the filters");
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;매개변수와 실행 흐름:
- FindMan는 serial를 반환하고 공격하지 않습니다. FindMan에는 aliveOnly가 없기 때문에 IsDead 검사가 별도로 추가됩니다.
return RunScenario();
object? RunScenario()
{
var enemy = UO.FindMan(5, 6, true, 4, -1, -1, false);
if (Truth(enemy == 0))
{
return null;
}
if (Truth(UO.IsDead(enemy) == 0))
{
UO.AddObject("enemy", enemy);
UO.Attack(enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- GetMobiles는 이미 Nearest=true로 주문되었습니다. 첫 번째 목표 앞에 벽이 있으면 다음 목표를 확인합니다. visibleOnly의 존재 자체가 CheckLOS를 대체하지는 않습니다. 서버 확인은 다를 수 있습니다.
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 targets = UO.GetMobiles(8, 5, -1, 10, true, false, true, true);
var i = 0;
while (Truth(i < ArrayLength(targets)))
{
var enemy = targets[i];
if (Truth(UO.CheckLOS(UO.GetX("self"), UO.GetY("self"), UO.GetZ("self"), UO.GetX(enemy), UO.GetY(enemy), UO.GetZ(enemy), UO.WorldNum())))
{
UO.Attack(enemy);
return null;
}
i += 1;
}
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;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: objID (Any/Integer/String)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Attack:bridge.Attack(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "attack": bridge.Attack(Arg(0)); return InjectionValue.Unit;매개변수: objID (Any/Integer/String)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.Attack. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Attack:bridge.Attack(id).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void Attack(int id) => bridge.Attack(id);매개변수: objID (Any/Integer/String)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.Attack. -
InjectionScript.Runtime.InjectionApiUO.Attack:Attack(GetObject(id)). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void Attack(string id) => Attack(GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.AttackNearest(object? notoriety);
int UO.AttackNearest(object? notoriety, object? distance);
int UO.AttackNearest(object? notoriety, object? distance, object? body);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly);
int UO.AttackNearest(object? notoriety, object? distance, object? body, object? maxZ, object? nearest, object? color, object? classMask, object? aliveOnly, object? visibleOnly);하나의 적합한 전투 대상을 선택하고 이를 공격 처리자에게 전달합니다. 필터는 허용되는 문자를 제한합니다. custom classMask는 장비와 클래스 우선순위를 가장 가까운 클래스 내 선택으로 설정합니다.
-
notoriety— 서버에서 받은 캐릭터와의 관계 상태: 0 — 알 수 없음, 1 — 무죄, 2 — 동맹, 3 — 회색, 4 — 범죄, 5 — 적, 6 — 살인자, 7 - 무적입니다. 숫자는 하나의 상태를 의미합니다. "5|6" 또는 숫자 배열 - 위 항목 중 하나. 옷의 색깔이나 수업의 색깔이 아닙니다. 음수(보통 -1), 0xFFFF, "any", 빈 문자열 또는 빈 배열은 이 필터를 별도로 비활성화합니다. 유효한 숫자가 없는 잘못된 문자열은 누구도 찾을 수 없습니다. 상태 순서에 따라 우선순위가 설정되지 않습니다. 5 필터는 NPC/몬스터를 자동으로 선택하는 대신 적을 선택합니다. 실제 값은 서버에 따라 다릅니다. -
distance— 셀을 포함한 수평 반경: 5는 거리 0..5를 허용합니다. 거리는 max(abs(dx),abs(dy))이므로 인접한 대각선도 1입니다. 기본적으로 숫자가 음수인 경우에는 무제한 검색이 아닌 UO.FindDistance()을 선택합니다. 0는 동일한 X/Y 셀을 남깁니다. 경로의 길이가 아닙니다. 장애물과 바닥은 이 매개변수로 확인되지 않습니다. -
body- 특정 캐릭터의 ID나 착용한 갑옷의 type가 아닌 캐릭터의 신체/NPC 그래픽입니다. 숫자, 16진수 문자열, 문자열 "0x0190|0x0191" 또는 숫자 배열. 0x0190 (400) - 인간 남성; 0x0191 (401) - 여성 인간. 마스크는 두 몸을 하나로 묶습니다. 목록에는 다른 종족, 유령 또는 변신이 자동으로 포함되지 않습니다. 표준 그래픽 신체 유형 표. 음수(기본적으로 -1), 0xFFFF, "any", 빈 문자열 또는 빈 배열만 - 모든 본문. 유효한 숫자가 없는 알 수 없는 텍스트는 빈 결과를 생성합니다. -
maxZ— 최대 복근(Z 대상 - 캐릭터의 Z)을 포함하며, Z 세계 단위입니다. 이것은 층수나 셀수 X/Y가 아닙니다. maxZ=4 Z 플레이어 10는 Z 대상 6..14를 허용합니다. 0에는 정확히 동일한 높이가 필요합니다. 기본적으로/음수의 경우 UO.FindVertical()가 사용됩니다. 계단에서는 Z로 원하는 대상을 제거할 수 있습니다. 작은 차이 Z도 바닥의 접근성을 입증하지 못합니다. -
nearest- true/1는 기본적으로 가장 가까운 일치 문자를 선택합니다. 더 작은 serial로 동일한 거리가 허용됩니다. false/0 클라이언트 목록 순서에서 첫 번째로 일치하는 개체를 유지하고 가장 먼 개체를 선택하지 않습니다. classMask에서는 클래스 우선순위가 먼저 적용되고 클래스 내 거리가 그 다음으로 적용됩니다. -
color— mobile 자체의 색상: int 또는 숫자/16진수 문자열. 음수(기본적으로 -1) 및 0xFFFF - 모든 hue; 0은 정확히 hue 0이며 어떤 값도 아닙니다. 악명 높은 스트립의 색상이나 옷의 색상이 아닙니다. 이 파라미터는 착용 중인 아이템의 색상을 확인하지 않습니다. -
classMask— 동일한 스크립트 런타임에서 UO.SetClassMask에 의해 사전 정의된 규칙의 이름입니다. 예를 들어 "DTMH|hunter|spare" - 왼쪽에서 오른쪽으로 우선순위가 지정됩니다. 문자열 배열도 허용됩니다. 모든 이름, 대소문자는 중요하지 않습니다. 줄 구분 기호: |, 쉼표 또는 ;. 목록 내의 알 수 없는 이름/빈 요소는 전체 선택을 선택 취소합니다. 결과는 0, 공격 없음. 이는 숫자 비트마스크가 아닙니다. 7는 세 가지 클래스를 의미하지 않습니다. 누락된 인수, -1, "-1", "any", "all" 또는 빈 문자열은 클래스 필터를 별도로 비활성화합니다. 마법사/탱크/궁수는 내장되어 있지 않습니다. 이러한 규칙을 등록하지 않으면 일치하는 항목이 없습니다. -
aliveOnly- true/1는 IsDead != 0인 모바일을 제외합니다. false/0는 기본적으로 이 조건을 추가하지 않습니다. HP를 0과 비교하지 않고, 시체 아이템을 검색하지 않으며, 대상이 소환된 후에도 살아남을 것이라고 보장하지 않습니다. -
visibleOnly- true/1에는 현재 상태 ClassicUO에 따라 IsVisible=1가 필요합니다. false/0는 기본적으로 조건을 추가하지 않습니다. 이는 벽/시선 검사가 아닌 클라이언트에 대한 로드된 객체의 가시성입니다. 기하학적 검사를 위해 좌표가 포함된 별도의 UO.CheckLOS가 있습니다. 서버는 여전히 작업을 거부할 수 있습니다.
int - serial가 선택됨 mobile 또는 적합한 대상이 없거나 classMask가 유효하지 않은 경우 0. 이것은 1/0 플래그도 아니고, body/type 플래그도 아니며, 거리나 타격 확인도 아닙니다. 적을 확인하세요 != 0; 적 == true은 C#에서는 유효하지 않습니다. int는 bool와 비교되지 않습니다. ID가 0이 아닌 경우 ClassicUO 핸들러는 여전히 무고한 공격에 대한 확인을 표시할 수 있습니다. 서버가 작업을 거부할 수 있습니다.
- 지역 검색: 이미 다운로드한 모바일에만 해당됩니다. Ignore이 고려됩니다. self는 지원하는 명령에서 명시적으로 includeSelf=true를 제외하고는 제외됩니다. 컨테이너와 아이템은 모바일이 아닙니다.
- 조건이 함께 적용됩니다(AND). body/notoriety 내의 유효한 대안은 OR를 통해 결합됩니다. FindItem, FindCount 및 GetFoundItems에서는 검색이 변경되지 않습니다.
- body/notoriety에서 유효한 숫자가 있는 마스크는 다음을 사용합니다. "any|5"는 여전히 5로 제한됩니다. 유효한 숫자 옆에 있는 공백/잘못된 요소는 무시됩니다. 제한이 없으면 -1를 별도로 전달하세요. 이 규칙을 classMask에 적용하지 마세요. 알 수 없는 클래스 이름은 전체 목록을 거부합니다.
- 팀은 세계의 영역을 열지 않으며 목표를 향해 달리지 않으며 경로의 통과 가능성을 확인하지 않습니다. 선택과 서버 처리 사이에 세상의 상태가 바뀔 수 있습니다.
- true 및 1의 전송은 플래그 false 및 0에도 동일합니다. 0이 아닌 다른 숫자도 true로 변환되지만 8/9는 별도의 모드가 아닙니다. 클리어 true/false를 사용하세요.
- 이름은 서버 직업이 아닌 커스텀 라벨입니다. 규칙을 DTMH, my_group 또는 다른 단어로 호출할 수 있습니다. 엔진은 서버의 스킬/클래스를 캐릭터 이름으로 결정하지 않습니다.
- 필수에서 하나의 type 또는 평면 배열은 목록에서 최소한 하나의 항목을 의미합니다. 그룹 배열이란 각 그룹에서 최소한 하나의 항목이 필요함을 의미합니다. 예를 들어, [leather, staves]에는 가죽과 지팡이가 필요합니다. 이는 대안 세트이며 나열된 옷장 전체를 착용해야 하는 요구 사항은 아닙니다.
- 금지된 항목을 착용한 모든 항목은 필수 항목이 충족되더라도 이 규칙에서 캐릭터를 제외합니다. 가죽과 금지된 체인은 가죽 규정을 통과하지 못합니다. 다른 규칙은 계속 테스트됩니다.
- 배낭 21을 제외하고 레이어 1..24에 착용한 아이템만 포함됩니다. 배낭/가슴, 마운트 25, 탄창 26..28 및 은행 29의 내용물은 의류로 간주되지 않습니다. graphic/type를 비교합니다. serial, 이름 및 hue 항목은 여기서 사용되지 않습니다.
- 적절한 장비가 로드되지 않으면 목록이 일치하지 않습니다. 서버가 아직 장비를 전송하지 않은 경우 로컬 데이터에 금지 항목이 없다고 해서 서버에 해당 항목이 없음을 증명하는 것은 아닙니다. 클라이언트는 숨겨진 데이터를 추측하지 않습니다.
- 규칙은 해당 기능과 포함을 포함하여 하나의 런타임 스크립트에 속합니다. 다른 독립적인 실행으로 전송되지 않으며 프로필에 저장되지 않습니다. 다시 시작할 때 일반 설정 절차 등을 통해 다시 정의하십시오. 반복되는 SetClassMask는 새 데이터가 완전히 검증된 후에만 규칙을 동일한 이름으로 대체합니다.
- 배열은 등록 중에 복사됩니다. 원래 배열을 변경해도 규칙은 변경되지 않습니다. SetClassMask를 반복하세요. 여러 일치 규칙은 classMask의 이름 순서에 따라 결정됩니다. 표준 서버 의류 테이블은 없습니다.
- 1..9 위치 인수가 지원됩니다. 꼬리를 건너뛸 수 있습니다. classMask를 설정하려면 처음 6개의 인수를 전달해야 합니다. 각 위치의 의미를 보려면 var이라는 이름을 사용하세요.
- 하나의 대상이 선택되고 공격이 한 번 전송됩니다. 이것은 자동 전투 주기가 아닙니다. classMask가 없으면 장비 필터 및 아이템 읽기가 수행되지 않습니다.
- 먼저 일반 필터를 적용한 다음 왼쪽에서 오른쪽으로 우선순위를 지정한 다음 가장 가까운 필터를 적용합니다. 가장 가까운=false는 여전히 클래스 우선순위를 유지하지만 첫 번째로 일치하는 클래스 내에서 클라이언트 목록의 첫 번째 mobile를 선택합니다.
- 이름/직위에서 하위 문자열을 검색하려는 이전 시도가 장비 규칙으로 대체되었습니다. 이러한 스크립트를 명시적인 SetClassMask로 이동하세요. 캐릭터의 이름은 더 이상 그를 특정 클래스로 식별하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.AttackNearest(5, 5);
UO.Print("AttackNearest: " + Convert.ToString(result));매개변수와 실행 흐름:
- body=-1, maxZ=FindVertical(), 가장 가까운=true, 색상=-1, classMask 비활성화, aliveOnly=false, visibleOnly=false. 죽은 사람을 제외하려면 아래 전체 양식을 사용하세요.
var enemy = UO.AttackNearest(5, 5);
if (Truth(enemy == 0))
{
return null;
}
UO.AddObject("combat_target", enemy);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- maxZ=0는 엄격한 높이 비교에 유용하지만 단계에서 대상이 잘릴 수 있습니다. visibleOnly는 벽을 확인하지 않습니다. 9개의 인수가 모두 서명되었습니다. true가 아닌 ID를 반환합니다.
return RunScenario();
object? RunScenario()
{
var status = "5|6";
var radius = 8;
var bodies = "0x0190|0x0191";
var heightTolerance = 0;
dynamic chooseNearest = true;
var bodyHue = -1;
var equipmentClasses = -1;
dynamic requireAlive = true;
dynamic requireVisible = true;
var enemy = UO.AttackNearest(status, radius, bodies, heightTolerance, chooseNearest, bodyHue, equipmentClasses, requireAlive, requireVisible);
if (Truth(enemy != 0))
{
UO.AddObject("enemy_same_height", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- DTMH가 먼저 선택됩니다. 적합한 DTMH가 없는 경우에만 - 무겁고 사냥꾼입니다. 10 셀의 DTMH는 2 셀의 Heavy보다 우선순위가 높습니다. 순서를 바꾸려면 classMask 줄을 변경하세요. 두 개의 DTMH 중 가장 가까운 것이 선택됩니다.
- 기어는 별도의 명령 UO이 아닌 완전히 축소된 사용자 기능 C#입니다. Gear(가죽, 지팡이)의 두 배열은 두 개의 필수 그룹을 구성합니다. 가죽에 유형을 추가하면 대안이 확장됩니다. 두 개의 가죽 아이템을 착용할 필요가 없습니다.
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 leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var notoriety = "5|6";
var distance = 12;
var body = -1;
var maxZ = 8;
dynamic nearest = true;
var color = -1;
var classMask = "DTMH|тяжёлый|охотник";
dynamic aliveOnly = true;
dynamic visibleOnly = true;
var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
if (Truth(enemy == 0))
{
UO.Print("No matching enemy; no attack sent");
return null;
}
UO.AddObject("selected_enemy", enemy);
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}매개변수와 실행 흐름:
- 10는 반경이고, 4는 허용되는 차이 Z이며, 플래그 비활성화 색상 뒤의 -1와 classMask 둘 다입니다. 월드 업데이트 간 클라이언트 목록의 순서는 보장되지 않습니다. 예측 가능한 근접성을 얻으려면 true를 사용하세요.
dynamic sortByDistance = false;
var target = UO.AttackNearest(5, 10, -1, 4, sortByDistance, -1, -1, true, true);
if (Truth(target == 0))
{
return null;
}
UO.AddObject("current_enemy", target);
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 라벨의 순서만 변경됩니다. 새 의류 테이블이나 이름을 클라이언트에 추가할 필요가 없습니다. 무거운 항목에 대한 폴백을 방지하려면 우선순위에서 제거하세요.
return RunScenario();
object? RunScenario()
{
var leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var priority = "охотник|DTMH|тяжёлый";
var enemy = UO.AttackNearest(5, 12, -1, 8, true, -1, priority, true, true);
if (Truth(enemy != 0))
{
UO.AddObject("priority_enemy", enemy);
}
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
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을 사용하세요.
매개변수: notoriety (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))매개변수: notoriety (Any), distance (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))매개변수: notoriety (Any), distance (Any), body (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color) — UO.AttackNearest(Any,Any,Any,Any,Any,Any)
매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any)
매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any)
매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any), aliveOnly (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))
UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly) — UO.AttackNearest(Any,Any,Any,Any,Any,Any,Any,Any,Any)
매개변수: notoriety (Any), distance (Any), body (Any), maxZ (Any), nearest (Any), color (Any), classMask (Any), aliveOnly (Any), visibleOnly (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterCompactSearchApi [AttackNearest]. -
InjectionScript.Runtime.InjectionApiUO.CompactAttackNearest:CompactAttackNearest(values).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
values => new InjectionValue(CompactAttackNearest(values))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.BandageSelf();캐릭터를 UO.Wait-타겟으로 설정하고 배낭에서 선택한 0x0E21 유형의 붕대를 사용합니다. 작업은 클라이언트에 의해 전송되고 서버에 의해 비동기적으로 실행됩니다.
매개변수가 없습니다.
void. 이 메서드는 치료 상태를 반환하지 않으며 붕대 감기가 완료될 때까지 기다리지 않습니다.
- 런타임은 목표
Self를 설정한 다음 배낭에서 hue와 가장 가깝게 일치하는 유형0x0E21항목을 검색하여 사용합니다. 붕대가 발견되지 않으면 검색 결과가 시스템 로그에 보고됩니다. 검색 결과는 호출 스크립트로 반환되지 않습니다. 캐릭터의 서버 상태에 따라 치료 가능성과 결과가 달라집니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.BandageSelf");
UO.BandageSelf();매개변수와 실행 흐름:
- 배낭에 있는 붕대를 한 번 자신에게 사용하세요.
UO.BandageSelf();매개변수와 실행 흐름:
- 먼저 연결을 확인한 다음 작업을 전달합니다. 통화는 치료가 끝날 때까지 기다리지 않습니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.BandageSelf();
}
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()
{
ApplyBandage();
return null;
}
void ApplyBandage()
{
UO.BandageSelf();
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.BandageSelf. -
InjectionScript.Runtime.InjectionApiUO.FindType:FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my")). -
InjectionScript.Runtime.InjectionApiUO.WaitTargetSelf:WaitTargetSelf(). -
InjectionScript.Runtime.InjectionApiUO.UseObject:UseObject(foundBandages). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("No bandages found.").
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void BandageSelf()
{
var foundBandages = FindType(new InjectionValue(0x0e21), new InjectionValue(0), new InjectionValue("my"));
if (foundBandages != string.Empty)
{
WaitTargetSelf();
UseObject(foundBandages);
}
else
SystemMessage("No bandages found.");
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.ClearClassMask();
int UO.ClearClassMask(object? name);현재 스크립트 런타임의 하나의 사용자 정의 장비 규칙 또는 모든 규칙을 제거합니다. 세트를 재구성하거나 임시 우선순위를 비활성화하기 전에 유용합니다.
-
name— SetClassMask에 전달된 선택적 이름입니다. 사례는 중요하지 않습니다. 인수가 없으면 이 런타임에 대한 모든 규칙이 삭제됩니다. 이것은 우선순위 문자열이 아닙니다. 여기서는 "mage|tank"가 허용되지 않습니다. 한 번에 하나씩 제거하거나 인수 없이 호출하세요.
int — 삭제된 규칙 수. 1라는 이름은 삭제됨을 의미하고, 0에는 그러한 규칙이 없습니다. 인수가 없으면 부울 플래그가 아닌 0..N이 반환됩니다. 따라서 전체 결과를 true이 아닌 > 0와 비교하세요.
- 이미 전송된 공격을 취소하지 않으며 스크립트를 중지하지 않습니다. 캐릭터 장비는 변경되지 않습니다.
- 일단 삭제되면 이름은 다음 AttackNearest에서 알 수 없는 상태로 유지됩니다. classMask에서도 제거하거나 다시 등록하세요. 알 수 없는 이름은 모든 선택을 차단합니다.
- 다른 사람의 런타임과 해당 규칙은 영향을 받지 않습니다. 클래스가 없는 일반 검색의 경우 빈 필수복 세트 대신 classMask=-1를 사용하세요.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.ClearClassMask();
UO.Print("ClearClassMask: " + Convert.ToString(result));매개변수와 실행 흐름:
- 제거해도 무기가 바뀌거나 전투가 끝나지는 않습니다. 추가 분류만 변경됩니다.
UO.SetClassMask("временный", 0x13B2);
UO.SetClassMask("основной", 0x1415);
UO.ClearClassMask("временный");
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "основной", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("main_enemy", enemy);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 제거됨 - 제거된 규칙 수입니다. 클라이언트를 다시 시작하지 않고 동일한 런타임에 새 세트가 생성됩니다.
return RunScenario();
object? RunScenario()
{
UO.SetClassMask("старый_набор", 0x13B2);
var removed = UO.ClearClassMask();
UO.SetClassMask("новый_набор", 0x0F50);
var enemy = UO.AttackNearest(5, 8, -1, 4, true, -1, "новый_набор", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("new_enemy", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 원격 이름을 전달하지 마십시오. 결과는 0입니다. -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()
{
UO.SetClassMask("по_одежде", 0x13C4);
UO.ClearClassMask();
var classes = -1;
var enemy = UO.AttackNearest(5, 5, -1, 4, true, -1, classes, true, true);
if (Truth(enemy != 0))
{
UO.AddObject("enemy_without_classes", enemy);
}
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을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [ClearClassMask]. -
InjectionScript.Runtime.InjectionApiUO.ClearClassMask:ClearClassMask(null).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
args => new InjectionValue(ClearClassMask(null))매개변수: name (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [ClearClassMask]. -
InjectionScript.Runtime.InjectionApiUO.ClearClassMask:ClearClassMask(ReadClassName(args[0])). -
InjectionScript.Runtime.InjectionApiUO.ReadClassName:ReadClassName(args[0]).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
args => new InjectionValue(ClearClassMask(ReadClassName(args[0])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.GetAbilityID(object? abilityName);ID 클라이언트 디렉터리에서 무기 능력 이름이나 숫자 문자열을 확인합니다.
-
abilityName- string: 이름 AbilityData, 열거형 능력 이름 또는 소수점 ID. 이름을 비교할 때 공백/구두점은 제거되며 대소문자를 구분하지 않습니다.
int 1..AbilityData.Abilities.Length - 알려진 능력; 0는 알 수 없는 이름, 정규화된 빈 문자열 또는 디렉터리 외부의 숫자 ID입니다.
- ResolveClassicUOAbilityId는 먼저 십진수 int를 구문 분석한 다음 정규화된 디렉터리 이름과 열거형 이름을 비교합니다. 이 명령은 능력을 활성화하거나 현재 무기와의 호환성을 확인하지 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.GetAbilityID("Armor Ignore");
UO.Print("GetAbilityID: " + Convert.ToString(result));매개변수와 실행 흐름:
- 숫자는 능력의 사용이 아닌 카탈로그의 ID를 나타냅니다.
var id = UO.GetAbilityID("Armor Ignore");
UO.Print(Convert.ToString(id));매개변수와 실행 흐름:
- 1 라인은 리졸버의 수치 경로를 통과합니다.
return RunScenario();
object? RunScenario()
{
var id = UO.GetAbilityID("1");
UO.Print(Convert.ToString(id));
return null;
}매개변수와 실행 흐름:
- 누락된 이름은 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 id = UO.GetAbilityID("unknown-example-ability");
UO.Print(Convert.ToString(id));
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: abilityName (String)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.GetAbilityID. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ResolveAbility:bridge.ResolveAbility(abilityName).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int GetAbilityID(string abilityName) => bridge.ResolveAbility(abilityName);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
string UO.GetAbilityName(object? abilityId);ID 디렉토리에서 무기 능력의 이름을 반환합니다.
-
abilityId- int: 인덱싱 ID은 1로 시작합니다. 브리지는 AbilityData.Abilities[abilityId-1]를 읽습니다.
string 디렉토리 이름. ID가 1보다 작거나 디렉터리 길이보다 큰 경우 빈 문자열이 반환됩니다.
- 판독값은 지역적이며 능력을 활성화하지 않습니다. 카탈로그의 ID는 현재 무기에 해당 능력이 존재한다는 의미는 아닙니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.GetAbilityName(1);
UO.Print("GetAbilityName: " + Convert.ToString(result));매개변수와 실행 흐름:
- ID 1은 디렉터리의 첫 번째 요소와 일치합니다.
var name = UO.GetAbilityName(1);
UO.Print(name);매개변수와 실행 흐름:
- 리졸버가 찾은 ID를 기반으로 이름이 반환됩니다.
return RunScenario();
object? RunScenario()
{
var id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
UO.Print(UO.GetAbilityName(id));
}
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 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 name = UO.GetAbilityName(0);
UO.Print(Convert.ToString(Len(name)));
return null;
}
int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: abilityId (Integer)
결과: string / String.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.GetAbilityName. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetAbilityName:bridge.GetAbilityName(abilityId).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public string GetAbilityName(int abilityId) => bridge.GetAbilityName(abilityId);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetActiveAbility();캐릭터가 활성화한 전투 능력의 이름을 읽습니다.
매개변수가 없습니다.
string은 활성화 능력의 영어 이름입니다(예: Armor Ignore). 활성화된 능력이 없거나 문자가 누락된 경우 문자열 "0"입니다. 이는 int, 0, ID 능력이나 적중 성공 확인이 아닙니다.
- 현재 문자의 PrimaryAbility/SecondaryAbility 플래그를 읽습니다. 둘 다 활성화된 경우 기본 능력이 선택됩니다. 이름이 검색되기 전에 활동 플래그가 번호에서 제거됩니다.
- 데이터는 로컬에서 읽혀집니다. 게터 자체는 능력을 활성화하지 않으며 마나를 소비하지 않습니다. 공격 후 서버는 활성화를 제거할 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GetActiveAbility();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 논쟁이 없습니다. 현재 클라이언트의 문자를 읽습니다.
- 활성화가 없으면 0 문자열이 인쇄됩니다.
var name = UO.GetActiveAbility();
UO.Print(name);매개변수와 실행 흐름:
- 비교는 문자열 0로 이루어집니다. UsePrimaryAbility는 별도로 호출됩니다.
- 이는 활성화 요청이지 성공적인 경고의 증거가 아닙니다. 사용 가능 여부는 무기 및 서버 규칙에 따라 다릅니다.
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetActiveAbility() == "0"))
{
UO.UsePrimaryAbility();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- GetAbilityID는 getter가 반환한 이름을 받습니다.
- ID 능력은 serial 무기나 캐릭터가 아닙니다. 첫째, 활성 능력의 부재가 배제됩니다.
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 name = UO.GetActiveAbility();
if (Truth(name != "0"))
{
var id = UO.GetAbilityID(name);
UO.Print("Ability ID: " + Convert.ToString(id));
}
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을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetActiveAbility:bridge.GetActiveAbility().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "getactiveability": return new InjectionValue(bridge.GetActiveAbility());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetWeaponAbilities();Bridge는 Player.Abilities를 읽고 ((byte)값 & 0x7F)를 적용하고 양수 ID를 원래 순서대로 저장합니다.
매개변수가 없습니다.
현재 무기의 긍정적인 int ID 능력 배열입니다. 높은 플래그 0x80가 제거됩니다. 0 값은 제외됩니다. 플레이어 없음 - 빈 배열입니다.
- Bridge는 Player.Abilities를 읽고 ((byte)값 & 0x7F)을 적용하고 양수 ID를 원래 순서대로 저장합니다. 활성 모드의 사실이나 이름이 아닌 사용 가능한 ID을 반환합니다.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.GetWeaponAbilities();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- Bridge는 Player.Abilities를 읽고 ((byte)값 & 0x7F)를 적용하고 양수 ID를 원래 순서대로 저장합니다.
var abilities = UO.GetWeaponAbilities();
UO.Print(UO.GetArrayLength(abilities));매개변수와 실행 흐름:
- Bridge는 Player.Abilities를 읽고 ((byte)값 & 0x7F)을 적용하고 양수 ID를 원래 순서대로 저장합니다. 활성 모드의 사실이나 이름이 아닌 사용 가능한 ID을 반환합니다.
return RunScenario();
object? RunScenario()
{
var abilities = UO.GetWeaponAbilities();
if (Truth(UO.GetArrayLength(abilities) > 0))
{
UO.Print(UO.GetAbilityName(abilities[0]));
}
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()
{
var before = UO.GetWeaponAbilities();
UO.Wait(500);
var after = UO.GetWeaponAbilities();
UO.Print(before);
UO.Print(after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.GetWeaponAbilities. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetWeaponAbilities:bridge.GetWeaponAbilities().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public InjectionValue GetWeaponAbilities() => new InjectionValue(
(bridge.GetWeaponAbilities() ?? Array.Empty<int>()).Select(value => new InjectionValue(value)).ToArray());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.IsWarMode(object? objID);전투 자세를 확인합니다 mobile.
-
objID— 특정 개체의 필수 serial/ID: int, 16진수 문자열 또는 별칭 self, backpack, lasttarget, lastobject, lastcontainer, laststatus, finditem, lastcorpse 또는 이름 AddObject. 이것은 graphic/type이 아닙니다. 지정되지 않은 이름은 0로 해석됩니다. 이 명령은 새 대상을 열지 않습니다. 인수는 필수입니다. 직접 self를 통과하세요.
int 1 - 로드됨 mobile에는 InWarMode 속성이 있습니다. int 0 - 속성이 누락되었거나 개체가 mobile가 아니거나 알 수 없거나 삭제되었습니다. 캐릭터가 누구를 공격하고 있는지 알려주지 않으며 전투 모드를 켜지도 않습니다. 외부 모드 읽기는 서버에서 받은 데이터로 제한됩니다.
명령의 결과는 숫자 플래그입니다. 1는 충족된 조건을 의미하고, 0는 충족되지 않은 조건을 의미합니다. var result = command(...) 후에 (결과 != 0) 또는 (결과 == 0)인지 확인하세요. 한 번의 호출 결과를 저장합니다. 반복된 호출을 통해 해당 작업을 다시 수행하거나 이미 변경된 상태를 읽을 수 있습니다.
- 로컬 클라이언트 모델을 읽습니다. 서버에 대한 요청도 없고 기다리거나 이동할 필요도 없습니다.
- 결과는 읽는 순간을 가리킨다. UO.Wait 또는 다른 작업 후에 개체와 해당 플래그가 변경될 수 있습니다.
- 캐릭터가 누구를 공격하고 있는지 알려주지 않으며 전투 모드를 켜지도 않습니다. 외부 모드 읽기는 서버에서 받은 데이터로 제한됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.IsWarMode("self");
UO.Print("IsWarMode: " + Convert.ToString(result));매개변수와 실행 흐름:
- self 인수는 해당 문자를 명시적으로 선택합니다. 상태 - 1/0에만 해당됩니다.
- 캐릭터가 누구를 공격하고 있는지 알려주지 않으며 전투 모드를 켜지도 않습니다. 외부 모드 읽기는 서버에서 받은 데이터로 제한됩니다.
var state = UO.IsWarMode("self");
if (Truth(state))
{
UO.Print("Combat stance is active");
}
else
{
UO.Print("Combat stance is inactive");
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- IsNpc 제목 및 알 수 없는 개체는 제외됩니다. target은 변경되는 lasttarget에 대한 실시간 참조가 아닌 단일 serial을 저장합니다.
- 결과는 InWarMode 필드를 참조합니다. 클라이언트가 적절한 상태를 수신한 후에만 데이터가 업데이트됩니다.
return RunScenario();
object? RunScenario()
{
var target = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var state = UO.IsWarMode(target);
UO.Print("Selected mobile state 1/0: " + Convert.ToString(state));
}
else
{
UO.Print("No loaded mobile selected");
}
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(500) — 밀리초 단위로 일시 중지됩니다. 이후에는 mobile이 여전히 존재하는지 별도로 확인합니다.
- 두 이미지가 비교됩니다. 중간 변경 사항이 누락될 수 있으며 이는 서버 이벤트에 대한 지속적인 구독이 아닙니다.
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 = UO.GetSerial("lasttarget");
if (Truth(UO.IsNPC(target)))
{
var before = UO.IsWarMode(target);
await Delay(500);
if (Truth(UO.IsNPC(target)))
{
var after = UO.IsWarMode(target);
if (Truth(before != after))
{
UO.Print("Flag changed: " + Convert.ToString(before) + " -> " + Convert.ToString(after));
}
}
else
{
UO.Print("Mobile left the local world");
}
}
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을 사용하세요.
매개변수: objID (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.IsWarMode:bridge.IsWarMode(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.WarMode:WarMode().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "iswarmode": return new InjectionValue(arguments.Length > 0 ? bridge.IsWarMode(Arg(0)) : WarMode());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.LastAttack();마지막 공격 대상의 serial를 읽어옵니다.
매개변수가 없습니다.
int — 저장됨 serial; 0은 serial이 설치되지 않았음을 의미합니다. bool도 아니고 graphic/type도 아닙니다. 0이 아닌 ID는 세상에 더 이상 존재하지 않을 수 있습니다.
- 필드 소스: bridge.LastAttack. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.LastAttack();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 마지막 공격 대상의 serial를 읽어옵니다.
var id = UO.LastAttack();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");매개변수와 실행 흐름:
- 필드 소스: bridge.LastAttack. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
return RunScenario();
object? RunScenario()
{
var id = UO.LastAttack();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(id));
}
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()
{
var before = UO.LastAttack();
UO.Wait(500);
var after = UO.LastAttack();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastAttack:bridge.LastAttack.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "lastattack":
case "wartargetid": return new InjectionValue(bridge.LastAttack);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.SetClassMask(object? name, object? required);
int UO.SetClassMask(object? name, object? required, object? forbidden);classMask에 대한 사용자 정의 장비 클래스를 UO.AttackNearest로 생성하거나 교체합니다. 이름과 graphic/type 항목을 선택합니다. 내장된 직책은 필요하지 않습니다.
-
name— 이름이 포함된 비어 있지 않은 문자열(예: "DTMH", "my_group", "archer_with_shield") 대소문자는 중요하지 않으며 가장자리 주변의 공백은 제거됩니다. | , ; 금지됨: 우선순위 구분 기호입니다. any/all/-1는 필터를 비활성화하기 위해 예약되어 있습니다. -
required— 하나의 type, 대체 항목의 단순 배열 또는 필수 그룹의 배열입니다. 각 그룹은 type 또는 평면 배열입니다. 각 그룹에서 최소한 한 가지가 필요합니다. 빈 필수 그룹은 허용되지 않습니다. 각 type는 int/숫자/16진수 문자열 1..65534입니다. 그룹 배열보다 더 깊게 중첩되는 것은 허용되지 않습니다. 이는 serial이나 body 문자가 아닌 graphic 항목입니다. -
forbidden— 선택적 type 또는 잘못된 유형의 평면 배열입니다. 기본적으로 금지된 품목은 없습니다. 빈 배열도 허용됩니다. 그러한 품목을 착용하면 규칙이 일치하지 않습니다. 동일한 경계 1..65534; -1/여기에서는 허용되지 않습니다. 필수 그룹에 대한 모든 대안을 완전히 금지하는 것은 불가능합니다.
int 1 - 규칙을 확인하고 기록했습니다. 잘못된 유형/이름/빈 필수 그룹/불일치로 인해 스크립트 오류가 발생하며, 이는 try/CATCH에 의해 포착될 수 있습니다. 이전 규칙이 그대로 유지됩니다. serial 또는 발견된 문자를 반환하지 않으며 공격을 시작하지 않습니다.
- 이름은 서버 직업이 아닌 커스텀 라벨입니다. 규칙을 DTMH, my_group 또는 다른 단어로 호출할 수 있습니다. 엔진은 서버의 스킬/클래스를 캐릭터 이름으로 결정하지 않습니다.
- 필수에서 하나의 type 또는 평면 배열은 목록에서 최소한 하나의 항목을 의미합니다. 그룹 배열이란 각 그룹에서 최소한 하나의 항목이 필요함을 의미합니다. 예를 들어, [leather, staves]에는 가죽과 지팡이가 필요합니다. 이는 대안 세트이며 나열된 옷장 전체를 착용해야 하는 요구 사항은 아닙니다.
- 금지된 항목을 착용한 모든 항목은 필수 항목이 충족되더라도 이 규칙에서 캐릭터를 제외합니다. 가죽과 금지된 체인은 가죽 규정을 통과하지 못합니다. 다른 규칙은 계속 테스트됩니다.
- 배낭 21을 제외하고 레이어 1..24에 착용한 아이템만 포함됩니다. 배낭/가슴, 마운트 25, 탄창 26..28 및 은행 29의 내용물은 의류로 간주되지 않습니다. graphic/type를 비교합니다. serial, 이름 및 hue 항목은 여기서 사용되지 않습니다.
- 적절한 장비가 로드되지 않으면 목록이 일치하지 않습니다. 서버가 아직 장비를 전송하지 않은 경우 로컬 데이터에 금지 항목이 없다고 해서 서버에 해당 항목이 없음을 증명하는 것은 아닙니다. 클라이언트는 숨겨진 데이터를 추측하지 않습니다.
- 규칙은 해당 기능과 포함을 포함하여 하나의 런타임 스크립트에 속합니다. 다른 독립적인 실행으로 전송되지 않으며 프로필에 저장되지 않습니다. 다시 시작할 때 일반 설정 절차 등을 통해 다시 정의하십시오. 반복되는 SetClassMask는 새 데이터가 완전히 검증된 후에만 규칙을 동일한 이름으로 대체합니다.
- 배열은 등록 중에 복사됩니다. 원래 배열을 변경해도 규칙은 변경되지 않습니다. SetClassMask를 반복하세요. 여러 일치 규칙은 classMask의 이름 순서에 따라 결정됩니다. 표준 서버 의류 테이블은 없습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.SetClassMask("simple_sword", 0x0F5E);
UO.Print("SetClassMask: " + Convert.ToString(result));매개변수와 실행 흐름:
- DTMH - 당신 이름만요. myLeather/forbiddenChain의 값은 예시입니다. 서버의 실제 graphic로 대체/보충하세요. 플랫 목록은 전체 세트가 아닌 OR를 의미합니다.
var myLeather = Gear(0x13C4, 0x13C7);
var forbiddenChain = Gear(0x13BF, 0x13C0);
UO.SetClassMask("DTMH", myLeather, forbiddenChain);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "DTMH", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("leather_enemy", enemy);
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- DTMH가 먼저 선택됩니다. 적합한 DTMH가 없는 경우에만 - 무겁고 사냥꾼입니다. 10 셀의 DTMH는 2 셀의 Heavy보다 우선순위가 높습니다. 순서를 바꾸려면 classMask 줄을 변경하세요. 두 개의 DTMH 중 가장 가까운 것이 선택됩니다.
- 기어는 별도의 명령 UO이 아닌 완전히 축소된 사용자 기능 C#입니다. Gear(가죽, 지팡이)의 두 배열은 두 개의 필수 그룹을 구성합니다. 가죽에 유형을 추가하면 대안이 확장됩니다. 두 개의 가죽 아이템을 착용할 필요가 없습니다.
return RunScenario();
object? RunScenario()
{
var leather = Gear(0x13C4, 0x13C7);
var staves = Gear(0x0DF0, 0x0E81);
var chain = Gear(0x13BF, 0x13C0);
var plate = Gear(0x1415, 0x1411);
var bows = Gear(0x13B2, 0x0F50);
UO.SetClassMask("DTMH", Gear(leather, staves), chain);
UO.SetClassMask("охотник", bows);
UO.SetClassMask("тяжёлый", plate);
var notoriety = "5|6";
var distance = 12;
var body = -1;
var maxZ = 8;
dynamic nearest = true;
var color = -1;
var classMask = "DTMH|тяжёлый|охотник";
dynamic aliveOnly = true;
dynamic visibleOnly = true;
var enemy = UO.AttackNearest(notoriety, distance, body, maxZ, nearest, color, classMask, aliveOnly, visibleOnly);
if (Truth(enemy == 0))
{
UO.Print("No matching enemy; no attack sent");
return null;
}
UO.AddObject("selected_enemy", enemy);
return null;
}
dynamic Gear(params dynamic[] values)
{
return values;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;매개변수와 실행 흐름:
- 변수 필수[1]를 선언하면 인덱스 0 및 1가 있는 두 요소가 생성됩니다. 두 개의 중첩된 그룹에는 몸통과 무기가 필요합니다. flat [torsoType,weaponType]은 몸통 또는 무기를 의미합니다.
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()
{
dynamic[] required = new dynamic[checked((int)(1) + 1)];
dynamic[] torso = new dynamic[checked((int)(0) + 1)];
dynamic[] weapon = new dynamic[checked((int)(0) + 1)];
torso[0] = 0x13C4;
weapon[0] = 0x0DF0;
required[0] = torso;
required[1] = weapon;
UO.SetClassMask("мой_комплект", required);
var enemy = UO.AttackNearest(5, 6, -1, 4, true, -1, "мой_комплект", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("outfit_enemy", enemy);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}매개변수와 실행 흐름:
- 재등록하면 규칙 사본이 대체됩니다. 이전 이름은 동일하게 유지되므로 우선순위 행을 다시 작성할 필요가 없습니다.
dynamic[] allowed = new dynamic[checked((int)(0) + 1)];
allowed[0] = 0x13B2;
UO.SetClassMask("приоритетный", allowed);
allowed[0] = 0x0F50;
UO.SetClassMask("приоритетный", allowed);
var enemy = UO.AttackNearest(5, 10, -1, 8, true, -1, "приоритетный", true, true);
if (Truth(enemy != 0))
{
UO.AddObject("updated_outfit", enemy);
}
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을 사용하세요.
매개변수: name (Any), required (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [SetClassMask]. -
InjectionScript.Runtime.InjectionApiUO.SetClassMask:SetClassMask(args).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
args => new InjectionValue(SetClassMask(args))매개변수: name (Any), required (Any), forbidden (Any)
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.RegisterClassMaskApi [SetClassMask]. -
InjectionScript.Runtime.InjectionApiUO.SetClassMask:SetClassMask(args).
호출 시 저장된 처리기 delegate를 실행합니다. 등록 메서드는 API를 구성할 때 이 delegate를 만듭니다.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
args => new InjectionValue(SetClassMask(args))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetWarMode(object? value);캐릭터의 전투 모드 또는 평화 모드를 요청합니다.
-
value- 0 - 평화 모드; 0이 아닌 정수는 전투 모드입니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- WarMode는 모드를 GameActions로 전달합니다.ToggleWarMode: 0는 비활성화되고 0이 아닌 값은 활성화됩니다. 플레이어가 없으면 아무 작업도 수행되지 않습니다.
- Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.SetWarMode");
UO.SetWarMode(1);매개변수와 실행 흐름:
- 캐릭터의 전투 모드 또는 평화 모드를 요청합니다.
UO.SetWarMode(1);매개변수와 실행 흐름:
- WarMode는 모드를 GameActions로 전달합니다.ToggleWarMode: 0는 비활성화되고 0이 아닌 값은 활성화됩니다. 플레이어가 없으면 아무 작업도 수행되지 않습니다.
return RunScenario();
object? RunScenario()
{
UO.SetWarMode(0);
return null;
}매개변수와 실행 흐름:
- Bridge는 게임 스트림에 대한 요청을 보냅니다. 서버 규칙이 적용됩니다. 확인을 기다리는 내장은 없습니다.
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()
{
ApplyMode(1);
return null;
}
void ApplyMode(dynamic mode)
{
UO.SetWarMode(mode);
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: value (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WarMode:WarMode(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "setwarmode": WarMode(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Specmove(object? direction);
void UO.Specmove(object? direction, object? running);한 단계 요청을 브리지에 직접 보냅니다.
-
direction— int; 방향 및 7 daët 0..7 N,NE,E,SE,S,SW,W,NW. -
running- 선택적 숫자 플래그 int: 0/none - 걷기, 0이 아닌 - 달리기.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- ExecuteLegacyManualAlias 브리지를 호출합니다.Step(방향 & 7, 실행 != 0) 모든 결과 코드 0/2/3/4/5/7; void는 밖으로 돌아옵니다. 이것은 경로가 아닌 한 단계/회전입니다. Step~10000 ms 이내의 대기는 유지되지만 스크립트는 승인, 실패 또는 타임아웃 코드를 받지 못합니다.
- 분기가 UO.Step의 런타임 조건 MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor을 충족하지 않습니다. Bridge/Player.Walk 자체와 서버는 여전히 움직임을 확인합니다.
- 게임 스트림의 QueueStep는 플레이어, 연결, 방향, 대기열, 템포 및 로컬 트래픽을 확인합니다. Player.Walk 이전에는 각 호출이 해당 시퀀스와 Walker의 확인/거부 세대를 별도로 기록합니다. 그런 다음 이 스냅샷과 함께 Result를 반환합니다. Step 및 보류 중 StepControlled 다음 요청의 공통 필드가 아닌 이 저장된 쌍만 확인합니다. 교체 플레이어/워커는 일반적인 거부로 대기를 종료합니다. 다른 일반 명령을 확인한다고 해서 이 단계가 확인되는 것은 아닙니다. 움직임이 없는 회전은 별도의 경우로 유지됩니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.Specmove");
UO.Specmove(0);매개변수와 실행 흐름:
- 한 단계 요청을 브리지에 직접 보냅니다.
UO.Specmove(0);매개변수와 실행 흐름:
- ExecuteLegacyManualAlias는 bridge.Step(direction&7,running!=0)을 호출한 다음 반환된 1/0를 삭제합니다. 이는 한 단계이지 좌표로 가는 경로가 아닙니다.
return RunScenario();
object? RunScenario()
{
UO.Specmove(2, 1);
return null;
}매개변수와 실행 흐름:
- 분기가 UO.Step의 런타임 조건 MoveCheckStamina/MoveExitOnDisconnect/MoveOpenDoor을 충족하지 않습니다. Bridge/Player.Walk 자체와 서버는 여전히 움직임을 확인합니다.
최소 걸음 간격: 걷기 - 걷기 400 ms, 달리기 200 ms; 라이딩 - 걷기 200 ms, 달리기 100 ms.
이는 샤드에 대해 자동으로 정의된 설정이 아닌 표준 클라이언트 제한입니다. 서버 속도와 비행 모드는 별도로 계산됩니다. 스크립트 타이머는 이동 속도를 늦출 수 있지만 이러한 제한을 줄이지는 않습니다.
단계, 경로, Follow, 마우스/키 제어 및 지도는 캐릭터의 공유 대기열을 사용합니다. 서버가 경로를 바꾸거나 방향을 바꾸거나 위치를 조정해도 걸음 요청 후 남은 일시정지는 취소되지 않습니다. 지연 후에는 손실된 프레임을 보상할 빠른 버스트가 없습니다. 확인을 기다리는 동안 장애물, 의사소통 불량으로 인해 움직임이 느려질 수 있습니다.
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.GetX();
UO.Specmove(2, 0);
UO.Wait(500);
UO.Print(UO.GetX() - before);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: direction (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;매개변수: direction (Any), running (Any)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Step:bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "specmove": bridge.Step(Arg(0) & 7, arguments.Length > 1 && Arg(1) != 0); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.UseAbility(object? abilityId);현재 무기에 사용할 수 있는 능력을 요청합니다.
-
abilityId- 능력의 이름 또는 int ID 1..AbilityData.Abilities.Length. 이름은 정규화됩니다. 문자/숫자만 대문자로 저장되고 비교됩니다. 숫자 텍스트는 ID를 의미합니다.
숫자 플래그 int: 1 - ID는 현재 플레이어의 기본/보조 능력과 일치하며 해당 GameActions가 호출됩니다. 0 - 플레이어 없음, 알 수 없음 ID/이름 또는 능력이 현재 무기에 속하지 않습니다.
- 문자열 형식은 ResolveAbility를 사용합니다. 숫자 즉시 브리지.UseAbility. 현재 두 가지 능력에서 0x80를 마스크하고 ID와 일치시킨 다음 UsePrimaryAbility 또는 UseSecondaryAbility를 호출합니다.
- 이는 적중, 마나 소모 또는 서버 활성화 확인이 아닌 로컬 요청을 수락하는 것입니다. 사용 가능한 ID는 GetWeaponAbilities로 읽혀지며, 활성 이름은 GetActiveAbility입니다.
- GameActions는 능력 선택 비트 0x80를 토글합니다. 이미 선택된 능력은 ID 0를 보내고 선택을 취소합니다. 그렇지 않으면 두 선택 비트가 모두 지워지고 선택된 ID가 전송된 다음 해당 비트가 로컬로 설정됩니다. 따라서 다시 호출하면 능력이 꺼질 수 있습니다. 로컬 변경이 성공적인 적중이나 서버 확인을 의미하지는 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.UseAbility("Armor Ignore");
UO.Print("UseAbility: " + Convert.ToString(result));매개변수와 실행 흐름:
- 현재 무기에 사용할 수 있는 능력을 요청합니다.
UO.Print(UO.UseAbility("Armor Ignore"));매개변수와 실행 흐름:
- 문자열 형식은 ResolveAbility를 사용합니다. 숫자 즉시 브리지.UseAbility. 현재 두 가지 능력에서 0x80를 마스크하고 ID와 일치시킨 다음 UsePrimaryAbility 또는 UseSecondaryAbility를 호출합니다.
return RunScenario();
object? RunScenario()
{
var abilities = UO.GetWeaponAbilities();
if (Truth(UO.GetArrayLength(abilities) > 0))
{
UO.Print(UO.UseAbility(abilities[0]));
}
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는 GetWeaponAbilities로 읽혀지며, 활성 이름은 GetActiveAbility입니다.
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 id = UO.GetAbilityID("Armor Ignore");
if (Truth(id > 0))
{
var accepted = UO.UseAbility(id);
UO.Print(accepted);
UO.Print(UO.GetActiveAbility());
}
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을 사용하세요.
매개변수: 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 · 繁體中文 · 日本語 · 한국어
void UO.UsePrimaryAbility();무기의 주요 능력을 소환합니다.
매개변수가 없습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- UsePrimaryAbility는 Invoke를 통해 GameActions.UsePrimaryAbility(_world)를 전송합니다. 반환된 수락 표시가 없습니다. 활성 능력은 별도로 확인됩니다.
- 예제에서 UO.Wait는 스크립트 일시 중지만 지정합니다. 일시 중지가 끝났다고 해서 서버가 요청을 완료했음을 증명하는 것은 아닙니다.
- GameActions는 능력 선택 비트 0x80를 토글합니다. 이미 선택된 능력은 ID 0를 보내고 선택을 취소합니다. 그렇지 않으면 두 선택 비트가 모두 지워지고 선택된 ID가 전송된 다음 해당 비트가 로컬로 설정됩니다. 따라서 다시 호출하면 능력이 꺼질 수 있습니다. 로컬 변경이 성공적인 적중이나 서버 확인을 의미하지는 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.UsePrimaryAbility");
UO.UsePrimaryAbility();매개변수와 실행 흐름:
- 무기의 주요 능력을 소환합니다.
UO.UsePrimaryAbility();매개변수와 실행 흐름:
- UsePrimaryAbility는 Invoke를 통해 GameActions.UsePrimaryAbility(_world)를 전송합니다. 반환된 수락 표시가 없습니다. 활성 능력은 별도로 확인됩니다.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetWeaponAbilities());
UO.UsePrimaryAbility();
return null;
}매개변수와 실행 흐름:
- 예제에서 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.UsePrimaryAbility();
UO.Print(UO.GetActiveAbility());
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UsePrimaryAbility:bridge.UsePrimaryAbility().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "useprimaryability": bridge.UsePrimaryAbility(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.UseSecondaryAbility();추가 무기 능력을 소환합니다.
매개변수가 없습니다.
void - 값이 없습니다. 별도의 회선으로 전화하세요. 완료는 서버의 작업을 확인하지 않습니다.
- UseSecondaryAbility는 Invoke를 통해 GameActions.UseSecondaryAbility(_world)를 전송합니다. 반환된 수락 표시가 없습니다. 활성 능력은 별도로 확인됩니다.
- 예제에서 UO.Wait는 스크립트 일시 중지만 지정합니다. 일시 중지가 끝났다고 해서 서버가 요청을 완료했음을 증명하는 것은 아닙니다.
- GameActions는 능력 선택 비트 0x80를 토글합니다. 이미 선택된 능력은 ID 0를 보내고 선택을 취소합니다. 그렇지 않으면 두 선택 비트가 모두 지워지고 선택된 ID가 전송된 다음 해당 비트가 로컬로 설정됩니다. 따라서 다시 호출하면 능력이 꺼질 수 있습니다. 로컬 변경이 성공적인 적중이나 서버 확인을 의미하지는 않습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
명령은 독립된 문입니다. 앞의 메시지는 호출 시작을 나타내며 서버 동작의 완료를 확인하지 않습니다.
UO.Print("Calling UO.UseSecondaryAbility");
UO.UseSecondaryAbility();매개변수와 실행 흐름:
- 추가 무기 능력을 소환합니다.
UO.UseSecondaryAbility();매개변수와 실행 흐름:
- UseSecondaryAbility는 Invoke를 통해 GameActions.UseSecondaryAbility(_world)를 전송합니다. 반환된 수락 표시가 없습니다. 활성 능력은 별도로 확인됩니다.
return RunScenario();
object? RunScenario()
{
UO.Print(UO.GetWeaponAbilities());
UO.UseSecondaryAbility();
return null;
}매개변수와 실행 흐름:
- 예제에서 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.UseSecondaryAbility();
UO.Print(UO.GetActiveAbility());
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.UseSecondaryAbility:bridge.UseSecondaryAbility().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "usesecondaryability": bridge.UseSecondaryAbility(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.WarMode();
void UO.WarMode(object? mode);캐릭터의 전투 모드를 읽거나 쿼리합니다.
-
mode— 선택적 int: 0는 비활성화되고 0이 아닌 값은 활성화됩니다. 인수가 없는 형식은 읽기만 합니다.
인수 없음 숫자 플래그 int: 1 - 현재 플레이어가 전투 모드에 있음, 0 - 평화 모드/플레이어 없음. 모드 - null에서는 결과가 없습니다.
- WarMode()는 Player.InWarMode를 로컬에서 읽습니다. WarMode(모드)는 선택한 모드로 GameActions.ToggleWarMode를 호출합니다. 플레이어가 없으면 요청이 실행되지 않습니다.
- 인수가 있는 양식의 결과를 변수에 할당하지 마십시오. 즉시 다시 읽는 것은 온라인 확인이 아닙니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
var result = UO.WarMode();
UO.Print("WarMode: " + Convert.ToString(result));매개변수와 실행 흐름:
- 캐릭터의 전투 모드를 읽거나 쿼리합니다.
var active = UO.WarMode();
UO.Print(active);매개변수와 실행 흐름:
- WarMode()는 Player.InWarMode를 로컬에서 읽습니다. WarMode(모드)는 선택한 모드로 GameActions.ToggleWarMode를 호출합니다. 플레이어가 없으면 요청이 실행되지 않습니다.
return RunScenario();
object? RunScenario()
{
UO.WarMode(1);
UO.Wait(250);
UO.Print(UO.WarMode());
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()
{
var before = UO.WarMode();
UO.WarMode(0);
UO.Print(before);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: int / Integer.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.WarMode. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WarMode:bridge.WarMode().
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public int WarMode() => bridge.WarMode();매개변수: mode (Integer)
결과: void / Unit.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.WarMode. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WarMode:bridge.WarMode(mode).
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
public void WarMode(int mode) => bridge.WarMode(mode);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.WarTargetID();마지막 공격 대상의 serial를 읽어옵니다.
매개변수가 없습니다.
int — 저장됨 serial; 0은 serial이 설치되지 않았음을 의미합니다. bool도 아니고 graphic/type도 아닙니다. 0이 아닌 ID는 세상에 더 이상 존재하지 않을 수 있습니다.
- 필드 소스: bridge.LastAttack. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
- 현재 로컬 상태를 읽습니다. 패키지, 대상 또는 자동 업데이트가 없습니다. 개별 읽기에서는 다른 상태가 나타날 수 있습니다.
각 예제는 별도의 파일 .csx로 저장하고 IDE에서 실행할 수 있습니다. UO 개체와 대기 기능은 현재 게임 세션의 호스트를 제공합니다. 데모 serial 이름, 좌표, 주소를 자신의 것으로 바꾸세요.
이 코드를 별도의 .csx 파일로 실행하세요. 인수는 호출에 직접 표시됩니다. 예제의 이름, serial, 주소를 자신의 값으로 바꾸세요.
한 번의 호출 결과를 저널에 표시합니다. 숫자를 bool로 변환하지 않으며, 배열이면 요소 수를 표시합니다.
object? result = UO.WarTargetID();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));매개변수와 실행 흐름:
- 마지막 공격 대상의 serial를 읽어옵니다.
var id = UO.WarTargetID();
UO.Print(Hex(id));
string Hex(object? value) => Convert.ToInt64(value).ToString("X");매개변수와 실행 흐름:
- 필드 소스: bridge.LastAttack. 이 명령은 개체를 선택하거나 사용하거나 공격하지 않습니다.
return RunScenario();
object? RunScenario()
{
var id = UO.WarTargetID();
if (Truth(id != 0) && Truth(UO.Exists(id)))
{
UO.Print(UO.GetName(id));
}
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()
{
var before = UO.WarTargetID();
UO.Wait(500);
var after = UO.WarTargetID();
UO.Print(before = after);
return null;
}
}C#은 대소문자를 구분합니다. 정확한 UO 이름을 사용하세요. 숫자 플래그는 0과 비교하고 반환 형식이 bool일 때만 bool을 사용하세요.
매개변수: 매개변수가 없습니다.
결과: dynamic / Any.
호출 시:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.LastAttack:bridge.LastAttack.
내부 구현 코드이며 독립 스크립트로 실행할 수 없습니다.
case "lastattack":
case "wartargetid": return new InjectionValue(bridge.LastAttack);ClassicUO — Bad Newbie & C# Scripts IDE