找回密码
 点一下
查看: 1481|回复: 26

师门任务系统,供大家参考

[复制链接]
发表于 2011-9-26 18:22:04 | 显示全部楼层 |阅读模式
终于把这师门系统给总结出来了。
这师门任务系统和网游的差不多,都是接任务(多任务接受),做任务,完成任务+奖励
在这里多谢【chyj4747】【551155】的指导。另外应【551155】的要求,重新调整了下,并加F9说明

[trigger]未命名触发器 001
    事件
        地图初始化
    条件
    动作
        设置 String[1] = 领取任务:寻找【传送权杖】
        设置 String[2] = 领取任务:寻找【加速手套】
        设置 String[3] = 领取任务:寻找【勇气勋章】
        设置 String[4] = 领取任务:寻找【卡嘉医疗宝石】
        设置 WP[1] = 传送权杖
        设置 WP[2] = 加速手套
        设置 WP[3] = 勇气勋章
        设置 WP[4] = 卡嘉医疗宝石
[/trigger]

[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        ((被操作物品) 的类型) 等于 领取任务
    动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                ((触发单位) 在 DWZ 中) 等于 TRUE
            Then - 动作
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (已接受 + String[X[((触发玩家) 的玩家索引号)]])
            Else - 动作
                设置 Z = (随机整数,最小值: 1 最大值: 4)
                设置 X[((触发玩家) 的玩家索引号)] = Z
                单位组 - 添加 (触发单位) 到 DWZ
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: String[X[((触发玩家) 的玩家索引号)]]
                任务 - 创建一个 可选择的 任务,标题: 师门任务 任务说明: (请找回【 + (String[X[((触发玩家) 的玩家索引号)]] + 】给师傅。)) 任务图标: ReplaceableTextures\CommandButtons\BTNAmbush.blp
                设置 RW = (最后创建的任务)
[/trigger]


[trigger]未命名触发器 003
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        ((被操作物品) 的类型) 等于 完成任务
    动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                ((触发单位) 在 DWZ 中) 等于 TRUE
            Then - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((触发单位) 拥有 WP[X[((触发玩家) 的玩家索引号)]]) 等于 TRUE
                    Then - 动作
                        物品 - 删除 ((触发单位) 所持有的 WP[X[((触发玩家) 的玩家索引号)]])
                        英雄 - 增加 500 经验值给 (触发单位) , 显示 升级动画
                        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 任务完成:奖...
                        单位组 - 把 (触发单位) 从 DWZ 移除
                        任务 - 删除 RW
                    Else - 动作
                        游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 任务未完成,...
            Else - 动作
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: 请领取任务!
[/trigger]


师门任务系统.w3x (20 KB, 下载次数: 43)
 楼主| 发表于 2011-9-26 18:22:44 | 显示全部楼层
试用了下。购买几个物品之后就没反应了。
回复

使用道具 举报

发表于 2011-9-26 19:27:19 | 显示全部楼层
TTT是什么
回复

使用道具 举报

 楼主| 发表于 2011-9-26 19:54:40 | 显示全部楼层
楼上的哥们。TTT是一个布尔值。有什么问题?
回复

使用道具 举报

发表于 2011-9-26 21:05:54 | 显示全部楼层
LZ这图难道是只能单机玩的?!……
还有为什么接任务还是有概率的……概率还是1/10。。

另外“不做任何动作”这个完全没必要写。。浪费编写时间。。
回复

使用道具 举报

 楼主| 发表于 2011-9-26 21:15:39 | 显示全部楼层
为什么这样说呢?这图是多人玩的。
而TTT[((((触发单位) 的所有者) 的玩家索引号) 这里不就说明多人了吗?
概率问题是我想不到更好的方法。
其实这T我主要是
单位购买一个物品,然后触发任务,这里一共有10个任务,我不知道怎么写。
所以就用概率来判断,等于1时候,就显现那个任务,等于2时候,就显现那个任务。
虽然比较蠢,还是有用的。
回复

使用道具 举报

发表于 2011-9-26 22:05:52 | 显示全部楼层
TTT[((((触发单位) 的所有者) 的玩家索引号) + (Z x 1))] 等于 FALSE
玩家二接第一个任务:TTT[3]=TRUE
玩家一再去接任务二的时候:TTT[3]=TRUE,于是提示已接任务
单位购买一个物品,然后触发任务,这里一共有10个任务,我不知道怎么写。
所以就用概率来判断,等于1时候,就显现那个任务,等于2时候,就显现那个任务。
看样子LZ没有完全理解之前问的那个任务T里 I*6 的意思呢……
回复

使用道具 举报

 楼主| 发表于 2011-9-27 00:14:08 | 显示全部楼层
我记得你说过,玩家1接任务:1+1*1=2 那么玩家2接任务:2+1*1=3 玩家3:3+1*1=4
如果是上面的触发,Z=1。那么是不是会得到我上面的公式?
其实我的想法是:TTT[((((触发单位) 的所有者) 的玩家索引号) + (Z x 1))] 等于 FALSE
这个只是用来判断单位是否接受了任务。那么如果玩家一接受了任务,那么就显示。。。
看来这里的FALSE是我搞错了。应该是true,那么就可以判断出玩家1接受了=2的任务。
看来上边是搞错了,
设置 TTT[((((触发单位) 的所有者) 的玩家索引号) + (Z x 1))] = TRUE这里应该放在下面,用来确定单位1接受了=2的任务。。过错过错。
那么那个概率问题。这里我应该是想把他Z判断成一个整数。。那么我另一个触发才可以写。但这里又矛盾了,如果Z变成2,那么玩家一得到固然是接受了=3的任务,那么也就等于玩家二接受了=1的任务。。哎。我明白了。但也混乱了。我想得太复杂了。。。。啊啊啊啊!求救阿。。。。。。。。。
回复

使用道具 举报

发表于 2011-9-27 05:15:32 | 显示全部楼层
之前没仔细想……刚才突然发现LZ这个T的意思是单位获得“大唐官府”这个物品后得到十种任务中的随机一种……不知道LZ是不是这个意思。。
这样的话就不要用循环了。。
直接随机数然后判断随到的值~
[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        (被操作物品) 等于 XXX
    动作
        设置 Z = (随机整数,最小值: 1 最大值: Count)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                TTT[(((触发玩家) 的玩家索引号) + (Z x 12))] 等于 FALSE
            Then - 动作
                设置 TTT[(((触发玩家) 的玩家索引号) + (Z x 12))] = TRUE
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: String[Z]
            Else - 动作
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: (已接受: + String[Z])
[/trigger]


补充说明:
1. 我设置的是12个玩家,TTT[13] - TTT[24]是给任务一用的,TTT[25] - TTT[36]是给任务二用的,……,TTT[121] - TTT[132]是给任务十用的~
LZ稍微计算下就知道了~
2. 上面这个T看起来的确是比较简洁,但实际上浪费了TTT[0] - TTT[12]这13个布尔值变量,所以稍适修改:
[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        (被操作物品) 等于 XXX
    动作
        设置 Z = (随机整数,最小值: 0 最大值: (Count - 1))
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                TTT[(((触发玩家) 的玩家索引号) + (Z x 12))] 等于 FALSE
            Then - 动作
                设置 TTT[(((触发玩家) 的玩家索引号) + (Z x 12))] = TRUE
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: String[(Z + 1)]
            Else - 动作
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: (已接受: + String[(Z + 1)])
[/trigger]
这样就使所有TTT的数组减小了12,于是只浪费了TTT[0]这个变量~
3. 一张图的变量总数量是固定的,我记得是8192,不要觉得看起来很多,用起来很快的,比如这个任务就占用了至少121个变量,所以推荐换种方法,用单位组:
[trigger]未命名触发器 003
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        (被操作物品) 等于 XXX
    动作
        设置 Z = (随机整数,最小值: 0 最大值: (Count - 1))
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                ((触发单位) 在 G[Z] 中) 等于 TRUE
            Then - 动作
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: (已接受: + String[(Z + 1)])
            Else - 动作
                单位组 - 为 G[Z] 添加 (触发单位)
                游戏 - 对 (触发玩家) 在屏幕位移(0.00,0.00)处显示文本: String[(Z + 1)]
[/trigger]
这样就只用了G[0] - G[9]这10个单位组变量,其实LZ在第一个T里也可以从String[0]开始设置~,然后Count=9,这样就不用在第二个T里加减了~
回复

使用道具 举报

 楼主| 发表于 2011-9-27 09:37:01 | 显示全部楼层
[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        ((被操作物品) 的类型) 等于 师门任务:大唐官府
    动作
        设置 Z = (随机整数,最小值: 0 最大值: 1)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                ((触发单位) 在 G[Z] 中) 等于 TRUE
            Then - 动作
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (已接受 + String[Z])
            Else - 动作
                单位组 - 为 G[Z] 添加 (触发单位)
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: String[Z]
[/trigger]


我尝试用单位组做了个,可是问题来了。第一次接任务,提示String[1]的物品。第2次提示String[0]物品。第3次任务,才提示(已接受 + String[1]的物品),之后全部才提示第3次任务的结果。
为什么会这样?
回复

使用道具 举报

发表于 2011-9-27 10:42:41 | 显示全部楼层
sunday529:[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
....... (2011-09-27 09:37)
额。。。这不明摆着吗。。。
第一次随到Z=1,第二次Z=0,第三次之后由于任务全部接了不管是0还是1都是判断出任务已接受。。。
这个当然是要当任务被完成时再将单位从单位组里踢掉。。
回复

使用道具 举报

 楼主| 发表于 2011-9-27 12:03:12 | 显示全部楼层
但我想要的结果是,如果随即到1了,那么就应该提示任务未完成,先不接其他的任务。
可是这触发是第一次接任务是A,第二次是B或者A。我要的结果是接了A,再接任务应该提示未完成。而不是再接任务。
回复

使用道具 举报

发表于 2011-9-27 12:58:55 | 显示全部楼层
sunday529:但我想要的结果是,如果随即到1了,那么就应该提示任务未完成,先不接其他的任务。
可是这触发是第一次接任务是A,第二次是B或者A。我要的结果是接了A,再接任务应该提示未完成。而不是再接任务。 (2011-09-27 12:03)
那你应该在顶楼就附上任务说明啊……

那就一个单位组就行了,不管接什么任务,都判断是否在这个单位组内
回复

使用道具 举报

发表于 2011-9-27 18:10:56 | 显示全部楼层
不知道楼主的任务是否可以重复的,如果是可重复的:

一、布尔判断放在外部条件中,这样就可以直接获取任务接受程度
二、在完成任务之后将布尔判断逆转就可以再接任务了


如是不可重复的话:

不能在循环中直接创建任务,而是通过循环获得一个值。例如循环1-10,如果条件都不成立(没有任务接受)那么就获得一个布尔值,下一步的话,通过判断这个布尔值发布任务,而发布采用嵌套循环发布。不过需要说明的是,这里的循环需要有两种变量,一种是接受任务,一种是完成任务,需要的是双重条件。(和楼上用的组模式类似)
回复

使用道具 举报

 楼主| 发表于 2011-9-27 18:45:10 | 显示全部楼层
[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
        ((被操作物品) 的类型) 等于 师门任务:大唐官府
    动作
        设置 Z = (随机整数,最小值: 1 最大值: 10)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                (((触发单位) 的所有者) 在 WJZ 中) 等于 TRUE
            Then - 动作
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: (接受了 + String[Z])
            Else - 动作
                玩家组 - 添加 ((触发单位) 的所有者) 到 WJZ
                游戏 - 对 ((触发单位) 的所有者) 在屏幕位移(0.00,0.00)处显示文本: String[Z]
[/trigger]


不知道是不是我把问题严重化了。。
其实我要的效果是。单位接受了任务,上面的触发就会出现提示String[Z]。其实我想要的结果是把这个整数固定下来。不然按上面的触发。接了任务后再接任务始终都是Z范围内的东西,而不是Z=1。我要的时接任务后如果Z=1,然后再接任务后提示的都是Z=1,麻烦帮我完善下上面的触发。
回复

使用道具 举报

发表于 2011-9-27 18:48:09 | 显示全部楼层

回 14楼(sunday529) 的帖子

sunday529:[trigger]未命名触发器 002
    事件
        单位 - 任意单位 获得物品
    条件
        ((触发单位) 是 英雄) 等于 TRUE
....... (2011-09-27 18:45)
既然有一个Z,为何就没有另外一个X呢?考虑一下吧
回复

使用道具 举报

 楼主| 发表于 2011-9-27 19:03:36 | 显示全部楼层
不懂?551155 的哥们。为什么你每次都惜字如金呢!
回复

使用道具 举报

发表于 2011-9-27 19:11:20 | 显示全部楼层
意思估计就是
要固定的话
用另一个变量(X)记录掉Z
那么Z不管怎么变
这个X也不会变了
回复

使用道具 举报

 楼主| 发表于 2011-9-27 23:32:10 | 显示全部楼层
还是不懂。应该怎么用X来记录Z呢?
用X=Z行不?但我感觉应该不行。
回复

使用道具 举报

发表于 2011-9-28 01:01:04 | 显示全部楼层
sunday529:还是不懂。应该怎么用X来记录Z呢?
用X=Z行不?但我感觉应该不行。 (2011-09-27 23:32)
好吧。。这个涉及变量赋值了。。

假设Z=1,设置X=Z后,X实际不是等于Z而是等于1,之后Z改变了之后,X还是等于1~
嘛。。实际概念要比这个再麻烦一点,就不跟LZ说了。。LZ就按照这个来理解就行~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 22:25 , Processed in 0.262666 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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