원글 : https://arca.live/b/characterai/102418074?mode=best&p=1



Current Affinity:{{#if {{and::{{greater_equal::{{getvar::aff}}::0}}::{{less::{{getvar::aff}}::10}}}}}}(Indifference){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::10}}::{{less::{{getvar::aff}}::20}}}}}}(Awareness){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::20}}::{{less::{{getvar::aff}}::30}}}}}}(Acknowledgement){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::30}}::{{less::{{getvar::aff}}::40}}}}}}(Interest){{/if}}

{{#if {{and::{{greater_equal::{{getvar::aff}}::40}}::{{less::{{getvar::aff}}::50}}}}}}(Appreciation){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::50}}::{{less::{{getvar::aff}}::60}}}}}}(Fondness){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::60}}::{{less::{{getvar::aff}}::70}}}}}}(Affinity){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::70}}::{{less::{{getvar::aff}}::80}}}}}}(Attachment){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::80}}::{{less::{{getvar::aff}}::90}}}}}}(Love){{/if}}{{#if {{and::{{greater_equal::{{getvar::aff}}::90}}::{{less::{{getvar::aff}}::100}}}}}}(Devotion){{/if}}{{#if {{equal::{{getvar::aff}}::100}}}}(Obsession){{/if}}


일단 이 부분에 대한 설명임.

이 존나게 중첩되어 있는 구문들을 자연어로 설명하자면,


Affinity가 0 이상 10 미만인 경우: "Indifference"

Affinity가 10 이상 20 미만인 경우: "Awareness"

Affinity가 20 이상 30 미만인 경우: "Acknowledgement"

Affinity가 30 이상 40 미만인 경우: "Interest"

Affinity가 40 이상 50 미만인 경우: "Appreciation"

Affinity가 50 이상 60 미만인 경우: "Fondness"

Affinity가 60 이상 70 미만인 경우: "Affinity"

Affinity가 70 이상 80 미만인 경우: "Attachment"

Affinity가 80 이상 90 미만인 경우: "Love"

Affinity가 90 이상 100 미만인 경우: "Devotion"

Affinity가 100인 경우: "Obsession"


라고 할 수 있음!


이걸 정규식에서 어떻게 받아 먹냐면


IN: Affinity: (\d+)

OUT: {{setvar::aff::$1}}{{br}}Affinity: $1


이걸 다시 자연어로 해설해야함, 


IN: 입력 문자에서 "Affinity: 숫자"와 같은 패턴을 찾음. (상태창에서 호감도를 스캔함.)

(\d+): 발견한 패턴에서 숫자에 해당하는 부분을 캡처함. (호감도의 숫자를 확인함.)


OUT: 찾은 숫자를 변수로 설정하고, 이를 출력 문자열에 삽입하여 "Affinity: 숫자" 형식으로 출력함.

( 그 숫자를 변수로 설정하고, 출력할때 호감도가 몇이었는지 참고 하게 함.)


{{setvar::aff::$1}}: 숫자를 변수 "aff"에 설정함. 

{{br}}: 줄 바꿈, 이후에 Affinity 값이 다시 출력.


즉, 

리수에 있는 코드 읽는 노예가 상태창을 보고

호오, 호감도가 50이네? 그럼 'Fondness'를 출력해야겠다! 

하고 봇카드에 미리 적혀있는 'Fondness' 부분만을 활성화 시켜준다는 거임.


다시 말하자면 호감도 10마다 디스크립션을 다르게 추가해서 적을 수 있고, 호감도가 오르거나 내림에 따라서 현재 호감도가 표시중인 부분만 활성화되게 만들 수 있다는 것임.


호감도 범위나 디스크립션은 맨 위에 중첩된 구문에서

숫자(10,20,30...)부분과 그 뒤에 소괄호에 들어있는 Awareness, Indifference, 등등 자리를 수정하면 됨.


그러니까, 호감도가 0~10일때 캐릭터는 유저를 싫어한다고 적고 싶다면.


{{#if {{and::{{greater_equal::{{getvar::aff}}::0}}::{{less::{{getvar::aff}}::10}}}}}}(Indifference){{/if}}


부분을 


{{#if {{and::{{greater_equal::{{getvar::aff}}::0}}::{{less::{{getvar::aff}}::10}}}}}}(<char> doesn't like <user>){{/if}}


이런식으로 수정하면 된다는 뜻임