Navigation

Razor

이 저장소 스크립트 언어의 정본. 되는 구문, 안 되는 구문, 명령문 비용, PvP에서 막히는 명령. 문법이 애매하면 추측 대신 위키 Razor Scripting. 알게 된 것은 여기에 추가.

  • 스크립트 쓰는 법(헤더, 변수 접두, 타이머 관용구): Conventions
  • 고친 스크립트의 게임 반영과 확인(캐시, 리로드): Workflow 04절

00 한눈에

절내용
01이 저장소의 Razor 포크
02Outlands가 더한 문법
03고치기 전에 볼 함정
04되는 구문과 선례
05안 되는 구문의 근거
06명령문 비용과 줄이는 법
07PvP에서 막히는 명령

이 문서에 걸린 질문은 Open items.

문법

01 이 포크

02 확장 문법

Razor CE에 없거나 CE보다 넓어진 것. 존재 여부만 기록, 인자 형식은 위키에서 확인.

분류내용
검색findtype dclicktype findtypelist targettype lifttype에 source hue quantity range 인자
aliasground, lastharmful, lastbeneficial(2026-10-20 debug/probe-last-targets로 확인)
표현식find findlayer targetexists followers hue name paralyzed invul warmode noto dead maxweight diffweight diffhits diffmana diffstam counttype gumpexists ingump varexist bandaging cooldown pvp
명령setvar unsetvar ignore unignore clearignore warmode getlabel rename skill setskill waitforgump gumpresponse gumpclose cooldown
연산자as in
리스트createlist clearlist removelist pushlist poplist listexists list inlist atlist foreach
타이머createtimer removetimer settimer timer timerexists
기타모든 루프에 index 내장. overhead, sysmsg에 {{var}} 보간

02.A 고정 문구 검사와 타겟 커서의 한계

이 절은 문서로 확인한 문법과 설계상 제한. 새 실행 선례나 포션 복구 성공의 증명 아님.

02.B findlayer의 레이어

“The valid layers are:” — 위키 Razor Scripting, findlayer

righthand lefthand shoes pants shirt head gloves ring talisman neck hair waist innertorso bracelet face facialhair middletorso earrings arms cloak backpack outertorso outerlegs innerlegs onehandedsecondary quiver outerbody

Outlands Drip의 부위와 대응. 부위 이름은 2026-10-18 사이트 번들에서 읽음.

Drip 묶음findlayer 이름이 있는 부위이름이 없는 부위
ArmorLegs innerlegs, Arms arms, Chest innertorso, Gloves gloves, Neck neck, Helm headCosmetic Legs, Cosmetic Arms, Cosmetic Chest
ClothingCloak cloak, Shirt shirt, Pants pants, Shoes shoes, Middle Torso middletorso, Outer Legs outerlegs, Outer Torso outertorso, Waist waist, Outer Body outerbody, Face faceUndergarment, Outer Cloak, Underarms, Underlegs, Outer Arms, Outer Waist, Hip, Shoulder
Accessories1H Secondary onehandedsecondary, Talisman talisman, Earrings earrings, Bracelet bracelet, Quiver quiver, One-Handed righthand2H Secondary, Eyewear, Back, Back Secondary, Backworn, Necklace
화면의 세 묶음 밖Ring ring, 양손 무기와 방패 lefthand, 백팩 backpackLight Source, 문신 여섯(몸, 양팔, 양다리, 얼굴)
함정과 선례

03 확인된 함정

.razor 수정 전 이 절의 표 확인. 대부분 인게임에서 깨졌거나 프로브로 잰 것. 선례 없음, 미확인은 증상 칸에 표시. 긴 근거는 05절, 비용 숫자는 06절.

오류가 나는 구문

함정증상대신
주석 안의 ;그 뒤를 명령으로 읽어 그 줄에서 오류마침표로 문장 끊기
for <변수>Invalid for loop syntax값마다 리터럴 for N 사슬(04절 ingump 사슬)
not list 'x' >= var파싱 오류(syntax error in line N). 실행 불가not 뒤에 list 비교식 금지. 값마다 갈래, 갈래 안에서 리터럴과 비교(04절 ingump 사슬)
sysmessageUnknown commandsysmsg
findtypelist를 명령으로Unknown command사용 안 함. 표현식으로 추정, 확인되지 않았다

중첩 반복의 조기 종료

