|
楼主 |
发表于 2008-4-27 12:44:38
|
显示全部楼层
演示 - 物品随机属性系统
写在演示之前:
曾经,我也羡慕过JASS强大的功能,也和部分新手一样,向往着。然而,对于没有程序基础和基本上不懂E文的我来说,“J白”是一个很帖切的称呼,放弃了JASS领域,总幻想着用T来搭建属于自己的地图和演示。从防守图演示,到演示集现在的十多个演示,我也是比较满意自己交的答卷,不断创新,不断研究,至少我觉得我呆在GA是那么顺理成章。这次,也算是我自己的一个小小突破,一个貌似完全属于JASS的事物被自己用Trigger成功的制作出来了,很激动,也很感动。我希望,和我一样属于“J白”的朋友们,羡慕JASS的同时,用Tirgger来创建属于我们自己的天空。
GA 551155 2008.4.27
关于这个系统的解说,已经有很多了,简单的说,就是利用2幂来实现少量的数值组合来达到需要的效果,而通过这两天的研究,我发现,2进制的1和0,的确就是开关,对这些数的开关,我所设想的方式,就是基于开关的,请继续看具体的触发,一共三个半。
[trigger]Initialization
事件
地图初始化
条件
动作
-------- 设置技能 --------
设置 Ability[1] = (Item)增加攻击力 ( +1 )
设置 Ability[2] = (Item)增加攻击力 ( +2 )
设置 Ability[3] = (Item)增加攻击力 ( +4 )
设置 Ability[4] = (Item)增加攻击力 ( +8 )
设置 Ability[5] = (Item)增加攻击力 ( +16 )
设置 Ability[6] = (Item)增加攻击力 ( +32 )
设置 Ability[7] = (Item)增加攻击力 ( +64 )
设置 Ability[8] = (Item)增加攻击力 ( +128 )
设置 Ability[9] = (Item)增加攻击力 ( +256 )
设置 Ability[10] = (Item)增加攻击力 ( +512 )
设置 Ability[11] = (Item)增加攻击力 ( +1024 )
设置 Ability[12] = (Item)增加攻击力 ( +2048 )
设置 Ability[13] = (Item)增加攻击力 ( +4096 )
设置 Ability[14] = (Item)增加攻击力 ( +8192)
设置 Ability[15] = (Item)增加攻击力 ( +16384 )
设置 Ability[16] = (Item)增加攻击力 ( +32768 )
设置 Ability[17] = (Item)增加攻击力 ( +65536 )
-------- 设置技能比较用数值 --------
For循环整数A从 1 到 17, 做动作
Loop - 动作
设置 Ability_Ns[(循环整数A)] = DD_a
设置 DD_a = (DD_a x 2)
[/trigger]
演示要点:很明显,这个是初始化技能以及设定和技能伤害相同的作来做计算的数值变量。[trigger]Acquires item
事件
单位 - 任意单位 获得物品
条件
((被操作物品) 的类型) 等于 随机属性武器
((被操作物品) 的自定义值) 大于 0
动作
设置 Item_s = (Item_s + ((被操作物品) 的自定义值))
设置 Hero_s = Item_s
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示 60.00 秒的文本信息: (转换 Hero_s 为字符串)
For循环整数A从 1 到 17, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
Hero_s 大于或等于 Ability_Ns[(18 - (循环整数A))]
(Hero_s mod Ability_Ns[(18 - (循环整数A))]) 大于或等于 0
Then - 动作
设置 Hero_s = (Hero_s - Ability_Ns[(18 - (循环整数A))])
单位 - 添加 Ability[(18 - (循环整数A))] 给 (触发单位)
Else - 动作
单位 - 删除 Ability[(18 - (循环整数A))] 从 (触发单位)
[/trigger]
[trigger]Loses item
事件
单位 - 任意单位 丢弃物品
条件
((被操作物品) 的类型) 等于 随机属性武器
((被操作物品) 的自定义值) 大于 0
动作
设置 Item_s = (Item_s - ((被操作物品) 的自定义值))
设置 Hero_s = Item_s
游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示 60.00 秒的文本信息: (转换 Hero_s 为字符串)
For循环整数A从 1 到 17, 做动作
Loop - 动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
Hero_s 大于或等于 Ability_Ns[(18 - (循环整数A))]
(Hero_s mod Ability_Ns[(18 - (循环整数A))]) 大于或等于 0
Then - 动作
设置 Hero_s = (Hero_s - Ability_Ns[(18 - (循环整数A))])
单位 - 添加 Ability[(18 - (循环整数A))] 给 (触发单位)
Else - 动作
单位 - 删除 Ability[(18 - (循环整数A))] 从 (触发单位)
[/trigger] 演示要点:其实很简单,利用变量保存该英雄身上物品的总值,物品获得和丢弃都只是对变量进行操作(因为无法用判断来捕获得到物品和丢弃物品,所以尽管两个触发差别不大,但也只能这样做)。然后就像我前面说的开关一样,在MOD对变量进行取余为正数的情况下,执行添加技能,为负数就删除技能,从而实现正确的开关数列,就像是一个二进制,1和0的组合。同时,利用物品自定义来读取物品可以增加的伤害属性。[trigger]OOXX XXOO
事件
单位 - 中立敌对 的单位 死亡
条件
动作
物品 - 创建 随机属性武器 在 ((触发单位) 的位置)
物品 - 设置 (最后创建的物品) 的自定义值为 (随机整数,最小值: 1 最大值: 20000)
等待 10.00 秒
单位 - 创建 1 个 (一个等级 2 的随机中立生物类型) 给 中立敌对 在 ((触发单位) 的位置) ,面向角度为 默认建筑朝向 度
[/trigger] 演示要点:这就是最后的半个~其作用只不过是为了刷新掉落物品用的小怪而已……物品随机伤害在1-20000之间。
[trigger]- A L item
- 事件
- 单位 - 任意单位 获得物品
- 单位 - 任意单位 丢弃物品
- 条件
- ((被操作物品) 的类型) 等于 随机属性武器
- ((被操作物品) 的自定义值) 大于 0
- 动作
- 自定义代码: set udg_isPick = GetTriggerEventId() == EVENT_PLAYER_UNIT_PICKUP_ITEM
- 如果所有条件成立则做动作1,否则做动作2
- If - 条件
- isPick 等于 TRUE
- Then - 动作
- 设置 Item_s = (Item_s + ((被操作物品) 的自定义值))
- Else - 动作
- 设置 Item_s = (Item_s - ((被操作物品) 的自定义值))
- 设置 Hero_s = Item_s
- 游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示 60.00 秒的文本信息: (转换 Hero_s 为字符串)
- For循环整数A从 1 到 17, 做动作
- Loop - 动作
- 如果所有条件成立则做动作1,否则做动作2
- If - 条件
- Hero_s 大于或等于 Ability_Ns[(18 - (循环整数A))]
- (Hero_s mod Ability_Ns[(18 - (循环整数A))]) 大于或等于 0
- Then - 动作
- 设置 Hero_s = (Hero_s - Ability_Ns[(18 - (循环整数A))])
- 单位 - 添加 Ability[(18 - (循环整数A))] 给 (触发单位)
- Else - 动作
- 单位 - 删除 Ability[(18 - (循环整数A))] 从 (触发单位)
复制代码 [/trigger]
演示要点:对获取和丢弃物品的两个触发进行合并,用了自定义代码。 |
|