KO UO Topic books - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

μ„œμ 

ν™ˆ Β· C# Β· IDE Β· UO API Β· A–Z Β· 예 Β· μ–Έμ–΄

κ²Œμž„λΆ 읽기 및 νŽΈμ§‘: 제λͺ©, νŽ˜μ΄μ§€ 및 ν…μŠ€νŠΈ. μœ νš¨ν•œ νŽ˜μ΄μ§€ λ²ˆν˜Έμ™€ λ…ΉμŒ νš¨κ³ΌλŠ” μΉ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

μ„Ήμ…˜

주제 λͺ…λ Ή 및 μ„€λͺ…
Read Page UO.BookGetPageText
Set Page UO.BookSetPageText
Set Header UO.BookSetHeader
Set Text UO.BookSetText
Clear Text UO.BookClearText

λͺ¨λ“  ν…Œλ§ˆ λͺ…λ Ή

λ„μ„œ νŽ˜μ΄μ§€

UO.BookGetPageText Β· UO.BookSetPageText Β· UO.BookSetHeader Β· UO.BookSetText Β· UO.BookClearText

μ£Όμ œμ— λŒ€ν•œ 예

각 λͺ…λ Ή μΉ΄λ“œμ—λŠ” 직접 μ½”λ“œ, ν•¨μˆ˜ 및 클래슀 λ“± μ—¬λŸ¬ κ°€μ§€ 독립적인 μ‹œλ‚˜λ¦¬μ˜€κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μ„ νƒλœ 짧은 μ‹œλ‚˜λ¦¬μ˜€μž…λ‹ˆλ‹€. μ œν•œμ‚¬ν•­κ³Ό 전체 뢄석이 μΉ΄λ“œμ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

UO.BookGetPageText

λ§€κ°œλ³€μˆ˜, κ²°κ³Ό 및 λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€

var text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
    UO.Print(text);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

UO.BookSetPageText

λ§€κ°œλ³€μˆ˜, κ²°κ³Ό 및 λͺ¨λ“  μ‹œλ‚˜λ¦¬μ˜€

UO.BookSetPageText(2, "Camp A");

전체 λͺ…λ Ή μ°Έμ‘°


UO.BookClearText

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C# μ‹œκ·Έλ‹ˆμ²˜

void UO.BookClearText();

μ—΄λ € μžˆλŠ” νŽΈμ§‘ κ°€λŠ₯ν•œ μ±…μ˜ λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ ν…μŠ€νŠΈλ₯Ό μ œκ±°ν•˜κ³  제λͺ©κ³Ό μ €μžλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

λ§€κ°œλ³€μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.

λ°˜ν™˜κ°’

void - 값이 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” true/false λ˜λŠ” μ„œλ²„ 확인이 μ•„λ‹Œ μ“°κΈ° μš”μ²­μž…λ‹ˆλ‹€. μ„œλ²„μ—μ„œ νŽΈμ§‘μ„ κΈˆμ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μž‘

  • λ¨Όμ €, κ²Œμž„ μ•‘μ…˜μ„ μ΄μš©ν•΄ μ›ν•˜λŠ” 책을 νŽΌμ³λ³΄μ„Έμš”. λͺ…령은 λ§ˆμ§€λ§‰μœΌλ‘œ μ—΄μ—ˆλ˜ 책을 μ‚¬μš©ν•©λ‹ˆλ‹€. ID 책은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 책이 μ—¬λŸ¬ ꢌ μžˆλŠ” 경우 μ˜¬λ°”λ₯Έ 책을 μ„ νƒν•˜μ„Έμš”. Get은 이미 λ‘œλ“œλœ νŽ˜μ΄μ§€λ₯Ό 읽고 λˆ„λ½λœ νŽ˜μ΄μ§€λ₯Ό 자체적으둜 μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μžμ—μ„œλŠ” μ±…μ˜ λ‚΄μš©μ΄ μ„Έμ…˜μ— μ €μž₯λ˜μ–΄ κ·Έλž˜ν”½ 없이도 이용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ²Œμž„ 창을 λ‹«μœΌλ©΄ μ±…κ³Ό μ΄ˆμ•ˆμ΄ μ €μž₯되고, λ‹€μ‹œ μ—΄λ©΄ λ³΅μ›λ©λ‹ˆλ‹€. 톡합 λ¬Έμ„œ 자체λ₯Ό λ‹«μœΌλ©΄ μ—΄λ € μžˆλŠ” 톡합 λ¬Έμ„œμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 연결을 끊으면 μ„œλ²„ 뢁이 μž¬μ„€μ •λ©λ‹ˆλ‹€.
  • 변경사항은 νŽΈμ§‘ 쀑인 μ±…μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€λ‚˜ λ„ˆλ¬΄ κΈ΄ ν…μŠ€νŠΈλŠ” κ±°λΆ€λ©λ‹ˆλ‹€. BookSetTextλŠ” 첫 번째 제좜 전에 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€ μ§€μ—°μœΌλ‘œ 인해 λΆ€λΆ„ μ“°κΈ°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • BookClearTextλŠ” 각 νŽ˜μ΄μ§€μ— 빈 ν…μŠ€νŠΈλ₯Ό λ³΄λƒ…λ‹ˆλ‹€. μ΄λŠ” μ±…μ˜ 이전 ν…μŠ€νŠΈλ₯Ό νŒŒκ΄΄ν•©λ‹ˆλ‹€. νŽΈμ§‘λœ 사본에 μ‚¬μš©ν•˜μ„Έμš”. 제λͺ©κ³Ό μž‘κ°€λŠ” κ·ΈλŒ€λ‘œ μœ μ§€λ©λ‹ˆλ‹€.