함정증상과 근거 범위대신
중첩 반복에서 if 안의 break바깥 반복이 첫 단계부터 다시 돌 수 있음. CE 소스로 재현, Outlands에서도 같은지는 인게임 미확인(05절)시간, 존재, 입력 조건으로 끝나는 while. 이런 중첩 블록에서 break, continue로 if 건너뛰기 금지. 재확인은 Open items 09절

조건과 변수

함정증상대신
변수가 왼쪽인 크기 비교(if var__a >= var__b, var < 숫자)문자열 비교가 되어 조용히 거짓 가능. 네크로 능력이 한 번도 안 나감. 인게임 확인됨 2026-10-04(05절)변수끼리는 =, !=만. 크기 비교는 내장 식을 왼쪽에(mana >= config__x). serial 범위 검사는 0x40000000 > var
산술(@setvar! var__n var__n + 1)선례 없음, 안 받는다고 판단counttype으로 다시 읽기, 리스트 길이
as alias를 묶은 if, while 블록 밖에서 읽기4294967295, noto가 Mobile … not found블록 안에서 @setvar! var__x alias__x로 복사
getlabel을 부른 블록 밖에서 그 라벨 읽기{{label__x}}가 <not found>. 인게임 확인됨 2026-10-19라벨로 하는 일(in 검사, sysmsg, overhead)은 모두 getlabel과 같은 블록 안에. 단어라 변수로 복사도 안 됨
중첩 블록의 라벨 존재를 일반 varexist로 판정CE 원본은 루트 범위만 확인 → 받은 라벨도 없다고 판정 가능. Outlands 내부 구현은 미확인(05절)이전 라벨 삭제, 숫자 0 초기값, getlabel 뒤 label__x = 0이면 미확인 처리
단어를 변수에 담기따옴표와 무관하게 4294967295. rename에 주면 That name is unacceptable.pushlist 항목은 글자 유지. foreach x in list__y로 꺼내 문자열 인자로. 그 밖의 문자열은 getlabel 결과뿐
몬스터 종류 단어, 한 글자만 바꾼 것을 펫 이름으로(mummy, wytch)That name is unacceptable. 인게임 확인됨 2026-10-10두 글자 이상 다르게(mumi는 받아짐), 실제 낱말도 피함(wicca는 두 글자 차이인데 거절, 인게임 확인됨 2026-10-13). RunUO 계열은 mage 같은 단어도 막음(necro/summon-names)
숫자(serial)를 펫 이름으로That name is unacceptable.글자 이름만
값을 넣지 않은 변수빈 값 → 조건이 조용히 안 맞음util/check.sh가 config__ wait__ interval__ cooldown__ var__ alias__ label__ 접두 검사. timer__ list__ global__ 접두와 접두 없는 이름은 못 잡음
varexist로 값 확인선언 여부만 봄. 잘못 타겟한 값도 참 → 영영 안 고쳐짐대상 앞이 확실한 곳에서만 find로 확인(Conventions 03.D절)

검색

함정증상대신
아이템 ignore 후 find serial container로 소속 판별ignore한 아이템이 검색에서 빠질 수 있음. 이 포크의 아이템 검색도 그런지는 확인되지 않았다(05절)소속 판별 먼저, 처리나 건너뛰기 뒤에 ignore. 확인은 Open items 09절
플레이어 serial의 find를 존재, 거리의 전제로 사용유효한 플레이어 serial에도 find 거짓. 인게임 확인됨 2026-10-04(05절)수동 저장 serial과 검색 성공은 별개. setvar! … lasttarget으로 고른 serial 보관 후 target에 바로 전달. 검색 실패를 serial 무효나 거리 초과로 단정 금지
dead serial로 다른 플레이어 사망 검사조회마다 dead - Cannot check death status of other players. 진단의 dead=0은 생존 증거 아님. 인게임 확인됨 2026-10-04상대 플레이어에게 dead 금지. 자기 사망의 while not dead와 구분. Q 대상 캐시는 사망으로 자동 비우기 불가 → 플레이어 사망 시 Stop 또는 새 대상
pvp=0이면 다른 플레이어 정보 전부 조회 가능하다고 판단대상의 dead, findlayer, getlabel 각각 플레이어 조회 차단 경고. 같은 serial의 저장, 복사, noto는 성공. 인게임 확인됨 2026-10-04. 검사별 반환값은 03.A절 결과 표pvp 제한과 명령별 대상 제한을 구분. FALSE나 0이어도 경고가 있으면 실제 상태로 보지 않음
findtype 한 번으로 여러 모빌 중 하나 고르기부를 때마다 같은 모빌while findtype … as로 돌며 검사, 아니면 @ignore. endwhile 뒤 @clearignore
모빌을 이름으로 찾기되긴 함. 이름 변경 후 Razor 캐시 갱신 여부는 확인되지 않았다바디 번호로 찾기. 바디 번호는 인게임 >info. 내 소환수의 noto는 2(friend)
패스마다 findtype으로 상태 세기findtype이 가장 비쌈(한 번 20 ~ 40ms, 06절). 32번이면 패스마다 1초 안팎천천히 변하는 상태는 타이머로 몇 초에 한 번. elseif 사슬은 통째로 한 틱이라 길어도 쌈
findbuff 'Strength', 'Agility'로 스탯 포션 판정Bless도 같은 이름 → 내 Bless든 아군 Bless든 걸려 있으면 포션 안 마심(05절)스탯을 기준선(기본 + 20)과 비교, 포션마다 재시도 간격(Combat 02.D절). Bless는 Cunning, Arch Protection은 Protection. Magic Resist Potion은 그 이름 그대로인게임 확인됨 2026-10-09

