![]() |
![]() When a NOTIFY request arrives, Misaka first performs the minimum processing required by the kernel, such as creating an appropriate system variable from the Reference argument, and then executes the user code with the symbol $OnNotify_id. The Reference argument remains as she received the NOTIFY. Furthermore, due to the nature of the NOTIFY request, even if she returns the script here, it will be discarded. #0
{
#1
{$z=""}{$if (2==1) { {$z=1}{$z++}b }}{$z}
#2
{
#3
¤¢¤¤¤¦¤¨¤ª
#0 is formatted to #1, but #2 is formatted to #3, a process that is only convenient for humans. |
![]() #0
{
#1
{$z=""}{$if (2==1) { {$z=1}{$z++}b}}{$z}
But it's not wrong at all |
![]() Each HWnd |
![]() When changing to SHIORI/3.0, I made a mistake in porting the high-level processing section. For example, it includes $_OnRandomTalk, so it is fatal. |
![]() Added filedrop2 receiving example to template |
![]() Returns the length (in bytes) of string s. Returns the number of elements in array a. Subscripts are valid up to the value -1 obtained by this function. If a is a simple variable, 1 is always returned. If a is neither an array variable nor a simple variable (NULL), -1 is returned. |
![]() |
![]() From now on, only valid identifiers must be exactly the same as the file name used when loading. |
![]() The facts are complicated, so the explanation is also complicated. |
![]() |
![]() |
![]() It is correct that an error message should appear |
![]() No matter how much I do, I still can't get a drumstick. |
![]() Calculates the four arithmetic expressions indicated by expression and returns the result. Expressions can be written with multiple terms/operation priority can be controlled using parentheses. illustration
{$calc(1+1)}
Operators that can be used + addition - subtraction * multiplication / division % remainder ^ power There is no concept of decimal points. If the division results in a decimal number, it is truncated. The explanation is complicated, so please refer to the "Simple Variables" section of the specifications. |
![]() Typical problems with the old Misaka template Random talk intervals are only accurate to the minute and the quality is low. After startup, the "time" change event (now n o'clock) always occurs on his first OnMinuteChange. After startup, the "startup time" change event (n hours elapsed) always occurs in his OnMinuteChange. Some of the format of \q is outdated. There are no elements after MATERIA B such as \![*] Almost all ghosts created based on the Misaka template have the above tendency. This is all a problem with the user code, so look around OnMinuteChange and copy and paste the necessary parts to fix it... |
![]() Interval at which the system symbol $_OnRandomTalk is called. Unit second. Called at approximately 0.5 to 1.5 times the interval specified by the system variable $_talkinterval. Describe so-called "random talk". Random talk encapsulation structure. When you set a value to the system variable $_talkinterval, the system symbol $_OnRandomTalk is called at an interval of about 0.5 to 1.5 times that value. If $_talkinterval is set to 0, $_OnRandomTalk will not be called. The same thing can be accomplished with user code. It does not interfere with the minute-interval random talk script using the conventional user code (works as is). |
![]() Decent SAORI Loads and locks the SAORI DLL pointed to by filename. Unloads and unlocks the SAORI DLL pointed to by filename. Executes the SAORI indicated by filename with arg set as the argument header. Blocks until the SAORI returns a response. It will crash if the specified DLL has not been loaded yet. It also crashes when an error occurs inside SAORI. illustration {$loadsaori("substr.dll")} {$temp={$saori("substr.dll","¤¢¤¤¤¦¤¨¤ª",2,3)}}{$temp} {$unloadsaori("substr.dll")}If substr.dll is the substr.dll currently included with Satoori, "¤¢¤¤¤¦¤¨¤ª" is set in $temp. In the example above, it is executed at the same time as loading and unloaded at the same time as execution ends, but there is no rule that says it must be used this way. There is no problem if you load it at the same time as Misaka starts (for example, using $_Constant), leave it in memory forever, and call it many times. Lifespan management of SAORI is left to the user. As long as you use a general SAORI, it seems that there will be no particular problem if you load all the SAORIs to be used at the same time as starting Misaka and leave them as they are. In other words, you do not need to use $unloadsaori unless you want to manage lifespan in detail. We will omit the benefits of detailed lifespan management here. Note that there is no need to take any consideration into the behavior when Misaka exits with SAORI loaded (without explicitly unloading it). Misaka automatically unloads all loaded SAORI upon completion. |
![]() Side effects of the fix in 79 If you set propertyhandler,0 in misaka.ini, it will not work. Property handlers greatly complicate control paths. This is quite a disadvantage for debugging in the development environment and tracing using misaka_debug.txt. Also, since property handlers are called every time a variable changes (although they are not visibly heavy), it would be a bit of a waste to just turn them on as a joke. |
![]() |
![]() |
![]() |
![]() Loads the saori DLL indicated by filename, sets arg as the argument header, and issues a request. Block until saori returns a response. Specify filename as a relative path from the directory where Misaka is located. If the specified DLL for her does not exist or an error occurs within her SAORI during the request, it will crash. illustration {$temp={$saori("substr.dll","¤¢¤¤¤¦¤¨¤ª",2,3)}}{$temp}If substr.dll is the substr.dll currently included with SAORI, "¤¢¤¤¤¦¤¨¤ª" is set in $temp. |
![]() Wide character substring. Count the apparent number of characters instead of the number of bytes. Other than that, same as substring. illustration {$temp="¤¢a¤¤b¤¦c¤¨d¤ª"}{$substringl({$temp},3)} {$temp="¤¢a¤¤b¤¦c¤¨d¤ª"}{$substringlw({$temp},3)}The upper result is "aa", the lower result is "aa" |
![]() Previously, user variables had priority. |
![]() Add formatting Returns the zth string of dictionary variable or array variable da. |
![]() If sa is a simple variable, returns the length (in bytes) of the string sa. If sa is an array, returns the number of elements in the array. |
![]() __0 discarded, go to __1. The algorithm becomes even more degenerate. |
![]() When misakac.exe is executed, all *.txt files in the same directory are encrypted and output as *.__0. The __0 files are no longer plain text files, but if you include these files in misaka.ini, they will be read as normal data files. This function is primarily intended to be used by ghost authors to express their intention to the outside world, "Do not read". Therefore, we cannot and do not guarantee that the content will never be read by anyone. Misakac.exe will convert any file with a .txt extension, so if there are files unrelated to Misaka, such as readme.txt, in the same directory, you will need to take care to remove them. Encryption algorithms are very tepid. |
![]() |
![]() |
![]() |
![]() Finds the string substr in the string s and returns its starting position. unit byte. Searches for the string substr in the string s and returns a bool value indicating whether all of them exist. Maximum number of arguments is infinite. {$insentence("human","hum")} == true {$insentence("human","hux")} == false {$insentence("human","hum","uma","u")} == true {$insentence("human","hum","hua")} == falseindex is the lowest function, next is insentence, too much encapsulation is |
![]() |
![]() |
![]() Array. A list of other ghosts currently on the same desktop. null if you are the only one. |
![]() Added the above array control functions. Added the above string control functions. Added "Shiritori" sample to template. specification |
![]() |
![]() Added the above array control functions. specification specification |
![]() Returns all hiragana characters from the string s that contains katakana characters. Items that cannot be converted, such as kanji, are left as is. Determines whether the last character of s0 and the first character of s1 are the same and returns a bool value. This function is MBCS-aware (compares characters rather than bytes). |
![]() |
![]() elementary |
![]() Mainly to prevent enlargement of misaka_vars.txt. For example, if you exit with {$temp=""}, $temp will not be saved in misaka_vars.txt. |
![]() |
![]() Since these are separators in recommendsite etc., problems will occur if you remove them without permission. |
![]() Returns the OnMouseMove count of the part indicated by part name m on side n. By determining this count, the sensitivity of the so-called "stroking response" can be controlled. illustration $OnMouseMove,{$if (64<={$getmousemovecount(0,"Bust")})} {$resetmovecount(0,"Bust")}\0\s0¶»Éï¤ÇÈ¿±þ¡£\e $OnMouseMove,{$if (32<={$getmousemovecount(0,"Bust")})} \0\s0¶»Éï¤Ç¤é¤ìµ¿ÏÇÈ¿±þ¡£\e Resets the OnMouseMove count of the part indicated by part name m of site n to 0. You can do this if you want to do it at a lower level...or rather, it's always been like that. |
![]() No arguments. Back up all the information Misaka has on-memory by writing it to disk. The processing content is the same as the variable saving processing that is automatically performed at the end. |
![]() Number of days that have passed since the first startup. Unit: day. At first glance, it looks like a concealment approach, but it is not. If you really want to do it with low-level processing, you can do it depending on how you write it. |
![]() Previously, overflow occurred in the longint range (about 50 days) |
![]() Previously, if the elapsed time was, for example, 4000 seconds, $elapsedsecond 4000 $elapsedminute 66 $elapsedhour 1 Met. This is correct, but due to the nature of the system, there are very few cases where such a value is expected. Therefore, from now on $elapsedsecond 40 $elapsedminute 6 $elapsedhour 1 Shall be. Recalculation is necessary only if you want total seconds or total minutes. This change applies to all time-based variables with the prefix elapsed. |
![]() for example {$esecond={$elapsedsecond}} {$if ({$esecond}>=3600) { {$ehour={$esecond}}{$ehour/=3600}{$etemp={$ehour}}{$etemp*=3600} {$esecond-={$etemp}} }} {$if ({$esecond}>=60) { {$eminute={$esecond}}{$eminute/=60}{$etemp={$eminute}}{$etemp*=60} {$esecond-={$etemp}} }} |
![]() |
![]() |
![]() A logical expression declared with the #_Common symbol is added to all symbols in the file using the relational operator &&. This structure is mainly effective for ghosts with multiple modes. In other words, if you write a mode judgment expression in #_Common, you no longer need to write any mode judgment expressions in that file, and you can realize multiple modes by simply dividing the file. illustration #_Common {$if ({$mode}==0)}The logical expression {$if ({$mode}==0)} is added to all symbols in the file. |
![]() Although it was fixed once in phase 24, another problem occurred in phase 36 when pseudo-if was implemented using variable symbol names. |
![]() Dictionary variables for which the sequential parameter is specified are always read in order starting from element 0, and once all elements have gone through, the process returns to 0 again and repeats the process. This property is mainly used to control a series of sentences that are spoken consecutively at certain intervals. illustration $_alphabet; sequential; A B C D E F$_alphabet returns strings in the order ABCDEFABCDEF... each time it is called. |
![]() Returns the number of days since the last network update. Unit: day. illustration $_OnBoot; {$if (7<={$daysfromlastupdate})}; \0\s0¤½¤í¤½¤í¥Í¥Ã¥È¥ï¡¼¥¯¹¹¿·¤·¤ÆÍߤ·¤¤¡£\eIn the above example, if 7 days have passed without updating the network, you will be prompted to update. To do this at a low level, you can store the date in some variable in OnUpdateComplete, read it when checking, and calculate the difference from the current date. Examples omitted. |
![]() For dictionary variables with the nonoverlap parameter specified, the obtained elements will never overlap until all elements have gone through one cycle. However, it is still randomly obtained from all elements. This property is mainly used to block duplication of random talk. illustration $_OnTalkCore; nonoverlap; A B C D E F$_OnTalkCore returns a random string from the list every time it is called like a normal dictionary variable, but even if it is called continuously, no duplicate elements will be returned until all elements appear, such as "ADBFEC" and "CFADEB". |
![]() Old Misaka $_OnTalk,{$if ({$random({$talkinterval})}==0)} New Misaka $_OnTalk; {$if ({$random({$talkinterval})}==0)}; nonoverlap; You may insert any number of white spaces before and after the semicolon. You don't have to include it. There is now an old compatibility code that reads both formats the same way. |
![]() The design was supposed to be such that they would not be the same, but that was not the case. illustration $_OnTest {$msvo} - {$msvo} - {$msvo}In Old Misaka, all three are always the same. That goes against the design. |
![]() Added more system variables. See specifications for details. |
x2misaka Convert/re-edit data files from other SHIORI subsystems into a form that is meaningful to Misaka. Place x2misaka.exe in the directory where Satori's ghost data exists and run it. misaka_from_satori.txt is output. Place x2misaka.exe in the directory where fake bookmark ghost data exists and run it. misaka_from_niseshiori.txt is output. The output file is a data file converted to Misaka format and can be used as is in Misaka. However, currently it does not convert to a level where it can be run as is without any manual work. Intuitively, if the amount of work done completely by hand is 100, this will reduce the amount to about 30. |
![]() Randomly selects one symbol whose symbol name includes all the strings passed as arguments, evaluates the expression, and returns the return value. There is no limit to the number of arguments. illustration $_OnTest {$search("human","japan")} $_OnTest2 {$search("male")} $human-male-japan A $human-female-japan B $human-male-korea C $human-female-korea D$_OnTest returns A or B, and $_OnTest2 returns A or C. *Anti-false bookmarks Independent as x2misaka |
![]() Reproduce a pseudo if. Evaluate the expressions in order starting from the first argument, and when a value is returned, use it as the return value and exit. * vs. Riri |
![]() illustration {$temp=1}{$OnBoot{$temp}} This has the same meaning as {$OnBoot0}. * vs. Riri |
![]() Returns one of the expressions passed as an argument at random. There is no limit to the maximum number of arguments. illustration $b this is test. $_OnTest {$choice("¤¢¤¤¤¦¤¨¤ª",{$b},256)} |
![]() Division is rounded down to the decimal point. illustration {$temp=3}{$temp*=2}{$temp} {$temp=3}{$temp/=2}{$temp} The results are 6 and 1, respectively. |
![]() Continuous activation time of Ghost. hours, minutes, and seconds, respectively. Continuous OS boot time. hours, minutes, and seconds, respectively. Cumulative startup time of Ghost. hours, minutes, and seconds, respectively. |
![]() Build it yourself using property handlers and appendheader. |
![]() Inserts the header indicated by s into the immediate response. illustration {$appendheader("Extra: °ò")} The header will be added as you see it. If you call it consecutively, the number of headers increases by the number of reads. However, that header is only attached to the response immediately after. As a result, the method of specifying the communication partner is divided into two directions: high-level and low-level, by assignment to {$ to} and by calling {$ appendheader ("To:....")}. illustration {$appendheader("To: ÍÛ»Ò")} {$to} |
![]() Such exceptions cannot be accepted. However, even if this special case disappears, functions can still be written on multiple lines. illustration $isxmaseve { {$ if (({$month}==12) && ({$day}==24)) } } $OnBoot,{$isxmaseve} \0\s0\1\s0\0¥¯¥ê¥¹¥Þ¥¹¥¤¥Ö¡£\e $OnBoot \0\s0\1\s0\0¤½¤ì°Ê³°¡£\e |
![]() Returns the current day of the week as an integer value. 0 is Sunday and 6 is Saturday. |
![]() Control titles. You can do exactly the same thing using the low-level string control functions below. The adjustprefix approach can be said to be a false bookmark-like concealment approach, and the Kawanari approach is to create only the low-level string control function shown below and not take care of the rest. Misaka presents both and makes us recognize the difference itself. illustration {$adjustprefix("¤¬¤ª¤Á¤ã¤ó","¤µ¤ó")} |
![]() For example, the old bookmark incorrectly processes the following functions. {$adjustprefix("¤¬¤ª¤Á¤ã¤ó","¤µ¤ó")} |
![]() substring returns count bytes of string s, starting at byte offset. substringl returns count bytes from the left end of string s. substringr returns count bytes from the right end of string s. The length function returns the length (in bytes) of the string s. Note that all bytes are specified, not the number of characters. |
![]() It always returned false. Numerical comparison was normal. |
![]() {$temp="not ready"}{$if (true) { {$temp="istrue"} } else { {$temp="isfalse"} }}{$temp} Fatal bug. For example, in the above formula, Misaka's processing order is incorrect, and $temp is always set to is false regardless of the branch result of $if. |
![]() You can treat all user variables as properties and write processes to be performed simultaneously when variables change. The property handler is defined with the system symbol $_OnPropertyChanged, and the changed variable name is set to the system variable $name. Of course, there is no need for a property handler (in that case, it will be a simple variable in name and reality as before). Variables that require property handlers are special in the first place. Property handlers are used, for example, to initialize specific values when the mode changes. illustration $OnChoiceSelect,{$if ({$reference(0)}=="changemode")} {$mode=0} $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==0))} {$modestring="¥â¡¼¥É0"} $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==1))} {$modestring="¥â¡¼¥É1"} $_OnPropertyChanged,{$if (({$name}=="$mode") && ({$mode}==2))} {$modestring="¥â¡¼¥É2"} Property handlers are fully syntactic events and can be discarded even if they return a script. |
![]() For some reason it wasn't there. illustration {$z++} {$z--} Add 1 to $z or subtract 1 from $z, respectively. |
![]() |
![]() The following statements are equivalent. $_OnTest,{$if (({$test2}=="2") && ({$test3}=="3") && ({$test0}=="0") && ({$test1}=="1"))} \0\s0¥Æ¥¹¥È0\e \0\s0¥Æ¥¹¥È1\e $_OnTest,{$_(0)} { $if (({$test2}=="2") && ({$test3}=="3") && ({$test0}=="0") && ({$test1}=="1")) } \0\s0¥Æ¥¹¥È0\e \0\s0¥Æ¥¹¥È1\e The writer is responsible for forgetting to open or close the door. |
![]() The following statements are equivalent. $_OnTest \0\s0\1\s0\0¤Í¤¨¡£\w8\w8\1\s0¤ó¡©\w8\w8\0\n\n¤É¤¦¤·¤Æ¤¢¤ó¤Ê¤Ë´¨¤¤¤Î¡©\w8\w8\1\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢°ÕÌ£¤¬¤è¤¯¡£\e \0\s0\1\s0\0¤Í¤¨¡£\w8\w8\1\s0¤ó¡©\w8\w8\0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8\1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£\e \0\s0\1\s0\0¥Æ¥¹¥È¡£\e $_OnTest { \0\s0\1\s0 \0¤Í¤¨¡£\w8\w8 \1\s0¤ó¡©\w8\w8 \0\n\n¤É¤¦¤·¤Æ¤¢¤ó¤Ê¤Ë´¨¤¤¤Î¡©\w8\w8 \1\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢°ÕÌ£¤¬¤è¤¯¡£ \e } { \0\s0\1\s0 \0¤Í¤¨¡£\w8\w8 \1\s0¤ó¡©\w8\w8 \0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8 \1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£ \e } \0\s0\1\s0\0¥Æ¥¹¥È¡£\e The writer is responsible for forgetting to open or close the door. Note Currently, the block start and end braces must be placed on separate lines because the parser is tepid. illustration { \0\s0\1\s0 \0¤Í¤¨¡£\w8\w8 \1\s0¤ó¡©\w8\w8 \0\n\n¡Å¡Å\w8\w8¤¤¤ä¡¢¤¤¤¤¡£\w8\w8 \1\n\n¡Å¡Å\w8\w8²¿¤À¤è¡£ \e } The above is incorrect. |
![]() From now on, quoting of string literals will be required. It works even without it though. All expressions below are equivalent. {$if (({$test2}==2) && ({$test3}==3) && ({$test0}==0) && ({$test1}==1))} {$if (({$test2}=="2") && ({$test3}=="3") && ({$test0}=="0") && ({$test1}=="1"))} |
![]() Even if you insert unnecessary spaces, parsing will not fail. All expressions below are equivalent. {$if (({$test2}==2) && ({$test3}==3))} {$if ( ({$test2}==2) && ({$test3}==3) )} {$if (({$test2}==¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2) &&¡¡¡¡¡¡({$test3}==3))¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡} |
![]() Added system symbol $_BalloonOffset Control balloon offset from SHIORI. |
![]() If a character string with a byte value } (such as "Japanese Red Cross Society") exists in the logical expression of if, an incorrect evaluation will occur. |
![]() If you call isghostexists() without arguments, it will be true if at least one other ghost exists. For indiscriminate bombing. |
![]() Responses to GET String type are not as specified |
![]() inlastsentence extension. Due to the nature of the inlastsentence function, there is a high possibility that multiple inlastsentence functions will appear consecutively in a single if element, which may reduce readability. Therefore, we made it possible to give consecutive words to be hit checked as arguments. illustration Expression of "The person who is talking to me is "Hana-chan'' and "fish'' and "kawa'' are hits.'' Old Misaka {$if (({$sender}==²Ö¤Á¤ã¤ó) && ({$inlastsentence(¤µ¤«¤Ê)}) && ({$inlastsentence(Àî)}))} New Misaka {$if (({$sender}==²Ö¤Á¤ã¤ó) && ({$inlastsentence(¤µ¤«¤Ê,Àî)}))} |
![]() Continuous logical expression relational operations with 3 or more terms and an infinite number of terms Previously, when comparing three or more terms, each relationship had to be appropriately enclosed in parentheses. However, from this phase, multiple comparisons of three or more terms can be written in the same parentheses. illustration C if (a==0 && b==0 && c==0) Old Misaka {$if ({$a==0} && ({$b==0} && {$c==0}))} New Misaka {$if ({$a==0} && {$b==0} && {$c==0})} |
![]() If you use a syntax like x{$if (0<{$facemovecount}) { {$facemovecount-=1} }}, it will be considered as omitting the processing section and return true or false. |
![]() Added stroking judgment to template ghost $_OnInitialize is deprecated. The symbols read at startup have changed to $_Variable and $_Constant. The difference between the two is the timing of reading. $_Variable is called at startup, the variable is automatically restored, and then $_Constant is called. $_OnInitialize is also being called to maintain backward compatibility. xIn template ghost, the default handler (menu display part) of OnMouseDoubleClick is located before the collision detection part, so the collision detection will logically never occur. |
![]() Template ghost was not following the specifications that I changed by myself. |
![]() Blank lines and comments are allowed during data definition in symbols. illustration $_OnTalk,{$if (({$mode}==0) && ({$random({$talkinterval})}==0))} // ÉÏ˳¥Í¥¿ \0\s0{$ms}¤Î²È·×¡¢2¥ö·îÁ°¤«¤é²Ð¤Î¼Ö¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£ // ²Ð»ö¥Í¥¿ \0\s0{$ms}¤Î²È¤¬Ç³¤¨¤¿¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£ The above description, which is easy for humans to read, is equivalent to the following description, which is simple for machines. $_OnTalk,{$if (({$mode}==0) && ({$random({$talkinterval})}==0))} \0\s0{$ms}¤Î²È·×¡¢2¥ö·îÁ°¤«¤é²Ð¤Î¼Ö¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£ \0\s0{$ms}¤Î²È¤¬Ç³¤¨¤¿¤é¤·¤¤¤è¡£\w8\w8\1\s0¤à¤¦¡£ |
![]() Checks the syntax when loading, and if there is an error, writes the erroneous line to misaka_error.txt, displays a dialog informing you of the error, and cancels the startup. |
![]() Even if you set the address in $to, it does not become Communicate Send $_OnGhostCommunicateReceive is not called even after receiving Communicate In short, everything around Communicate was dead. Seppuku. |
![]() Automatic save/restore of all user variables |
![]() Arbitrary file division of dictionary |
![]() $getvalue and time reading sample during clock adjustment function xCommunication was actually not working at all. |
![]() Add syntax and specifications that were included but forgotten to the specifications xTemplate Ghost's cut-off and overlap detection are not working at all, but they are somehow abnormal. |
![]() email check clock adjustment headline sense All other event handling that remains until now beta release Talk interval setting Thrust judgment Judgment of cut-off Overlapping judgment Get String Anti-Ghost Communicate Add variables as appropriate double click menu random talk template shell change ghost change Logical expression evaluation parser Basic structure formulation |
Back |