독립 μ‹€ν–‰ C# 슀크립트

각 μ˜ˆμ œλŠ” λ³„λ„μ˜ 파일 .csx둜 μ €μž₯ν•˜κ³  IDEμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. UO κ°œμ²΄μ™€ λŒ€κΈ° κΈ°λŠ₯은 ν˜„μž¬ κ²Œμž„ μ„Έμ…˜μ˜ 호슀트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ serial 이름, μ’Œν‘œ, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ°”κΎΈμ„Έμš”.

κ°„λ‹¨ν•œ 예제

이 μ½”λ“œλ₯Ό λ³„λ„μ˜ .csx 파일둜 μ‹€ν–‰ν•˜μ„Έμš”. μΈμˆ˜λŠ” ν˜ΈμΆœμ— 직접 ν‘œμ‹œλ©λ‹ˆλ‹€. 예제의 이름, serial, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ°’μœΌλ‘œ λ°”κΎΈμ„Έμš”.

λͺ…령은 λ…λ¦½λœ λ¬Έμž…λ‹ˆλ‹€. μ•žμ˜ λ©”μ‹œμ§€λŠ” 호좜 μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λ©° μ„œλ²„ λ™μž‘μ˜ μ™„λ£Œλ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

UO.Print("Calling UO.BookClearText");
UO.BookClearText();

1. 직접 μ‹ μ²­ - 직접 슀크립트

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
UO.BookClearText();

2. μ—°μŠ΅ μ‹œλ‚˜λ¦¬μ˜€ - μ‹œλ‚˜λ¦¬μ˜€ κΈ°λŠ₯

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
return  RunScenario();
 object? RunScenario()
{
    UO.BookClearText();
    UO.BookSetHeader("New expedition", "Alice");
    UO.BookSetPageText(1, "Bring bandages");
    return null;
}

3. 전체 λ„μš°λ―Έ κΈ°λŠ₯ - 슀크립트 클래슀

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
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()
    {
        ResetNotebook("Supply list", "Alice", "Bandages" + Chr(10) + "Food");
        return null;
    }

    void ResetNotebook(dynamic title, dynamic author, dynamic firstPage)
    {
        UO.BookClearText();
        UO.BookSetHeader(title, author);
        UO.BookSetPageText(1, firstPage);
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}

λͺ…λ Ή κ΅¬ν˜„

C#은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€. μ •ν™•ν•œ UO 이름을 μ‚¬μš©ν•˜μ„Έμš”. 숫자 ν”Œλž˜κ·ΈλŠ” 0κ³Ό λΉ„κ΅ν•˜κ³  λ°˜ν™˜ ν˜•μ‹μ΄ bool일 λ•Œλ§Œ bool을 μ‚¬μš©ν•˜μ„Έμš”.

UO.BookClearText() β€” UO.BookClearText()

λ§€κ°œλ³€μˆ˜: λ§€κ°œλ³€μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.

κ²°κ³Ό: void / Unit.

호좜 μ‹œ:

λ‚΄λΆ€ κ΅¬ν˜„ μ½”λ“œμ΄λ©° 독립 슀크립트둜 μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

case "bookcleartext":

                    state.BookPages.Clear();

                    bridge.BookClearText();

                    return InjectionValue.Unit;

UO.BookGetPageText

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C# μ‹œκ·Έλ‹ˆμ²˜

dynamic UO.BookGetPageText(object? page);

λ§ˆμ§€λ§‰μœΌλ‘œ 펼쳀던 μ±…μ˜ ν•œ νŽ˜μ΄μ§€ λ‚΄μš©μ„ μ½μŠ΅λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

  • page β€” serial 책이 μ•„λ‹Œ 1의 νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. μƒν•œμ€ μ„œλ²„μ—μ„œ λ³΄κ³ ν•˜λŠ” νŽ˜μ΄μ§€ μˆ˜μž…λ‹ˆλ‹€.

λ°˜ν™˜κ°’