거리 확인과 Last Target

커서와 타겟

장착과 손 도구도 지금 포크의 실제 결과 기준.

insysmsg의 소비 범위:

타겟 주문 한 번의 모양: 04절 끝.

함정증상대신
for 25, wait 100으로 커서 폴링4서클 커서가 루프 종료 후 뜸인게임 확인됨 2026-09-29. 남은 커서가 not targetexists 블록 전부 차단for 60. 한 바퀴가 wait 값보다 훨씬 짧게 도는 것으로 보임. 원인은 확인되지 않았다
커서 없는 시전(힐 에이전트, Create Food, 자기 버프)을 not casting부터 보며 폴링시전 끊김 순간 casting 해제 → 끊김 줄을 안 읽고 나감인게임 확인됨 2026-09-29. 다음 커서 폴링이 그 줄을 제 것으로 읽고 첫 바퀴에 나가 커서가 남음커서 폴링 시작 전에 끊김 줄을 한 번 읽어 비움(magery/rotation 첫머리, buff/spells의 Spell Siphon 화살 앞)
치유할 것이 없을 때 Smart Heal, Greater Heal 에이전트풀피면 커서를 안 찍고 남김인게임 확인됨 2026-09-29. 모든 블록 정지에이전트 폴링 후 targetexists and diffhits = 0이면 Cancel Current Target
스크립트의 target과 Target Selflasttarget이 백팩이나 나로 바뀜. 10칸 밖에서 고른 타겟을 노래가 덮어써서 교전 실패인게임 확인됨 2026-09-29. 적대 커서에 찍으면 lastharmful도 바뀜타겟은 화면 거리에서 받아 사본(var__combat_target)에 둠. 2026-10-20부터 루프는 lastharmful을 읽음. 블록이 자기 용도로 찍은 몹은 var__target_hold(fight/target). 손으로 누르는 E, Shift+V, 무기 핫키는 루프의 다음 공격 주문이나 다음 고르기 전까지 그 몹을 가리킬 수 있음
Set Last Target (Harmful)로 고른 대상을 lasttarget으로 읽기일반 lasttarget은 그대로라 루프가 고른 대상을 못 따라감. Target Closest Non-Friendly Monster는 lasttarget, lastharmful, lastbeneficial 셋을 다 바꾸고, Next Non-Friendly Monster Target도 lastharmful을 바꿈인게임 확인됨. 인게임 확인됨 2026-10-20(debug/probe-last-targets)루프는 lastharmful을 읽음(fight/target). Shift+V(Attack Last Target)와 All Kill 커서도 Harmful 대상을 따라감인게임 확인됨 2026-10-20
노래 커서에 백팩 찍기노래 커서는 적대 커서라 lastharmful도 백팩으로 바뀜. 인게임 확인됨 2026-10-20(debug/probe-last-targets)루프는 사본을 써서 영향 없음, 그대로 백팩. 땅은 장소에 따라 거절(Barding 01.B절)
프로보 커서에 짝 찍기프로보 커서도 적대 커서인게임 확인됨 2026-10-20 → 지금 대상이 아닌 짝을 찍으면 lastharmful이 그 몹으로 바뀜var__target_hold로 빼 두고, 다음 주문이 지금 대상을 찍으며 되돌림(bard/provo)
네이티브 선택 커서를 색만으로 판별CE OneTimeTarget은 _hasTarget을 켜지만 _curFlags는 이전 값 유지. Set Last Target (Beneficial)의 커서도 이전 harmful 종류로 관찰될 수 있음. CE Targeting 소스, 2026-10-21 확인. Outlands의 중첩 동작은 미검증자동 시전과 겹치는 등록의 소유권 보장 금지. 초기 사용은 warmode 수동 구간, Open items 17절
setlasttarget alias__x로 lasttarget 복원Razor CE 문서의 setlasttarget ('serial')과 달리 Target a new 'Last Target' 커서. 뒤의 sysmsg 줄 없음, 커서 취소마다 Target queue cleared.와 같은 커서가 번갈아 찍힘. 인게임 확인됨 2026-10-07(skinning-enhanced v3 Journal). 스크립트가 그 줄에서 커서 대기로 보임. 인자 무시 원인은 확인되지 않았다사용 안 함. lasttarget 덮어쓰기는 기억한 대상이 없을 때만(skinning-enhanced.razor SKINNING)

