免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

原闪坛政委czghenry 的地图编辑实例--“单人地图--声东击西”

原闪坛政委czghenry 的地图编辑实例--“单人地图--声东击西”

解压提取:声东击西.pak复制到您的闪电战\Data文件夹中,读取自定义任务。





以下是脚本说明:
------------------------------------------------------------------------------------------------------------

--- Script ID代号说明
--- 101 我方援军, 在编辑器Reinforcement Groups设定,
---       其中八辆坦克在"单位-初始指挥" 设定为”Swarm to“过铁路桥
--- 203 敌方列车
--- 205 敌方巡逻军官
--- 1000 铁路桥
--- 201 敌方机动装甲主力, 在AI Settings设定为面1,可移动援军
--- 2001 敌方公路桥装甲连
--- 2002 敌方公路桥步兵连-投降部队
--- 空军部队我还没有研究, 这个地图中双方只有侦察机,
---            在编辑器空军设置中其它机种的count值设为0

--- 以“--"(两个英文减号)开头, 以回车结尾的语句是说明语句, 游戏程序不调用。
------------------------------------------------------------------------------------
--- 游戏开始后显示说明中文字中间加一个空格, 显示时不会重叠。

function Beginnend()
        DisplayTrace (" 声 东 击 西");
        DisplayTrace (" 游 戏 脚 本 实 例");
        DisplayTrace (" by czghenry");
        Suicide();
end;

-----------------------------------------------
--- 敌军官在铁路桥随时命令炸桥,
--- 公路桥受到攻击后,改到车站指挥部队。
--- Cmd( 行动方式,单位代码, 地图指定位置的SCRIPT值x,y), 注意大小写。

function Officer()
        if (GetNUnitsInScriptGroup(2001) < 3) then
                Cmd (0, 205, 4422, 6206);
                Suicide();
        end;
end;

-------------------------------------------------------------------
--- 列车在被消灭前来回巡逻, 遇敌则自动还击。

function Trainmove1()
        if ( GetNUnitsInScriptGroup(203) > 0) then
                Cmd (3, 203, 1240, 7894);
                RunScript( "Trainmove2", 55000);
        end;
        Suicide();
end;

function Trainmove2()
        if ( GetNUnitsInScriptGroup(203) > 0) then
                Cmd (3, 203, 4680, 4900);
                RunScript( "Trainmove1", 55000);
        end;
        Suicide();
end;
----------------------------------------------------------
--- 如果我军攻入公路桥头且守桥装甲连被消灭,
--- 则守桥步兵连投降,
--- 设定全局变量 "czgmap.objective.0"= 1
--- 任务完成
--- 显示下一任务

--- SetIGlobalVar( "czgmap.objective.0", 1)语句引号中的变量名可以是任意的,
--- 但要与后面的GetIGlobalVar("czgmap.objective.0", 0) 语句保持一致
--- 不过为了明白这是目标变量, 命名为“地图名.目标.序号“

function Objective0()
        if (( GetNUnitsInArea(0, "Road Bridge") > 0) and
            (GetNUnitsInScriptGroup(2001) <= 0)) then  
                SetIGlobalVar( "czgmap.objective.0", 1);
                ObjectiveChanged(0, 1);
                ChangePlayer(2002, 0);
                DisplayTrace(" 敌 守 桥 步 兵 连 已 投 降");
                RunScript( "RevealObjective1", 3000);
                Suicide();
        end;
end;
--------------------------------------------------------------------------------

--- 如果我军到达对岸且守军全灭
--- 任务完成
--- 显示下一任务
--- 召唤援军101到达

function Objective1()
        if (( GetNUnitsInArea(0, "Railway Bridge") > 0) and
            ( GetNUnitsInArea(1, "Railway Bridge") <= 0)) then
                SetIGlobalVar( "czgmap.objective.1", 1);
                ObjectiveChanged(1, 1);
                RunScript( "RevealObjective2", 3000);
                LandReinforcement(101);
                Suicide();
        end;
end;
--------------------------------------------------------------------------------

---

function Objective2()
        if (( GetNUnitsInArea(0, "Zhanqu") > 0) and
            (GetNUnitsInArea(1, "Zhanqu") <= 1)) then
                SetIGlobalVar( "czgmap.objective.2", 1);
                ObjectiveChanged(2, 1);
                RunScript( "RevealObjective3", 3000);
                Suicide();
        end;
