找回密码
 点一下
查看: 59|回复: 3

哪位大佬会搞多种族地图

[复制链接]
发表于 2024-5-2 16:13:52 | 显示全部楼层 |阅读模式
发现做多种族地图卡在第一步就是不知道怎么让特定的种族生成特定的多种族选择触发,做了好几次触发都发现根本没有办法实现删除原先种族,出现新种族,反而每次都是旧的种族和新的种族一起出现
发表于 2024-5-4 16:13:40 | 显示全部楼层
正好最近在做,我的做法是每个种族各做一个副种族,开局二选一,看你的描述应该和我的思路差不多
我做的这个包括了玩家选族和电脑随机主副种族,这一层先写电脑随机种族
事件就地图初始化,先在创建对战初始单位之后加上这个触发

For each (Integer  A) from 1 to 12, do (Actions)                     //为1-12的每个整数A循环下列动作
Loop - 动作  //循环内容
    IF (All Conditions  are true) then  do (Then Actions) else do (Else Actions)    //IF判断,如果符合条件则执行Then下的内容,如果不符合则执行Else下的内容
    If - 条件                                                                         //层级If1,注意这个触发用到了多层IF,所以我在这里标记一下,同一层的IF、Then、Else需要匹配
         ((Player((Integer A))) controller) 等于 电脑                   //判断电脑玩家
         ((Player((Integer A))) slot status) 等于 正在游戏            //判断玩家游戏中
    Then - 动作                                                                    //Then1
        Set VariableSet ComputerRandom = (Random integer number between 0 and 3)  //其中“ComputerRandom”是预设整数变量,该条效果为随机一个0-3之间的整数赋予该变量,用于随机原种族或新种族
        If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)
        If - 条件                                                                    //If2
            (Race of (Player((Integer A )))) 等于 人类    //判断该玩家种族是否为人类,注意这里
        Then - 动作                                                               //Then2
            If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)
            If - 条件                                                                //If3
                ComputerRandom 小于或等于1
            Then - 动作                                                          //Then3这里不做动作即使用原版人族,如果需要应用AI则在这里对电脑应用响应的AI
                AI - Start melee AI  script for (Player ((Integer A))): Scripts\human.ai
            Else - 动作                                                            //Else3,从这里开始是替换种族的动作,同样的,如果需要应用AI也是在这一层添加
                单位组 - Pick every unit in (Units  owned by (Player((Integer A))) of type 议政厅)and do (Actions)    //该动作为选取地图上所有玩家A的议政厅,并循环执行接下来的Loop动作,这里有另一个类似的动作是直接在“Actions”位置填写要执行的动作,也可以用那一个,把动作设置成底下的内容即可,我这里主要是为了各种族之间方便复制修改
                     Loop - 动作
                    单位 - Replace (Picked unit) with a 新种族基地 using 旧单位的百分比 life and mana                //替换上面选择的议政厅为新种族基地
                单位组 - Pick every unit in (Units  owned by (Player((Integer A))) of type 农夫)and do (Actions)      //同上效果,这个是选择所有农夫
                     Loop - 动作
                     单位 - Replace (Picked unit) with a 新种族农民 using 旧单位的百分比 life and mana              //同上,依次替换农民
                AI - Start melee AI  script for (Player ((Integer A))): Scripts\new.ai                                           //同样的,应用新AI,注意这个和上面两个单位组是同一层的,都在Else下面,不要放到Loop里面去了
         Else - 动作                                                                              //Else2,这里对应If2判断是否人族,如果不是人族则进行对应兽族的判断
              If - 条件                                                                //If4,总体内容为复制一遍整个IF2,然后把里面对应内容改成兽族对应的内容和新种族,
                ………
              Else - 动作                                                             //Else4,If2对应人族,在IF4的Else下面复制IF2改兽族,接下来依次类推,在对应兽族的Else4下面写IF5对应不死,在对应不死的IF5下面写IF6对应暗夜
                  If - 条件                                                            //IF5
                  Else - 动作                                                             //Else5
                      If - 条件                                                            //IF6
                      Else - 动作                                                         //Else6,因为四个种族都判断完成了,所以这个Else空着
    Else - 动作                                                                           //Else1,这个地方因为我们只做电脑的随机种族,所以对非电脑玩家不做动作,也空着

注意这里我只做了每个种族1个额外种族的判断,如果需要更多,则需要调整Then1里的ComputerRandom随机数(下面简称CR变量),然后在IF2底下对每个情况的随机数进行If判断,利用多层If - Else结构,执行不同的Else3内容,比如,If CR变量=0,Then 不变,Else再If CR变量=1,Then替换新种族A(执行Else3下的替换语句)Else再If CR变量=2,Then替换新种族B,Else……依次类推
回复

使用道具 举报

发表于 2024-5-4 17:23:55 | 显示全部楼层
接下来写玩家选族,玩家选族变量比较多,以玩家种族为人族为例,我一般把这个设定在游戏开始后0.01秒显示对话框
需要的预设变量:
Number(整数变量,初始为0)
Choice(对话框)
Origin(对话框按钮,方便区分这个专指原版种族)
New1(对话框按钮),注意这里人族对应几个新种族就需要几个对话框按钮