03.A 대상 조회 진단 핫키

같은 조건으로 비교하기

  1. 전투 스크립트 Stop. pvp=0 일반 필드에서 조회가 되던 몬스터와 alt 비교
    • 검사 중 서로 이동, 타겟 변경 금지. pvp=1이면 제한된 결과가 섞이지 않게 진단 중단
  2. Scripts 탭 Reload all scripts → debug-target-find Play
    • TARGET FIND PROBE v1 loaded, [ target, pick ] → 가까운 몬스터 타겟
    • F END까지 나오면 같은 거리의 alt로 반복. 시작 문구가 없으면 비교 전에 캐시 확인
  3. 가능하면 2칸 안, 3~5칸, 6~10칸, 11~12칸, 13~18칸에서 반복, 실제 거리 기록
    • 넓은 범위에서 찾은 대상을 좁은 범위에서 놓치는지 비교. 기본 검색부터 실패면 거리 판정 불가
  4. 마지막 대상과 변수 경로 비교: 먼저 Q로 같은 대상 지정. 2026-10-20부터 Q는 Set Last Target (Harmful)이라 진단도 lastharmful을 읽음. 그 전 결과는 lasttarget 기준
    • find 본문의 config__probe_find_use_last_target를 1로 → 새 커서 없이 그 serial로 실행
    • 기본값 0: 직접 찍은 serial과 Q serial이 다르면 F11 건너뜀
  5. Q로 같은 대상 선택 → debug-target-state Play
    • TARGET STATE PROBE v1 loaded부터 S END까지의 제한 경고와 결과 함께 확인
    • 기본 Q 모드는 기존 주문 커서를 취소하지 않음. 시전 전 조건은 새 타겟 커서 요구 전에 읽음

핫키 실행의 캐시 반영, 종료 후 git status: Workflow 04.A절, 04.B절.

검색 번호

번호검사비교 목적
F00find backpack내 아이템 조회 대조군
F01, F02find serial, 같은 식에 as기본 검색과 alias 바인딩. alias 성공 시 same_selected=1 확인
F03, F04, F05ground, ground -1 -1 18, 같은 식에 as검색 소스, 거리 인자, alias의 결과 차이
F06, F07, F08, F09같은 serial을 2, 5, 10, 12칸으로 검색기본 검색과 F04가 성공한 대상에서 거리 필터 비교
F10, F11F10은 복사한 세션 변수, F11은 같은 대상의 lastharmful(2026-10-20 전에는 lasttarget)같은 serial을 읽는 경로 차이. Q 대상이 다르면 F11 SKIP
F12, F13F12는 ignore 후 검색, F13은 unignore 후 검색F04 TRUE, F12 FALSE, F13 TRUE → ignore 동작. 모두 FALSE면 ignore 탓으로 단정 금지
F14, F15바디 ID의 findtype으로 18칸, 10칸 검색다른 모빌은 성공 아님, 고른 serial과 같은 항목만 TRUE. 최대 40개를 채우면 INCOMPLETE

상태와 변수 번호