end;


--------------------------------------------------------------------------------
--- 消灭全部敌人且占领车站
--- 任务完成

function Objective3()
        if (( GetNUnitsInArea(0, "Station") > 0) and
            ( GetNUnitsInSide (1) <= 0)) then
                SetIGlobalVar("czgmap.objective.3", 1);
                ObjectiveChanged(3, 1);
                Suicide();
        end;
end;
-------------------------------------------------------------------------------
--- 如果第一个任务(占领公路桥)未完成而有我军单位跨越铁路桥
--- 铁路桥将被炸毁

function BombBridge()
        local num = GetNUnitsInArea(0, "Bridge");
        if ((num > 0) and (GetIGlobalVar("czgmap.objective.0", 0) == 0)) then
                DamageObject(1000, 0);
                Suicide();
        end;
end;
-------------------------------------------------------------------------------
--- 以下是典型的显示任务开始程序
--- 如果全局变量“任务0”=0(0任务开始, 1任务完成, 2任务失败)
--- 显示任务开始

function RevealObjective0()
        if ( GetIGlobalVar("czgmap.objective.0", 0) == 0) then
                ObjectiveChanged(0, 0);
                Suicide();
                else Suicide();
        end
end;
--------------------------------------------------------------------------------

function RevealObjective1()
        if ( GetIGlobalVar("czgmap.objective.1", 0) == 0) then
                ObjectiveChanged(1, 0);
                Suicide();
        else Suicide();
        end;
end;
--------------------------------------------------------------------------------

function RevealObjective2()
        if ( GetIGlobalVar("czgmap.objective.2", 0) == 0) then
                ObjectiveChanged(2, 0);
                Suicide();
        else Suicide();
        end;
end;
--------------------------------------------------------------------------------

function RevealObjective3()
        if ( GetIGlobalVar("czgmap.objective.3", 0) == 0) then
                ObjectiveChanged(3, 0);
                Suicide();
        else Suicide();
        end
end;
--------------------------------------------------------------------------------


--- 这里是4个任务0-1-2-3, 如果有更多就再加。
--- 所以当最后一个任务完成, 就胜利。

---  这个适用于顺次任务, 有时任务同时提示,
--- 不需要顺次完成或全部完成就胜利
--- 你可以用这个语句if ( GetIGlobalVar( "czgmap.objective.1", 0) * GetIGlobalVar(
--- "czgmap.objective.2", 0) * GetIGlobalVar( "czgmap.objective.3", 0)== 1)
--- 表示任务1-2-3完成就胜利
--- 当然你也可以设定其它胜利条件

function ToWin()
        if ( GetIGlobalVar( "czgmap.objective.3", 0) == 1) then
                Win(0);
                Suicide();
        end;
end;
--------------------------------------------------------------------------------

--- 简单的失败条件
--- 你的单位全部牺牲了, 还玩什么? ---

function TobeDefeated()
        if ( GetNUnitsInSide (0) <= 0) then
                Loose();
                Suicide();
        end;
end;
--------------------------------------------------------------------------------

--- 这段语句去除整个地图的迷雾, 作为脚本实例, 你可以看到双方的行动, 便于理解脚本.
--- 先在地图编辑器中用Maptool定义圆形的脚本范围,点击地图中心(VIS (64, 64, Z)),
--- 按住鼠标左建拖到最边, 命名范围名为Map。

function RevealMap()
        ViewZone("Map", 1);
        Suicide();
end;
--------------------------------------------------------------------------------



                --- 初始化命令 ---
                                --- 时间: 1000 = 1 秒钟 / 60000 = 1 分钟 ---

function Init()

        RunScript( "Beginnend", 1000);
        RunScript( "RevealMap", 2000);
        RunScript( "Trainmove1", 5000);
        RunScript( "BombBridge", 2000);
        RunScript( "Officer", 1000);
        RunScript( "RevealObjective0", 2000);
        RunScript( "Objective0", 2000);
        RunScript( "Objective1", 2000);
        RunScript( "Objective2", 2000);
        RunScript( "Objective3", 2000);
        RunScript( "ToWin", 5000);
        RunScript( "TobeDefeated", 5000);
end;
--------------------------------------------------------------------------------
附件: 您需要登录才可以下载或查看附件。没有帐号?注册  
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

试玩了一下,任务3无法完成,整个任务无法胜利

TOP

回复,下载

TOP

返回列表