string β€” νŽ˜μ΄μ§€ 쀄은 κ°œν–‰ 문자둜 κ΅¬λΆ„λ˜λ©° 끝에 빈 쀄이 μ—†μŠ΅λ‹ˆλ‹€. 톡합 λ¬Έμ„œκ°€ μ—΄λ € μžˆμ§€ μ•Šκ±°λ‚˜, νŽ˜μ΄μ§€κ°€ 아직 μˆ˜μ‹ λ˜μ§€ μ•Šμ•˜κ±°λ‚˜, μˆ«μžκ°€ 잘λͺ»λœ κ²½μš°μ—λ„ 빈 λ¬Έμžμ—΄μ΄ λ°˜ν™˜λ©λ‹ˆλ‹€. μ΄λŠ” νŽ˜μ΄μ§€κ°€ μ‘΄μž¬ν•˜κ±°λ‚˜ μ“°κΈ° κ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹™λ‹ˆλ‹€.

λ™μž‘

  • λ¨Όμ €, κ²Œμž„ μ•‘μ…˜μ„ μ΄μš©ν•΄ μ›ν•˜λŠ” 책을 νŽΌμ³λ³΄μ„Έμš”. λͺ…령은 λ§ˆμ§€λ§‰μœΌλ‘œ μ—΄μ—ˆλ˜ 책을 μ‚¬μš©ν•©λ‹ˆλ‹€. ID 책은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 책이 μ—¬λŸ¬ ꢌ μžˆλŠ” 경우 μ˜¬λ°”λ₯Έ 책을 μ„ νƒν•˜μ„Έμš”. Get은 이미 λ‘œλ“œλœ νŽ˜μ΄μ§€λ₯Ό 읽고 λˆ„λ½λœ νŽ˜μ΄μ§€λ₯Ό 자체적으둜 μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μžμ—μ„œλŠ” μ±…μ˜ λ‚΄μš©μ΄ μ„Έμ…˜μ— μ €μž₯λ˜μ–΄ κ·Έλž˜ν”½ 없이도 이용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ²Œμž„ 창을 λ‹«μœΌλ©΄ μ±…κ³Ό μ΄ˆμ•ˆμ΄ μ €μž₯되고, λ‹€μ‹œ μ—΄λ©΄ λ³΅μ›λ©λ‹ˆλ‹€. 톡합 λ¬Έμ„œ 자체λ₯Ό λ‹«μœΌλ©΄ μ—΄λ € μžˆλŠ” 톡합 λ¬Έμ„œμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 연결을 끊으면 μ„œλ²„ 뢁이 μž¬μ„€μ •λ©λ‹ˆλ‹€.
  • 변경사항은 νŽΈμ§‘ 쀑인 μ±…μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€λ‚˜ λ„ˆλ¬΄ κΈ΄ ν…μŠ€νŠΈλŠ” κ±°λΆ€λ©λ‹ˆλ‹€. BookSetTextλŠ” 첫 번째 제좜 전에 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€ μ§€μ—°μœΌλ‘œ 인해 λΆ€λΆ„ μ“°κΈ°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

독립 μ‹€ν–‰ C# 슀크립트

각 μ˜ˆμ œλŠ” λ³„λ„μ˜ 파일 .csx둜 μ €μž₯ν•˜κ³  IDEμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. UO κ°œμ²΄μ™€ λŒ€κΈ° κΈ°λŠ₯은 ν˜„μž¬ κ²Œμž„ μ„Έμ…˜μ˜ 호슀트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ serial 이름, μ’Œν‘œ, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ°”κΎΈμ„Έμš”.

κ°„λ‹¨ν•œ 예제

이 μ½”λ“œλ₯Ό λ³„λ„μ˜ .csx 파일둜 μ‹€ν–‰ν•˜μ„Έμš”. μΈμˆ˜λŠ” ν˜ΈμΆœμ— 직접 ν‘œμ‹œλ©λ‹ˆλ‹€. 예제의 이름, serial, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ°’μœΌλ‘œ λ°”κΎΈμ„Έμš”.

ν•œ 번의 호좜 κ²°κ³Όλ₯Ό 저널에 ν‘œμ‹œν•©λ‹ˆλ‹€. 숫자λ₯Ό bool둜 λ³€ν™˜ν•˜μ§€ μ•ŠμœΌλ©°, 배열이면 μš”μ†Œ 수λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