번호검사해석
G01, G02, G03시전, 커서, 이동 쿨. 마나. TK 시약현재 반환값만 출력. 마나 기준은 TK 9, dump 40. 혈이끼와 맨드레이크 따로 검색
G04, G05기존 timer__tk 30,500ms. me 바와 target 바타이머 생성, 초기화 없음. 바가 켜져도 내가 건 TK의 소유권 증거 아님
S01, S02내 dead, 대상의 dead serial제한 경고가 있으면 대상 상태 UNKNOWN. RETURN=0을 생존으로 읽지 않음
S03, S04notoriety 7종, 대상의 backpack layer분류와 레이어 반환을 따로 확인. 레이어를 못 찾았다고 대상 부재로 판단 금지
S05, S06, S07변수가 왼쪽인 크기 비교, 숫자가 왼쪽인 같은 비교, 복사본의 같음 비교같은 serial에서 S05와 S06이 다르면 비교 방향의 형 변환 문제 재현. 같음 비교도 따로
S08getlabel예전 label 삭제 후 맨 마지막 호출. LABEL이나 NO_LABEL을 원래 경고와 함께 기록

실패 로그 읽기

2026-10-04 v1 진단 결과

사용자가 올린 alt 로그와 NPC 로그 비교. 양쪽 모두 find 진단과 state 진단이 END까지 실행, Script Error 아님. 인게임 확인됨 2026-10-04.

검사NPC Ohanna플레이어 alt indian angus pay
serial 저장과 복사885491로 일치1477299로 일치. Q serial도 같은 값
F00 내 backpackTRUETRUE
F01에서 F05, F10TRUE. F02와 F05의 alias도 same_selected=1FALSE. 기본, ground, 18칸, alias, 복사 변수 경로 모두 실패
F06 2칸, F07에서 F09까지 5, 10, 12칸2칸 FALSE, 나머지 TRUE모두 FALSE
F11 Last TargetSKIP. Q가 alt로 남아 같은 대상 비교 아님같은 alt serial로 FALSE
F12 ignore 후, F13 unignore 후등록과 해제 안내 모두 나옴, 검색은 둘 다 TRUE둘 다 FALSE. 시작의 clearignore와 해제 후에도 실패
F14, F15 바디 findtypeSKIPSKIP. 플레이어 모빌의 findtype 결과는 확인되지 않았다
S02 대상 deadRETURN=0. 플레이어 조회 제한 경고 없음Cannot check death status of other players. RETURN=0, 실제 상태 UNKNOWN
S03 noto, S04 findlayernoto=3(hostile). layer FALSE, 제한 경고 없음noto=1(innocent). findlayer는 may not be used on other players와 FALSE
S05 변수 왼쪽, S06 숫자 왼쪽, S07 같음 비교0, 1, 10, 1, 1. 두 serial 모두 비교 방향 차이 재현. 플레이어 제한과 별개
S08 getlabelNO_LABEL. 플레이어 건너뛰기 경고 없음. label이 안 온 이유는 확인되지 않았다Skipped getting label because serial is a player, NO_LABEL

04 되는 구문과 선례

모두 저장소에 선례 있음. 새 패턴 전에 여기서 먼저 찾음.

