API UO StartScript ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.StartScript
ClassicUO β’ Runtime API
Basic νμΌμ μ½κ³ κ³΅κ° Sub Mainμ μμμ μμ²ν©λλ€.
μ νν ꡬ문
UO.StartScript(ScriptPath:Any) -> Integer
λ§€κ°λ³μ
ScriptPathβ νμ String ScriptPathμ λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘ κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
λ°νκ°
Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
λμ
- μ€ν μ€ λ° μΌμ μ μ§λ μ€νμ ν¬ν¨νλ©°, λλ¬κ±°λ μ·¨μκ° μμ²λ μ€νμ μ μΈν©λλ€. νΈμΆ μ€ν¬λ¦½νΈλ λ³΄ν΅ μμ λ μ λλ€. λ‘λλ§ ν IDE νμ μ€νμ΄ μλλλ€.
- μΈλ±μ€λ μμ μμμ λ°λ₯Έ νμ¬ μμΉμ λλ€. μμ/μ€μ§λ‘ μμΉκ° λ°λ μ μμ΅λλ€. λ³λ νΈμΆμ νλμ μμμ μ€λ μ·μ΄ μλλ―λ‘ λμ€μ μ μ΄νκΈ° μ μ λͺ©λ‘μ λ€μ μ½μΌμΈμ.
- Basic IDEλ₯Ό λ«μλ νμ± μ€νμ μ¬λΌμ§μ§ μμ΅λλ€. μ΄ λͺ λ Ήλ€μ λ€λ₯Έ ν΄λΌμ΄μΈνΈλ Windows νλ‘μΈμ€κ° μλ μ΄ ν΄λΌμ΄μΈνΈλ₯Ό μ‘°νν©λλ€.
- GetScriptsListλ μΈλ±μ€, GetScriptsCountλ κ°μ, GetScriptStateλ μΈ μν μ½λλ₯Ό λ°νν©λλ€. μλ‘ λ°κΎΈμ΄ μ°κ±°λ λͺ¨λ 0μ΄ μλ κ°μ trueλ‘ ν΄μνμ§ λ§μΈμ.
- μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
λ΄λΆ ν¨μ: νΈμΆλΆν° κ²°κ³ΌκΉμ§
μλλ ν΄λΌμ΄μΈνΈμ μ€μ λ©μλμ λλ€. Basic μμ μλ μμ ν 보쑰 ν¨μκ° μμΌλ©° λ΄λΆ C# λ©μλ μ΄λ¦μ μΆκ° μ€ν¬λ¦½νΈ λͺ λ Ήμ΄ μλλλ€.
1. ExecuteStealthCompatibility
Runtimeμ λ±λ‘λ UO νΈμΆμ μ€ννκ³ λΈλ¦¬μ§ κ²°κ³Όλ₯Ό Integer, String λλ Arrayλ‘ κ°μλλ€.
Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
νλ‘μ νΈ μμ€: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ν¨μ ExecuteStealthCompatibility.
2. StartScript
λΈλ¦¬μ§λ μ΄ ν΄λΌμ΄μΈνΈμ μ€ν κ΄λ¦¬μμ μμν©λλ€.
μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
νλ‘μ νΈ μμ€: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; ν¨μ StartScript.
3. StartScript
Path.GetFullPath -> File.ReadAllText -> DiscoverProcedures -> SelectFileEntryPoint -> RunProcedure -> GetScriptsCount
μΈλ±μ€λ μμ μμμ λ°λ₯Έ νμ¬ μμΉμ λλ€. μμ/μ€μ§λ‘ μμΉκ° λ°λ μ μμ΅λλ€. λ³λ νΈμΆμ νλμ μμμ μ€λ μ·μ΄ μλλ―λ‘ λμ€μ μ μ΄νκΈ° μ μ λͺ©λ‘μ λ€μ μ½μΌμΈμ.
νλ‘μ νΈ μμ€: src/ClassicUO.Client/Game/Managers/YokoInjectionManager.cs; ν¨μ StartScript.
Basic IDEλ₯Ό λ«μλ νμ± μ€νμ μ¬λΌμ§μ§ μμ΅λλ€. μ΄ λͺ λ Ήλ€μ λ€λ₯Έ ν΄λΌμ΄μΈνΈλ Windows νλ‘μΈμ€κ° μλ μ΄ ν΄λΌμ΄μΈνΈλ₯Ό μ‘°νν©λλ€.
μμ
첫 νΈμΆκ³Ό κ²°κ³Ό
# 첫 νΈμΆκ³Ό κ²°κ³Ό
#
# Basic νμΌμ μ½κ³ κ³΅κ° Sub Mainμ μμμ μμ²ν©λλ€.
#
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
SUB Main()
# Sub Mainμ μ€νν©λλ€. μ λ¬ν 0μ μΈλ±μ€μ΄λ©° λΉ κ΄νΈλ μΈμκ° μλ€λ λ»μ
λλ€. Print λ¬Έμμ΄μ μμ λ©μμ§μΌ λΏμ
λλ€.
# μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ
# μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
# νμ String ScriptPathμ
λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘
# κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
Dim count=UO.StartScript("Scripts/Worker.bas")
If count=65535 Then
UO.Print("launch failed")
Else
UO.Print("Active executions: " & CStr(count))
End If
END SUB
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- Sub Mainμ μ€νν©λλ€. μ λ¬ν 0μ μΈλ±μ€μ΄λ©° λΉ κ΄νΈλ μΈμκ° μλ€λ λ»μ λλ€. Print λ¬Έμμ΄μ μμ λ©μμ§μΌ λΏμ λλ€.
- μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
- Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
- νμ String ScriptPathμ λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘ κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
λ°λ³΅λ¬Έ λλ 쑰건μμ μ¬μ©
# λ°λ³΅λ¬Έ λλ 쑰건μμ μ¬μ©
#
# Basic νμΌμ μ½κ³ κ³΅κ° Sub Mainμ μμμ μμ²ν©λλ€.
#
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
SUB Main()
# μ¬λ¬ λͺ
λ Ήμ μ‘°ν©ν λ
립μ μΈ μμ μ
λλ€. λ°°μ΄ μΈλ±μ€λ 0λΆν° μμνλ―λ‘ μ κ·Ό μ μ κΈΈμ΄λ₯Ό νμΈνμΈμ. Wait(250)μ΄ μμΌλ©΄ 250λ°λ¦¬μ΄ κΈ°λ€λ¦½λλ€.
# μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ
# μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
# νμ String ScriptPathμ
λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘
# κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
Dim count=UO.StartScript("Scripts/My Worker.bas")
If count<>65535 Then
Dim indices=UO.GetScriptsList()
For Each index In indices
UO.Print(CStr(index) & ": " & UO.GetScriptPath(index))
Next
End If
END SUB
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- μ¬λ¬ λͺ λ Ήμ μ‘°ν©ν λ 립μ μΈ μμ μ λλ€. λ°°μ΄ μΈλ±μ€λ 0λΆν° μμνλ―λ‘ μ κ·Ό μ μ κΈΈμ΄λ₯Ό νμΈνμΈμ. Wait(250)μ΄ μμΌλ©΄ 250λ°λ¦¬μ΄ κΈ°λ€λ¦½λλ€.
- μμ μ μ μ§μ λ Worker.bas νμΌλ€μ λ°λ‘ λ§λμΈμ. μλͺ»λ/μ½μ μ μλ κ²½λ‘, λΆμ ν©ν Main, λΉνμ± Basic λλ λ³λ ¬ μμ κ±°λΆλ μ€ν¨ν©λλ€. μ΄μ μ€νμ΄ μμ§ μ€μ§ μ€μ΄λ©΄ μ¬μλκ° μ§μ°λ μ μμ΅λλ€. μλ½μ μλ£κ° μλλ©° μ§§μ μ€ν¬λ¦½νΈλ κ°μλ₯Ό μ½κΈ° μ μ λλ μ μμ΅λλ€.
- Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
- νμ String ScriptPathμ λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘ κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
μμ ν 보쑰 ν¨μ
# μμ ν 보쑰 ν¨μ
#
# Basic νμΌμ μ½κ³ κ³΅κ° Sub Mainμ μμμ μμ²ν©λλ€.
#
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
SUB Main()
# Main μλμ ν¨μ μ μ²΄κ° μμ΅λλ€. μ΄ ν¨μμ μΈμμ λ°νκ°μ λ΄λΆμμ μ°λ API λͺ
λ Ήκ³Ό ꡬλΆν΄ μ€λͺ
ν©λλ€.
# TryStartBasicμ 65535μ λΉκ΅ν΄ true/falseλ₯Ό λ°νν©λλ€. μλ£λ₯Ό κΈ°λ€λ¦¬κ±°λ κ°μλ₯Ό μΈλ±μ€λ‘ λ°κΎΈμ§ μμ΅λλ€.
# Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ
λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ
λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
# νμ String ScriptPathμ
λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘
# κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.
If TryStartBasic("Scripts/Worker.bas") Then
UO.Print("launch accepted")
Else
UO.Print("check file, Main and execution settings")
End If
END SUB
Function TryStartBasic(fileName) As Boolean
Dim count=UO.StartScript(fileName)
Return count<>65535
End Function
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- Main μλμ ν¨μ μ μ²΄κ° μμ΅λλ€. μ΄ ν¨μμ μΈμμ λ°νκ°μ λ΄λΆμμ μ°λ API λͺ λ Ήκ³Ό ꡬλΆν΄ μ€λͺ ν©λλ€.
- TryStartBasicμ 65535μ λΉκ΅ν΄ true/falseλ₯Ό λ°νν©λλ€. μλ£λ₯Ό κΈ°λ€λ¦¬κ±°λ κ°μλ₯Ό μΈλ±μ€λ‘ λ°κΎΈμ§ μμ΅λλ€.
- Integer: μμ μμ²μ μλ½ν λ€μ νμ± μ€ν μμ λλ€. 65535 (0xFFFF)λ μμ μ€ν¨μ λλ€. μ μΈλ±μ€, Boolean λλ μλ£ κ²°κ³Όκ° μλλλ€.
- νμ String ScriptPathμ λλ€. μλ κ²½λ‘λ μ΄ ν΄λΌμ΄μΈνΈμ AutoLoad ν΄λμμ μμνλ©° μ λ κ²½λ‘λ νμ©ν©λλ€. κ³΅λ°±μ΄ μλ κ²½λ‘λ λ°μ΄νλ‘ κ°μλλ€. νμΌμλ μ§μνλ Basicκ³Ό νμ μΈμκ° μλ κ³΅κ° Sub Mainμ΄ μμ΄μΌ ν©λλ€.