object? result = UO.BookGetPageText(1);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1. 직접 μ‹ μ²­ - 직접 슀크립트

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
var text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
    UO.Print(text);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2. μ—°μŠ΅ μ‹œλ‚˜λ¦¬μ˜€ - μ‹œλ‚˜λ¦¬μ˜€ κΈ°λŠ₯

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
return  RunScenario();
 object? RunScenario()
{
    var firstPage = UO.BookGetPageText(1);
    if (Truth(firstPage != ""))
    {
        UO.BookSetPageText(3, firstPage);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3. 전체 λ„μš°λ―Έ κΈ°λŠ₯ - 슀크립트 클래슀

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
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()
    {
        ReplaceCampNote(2);
        return null;
    }

    void ReplaceCampNote(dynamic page)
    {
        var text = UO.BookGetPageText(page);
        if (Truth(text == "Camp A"))
        {
            UO.BookSetPageText(page, "Camp B");
        }
    }

    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을 μ‚¬μš©ν•˜μ„Έμš”.

UO.BookGetPageText(page) β€” UO.BookGetPageText(Any)

λ§€κ°œλ³€μˆ˜: page (Any)

κ²°κ³Ό: dynamic / Any.

호좜 μ‹œ:

λ‚΄λΆ€ κ΅¬ν˜„ μ½”λ“œμ΄λ©° 독립 슀크립트둜 μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

case "bookgetpagetext":

                {

                    int pageNumber = Math.Max(1, Arg(0));

                    string liveText = bridge.BookGetPageText(pageNumber);

                    if (!string.IsNullOrEmpty(liveText))

                        return new InjectionValue(liveText);

                    int page = pageNumber - 1;

                    return new InjectionValue(page < state.BookPages.Count ? state.BookPages[page] : string.Empty);

                }

UO.BookSetHeader

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C# μ‹œκ·Έλ‹ˆμ²˜

void UO.BookSetHeader(object? title, object? author);

μ—΄λ € μžˆλŠ” νŽΈμ§‘ κ°€λŠ₯ν•œ μ±…μ˜ 제λͺ©κ³Ό μ €μžλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

  • title β€” 제λͺ©; κ·Έλž˜ν”½ νŽΈμ§‘κΈ°μ™€ λͺ…령은 첫 번째 47 문자λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • author β€” μž‘μ„±μž; 처음 29 λ¬Έμžκ°€ μ €μž₯λ©λ‹ˆλ‹€.

λ°˜ν™˜κ°’

void - 값이 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” true/false λ˜λŠ” μ„œλ²„ 확인이 μ•„λ‹Œ μ“°κΈ° μš”μ²­μž…λ‹ˆλ‹€. μ„œλ²„μ—μ„œ νŽΈμ§‘μ„ κΈˆμ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μž‘

  • λ¨Όμ €, κ²Œμž„ μ•‘μ…˜μ„ μ΄μš©ν•΄ μ›ν•˜λŠ” 책을 νŽΌμ³λ³΄μ„Έμš”. λͺ…령은 λ§ˆμ§€λ§‰μœΌλ‘œ μ—΄μ—ˆλ˜ 책을 μ‚¬μš©ν•©λ‹ˆλ‹€. ID 책은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 책이 μ—¬λŸ¬ ꢌ μžˆλŠ” 경우 μ˜¬λ°”λ₯Έ 책을 μ„ νƒν•˜μ„Έμš”. Get은 이미 λ‘œλ“œλœ νŽ˜μ΄μ§€λ₯Ό 읽고 λˆ„λ½λœ νŽ˜μ΄μ§€λ₯Ό 자체적으둜 μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μžμ—μ„œλŠ” μ±…μ˜ λ‚΄μš©μ΄ μ„Έμ…˜μ— μ €μž₯λ˜μ–΄ κ·Έλž˜ν”½ 없이도 이용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ²Œμž„ 창을 λ‹«μœΌλ©΄ μ±…κ³Ό μ΄ˆμ•ˆμ΄ μ €μž₯되고, λ‹€μ‹œ μ—΄λ©΄ λ³΅μ›λ©λ‹ˆλ‹€. 톡합 λ¬Έμ„œ 자체λ₯Ό λ‹«μœΌλ©΄ μ—΄λ € μžˆλŠ” 톡합 λ¬Έμ„œμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 연결을 끊으면 μ„œλ²„ 뢁이 μž¬μ„€μ •λ©λ‹ˆλ‹€.
  • 변경사항은 νŽΈμ§‘ 쀑인 μ±…μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€λ‚˜ λ„ˆλ¬΄ κΈ΄ ν…μŠ€νŠΈλŠ” κ±°λΆ€λ©λ‹ˆλ‹€. BookSetTextλŠ” 첫 번째 제좜 전에 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€ μ§€μ—°μœΌλ‘œ 인해 λΆ€λΆ„ μ“°κΈ°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

독립 μ‹€ν–‰ C# 슀크립트

각 μ˜ˆμ œλŠ” λ³„λ„μ˜ 파일 .csx둜 μ €μž₯ν•˜κ³  IDEμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. UO κ°œμ²΄μ™€ λŒ€κΈ° κΈ°λŠ₯은 ν˜„μž¬ κ²Œμž„ μ„Έμ…˜μ˜ 호슀트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ serial 이름, μ’Œν‘œ, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ°”κΎΈμ„Έμš”.

κ°„λ‹¨ν•œ 예제

이 μ½”λ“œλ₯Ό λ³„λ„μ˜ .csx 파일둜 μ‹€ν–‰ν•˜μ„Έμš”. μΈμˆ˜λŠ” ν˜ΈμΆœμ— 직접 ν‘œμ‹œλ©λ‹ˆλ‹€. 예제의 이름, serial, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ°’μœΌλ‘œ λ°”κΎΈμ„Έμš”.

λͺ…령은 λ…λ¦½λœ λ¬Έμž…λ‹ˆλ‹€. μ•žμ˜ λ©”μ‹œμ§€λŠ” 호좜 μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λ©° μ„œλ²„ λ™μž‘μ˜ μ™„λ£Œλ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");

1. 직접 μ‹ μ²­ - 직접 슀크립트

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
UO.BookSetHeader("Mining route", "Alice");

2. μ—°μŠ΅ μ‹œλ‚˜λ¦¬μ˜€ - μ‹œλ‚˜λ¦¬μ˜€ κΈ°λŠ₯

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
return  RunScenario();
 object? RunScenario()
{
    var route = "Northern mine";
    var author = "Alice";
    UO.BookSetHeader("Route: " + route, author);
    return null;
}

3. 전체 λ„μš°λ―Έ κΈ°λŠ₯ - 슀크립트 클래슀

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
  • 보쑰 κΈ°λŠ₯은 μ „μ²΄μ μœΌλ‘œ μ œκ³΅λ©λ‹ˆλ‹€. trueλŠ” 둜컬 확인 및 호좜만 μˆ˜ν–‰ν•¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μ„œλ²„μ˜ λ…ΉμŒ 확인을 λ°˜ν™˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
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 requested = SetNotebookHeader("Supply list", "Alice");
        return null;
    }