구문선례
not inlist '리스트' <serial 변수>magery/rotation(OPENER)
list__magic_drained_targets와 list__magic_cursed_targets로 2단 오프닝magery/rotation(OPENER)
createlist, removelist, clearlist, pushlist여러 파일
pushlist '리스트' '단어', foreach x in 리스트, index = <변수>, @rename <serial 변수> x로 단어를 문자열 인자로 전달necro/summon-names(list__summon_kinds). 2026-09-28 프로브에서 항목이 글자 그대로 읽히고 rename이 받음. rename은 위키에 있음, CE는 CanRename인 펫에만 보냄
ingump "10/" … "1/"처럼 큰 수부터 내려오는 사슬로 숫자 읽기necro/symbols의 심볼 수. ingump는 부분 문자열 일치 → 큰 수부터. 갈래마다 리터럴 for N으로 리스트 채움
findbuff "song of discordance"archive/bard-mace.razor BARD SONG BUFF
cooldown "magic arrow" = 0magery/rotation(PROC CORE). 항목은 cooldowns.xml
while findtype … backpack as와 @ignorebard/instrument
findtype 24|158|… ground -1 -1 <range> as로 바디 번호로 모빌 찾기necro/summon-names, 옛 bard-necro의 PROVO FOLLOWER CACHE(git 이력)
find <변수> ground -1 -1 <range> as와 dead로 슬롯 비우기necro/summon-names, 옛 bard-necro의 PROVO FOLLOWER CACHE(git 이력)
not dead X and noto X != "hostile" …necro/summon-names
useskill, waitfortarget, target backpack 순서archive/bard-mace.razor BARD SONG BUFF
for 60과 break로 커서 폴링magery/rotation. 참고했던 auto-mage.razor:1160은 저장소에 없음
hotkey 'Vampiric Embrace'와 hotkey 'Target Self'necro/vampiric-embrace. 위키 기준 자기 타겟 시 주변 시체 자동 탐색인게임 확인됨 2026-09-25
hotkey 'Drink Heal' 같은 포션 핫키recovery/heal. 이름은 Razor 핫키 목록의 Potions 항목 그대로
hotkey "> Interrupt"magery/rotation, magery/flamestrike의 커서 폴링. 제 시전을 끊고 긴급 힐로. 같은 핫키가 휠 아래에도 있음(Hotkeys)
stopbard/instrument
hotkey 'Play Script: <폴더>\<이름>'으로 다른 스크립트 켜기. 지금 스크립트는 거기서 끝남loot/recycle의 루프 복귀. 인게임 확인됨 2026-10-19. 루틴끼리 공유할 동작은 넘기지 말고 블록으로(Modules 03.A절)
targetexists "beneficial", "neutral", "harmful"로 커서 종류 구분buff/spells. Bless는 beneficial, Arch Protection은 neutral(인게임 확인됨 2026-10-10. 처음 tamer 스크립트는 beneficial로 잘못 읽어 커서가 남음). Flamestrike는 harmful(magery/flamestrike), 손 도구와 칼은 neutral(gather/*). 기대와 다른 커서는 취소 → 다른 블록 차단 방지

타겟 주문의 모양

magery/rotation의 타겟 주문 모양.

  1. 패스의 첫 커서 폴링 전에 남은 끊김 줄을 한 번 읽어 비움
  2. 대상을 find … as로 찾은 블록 안에서 cast. alias는 블록 밖에서 못 읽음 → target까지 모두 안에
  3. for 60 폴링. 커서, 끊김 줄, 긴급 HP 중 먼저 온 것에서 break. HP 때문이면 hotkey "> Interrupt"로 제 시전 먼저 끊음
  4. 커서 없음 → 아무것도 안 찍음. 커서 있음 → lastharmful 재확인
    • 대상 사망, 플레이어의 대상 변경 → Cancel Current Target
    • 그대로 → target, wait wait__cast
flowchart TD
  drain("남은 끊김 줄을 읽어 비운다<br>패스의 첫 커서 폴링보다 먼저") --> cast("find … as로 찾은 블록 안에서 cast")
  cast --> poll("for 60 폴링<br>커서, 끊김 줄, 긴급 HP 중 먼저 온 것에서 break<br>HP 때문이면 Interrupt 핫키로 먼저 끊는다") --> cursor{"커서가 떴나"}
  cursor -- 예 --> reread("lastharmful을 다시 읽는다") --> same{"대상이 살아 있고 그대로인가"}
  cursor -- 아니요 --> none("아무것도 찍지 않는다")
  same -- 예 --> hit("target 대상<br>wait wait__cast")
  same -- 아니요 --> cancel("Cancel Current Target")

05 안 되는 구문의 근거

03절 표의 긴 근거, 표와 같은 순서. 선례가 없어 쓰지 않는 것은 맨 끝.

비용과 제약

06 명령문 비용

비용 = 검색 종류가 아닌 “이 패스에서 밟는 줄 수”. 그중 findtype이 가장 비쌈. → 자주 안 바뀌는 상태는 타이머로 막고, 흔한 경로가 밟는 줄을 줄임.

잰 것걸린 시간한 개당
대입 100줄0.5 ~ 1초5 ~ 10ms
거짓 if 100개(3줄 본문 건너뜀)1 ~ 2초10 ~ 20ms
findtype … self 50번1 ~ 2초20 ~ 40ms
20갈래 elseif 사슬 10번0.25 ~ 0.5초사슬 하나 25 ~ 50ms

getlabel도 즉시 끝나는 로컬 조회로 가정 금지.

Bard Necro 루프 적용 결과: Bard Necro Enhanced 01.H절. 패스마다 findtype 최대 32번이던 시약 플래그 읽기를 10초에 7번으로 줄임(처음에는 30초).

07 PvP 제약

구조화 PvP, 팩션 상태의 스크립트 제약.

제약영향
settimer removetimer getlabel rename cooldown wait 같은 명령 차단타이머, 라벨, 쿨다운에 기대는 로직 정지
플레이어 serial이 0x0상대를 변수에 담기 불가, 상대 머리 위 overhead … <serial> 불가
find 계열이 자기 아이템만 잡음상대나 바닥 물건을 찾는 로직 정지

PvP 겸용 스크립트 규칙: Conventions 07절. 게임 쪽 PvP 규칙과 숫자: PvP.