samp吧 关注:15,489贴子:400,572

[教程]开始学习编写你自己的脚本

只看楼主收藏回复

简介:
此教程供给pawno的新手
在脚本中,你可能需要了解很多
这是第一个教程:
首先,你需要了解你现在正在编写什么
脚本(Filterscript): 脚本是一个附加到游戏模式与游戏模式一起使用而不是作为游戏模式的脚本
游戏模式(Gamemode):游戏模式是在服务器上运行的主要脚本
包含(Include): include包含自定义函数,可以帮助你更好的编写脚本(例子:zcmd,y_ini)
更多请看下面的楼层


IP属地:广东1楼2018-08-04 10:34回复


    来自Android客户端2楼2018-08-04 10:34
    回复
      第一步:确定你要编写一个脚本还是游戏模式
      从pawno新建一个,你会看到开头:
      // This is a comment
      // uncomment the line below if you want to write a filterscript
      //#define FILTERSCRIPT
      如果你想从一个脚本开始,那么请把
      //#define FILTERSCRIPT
      改为
      #define FILTERSCRIPT
      这说明了你要编写一个脚本
      如果你想从一个游戏模式开始,那么你可以不用修改
      ( "// "后面指的是注释行,它们在编译时会被忽略)


      IP属地:广东3楼2018-08-04 10:38
      回复(1)
        如果你按照我说的去做了,在pawno按下F6,如果它显示
        Pawn compiler 3.2.3664Copyright (c) 1997-2006, ITB CompuPhase
        那么恭喜你,你的第一个 Blank Filterscript/Blank Gamemode 编译成功了!
        编译后的文件是.amx后缀
        (Note:pwn是源码,amx是编译后的文件,你无法打开amx文件;amx文件才是真正在服务器上运作的,如果你只是添加pwn而不添加amx到服务器,什么都没有)


        IP属地:广东4楼2018-08-04 10:43
        回复
          顶顶顶。。。鹅鹅鹅


          IP属地:广西5楼2018-08-04 10:48
          回复
            第二步:了解函数
            在你的刚刚新建的脚本中,你会看到
            public OnFilterScriptInit()
            {
            print("\n--------------------------------------");
            print(" Blank Filterscript by your name here");
            print("--------------------------------------\n");
            return 1;
            }
            这是什么?
            简单,这就是一个回调。有{和},{和}里面就是要运行的函数
            OnFilterScriptInit意味:当脚本载入时
            当脚本载入时---print...
            print是一个打印的函数,添加它你可以在控制台看到一些文字
            在这里面,只有字符串是一个参数
            你把.print("\n--------------------------------------");随便改改,脚本载入时的提示就变了(\n是换行符)
            就像print("你好");
            注意:回调里面要执行的函数必须加上";",否则你会得到警告:error 001: expected token: ";", but found "-identifier-"
            ""里面包含的是字符串,你不能使用print(你好); (除非你有一个变量)
            记住如果不知道参数有多少,函数是什么,请在pawno里面按下键盘上的小数点,这是搜索功能


            IP属地:广东6楼2018-08-04 10:54
            回复
              第三步:定义
              就像你刚刚开始编写脚本时看到的
              #define FILTERSCRIPT
              这就是一个定义
              定义可以帮助你更快的编写脚本
              比如像这样:
              #define STRING "你好"
              所以我们基本上为某事设定了一种含义
              定义后,你不用每一次都使用"你好"这个字符串,仅需使用 STRING 就行了
              (注意:定义必须放在脚本顶部)
              ——————————————
              print("你好");
              改为我们现在在讨论的:
              print(STRING); //这里不需要添加'"!,因为上面我们已经定义了STRING为"你好"
              输出一样为:你好
              ——————————————


              IP属地:广东7楼2018-08-04 11:02
              回复
                顶顶


                8楼2018-08-04 11:16
                回复
                  来多点人啊


                  IP属地:广东10楼2018-08-04 11:33
                  回复
                    dd


                    来自Android客户端11楼2018-08-04 11:44
                    回复
                      现在我们进一步学习变量...
                      ______________________整数
                      就像..
                      new Integrer;
                      你可以把Integrer改成任何名字,管它呢,那只存储一个整数
                      ______________________字符串
                      字符串,指文本,比如"Blume"
                      下面这是一个字符串变量:
                      new myname[256];
                      [256]是什么?,这是字符串的最大长度,也可以说是文本的长度
                      我名字 Blume 是一个字符串,它的长度是5(一个字母占1个字符串长度,一个汉字或特殊符号占2个字符串长度)
                      那么我想用myname变量储存我的名字,而我的名字只有5个字符串,那么我将会把[256]改成[6],因为Blume只有5个字符串长度,无需用256那么长的变量去储存它,否则你会得到很多空白的字符串,使内存因为一些没有用的字符串加大
                      我的建议是,用一个变量储存字符串时,你最好先计算字符串的长度
                      另外,你也可以用这种变量来给每一个玩家创建一个变量
                      就像new Score[MAX_PLAYERS];
                      [MAX_PLAYERS]是什么?这是一个定义,我们之前学过的
                      这个定义来自你的server.cfg的最大玩家数
                      这可用于储存玩家的金钱,分数,人物等等
                      ______________________浮点数
                      可以理解为小数
                      例如1.1, 0.9, 6.5
                      下面这是一个浮点数变量:
                      new Float:number;
                      这里的Float:声明了后面的number是一个浮点数,使用这个变量时,仅需使用number而不是整个Float:number
                      用于储存坐标,玩家的血量等等
                      ______________________布尔值
                      只有两个结果,true和false(这不是一个字符串,你可以理解为true = 1,false = 0)
                      下面这是一个布尔值变量:
                      new bool:IsNumber;
                      这里的bool:声明了后面的IsNumber是一个布尔值,使用这个变量时,仅需使用number而不是整个bool:IsNumber
                      默认值为false
                      布尔值多用于判断句
                      例如:
                      if(IsNumber)
                      {
                      print("这是一个数字");
                      }
                      这里的判断句我用了布尔值,可以直接省略掉IsNumber == true
                      这就是布尔值的作用,更方便于判断
                      但相反不一样,你必须这样做:
                      if(IsNumber==false)
                      {
                      print("这不是一个数字");
                      }


                      IP属地:广东12楼2018-08-04 12:01
                      收起回复
                        如果你在编写时发生了错误,请把错误的部分发到帖子里,我会帮你解答


                        IP属地:广东13楼2018-08-04 12:10
                        回复
                          第五步:判断句
                          在上一步,我用到了判断句
                          在这里我会详细讲解
                          这是一个简单的判断句
                          new number=1;
                          new number2=1;
                          //以上为局部变量
                          if(number+number2==2)
                          {
                          print("1+1等于2!!!");
                          }
                          你可以看到,print就是判断成功的结果,在{和}里面要执行的
                          注意在判断等于不能用一个"=",而是要用两个"="
                          更多: < > = <= >=
                          判断句还有很多形式
                          你可以这样做(仅用于只有一条要执行的函数)
                          if(number+number2==2) print("1+1等于2!!!");
                          那么,如果1+1不等于2呢?
                          现在你需要使用 else 了
                          if(number+number2==2)
                          {
                          print("1+1等于2!!!");
                          }
                          else
                          {
                          print("1+1不等于2!!!我的数学那么差!");
                          }
                          这里的else指两种情况,第一种是小于2,第二种是大于2
                          (另外还有else if语句)


                          IP属地:广东14楼2018-08-04 12:25
                          回复
                            暂时先更到这里


                            IP属地:广东15楼2018-08-04 12:27
                            回复
                              支持


                              IP属地:广东来自Android客户端16楼2018-08-04 13:52
                              回复