    dynamic SetNotebookHeader(dynamic title, dynamic author)
    {
        if (Truth(Len(title) > 47) || Truth(Len(author) > 29))
        {
            return false;
        }

        UO.BookSetHeader(title, author);
        return true;
    }

    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

λͺ…λ Ή κ΅¬ν˜„

C#은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€. μ •ν™•ν•œ UO 이름을 μ‚¬μš©ν•˜μ„Έμš”. 숫자 ν”Œλž˜κ·ΈλŠ” 0κ³Ό λΉ„κ΅ν•˜κ³  λ°˜ν™˜ ν˜•μ‹μ΄ bool일 λ•Œλ§Œ bool을 μ‚¬μš©ν•˜μ„Έμš”.

UO.BookSetHeader(title, author) β€” UO.BookSetHeader(Any,Any)

λ§€κ°œλ³€μˆ˜: title (Any), author (Any)

κ²°κ³Ό: void / Unit.

호좜 μ‹œ:

λ‚΄λΆ€ κ΅¬ν˜„ μ½”λ“œμ΄λ©° 독립 슀크립트둜 μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

case "booksetheader":

                    state.BookTitle = Text(0);

                    state.BookAuthor = Text(1);

                    bridge.BookSetHeader(state.BookTitle, state.BookAuthor);

                    return InjectionValue.Unit;

UO.BookSetPageText

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C# μ‹œκ·Έλ‹ˆμ²˜

void UO.BookSetPageText(object? page, object? text);

μ—΄λ € μžˆλŠ” νŽΈμ§‘ κ°€λŠ₯ν•œ μ±…μ˜ ν•œ νŽ˜μ΄μ§€ ν…μŠ€νŠΈλ₯Ό λ°”κΏ‰λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

  • page β€” serial 책이 μ•„λ‹Œ 1의 νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. μƒν•œμ€ μ„œλ²„μ—μ„œ λ³΄κ³ ν•˜λŠ” νŽ˜μ΄μ§€ μˆ˜μž…λ‹ˆλ‹€.
  • text β€” ν…μŠ€νŠΈ. 쀄은 Chr(10)둜 κ΅¬λΆ„λ©λ‹ˆλ‹€. Chr(13)이 μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€λ‹Ή μ΅œλŒ€ 10 쀄, 쀄당 μ΅œλŒ€ 53 문자. 널 λ¬ΈμžλŠ” κΈˆμ§€λ©λ‹ˆλ‹€.

λ°˜ν™˜κ°’

void - 값이 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” true/false λ˜λŠ” μ„œλ²„ 확인이 μ•„λ‹Œ μ“°κΈ° μš”μ²­μž…λ‹ˆλ‹€. μ„œλ²„μ—μ„œ νŽΈμ§‘μ„ κΈˆμ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μž‘

