帮忙看下传奇转身脚本本只能到第2转,却无法到第...

1. Linux 脚本编写基础
1.1 语法基本介绍
1.1.1 开头
  程序必须以下面的行开始(必须方在文件的第一行):  #!/bin/sh  符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。  要使脚本可执行:编译 chmod +x filename 这样才能用./filename 来运行。
1.1.2 注释
  在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
1.1.3 变量
  在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
  #!/bin/sh
  #对变量赋值:  a="hello world"  # 现在打印变量a的内容:  echo "A is:"  echo $a有时候变量名很容易与其他文字混淆,比如:  num=2  echo "this is the $numnd"
  这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
num=2echo "this is the ${num}nd"
  这将打印: this is the 2nd
1.1.4 环境变量
  由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
1.1.5 Shell命令和流程控制
  在shell脚本中可以使用三类命令:
1)Unix 命令:
  虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
  常用命令语法及功能
echo "some text": 将文字内容打印在屏幕上
ls: 文件列表
wc &l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
cp sourcefile destfile: 文件拷贝
mv oldname newname : 重命名文件或移动文件
rm file: 删除文件
grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混  淆,这是两个完全不同的命令
cat file.txt: 输出文件内容到标准输出设备(屏幕)上
file somefile: 得到文件类型
read var: 提示用户输入,并将输入赋值给变量
sort file.txt: 对file.txt文件中的行进行排序
uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
find: 搜索文件比如:根据文件名搜索find . -name filename -print
tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
head file: 打印文本文件开头几行
tail file : 打印文本文件末尾几行
sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' & newtext.file
awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA 命令输出结果为:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
  这些不是系统命令,但是他们真的很重要。
管道 (|) 将一个命令的输出作为另外一个命令的输入。  grep "hello" file.txt | wc -l  在file.txt中搜索包含有&hello&的行并计算其行数。  在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
  重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
  & 写入文件并覆盖旧文件  && 加到文件的尾部,保留旧文件内容。
  使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。  命令:    find . -mtime -1 -type f -print  用来查找过去24小时(-mtime &2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:    #!/bin/sh    # The ticks are backticks (`) not normal quotes ('):    tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3) 流程控制
  "if" 表达式 如果条件为真则执行then后面的部分:
if ....; then  ....elif ....; then  ....else  ....fi
  大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等&
  通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
    [ -f "somefile" ] :判断是否是一个文件    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限    [ -n "$var" ] :判断$var变量是否有值    [ "$a" = "$b" ] :判断$a和$b是否相等  执行man test可以查看所有测试表达式可以比较和判断的类型。  直接执行以下脚本:
#!/bin/shif [ "$SHELL" = "/bin/bash" ]; then echo "your login shell is the bash (bourne again shell)"else echo "your login shell is not bash but $SHELL"fi
  变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。快捷操作符熟悉C语言的朋友可能会很喜欢下面的表达式:
    [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
  这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印& This computer uses shadow passwors&。同样或操作(||)在shell编程中也是可用的。这里有个例子:
#!/bin/shmailfolder=/var/spool/mail/james[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }echo "$mailfolder has mail from:"grep "^From " $mailfolder
  该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的"From" 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:  -打印错误信息  -退出程序  我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。  不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。
  case :表达式可以用来匹配一个给定的字符串,而不是数字。
case ... in...);esac
  让我们看一个例子。 file命令可以辨别出一个给定文件的文件类型,比如:
    file lf.gz
  这将返回:
    lf.gz: gzip compressed data, deflated, original filename,    last modified: Mon Aug 27 23:09:18 2001, os: Unix
  我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:
#!/bin/shftype=`file "$1"`case "$ftype" in"$1: Zip archive"*)  unzip "$1" ;;"$1: gzip compressed"*)  gunzip "$1" ;;"$1: bzip2 compressed"*)  bunzip2 "$1" ;;*) echo "File $1 can not be uncompressed with smartzip";;esac
  您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。也就是说,当我们运行:
    smartzip articles.zip    $1 就是字符串 articles.zip
3. selsect 
  select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
select var in ... ; do breakdone.... now $var can be used ....
  下面是一个例子:
#!/bin/shecho "What is your favourite OS?"select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do    breakdoneecho "You have selected $var"
  下面是该脚本运行的结果:
What is your favourite OS?1) Linux2) Gnu Hurd3) Free BSD4) Other#? 1You have selected Linux
  loop表达式:
while ...; do....done
  while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true.关键字"break" 用来跳出循环。而关键字&continue&用来不执行余下的部分而直接跳到下一个循环。
  for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量:
for var in ....; do  ....done
  在下面的例子中,将分别打印ABC到屏幕上:
#!/bin/shfor var in A B C ; do  echo "var is $var"done
  下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:
#!/bin/sh# list a content summary of a number of RPM packages# USAGE: showrpm rpmfile1 rpmfile2 ...# EXAMPLE: showrpm /cdrom//RPMS/*.rpmfor rpmpackage in $*; do if [ -r "$rpmpackage" ];then  echo "=============== $rpmpackage =============="  rpm -qi -p $rpmpackage else  echo "ERROR: cannot read file $rpmpackage" fidone
  这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm 此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.
  在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件, mail.jpg 和tux.jpg。
  编译SHELL脚本
  #ch#!/bin/sh mod +x filename  cho *.jpg &缓螅梢酝&淙耄?./filename 来执行您的脚本。
  这将打印出"mail.jpg tux.jpg"的结果。