触发器1:
事件:时间 - Elapsed game time is 0.01
条件空白
动作:
游戏 - Pause the game
Set VariableSet Number = (Number + 1)                                    //Number增加为1
If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)      //If1标记层级
    If  - 条件
        Number 等于 13                                                //如果Number=13(设置成最大玩家数+1)
    Then - 动作
        游戏 - Unpause the game                                  //取消暂停继续游戏
        触发器 -Turn off (This trigger))                          //关闭此触发
    Else - 动作
        If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)     //判断玩家是真人操纵
            If - 条件                                                                         //If2
                 ((Player((Integer Number))) controller) 等于 用户                   //判断真人玩家
                 ((Player((Integer Number))) slot status) 等于 正在游戏            //判断玩家游戏中
            Then - 动作                                                                              //Then2
                If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)    //判断玩家种族
                If - 条件                                                                                                //If3
                    (Race of (Player(Integer Number))) 等于 人类
                Then - 动作                                                                                           //Then3
                    对话框 - Change the title of Choice to 你要选择哪个种族开始游戏    //非必须,只是在对话框上方增加一句提示
                    对话框 - Create a dialog button for Choice labelled 人类                  //创造第一个按钮“人类”
                    Set VariableSet Origin = (Last created dialog Button)                         //把“人类”按钮赋值给变量Origin
                    对话框 - Create a dialog button for Choice labelled 新种族1             //创造第二个按钮“新种族1”
                    Set VariableSet New1 = (Last created dialog Button)                          //把“新种族1”按钮赋值给变量New1
                    ……                                                                                                   //依次类推,给每个变量赋值对应按钮
                Else - 动作                                                                                             //Else3,在下面把If2复制一遍,种族判断及内容改成兽族即可
                    If - 条件                                                                                            //If4
                    ……
                    Else - 动作                                                                                        //Else4,类似的,在Else3下面复制If2为If4,在Else4下面复制F2为If5,对应剩下两个种族
                    ……
            Else - 动作                                                                                                //Else2
                触发器 - Run 触发器1<预设> (ignoring conditions)                                   //如果玩家Number是电脑或未开启,则无视条件直接重新运行触发,开始下一名玩家的选择
触发器1结束
触发器2:
事件:对话框 - Adialog button is clicked for Choice
条件:空白
动作:
If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)   //再次判断种族
    If - 条件                                                                         //If1标记层级
        (Race of (Player(Integer Number))) 等于 人类
    Then - 动作                                                                     //Then1
    If (All Conditions  are true) then  do (Then Actions) else do (Else Actions)   //接下来判断是哪一个对话框被点击
        If - 条件                                                                         //If2
            (Clicked dialog button) 等于 Origin
        Then - 动作                                                                    //这里代表原种族,所以不用执行动作
        Else - 动作
            If - 条件                                                                     //If3
                (Clicked dialog button) 等于 New1                            //判断按下了新种族1的按钮
            Then - 动作
                ……                                                                       //和上面电脑替换单位一样,把上面一层Else3的几个动作复制过来就行
            Else - 动作                                                                 //按下的按钮不是New1,则继续判断按下了哪个按钮
                ……                                                                       //同样的,复制If3到下面,依次判断每个按钮是否被按下,被按下那个就执行替换单位的操作
    Else - 动作                                                                         //Else1,上面是判断玩家为人族的情况,接下来依次类推,判断剩下三个种族的情况
        ……
触发器 - Run 触发器1<预设> (ignoring conditions)                    //玩家1选择结束,无视条件运行触发器1,开始判定玩家2

用我这个触发的话,不需要设置太多的变量,好处是就算改了地图增减了玩家总数也不用修改太多地方(按我这里直接设置1-12的话,因为最大玩家数就是12,基本不需要修改),坏处是必须按照玩家1-12的顺序依次选择,等所有玩家都选完了才能开始游戏
如果做小地图玩家比较少的话,那也可以用比较单纯的办法,给每个玩家都设置一套按钮变量,也就是不进行循环,直接分别对每个玩家进行“判断种族、显示对话框、增加按钮+赋值变量循环,判断按下的按钮,替换单位”的方法,不过这样要用到的预设变量会增加,比如,以8个玩家,每个种族对应两新一旧三个种族为例,每个玩家需要1个对话框变量+3个按钮变量,一共32个变量,玩家和新种族越多变量也就越多,同时为了保证公平,依旧需要Number变量来判断完成选择的人数,而且这里还必须先抓取真人玩家的数量形成Number1,然后每个玩家完成选择后给Number+1,再对比Number1和Number2,相等时再结束暂停恢复游戏,所以会比较麻烦,好处就是可以让每个玩家同时进行选择
回复

使用道具 举报

发表于 2024-5-4 17:26:03 | 显示全部楼层
对了,还有一个比较特别的是不死,不死的初始单位因为是3侍僧1食尸鬼,如果新种族要和其他种族一样5农民,可以采用“删除侍僧-在食尸鬼的位置创造4个农民-替换食尸鬼”的方式,具体操作不难不再赘述
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-18 12:48 , Processed in 0.051400 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表