  • λ¨Όμ €, κ²Œμž„ μ•‘μ…˜μ„ μ΄μš©ν•΄ μ›ν•˜λŠ” 책을 νŽΌμ³λ³΄μ„Έμš”. λͺ…령은 λ§ˆμ§€λ§‰μœΌλ‘œ μ—΄μ—ˆλ˜ 책을 μ‚¬μš©ν•©λ‹ˆλ‹€. ID 책은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 책이 μ—¬λŸ¬ ꢌ μžˆλŠ” 경우 μ˜¬λ°”λ₯Έ 책을 μ„ νƒν•˜μ„Έμš”. Get은 이미 λ‘œλ“œλœ νŽ˜μ΄μ§€λ₯Ό 읽고 λˆ„λ½λœ νŽ˜μ΄μ§€λ₯Ό 자체적으둜 μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μžμ—μ„œλŠ” μ±…μ˜ λ‚΄μš©μ΄ μ„Έμ…˜μ— μ €μž₯λ˜μ–΄ κ·Έλž˜ν”½ 없이도 이용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ²Œμž„ 창을 λ‹«μœΌλ©΄ μ±…κ³Ό μ΄ˆμ•ˆμ΄ μ €μž₯되고, λ‹€μ‹œ μ—΄λ©΄ λ³΅μ›λ©λ‹ˆλ‹€. 톡합 λ¬Έμ„œ 자체λ₯Ό λ‹«μœΌλ©΄ μ—΄λ € μžˆλŠ” 톡합 λ¬Έμ„œμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 연결을 끊으면 μ„œλ²„ 뢁이 μž¬μ„€μ •λ©λ‹ˆλ‹€.
  • 변경사항은 νŽΈμ§‘ 쀑인 μ±…μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€λ‚˜ λ„ˆλ¬΄ κΈ΄ ν…μŠ€νŠΈλŠ” κ±°λΆ€λ©λ‹ˆλ‹€. BookSetTextλŠ” 첫 번째 제좜 전에 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€ μ§€μ—°μœΌλ‘œ 인해 λΆ€λΆ„ μ“°κΈ°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

독립 μ‹€ν–‰ C# 슀크립트

각 μ˜ˆμ œλŠ” λ³„λ„μ˜ 파일 .csx둜 μ €μž₯ν•˜κ³  IDEμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. UO κ°œμ²΄μ™€ λŒ€κΈ° κΈ°λŠ₯은 ν˜„μž¬ κ²Œμž„ μ„Έμ…˜μ˜ 호슀트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ serial 이름, μ’Œν‘œ, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ°”κΎΈμ„Έμš”.

κ°„λ‹¨ν•œ 예제

이 μ½”λ“œλ₯Ό λ³„λ„μ˜ .csx 파일둜 μ‹€ν–‰ν•˜μ„Έμš”. μΈμˆ˜λŠ” ν˜ΈμΆœμ— 직접 ν‘œμ‹œλ©λ‹ˆλ‹€. 예제의 이름, serial, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ°’μœΌλ‘œ λ°”κΎΈμ„Έμš”.

λͺ…령은 λ…λ¦½λœ λ¬Έμž…λ‹ˆλ‹€. μ•žμ˜ λ©”μ‹œμ§€λŠ” 호좜 μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λ©° μ„œλ²„ λ™μž‘μ˜ μ™„λ£Œλ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");

1. 직접 μ‹ μ²­ - 직접 슀크립트

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
UO.BookSetPageText(2, "Camp A");

2. μ—°μŠ΅ μ‹œλ‚˜λ¦¬μ˜€ - μ‹œλ‚˜λ¦¬μ˜€ κΈ°λŠ₯

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
return  RunScenario();
 object? RunScenario()
{
    UO.BookSetPageText(1, "Supplies" + Chr(10) + "Bandages" + Chr(10) + "Food");
    return null;
}

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

3. 전체 λ„μš°λ―Έ κΈ°λŠ₯ - 슀크립트 클래슀

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
  • 보쑰 κΈ°λŠ₯은 μ „μ²΄μ μœΌλ‘œ μ œκ³΅λ©λ‹ˆλ‹€. trueλŠ” 둜컬 확인 및 호좜만 μˆ˜ν–‰ν•¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μ„œλ²„μ˜ λ…ΉμŒ 확인을 λ°˜ν™˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
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 requested = AppendNote(1, "Return before night");
        return null;
    }

    dynamic AppendNote(dynamic page, dynamic line)
    {
        if (Truth(Len(line) > 53))
        {
            return false;
        }

        var previous = UO.BookGetPageText(page);
        if (Truth(previous == ""))
        {
            UO.BookSetPageText(page, line);
            return true;
        }

        var lineCount = 1;
        for (int index = (int)(1); index <= Len(previous); index += (int)(1))
        {
            if (Truth(Mid(previous, index, 1) == Chr(10)))
            {
                lineCount = lineCount + 1;
            }
        }

        if (Truth(lineCount >= 10))
        {
            return false;
        }

        UO.BookSetPageText(page, previous + Chr(10) + line);
        return true;
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    string Mid(object? value, int start, int length = int.MaxValue)
    {
        string text = Convert.ToString(value) ?? "";
        int offset = Math.Clamp(start - 1, 0, text.Length);
        return text.Substring(offset, Math.Min(Math.Max(0, length), text.Length - offset));
    }

    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을 μ‚¬μš©ν•˜μ„Έμš”.

UO.BookSetPageText(page, text) β€” UO.BookSetPageText(Any,Any)

λ§€κ°œλ³€μˆ˜: page (Any), text (Any)

κ²°κ³Ό: void / Unit.

호좜 μ‹œ:

λ‚΄λΆ€ κ΅¬ν˜„ μ½”λ“œμ΄λ©° 독립 슀크립트둜 μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

case "booksetpagetext":

                {

                    int page = Math.Max(0, Arg(0) - 1);

                    while (state.BookPages.Count <= page) state.BookPages.Add(string.Empty);

                    state.BookPages[page] = Text(1);

                    bridge.BookSetPageText(page + 1, state.BookPages[page]);

                    return InjectionValue.Unit;

                }

UO.BookSetText

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C# μ‹œκ·Έλ‹ˆμ²˜

void UO.BookSetText(object? text);

μ—΄λ € μžˆλŠ” νŽΈμ§‘ κ°€λŠ₯ν•œ μ±…μ˜ 첫 번째 νŽ˜μ΄μ§€μ—μ„œ ν…μŠ€νŠΈλ₯Ό μ”λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜

  • text β€” ν…μŠ€νŠΈ. 쀄은 Chr(10)둜 κ΅¬λΆ„λ©λ‹ˆλ‹€. Chr(13)이 μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€λ‹Ή μ΅œλŒ€ 10 쀄, 쀄당 μ΅œλŒ€ 53 문자. 널 λ¬ΈμžλŠ” κΈˆμ§€λ©λ‹ˆλ‹€.

λ°˜ν™˜κ°’

void - 값이 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” true/false λ˜λŠ” μ„œλ²„ 확인이 μ•„λ‹Œ μ“°κΈ° μš”μ²­μž…λ‹ˆλ‹€. μ„œλ²„μ—μ„œ νŽΈμ§‘μ„ κΈˆμ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ™μž‘

  • λ¨Όμ €, κ²Œμž„ μ•‘μ…˜μ„ μ΄μš©ν•΄ μ›ν•˜λŠ” 책을 νŽΌμ³λ³΄μ„Έμš”. λͺ…령은 λ§ˆμ§€λ§‰μœΌλ‘œ μ—΄μ—ˆλ˜ 책을 μ‚¬μš©ν•©λ‹ˆλ‹€. ID 책은 ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 책이 μ—¬λŸ¬ ꢌ μžˆλŠ” 경우 μ˜¬λ°”λ₯Έ 책을 μ„ νƒν•˜μ„Έμš”. Get은 이미 λ‘œλ“œλœ νŽ˜μ΄μ§€λ₯Ό 읽고 λˆ„λ½λœ νŽ˜μ΄μ§€λ₯Ό 자체적으둜 μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μžμ—μ„œλŠ” μ±…μ˜ λ‚΄μš©μ΄ μ„Έμ…˜μ— μ €μž₯λ˜μ–΄ κ·Έλž˜ν”½ 없이도 이용이 κ°€λŠ₯ν•©λ‹ˆλ‹€. κ²Œμž„ 창을 λ‹«μœΌλ©΄ μ±…κ³Ό μ΄ˆμ•ˆμ΄ μ €μž₯되고, λ‹€μ‹œ μ—΄λ©΄ λ³΅μ›λ©λ‹ˆλ‹€. 톡합 λ¬Έμ„œ 자체λ₯Ό λ‹«μœΌλ©΄ μ—΄λ € μžˆλŠ” 톡합 λ¬Έμ„œμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€. 연결을 끊으면 μ„œλ²„ 뢁이 μž¬μ„€μ •λ©λ‹ˆλ‹€.
  • 변경사항은 νŽΈμ§‘ 쀑인 μ±…μ—λ§Œ μ μš©λ©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€λ‚˜ λ„ˆλ¬΄ κΈ΄ ν…μŠ€νŠΈλŠ” κ±°λΆ€λ©λ‹ˆλ‹€. BookSetTextλŠ” 첫 번째 제좜 전에 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 잘λͺ»λœ νŽ˜μ΄μ§€ μ§€μ—°μœΌλ‘œ 인해 λΆ€λΆ„ μ“°κΈ°κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • BookSetText: Chr(12)은 λͺ…μ‹œμ μœΌλ‘œ νŽ˜μ΄μ§€λ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€. Chr(12)이 μ—†μœΌλ©΄ λͺ¨λ“  10 쀄이 νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ 이전 νŽ˜μ΄μ§€λŠ” μ§€μ›Œμ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™„μ „νžˆ κ΅μ²΄ν•˜λ €λ©΄ λ¨Όμ € BookClearTextλ₯Ό λ³„λ„λ‘œ ν˜ΈμΆœν•˜μ„Έμš”. 빈 ν…μŠ€νŠΈλŠ” 첫 번째 νŽ˜μ΄μ§€λ§Œ λŒ€μ²΄ν•©λ‹ˆλ‹€.

독립 μ‹€ν–‰ C# 슀크립트

각 μ˜ˆμ œλŠ” λ³„λ„μ˜ 파일 .csx둜 μ €μž₯ν•˜κ³  IDEμ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. UO κ°œμ²΄μ™€ λŒ€κΈ° κΈ°λŠ₯은 ν˜„μž¬ κ²Œμž„ μ„Έμ…˜μ˜ 호슀트λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데λͺ¨ serial 이름, μ’Œν‘œ, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ²ƒμœΌλ‘œ λ°”κΎΈμ„Έμš”.

κ°„λ‹¨ν•œ 예제

이 μ½”λ“œλ₯Ό λ³„λ„μ˜ .csx 파일둜 μ‹€ν–‰ν•˜μ„Έμš”. μΈμˆ˜λŠ” ν˜ΈμΆœμ— 직접 ν‘œμ‹œλ©λ‹ˆλ‹€. 예제의 이름, serial, μ£Όμ†Œλ₯Ό μžμ‹ μ˜ κ°’μœΌλ‘œ λ°”κΎΈμ„Έμš”.

λͺ…령은 λ…λ¦½λœ λ¬Έμž…λ‹ˆλ‹€. μ•žμ˜ λ©”μ‹œμ§€λŠ” 호좜 μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λ©° μ„œλ²„ λ™μž‘μ˜ μ™„λ£Œλ₯Ό ν™•μΈν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");

1. 직접 μ‹ μ²­ - 직접 슀크립트

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

2. μ—°μŠ΅ μ‹œλ‚˜λ¦¬μ˜€ - μ‹œλ‚˜λ¦¬μ˜€ κΈ°λŠ₯

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
return  RunScenario();
 object? RunScenario()
{
    UO.BookSetText("Camp A" + Chr(12) + "Camp B" + Chr(12) + "Return home");
    return null;
}

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

3. 전체 λ„μš°λ―Έ κΈ°λŠ₯ - 슀크립트 클래슀

λ§€κ°œλ³€μˆ˜μ™€ μ‹€ν–‰ 흐름:

  • λͺ¨λ“  μ˜ˆμ—μ„œλŠ” ν•„μš”ν•œ 책이 이미 μ—΄λ € 있고, ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ μˆ˜μ‹ λ˜μ—ˆμœΌλ©°, λ…ΉμŒμ„ μœ„ν•΄ 책이 νŽΈμ§‘λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 숫자 1, 2 및 3λŠ” νŽ˜μ΄μ§€ λ²ˆν˜Έμž…λ‹ˆλ‹€. 그듀이 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. ν…μŠ€νŠΈ/이름은 데λͺ¨μš©μž…λ‹ˆλ‹€.
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()
    {
        WriteRoute("Northern mine", "Bring bandages");
        return null;
    }

    void WriteRoute(dynamic destination, dynamic supplies)
    {
        var firstPage = "Destination" + Chr(10) + destination;
        var secondPage = "Supplies" + Chr(10) + supplies;
        UO.BookSetText(firstPage + Chr(12) + secondPage);
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}

λͺ…λ Ή κ΅¬ν˜„

C#은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€. μ •ν™•ν•œ UO 이름을 μ‚¬μš©ν•˜μ„Έμš”. 숫자 ν”Œλž˜κ·ΈλŠ” 0κ³Ό λΉ„κ΅ν•˜κ³  λ°˜ν™˜ ν˜•μ‹μ΄ bool일 λ•Œλ§Œ bool을 μ‚¬μš©ν•˜μ„Έμš”.

UO.BookSetText(text) β€” UO.BookSetText(Any)

λ§€κ°œλ³€μˆ˜: text (Any)

κ²°κ³Ό: void / Unit.

호좜 μ‹œ:

λ‚΄λΆ€ κ΅¬ν˜„ μ½”λ“œμ΄λ©° 독립 슀크립트둜 μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

case "booksettext":

                {

                    string bookText = Text(0) ?? string.Empty;

                    state.BookPages.Clear();

                    state.BookPages.AddRange(bookText.Split(new[] { '\f' }, StringSplitOptions.None));

                    bridge.BookSetText(bookText);

                    return InjectionValue.Unit;

                }
⚠️ **GitHub.com Fallback** ⚠️