引号 (单引号和双引号) 将防止这种通配符扩展:
#!/bin/shecho "*.jpg"echo '*.jpg'
这将打印"*.jpg" 两次。单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。
#!/bin/shecho $SHELLecho "$SHELL"echo '$SHELL'
运行结果为:
/bin/bash/bin/bash$SHELL
最后,还有一种防止这种扩展的方法,那就是使用转义字符&&反斜杆:
echo *.jpgecho $SHELL
这将输出:
*.jpg$SHELL
6. Here documents
  当要将几行文字传递给一个命令时,here documents(译者注:目前还没有见到过对该词适合的翻译)一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个 here documents就不必用echo函数一行行输出。 一个 "Here document" 以 && 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:
#!/bin/sh# we have less than 3 arguments. Print the help text:if [ $# -lt 3 ] ; thencat &ren -- renames a number of files using sed regular expressionsUSAGE: ren 'regexp' 'replacement' files...EXAMPLE: rename all *.HTM files in *.html: ren 'HTM$' 'html' *.HTMHELP exit 0fiOLD="$1"NEW="$2"# The shift command removes one argument from the list of# command line arguments.shiftshift# $* contains now all the files:for file in $*; do  if [ -f "$file" ] ; then   newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`   if [ -f "$newfile" ]; then    echo "ERROR: $newfile exists already"   else    echo "renaming $file to $newfile ..."    mv "$file" "$newfile"   fi  fidone
  这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。如果输入参数等于或大于3个,我们就将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。接着我们判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目的:得到了旧文件名和新文件名。然后使用mv命令进行重命名。
  如果您写了一些稍微复杂一些的程序,您就会发现在程序中可能在几个地方使用了相同的代码,并且您也会发现,如果我们使用了函数,会方便很多。一个函数是这个样子的:
functionname(){# inside the body $1 is the first argument given to the function# $2 the second ...body}
  您需要在每个程序的开始对函数进行声明。下面是一个叫做xtitlebar的脚本,使用这个脚本您可以改变终端窗口的名称。这里使用了一个叫做help的函数。正如您可以看到的那样,这个定义的函数被使用了两次。
#!/bin/sh# vim: set sw=4 ts=4 et:help(){  cat &xtitlebar -- change the name of an xterm, gnome-terminal or kde konsoleUSAGE: xtitlebar [-h] "string_for_titelbar"OPTIONS: -h help textEXAMPLE: xtitlebar "cvs"HELP  exit 0}# in case of error or if -h is given we call the function help:[ -z "$1" ] && help[ "$1" = "-h" ] && help# send the escape sequence to change the xterm titelbar:echo -e "33]0;$107"#
  在脚本中提供帮助是一种很好的编程习惯,这样方便其他用户(和您)使用和理解脚本。
  命令行参数
  我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无遗是一个不错的方法。
#!/bin/shhelp(){ cat &This is a generic command line parser demo.USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2HELP exit 0}while [ -n "$1" ]; docase $1 in  -h)shift 1;; # function help is called  -f) opt_f=1;shift 1;; # variable opt_f is set  -l) opt_l=$2;shift 2;; # -l takes an argument -& shift by 2  --); # end of options  -*) echo "error: no such option $1. -h for help";exit 1;;  *);esacdoneecho "opt_f is $opt_f"echo "opt_l is $opt_l"echo "first arg is $1"echo "2nd arg is $2"
  您可以这样运行该脚本:
    cmdparser -l hello -f -- -somefile1 somefile2
  返回的结果是:
opt_f is 1opt_l is hellofirst arg is -somefile12nd arg is somefile2
  这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数.
第2部分 实例
  现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:
    cp framework.sh myscript
  然后再插入自己的函数。
  让我们再看两个例子:
二进制到十进制的转换
  脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
#!/bin/sh# vim: set sw=4 ts=4 et:help(){ cat &b2h -- convert binary to decimalUSAGE: b2h [-h] binarynumOPTIONS: -h help textEXAMPLE: b2h 111010will return 58HELP exit 0}error(){  # print an error and exit  echo "$1"  exit 1}lastchar(){  # return the last character of a string in $rval  if [ -z "$1" ]; then    # empty string    rval=""    return  fi  # wc puts some space behind the output this is why we need sed:  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `  # now cut out the last char  rval=`echo -n "$1" | cut -b $numofchar`}chop(){  # remove the last character in string and return it in $rval  if [ -z "$1" ]; then    # empty string    rval=""    return  fi  # wc puts some space behind the output this is why we need sed:  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `  if [ "$numofchar" = "1" ]; then    # only one char in string    rval=""    return  fi  numofcharminus1=`expr $numofchar "-" 1`  # now cut all but the last char:  rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`}while [ -n "$1" ]; docase $1 in  -h)shift 1;; # function help is called  --); # end of options  -*) error "error: no such option $1. -h for help";;  *);esacdone# The main programsum=0weight=1# one arg must be given:[ -z "$1" ] && helpbinnum="$1"binnumorig="$1"while [ -n "$binnum" ]; do  lastchar "$binnum"  if [ "$rval" = "1" ]; then    sum=`expr "$weight" "+" "$sum"`  fi  # remove the last position in $binnum  chop "$binnum"  binnum="$rval"  weight=`expr "$weight" "*" 2`doneecho "binary $binnumorig is decimal $sum"
  该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可以这样转换成十进制:0 * 1 + 1 * 2 = 2
  为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc &c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。
文件循环程序
  或许您是想将所有发出的邮件保存到一个文件中的人们中的一员,但是在过了几个月以后,这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的脚本rotatefile可以解决这个问题。这个脚本可以重命名邮件保存文件(假设为outmail)为outmail.1,而对于outmail.1就变成了outmail.2 等等等等...
#!/bin/sh# vim: set sw=4 ts=4 et:ver="0.1"help(){  cat &rotatefile -- rotate the file nameUSAGE: rotatefile [-h] filenameOPTIONS: -h help textEXAMPLE: rotatefile outThis will e.g rename out.2 to out.3, out.1 to out.2, out to out.1and create an empty out-fileThe max number is 10version $verHELP  exit 0}error(){  echo "$1"  exit 1}while [ -n "$1" ]; docase $1 in  -h)shift 1;;  --);  -*) echo "error: no such option $1. -h for help";exit 1;;  *);esacdone# input check:if [ -z "$1" ] ; thenerror "ERROR: you must specify a file, use -h for help"fifilen="$1"# rename any .1 , .2 etc file:for n in 9 8 7 6 5 4 3 2 1; do  if [ -f "$filen.$n" ]; then    p=`expr $n + 1`    echo "mv $filen.$n $filen.$p"    mv $filen.$n $filen.$p  fidone# rename the original file:if [ -f "$filen" ]; then  echo "mv $filen $filen.1"  mv $filen $filen.1fiecho touch $filentouch $filen
  这个脚本是如何工作的呢?在检测用户提供了一个文件名以后,我们进行一个9到1的循环。文件9被命名为10,文件8重命名为9等等。循环完成之后,我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件.
  最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
  shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
    sh -x strangescript
  这将执行该脚本并显示所有变量的值。
  shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
    sh -n your_script
  这将返回所有语法错误。
阅读(...) 评论()[转帖]转用脚本修改口袋游戏剧情 - 第2页 - 金手指、硬件、模拟和修改区 - 口袋妖怪网 - PMGBA
后使用快捷导航没有帐号?
只需一步,快速开始
[转帖]转用脚本修改口袋游戏剧情
在线时间1164 小时
主题帖子积分
其中一段看到过
[[口袋妖怪不可思议的迷宫 时之探险队?暗之探险队?空之探险队]]
在线时间1 小时
主题帖子积分
?...死...啦
奔跑少年, 积分 416, 距离下一级还需 84 积分
5. 道馆中的情形嘛...经过前面的学习,脚本命令的基本形式大家都应该相当了解了,本章的内容主要是教会你一些命令,没有什么难度.
5.1 地图中的人物其实在前面的内容中我们已经学习过一些关于地图上人物的知识,比如如何让人物消失.而在本部分中,我们将制作一只在道馆外转悠的野生精灵:1.当你和它对话时,它会叫一声2.如果该道馆的徽章你已经取得,那么你会立即进入一场野生战斗- 当然,打败或者捕捉、逃走的话,它就会消失.
1.精灵的叫声游戏中有专门的命令负责在地图上、对话中让精灵的叫声出现,那就是Cry.来看例子:#org $StartWildlockfaceplayercry 5message $charCry$charcry 1 = Charmeleon:Raarg!boxset 6cry命令只有一个参数,就是精灵的编号.在我们的例子中,我们所使用的是Charmeleon这只精灵,它的编号就是5.当然,在和它战斗之前,我们必须确认主角是否得到了该道馆的徽章,以下是一份徽章资料:0x807 - First Badge - Stone Badge0x808 - Second Badge - Knuckle Badge0x809 - Third Badge - Dyamo Badge0x80A - Fourth Badge - Heat Badge0x80B - Fifth Badge - Balance Badge0x80C - Sixth Badge - Feather Badge0x80D - Seventh Badge - Mind Badge0x80E - Eighth Badge - Rainbow Badge从上向下,依此是从第一至最后一个道馆的徽章,具体名称我就不再翻译了.相信大家能够看得出来,是否拥有徽章,是用标识的形式表示的,因而我们只需要这样:checkflag 0x808if 0x1 goto $WildBattreleaseend以上即可检测是否拥有第二个徽章.下面进入战斗部分
5.2 与野生精灵战斗来看一个极其简单的脚本:#org $Wildbattlockwildbattle 5 20 1不错,命令wildbattle就是触发野生精灵战斗的命令,它携带了三个参数,分别是&精灵&&等级&&模式&.前两个参数没什么好说的,都是10进制的合法数字即可,而最后的模式,则表示战斗进行的场地类型:0 = 草丛1 = 水中2 = 山地3 = 沙漠不过这个参数在不同版本的游戏中是不同的.另外就是,如果在战斗中你失败了,那么会在就近的PC中复活,这一步在写脚本时是不必考虑的,唯一需要注意的则是release和lock的位置.3为了告诉游戏我们已经和此精灵战斗过了,我们需要再设立一个标识在此之后,我们必须刷新屏幕,使那只精灵消失:#org $StartWildlockfaceplayercry 5message $charCry$charcry 1 = Charmeleon:Raarg!boxset 6checkflag 0x808if 0x1 goto $WildBattreleaseend
#org $Wildbattlockwildbattle 5 20 1releasesetflag 0x500fadescreen 0end这里fadescreen 0就是刷新屏幕,具体的用法暂时不必管它.
5.3 寻找训练师为了清楚的说明和训练师战斗的命令,我们需要三个例子:1. 简单的对战训练师.2. 2VS2的战斗.3. 和道馆首领的战斗.L:在原英文教程当中,作者还用到了Advanced Battle和Elitemap的附带程序advancebattleevo作为参照演示,本文略去.现在来看我们的命令:Trainerbattle &模式& &训练师& &挑战语& &结束语& &附加选项&以下是模式参数的可选值:0 - 普通战斗1 - 与馆主的战斗2 - 再次双人战斗3 - 与馆主的再挑战4 - 双人战斗5 - 普通的再挑战L:上面参数部分本人还未实践,但总觉得2和4的位置原作者写反了
5.4 基本的训练师战斗#org $Trainer1lockfaceplayertrainerbattle 0 395 $MadChall $MadDefeat$MadChall 1 = Madeline: I am mighty... I hope!$MadDefeat 1 = Madeline: Oh poor Numel!!!!message $MadTalk$MadTalk 1 = I thought having a fire pokemoniwould help make me stronger.pI Guess I was wrong.boxset 6releaseend
现在来看看上面这段脚本的意义,最重要的就是trainerbattle各参数的解释:0是表示普通对战,395则是训练师的编号,$MadChall $MadDefeat两个变量分别储存了开始挑战时和挑战结束时训练师所说的话.
5.5 双人战斗现在我们就要用到参数&附加选项&了,我们这样写:trainerbattle 4 258 $AMChall $AMDefeat $AMNoBattle$AMChall 1 = Anna: The others say we\'re not toughlenough for this Gym.pMeg: Well Show Em!$AMDefeat 1 = Anna: I guess they were right!pMeg: Dont worry, We\'ll improve.$AMNoBattle 1 = Meg:On no.pAnna: You can\'t battle us withljust one pokemon!那么$AMNoBattle作为附加选项的作用是什么呢?如果你能够看懂英语就会知道,当双人战没有被触发而是变为单人战时,$AMNoBattle就是结束语.完整脚本如下:#org $Trainer2lockfaceplayertrainerbattle 4 258 $AMChall $AMDefeat $AMNoBattle$AMChall 1 = Anna: The others say we\'re not toughlenough for this Gym.pMeg: Well Show Em!$AMDefeat 1 = Anna: I guess they were right!pMeg: Dont worry, We\'ll improve.$AMNoBattle 1 = Meg:On no.pAnna: You can\'t battle us withljust one pokemon!message $AMTalk$AMTalk 1 = Anna: You just wait and see!boxset 6releaseend
5.6.道馆馆主作为剧情的一部分,道馆馆主的战斗和一般的训练师有所不同:#org $Trainer1lockfaceplayertrainerbattle 1 114 $BernChall $BernDefeat $BernCode$BernChall 1 = Bernie: I am might... I hope!$BernDefeat 1 = Bernie: Oh poor Numel!!!!message $BernTalk$BernTalk 1 = Wow.. Colour be Burned!boxset 6releaseend在这种一般的模式之后,还要加上这样的 部分:#org $BernCodemessage $Congrats$Congrats 1 = BERNIE: Your a pretty good trainer!pAs leader of this Gym it is now my Duty to give you the Knuckle Badge.boxset 6
setflag 0x808jinglemessage $GotBadge$Gotbadge 1 = You recieved the Knuckle Badge!pBERNIE: That badge will allow you to controllall pokemon above level XnAnd will also let your pokemon performlTASK outside of battle.pWhile I\'m at it you can have this!boxset 6
giveitem 0x5f 1message $FireStone$FireStone 1 = That is a Firestone.nIt will evolve some Fire type pokemon.pAlso, There\'s a really strong pokemon outside.nI couldn\'t catch it cause my pokemonlweren\'t strong enough but youncan go for it if you want!boxset 6end瞧,附加选项$BernCode替代了以上那么一大段脚本.现在该联系之前的脚本了:
5.7 再次相遇的战斗在游戏当中,除非剧情需要,否则训练师是不会和你再次战斗的.同时还要确保并不是每次见面都会触发战斗,于是我们需要用到compare命令.当trainerbattle命令执行后,如果compare命令的配套命令LASTRESULT变成1,那么再战斗就成为了可能.结合上面的脚本,我们这样写:trainerbattle 0 395 $MadChall $MadDefeatcompare LASTRESULT 1if B_TRUE goto $ReBattle最后$ReBattle的脚本会和一般的战斗脚本相同,这里就不再缀述了.
5.8 训练师的可视范围有时候训练师如果很早就看到你并走过来,那么就会挡住道路,于是我们就必须调整训练师的可视范围.训练师的可视范围并不是在脚本当中完成的,而是需要在Advancedmap的人物\"View Range\"属性当中改变的,它接受的数字单位为:步.
那么文章到此就结束了,祝大家改版愉快!
/ 电漫宅屋来啦!论坛完全改头换面!各位支持啊!一定要啊!
在线时间1 小时
主题帖子积分
?...死...啦
奔跑少年, 积分 416, 距离下一级还需 84 积分
4.1 准备行动我们现在又开始需要Advanced Map这款软件的帮忙了,打开Advanced Map,找到\"博士的研究所\"并切换到Event view页面.看到一些写着S的方框了么,但这些方框是不同的:在入口处的那个表示一个事件,而其余的则都表示标志.什么是标志呢?就是当主角激活它的时候,它只显示一段文字,好比:\"电视上正播出着妈妈爱看的节目......\".\"博士的研究所\"中桌子上放的三个精灵球,实际上则被游戏界定为人物,因而它们都写着\"\",编号为59.现在我们不用去管标志,而将重点放在人物和事件两个方面.在我们的脚本当中,我们希望Professor Birch和Brendan都能够动起来,所以现在得看看关于他俩的人物信息,好比是如下这样:Professor Birch:- 人物编号: 2- 距离门口的S框8个格子
Brendan:- 人物编号: 3- 同样距离门口的S框8个格子- 距离精灵球旁的S框4个格子.
同时为了确保两人静止,我们还必须在\"Movement\"一栏选择\"None\"(两个人都要如此).事实上只有处于这种状态之下,关于移动NPC的脚本才能够实现.我们现在希望他们怎样呢?1. 我们要主角移动到博士面前,然后显示得到图鉴的那个脚本.2. 得到图鉴.看起来上面的内容相当简单,而实际上则远比这两行字麻烦.
4.2 计算路线当明确了人物的行动目的之后,我们就要开始盘算行动路线了,也就是计算路线.路线铺设相对比较繁琐,累计下来的脚本恐怕比得上很多给予物品的脚本,我们必须灵活的应用if和goto考虑到玩家的各种行动可能,以免意外发生. Code:#org $IF_ORcheckflag 0x203if b_True gosub $Move1checkflag 0x204if b_True gosub $Move2checkflag 0x205if b_True gosub $Move3end
\' 每一个$Move脚本在运行之后都必须用return命令来使脚本回归:#org $IF_ANDcheckflag 0x203if b_True gosub $TestFlag2end
#ORG $TestFlag2checkflag 0x204if b_True gosub $DoMovereturn以上的if...gosub命令是借鉴了VB当中的IF语句形式,如果你懂得一些,可以看看这个:IF_OR参考:if checkflag(0x203) then\' Move 1endifif checkflag(0x204) then\' Move 2endifif checkflag(0x205) then\' Move 3endifIF_AND参考:
if checkflag(0x203) thenif checkflag(0x204) then \' DoMoveendifendif当然,以上只是了解一下,我们在软件中也不能用以上的代码.言规正传,我们来看完善后的脚本:#org $GiveDexsetflag 0x800setflag 0x801checkflag 0x203if b_True gosub $Move1checkflag 0x204if b_True gosub $Move2checkflag 0x205if b_True gosub $Move3message $Pokedex$Pokedex 1 = I hope You like your new pokemon.pWhile your on your journeys I havela favour to ask you.pProf OAK and I are trying to make anlindex of everything pokemon.pTake this pokedex with you and itlwill log all the pokemon you see and catch.pIt would greatly help our studies!boxset 6jinglemessage $GotDex$Gotdex 1 = You got the Pokedex!boxset 6endL:事实上大家可以将gosub换回我们熟悉的goto命令,因为笔者在参考了其它资料后发现只有在Irish Witch的教程中出现了这个命令,而其它人一律用的是goto.下面来进入最最关键的步骤:
4.3 开始移动以上都是很简单的准备性工作,当然,移动也并非很难,只是稍稍繁琐而已,来看命令:Applymovement &人物编号& &地址&pausemove 0applymovement表示给人物一个起始信号,好比一个通知;而下面的pausemove暂且不管.需要说明的是:1.人物编号我们之前曾经说过,但当你要命令主角的时候则需要写\"0xFF\"2.在移动的脚本之内,不要使用lock命令,否则人物不会移动!具体写成什么样子,看下面:#org $Move1applymovement 0xFF $Ball1Movepausemove 0return由于无论拿到桌子上的哪只精灵都会触发走到博士旁边的动作,所以这段脚本需要写三次.
关于移动的命令由于每个版本所需要的移动不同,故而我们需要区分版本的写命令:如果你改的是红宝石,那么你需要使用ruby-move.txt当中的命令,而如果你改的是蓝宝石或者火红/叶绿,那么你需要用到FR-Move.txt当中的命令(同样在文末送出).L:奇怪的是,红蓝宝石的命令竟然会不同,疑为原作者笔误,还有待验证.先来看:Left 0 = 脚不离地的向转身Left 1 = 向左一步Left 2 = 快速左走2步Left 3 = 急速走3步也就是说,数字既代表步数,又代表了速度.同时记住,left1 left1 left1 left1 = left2 left2,它们速度虽然不同,但位移的结果却是完全相同的.但是,以上并不是命令的真实面目,我们在写脚本时,必须在前面加命令#Binary,并且要这样写:#Binary 0x06 0x06 0x06 0x06 0xFE#Binary 0x0a 0x0a 0xFE以上是红宝石中的命令,完整的就是:#org $GiveDexsetflag 0x800setflag 0x801checkflag 0x203if b_True gosub $Move1checkflag 0x204if b_True gosub $Move2checkflag 0x205if b_True gosub $Move3message $Pokedex$Pokedex 1 = I hope You like your new pokemon.pWhile your on your journeys I havela favour to ask you.pProf OAK and I are trying to make anlindex of everything pokemon.pTake this pokedex with you and itlwill log all the pokemon you see and catch.pIt would greatly help our studies!boxset 6jinglemessage $GotDex$Gotdex 1 = You got the Pokedex!boxset 6end
#org $Move1applymovement 0xFF $Ball1Movepausemove 0return#org $Move2applymovement 0xFF $Ball2Movepausemove 0return#org $Move3applymovement 0xFF $Ball3Movepausemove 0return
#org $Ball3Move#Binary 0x06#org $Ball2Move#Binary 0x06#org $Ball1Move#Binary 0x06 0x06 0x06 0x01 0xFE注意,移动的最终需要添加一个终止标志,在红宝石中是0xFE,而其它的则需要参考资料.以下是火红的移动全资料:\' Specials0x4A \' Face player0x4B \' Face against player0x60 \' Disappear (removes the sprite, but the person can still be interacted with)0x62 \' \"!\" pops up0x63 \' \"?\" pops up0x64 \' \"X\" pops up (vs-seeker cant fight)0x65 \' \"!!\" pops up (vs-seeker can fight)0x66 \' \"\" pops up
\' walking0x01 \' step Up00x02 \' step Left00x03 \' step Right00x04 \' step Down00x08 \' step down10x09 \' step up10x0A \' step left10x0B \' step right10x0C \' step down20x0D \' step up20x0E \' step left20x0F \' step right20x10 \' step down30x11 \' step up30x12 \' step left30x13 \' step right30x1D \' step down40x1E \' step up40x1F \' step left40x20 \' step right4
\' jump in place looking where it says0x52 \' jump0 down0x53 \' jump0 up0x54 \' jump0 left0x55 \' jump0 right
\' jump in place looking in the order it says0x56 \' jump0 down/up0x57 \' jump0 up/down0x58 \' jump0 left/right0x59 \' jump0 right/left
\' Jump Direction0x4E \' jump1 down0x4F \' jump1 up0x50 \' jump1 left0x51 \' jump1 right
0x14 \' jump2 down0x15 \' jump2 up0x16 \' jump2 left0x17 \' jump2 right
0x46 \' jumpLookingLeft1 down0x47 \' jumpLookingDown1 up (jump backwards)0x48 \' jumpLookingUp1 left0x49 \' jumpLookingLeft right (jump backwards)
These are the offsets for basic movement:UP = 0x11DOWN = 0x10LEFT = 0x12RIGHT = 0x13实在懒得翻译了,大家稍微翻翻词典就知道注释的意思了.
4.4 设置路标路标(var),这是个什么概念?大家可能会想起我们前边所讲的标识(flag),其实它们是差不多的,同样是为了做个标记.不过路标的英文var实际表示的是变量,这意味着什么?这意味着路标不仅可以表示\"有\"或\"无\",还可以放置一个数字!这就给我们作出多种假设方案提供了便利.#org $LeftExitsetvar 0x4400 2checkflag 0x800if 0x0 gosub $UmPokemoncheckflag 0x207if 0x0 goto $Followmeend以上就是命令setvar在0x4400放置数字2的过程.但是这个脚本只是一小部分,我们这次打算计划的是什么?1.如果你想要走出研究所,那么博士的助手就会叫住我们2.紧接着把我们带到放有精灵球的盒子旁2b.这时给你一个超级球3.如果你尝试绕过助手,那么脚本会强制你走到助手旁触发脚本4.如果你已经有一个超级球,那么你什么也得不到.结合上面的脚本,补充如下:#org $Followmemessage $HeyWait$HeyWait 1 = Brendan: Hey Wait!pboxset 6compare 0x4400 1if 0x1 gosub $AdjustLeftcompare 0x4400 2if 0x1 gosub $AdjustRight
4.5 跟随NPC跟随NPC实际和上面的人物移动脚本差别并没有多大,只需要让主角走得慢NPC一步.我们为此需要一个命令:pause.pause并不是等待所有脚本结束后才开始运行,而是在等待一个特别的时机.我们来看示例:1.首先,Brendan开始移动.2.使主角以慢1步的形式作相同的脚本移动.3.等到Brendan停止移动的时候.4.主角会停止在Brendan后面,而不是撞上去5.现在所有人都停下了.这样我们就会得到类似的脚本:applymovement 0x3 $Brendanwalk2applymovement 0xff $StepRightapplymovement 0xff $Brendanwalk2\'结果是: Up0 Up2 Up2 Up2 Up1 left0 left1 left1 left1$BrendanWalk2 1 ; 0x05 0x09 0x09 0x09 0x05 0x02 0x07 0x07 0x07 0xfepause 0x110
applymovement 3 $StepRight$StepRight 1 ; #Binary 0x07 0xfepausemove 0
我们在这里新加了一些东西.如果你已经明白了之前的内容,那么很容易看出我们即将写:#org $StepRight#Binary 0x07 0xfe因为之前也学过类似的结构:#org $MyText= Any old text we want!同样的结构,但是表达上却有一点小区别.在以前的脚本中,我们常用=来赋值,而在移动的脚本中,我们却要用;和前几个小节的脚本结合,得到如下完整的脚本:\' 脚本开始\' -------------#org $RightExitsetvar 0x4400 1checkflag 0x800if 0x0 gosub $UmPokemoncheckflag 0x207if 0x0 goto $Followmeend
#org $LeftExitsetvar 0x4400 2checkflag 0x800if 0x0 gosub $UmPokemoncheckflag 0x207if 0x0 goto $Followmeend
\' 如果你没有精灵\' -----------------------#org $UmPokemonmessage $WhatNoPoke$WhatNoPoke 1 = BIRCH: Don\'t you want a Pokemon?boxset 6applymovement 0xff $TurnPlayer$TurnPlayer 1 ; #Binary 0x05 0x09 0xfepausemove 0end
\' 将主角移到一旁\' -----------------#org $AdjustRightapplymovement 0xFF $MoveLeft$MoveL #Binary 0x56 0x02 0x06 0x03return
#org $AdjustLeftapplymovement 0xFF $FaceRight\' This move set goes: Alert Up0 Right0$FaceR #Binary 0x56 0x01 0x03return
\' 跟随部分脚本\' ----------------#org $Followmemessage $HeyWait$HeyWait 1 = Brendan: Hey Wait!pboxset 6
compare 0x4400 1if 0x1 gosub $AdjustLeftcompare 0x4400 2if 0x1 gosub $AdjustRight
applymovement 3 $BrendanWalk1$BrendanWalk1 1 ; #Binary 0x08 0x08 0x08 0x08 0x02 0xfepausemove 0
Message $Parting$Parting 1 = Before you leave I have somethingpThat might Help you later!boxset 6
applymovement 0x3 $Brendanwalk2applymovement 0xff $StepRightapplymovement 0xff $Brendanwalk2$BrendanWalk2 1 ; #Binary 0x05 0x09 0x09 0x09 0x05 0x02 0x07 0x07 0x07 0xfepause 0x110
applymovement 3 $StepRight$StepRight 1 ;#Binary 0x07 0xfepausemove 0
message $Rummage$Rummage 1 = Brendan Rummages in the boxboxset 6
applymovement 3 $FaceLeft$FaceLeft 1 ; #Binary 0x02 0xfepausemove 0
message $UltraBall$UltraBall 1 = Here it is!nThis is an Ultra Ball!pIt\'s one of the most powerful ballslin existance and will catch just aboutpAny pokemon. Use it wisely.boxset 6giveitem 0x2 1releaseend
如果你已经完全明白上面脚本的意义,那么恭喜,你已经完全掌握了移动的命令!
/ 电漫宅屋来啦!论坛完全改头换面!各位支持啊!一定要啊!
在线时间1 小时
主题帖子积分
?...死...啦
奔跑少年, 积分 416, 距离下一级还需 84 积分
3. 关于精灵赠送相信这个章节应该是大家最期盼的了吧?精灵赠送在游戏中总是让人感到无比兴奋,现在我们就来进入这一环节.在本章节中,我们需要3个放置于地上或者桌子上的精灵球,但如何构造并不是我们现阶段要讨论的问题.来构想这样一个情景:1. 首先你激活了一个精灵球.2. 然后系统就会告诉你里面是个什么精灵,并询问你是否要.3. 如果你回答否,那么精灵球仍旧在那里放着4. 如果你回答是,那么这只精灵就属于你了,同时系统问你是否想给它起个昵称.5. 当然,如果你已经有了第一只精灵,那么系统会显示另外一段话来回绝你.以上的情景很熟悉吧?这就是火红/叶绿开始的情节,我们每个玩家都曾经历过,不过我们也应该注意到,以上的情节中存在着两个脚本.
3.1 让精灵消失先不要误会,这里的\"让精灵消失\"并不是指让你已经拥有的精灵丢失,而是指你在得到精灵球中精灵的同时,地图上的那个精灵球也要消失的过程.这个过程远比得到精灵重要,同时,这种使得精灵球从地图上消失的技巧也可以用在NPC或者其它物品上.那么这如何做到呢?打开Advanced map,在EVENT页面选中任意一个人物,然后在右侧的边栏中找到People ID一项.还记得前面说的标识吗?这里的People ID就是系统内置的标识,如果我们要告诉系统这个事件已经发生过了,那么只要使用Setflag加上0x再加People ID就可以让人物消失了!这时系统会自动刷新屏幕.但是,必须在Setflag命令结束之后再加一个release命令,否则会发生意外!如果把以上的内容镶嵌到物品赠与的脚本中,就要参照这个格式:#ORG $beginlockfaceplayercheckflag 0x200if B_true goto $donemessage $aidtalkboxset 6giveitem 0xD 1setflag 0x200releaseend
3.2 给予精灵的情形处理现在一切都准备停当了,我们写下精灵给予的脚本:#org $StartChikcheckflag 0x800if B_True goto $NoBallmessage $Chick$Chick 1 = Chikorita!lThe Fire Bird.pTake the Chikorita?boxset 5compare LASTRESULT 1if B_False goto $PutBack以上的部分和物品赠与完全相同,不过现在我们要添加两条命令了:一条是Jingle,Jingle就是得到物品后的声音;而另一条命令我们来看下面:givepokemon 152 5 0jinglemessage $GotChick$GotChick 1 = You Recieved a Chikoritaboxset 6对了,就是givepokemon命令,这个命令含有3个参数,它们依次为:编号、等级、携带物品,需要说明的是,编号参数和全国图鉴略有不同,它有一共411个值可供选择,至于为什么这里暂不解释;而物品的编号则需参照文末即将提供的一份文本列表,这和之前物品赠与的规则是一样的;而等级参数就写作10进制的数字就好,不过一定要靠谱.现在来看看接下来发生的事:
3.3 给精灵起个昵称给精灵起昵称的过程并不复杂,我们像往常一样:message $NameChick$NameChick 1 = Would You like to give Chikorita a name?boxset 5compare LASTRESULT 1if b_False goto $GiveDexNamepokemon瞧,Namepokemon什么参数也没有!是的,Namepokemon命令只是触发了系统的命名功能,而具体的事情并不由我们来完成.但是为了告诉系统,我们已经命名,必须在其后写一个设立标识的语句,如下:#org $StartChikcheckflag 0x800if B_True goto $NoBallmessage $Chick$Chick 1 = Chikorita!lThe Fire Bird.pTake the Chikorita?boxset 5compare LASTRESULT 1if B_False goto $PutBackgivepokemon 152 5 0jinglemessage $GotChick$GotChick 1 = You Recieved a Chikoritaboxset 6message $NameChick$NameChick 1 = Would You like to give Chikorita a name?boxset 5compare LASTRESULT 1if b_False goto $GiveDexNamepokemonsetflag 0x203goto $GiveDex最后的goto命令无条件的跳转到了下一个环节:
3.4 让图鉴工作起来事实上无论你获得或者捕捉到什么精灵,图鉴总会立即更新,但如果你还没有图鉴呢?那么游戏会变得很奇怪并且容易出错.因此如果这是你改版的第一个脚本,我们得加上:setflag 0x800setflag 0x801事实上,标识0x800使菜单中出现\"精灵\"这一项,而标识0x801才是打开图鉴的标志,但是很显然,二者都不可缺少.因此完整的脚本如下:#org $StartChikcheckflag 0x800if B_True goto $NoBallmessage $Chick$Chick 1 = Chikorita!lThe Fire Bird.pTake the Chikorita?boxset 5compare LASTRESULT 1if B_False goto $PutBackgivepokemon 152 5 0jinglemessage $GotChick$GotChick 1 = You Recieved a Chikoritaboxset 6message $NameChick$NameChick 1 = Would You like to give Chikorita a name?boxset 5compare LASTRESULT 1if b_False goto $GiveDexNamepokemonsetflag 0x203goto $GiveDex
#org $StartShrewcheckflag 0x800if B_True goto $NoBallmessage $Shrew$Shrew 1 = SandShrew!lDesert Mole.pTake the Sandshrew?boxset 5compare LASTRESULT 1if B_False goto $PutBackgivepokemon 27 5 0jinglemessage $GotChick$GotShrew 1 = You Recieved a Sandshrewboxset 6message $NameShrew$NameShrew 1 = Would You like to give Sandshrew a name?boxset 5compare LASTRESULT 1if b_False goto $GiveDexNamepokemonsetflag 0x204goto $GiveDex
#org $StartWingcheckflag 0x800if B_True goto $NoBallmessage $Chick$Wing 1 = Wingull!lThe Ocean Bird.pTake the Wingull?boxset 5compare LASTRESULT 1if B_False goto $PutBackgivepokemon 152 5 0jinglemessage $GotGull$GotGull 1 = You Recieved a Wingullboxset 6message $NameGull$NameGull 1 = Would You like to give Wingull a name?boxset 5compare LASTRESULT 1if b_False goto $GiveDexNamepokemonsetflag 0x205goto $GiveDex
#org $GiveDexsetflag 0x800setflag 0x801message $Pokedex$Pokedex 1 = I hope You like your new pokemon.pWhile your on your journeys I havela favour to ask you.pProf OAK and I are trying to make anlindex of everything pokemon.pTake this pokedex with you and itlwill log all the pokemon you see and catch.pIt would greatly help our studies!boxset 6jinglemessage $GotDex$Gotdex 1 = You got the Pokedex!boxset 6end
#org $PutBackmessage $PutBack$PutBack 1 = You put the pokeball back.boxset 6end
#org $NoBallmessage $Lastball$Lastball 1 = You already have your pokemon.nDont be so greedy!boxset 6
注意,以上的脚本是专为\"选择初始精灵\"而准备的,如果是其它情形,则脚本还可以更简单.L:大家仔细看脚本可以发现,其实激活图鉴是在获得精灵之后的,这显然不符合逻辑,有没有更好的写法呢?大家可以试试把goto $GiveDex提前,看看会出现什么结果.
3.5 统计精灵统计精灵其实只是为了进行一次确认──确认在得到精灵时队伍是否已满.通常我们必须这么做,否则一旦向满队伍中增加精灵,数据就会溢出.countpokemoncompare LASTRESULT 6if b_True goto $FullParty以上就是一个绝好的countpokemon命令例子.但countpokemon并不是只有这一处用武之地,它还可以:限制至少有一只精灵才能进入compare LASTRESULT 1if b_&& goto $EnterRoom限制至少有两只精灵才能战斗compare LASTRESULT 2if b_!= goto $DualBattle携带3只以上的精灵不能进入compare LASTRESULT 3if b_&= goto $EnterBattle还有很多其它用法.
3.6 选择精灵选择精灵这个命令很少出现,唯一记忆清晰的就是在重命名的时候会用到,示例如下:#org $GivePokemessage $ChangeName$WantPoke 1 = Hi! I\'m the Name RaterpI Rate pokemons name andnallow people to change them.pWould you like to rate the name oflyour pokemon?boxset 5compare LASTRESULT 1if B_False goto $Laterselectpokemonmessage $NamePoke$NamePoke 1 = Alright, what name shall we give it?boxset 6Namepokemonmessage $MuchBetter$MuchBetter 1 = You\'re right.lThat\'s a much better name.boxset 6end
#org $Latermessage $Banter$Banter 1 = Ok.lLet me know if you change your mind?boxset 6end
OK,关于精灵赠与部分的讲解到此就算结束了.
/ 电漫宅屋来啦!论坛完全改头换面!各位支持啊!一定要啊!
*滑动验证:
您需要登录后才可以回帖
Powered by

参考资料

 

随机推荐