找回密码
 点一下
查看: 1261|回复: 7

坑爹的数组,搞了我一个通宵

[复制链接]
发表于 2011-12-23 19:44:13 | 显示全部楼层 |阅读模式
刚刚做好的攻击捕捉系统,准备移植到我的地图中,移植完了却发现地图初始化的动作全部失效
删除所有移植的触发都木有用,搞得我要用备份地图来还原
本来以为是移植的触发有问题,但是同样的触发,移植到其他地图完全没有问题。于是我又重新在我的地图写了一次这个系统(没有使用粘帖),发现依然不行。今天下午又重新写一遍,神奇的发现可以了 ,检查之后发现我少填了一个计时器数组的大小(【100】)。重新填上100的大小后初始化再次失效。
我的地图使用的变量很多,到目前为止有212个,其中计时器单个/数组共27个。
我想知道数组总共大小(不是单个)有没有限制?是否超出限制后会使得初始化的动作失效?
如果没有限制,那么使初始化的动作失效的原因又是什么?
发表于 2011-12-23 19:48:00 | 显示全部楼层
贴触发,和变量数组没什么关系的
回复

使用道具 举报

 楼主| 发表于 2011-12-23 20:01:01 | 显示全部楼层
攻击捕捉部分触发:
[trigger]初始化设置_数据绑定
    事件
        地图初始化
    条件
    动作
        设置 Attack_I[0] = 1
        循环动作[循环整数A]从 1 到 100, 运行 (Loop - 动作)
            Loop - 动作
                触发器 - 为 攻击捕捉 004_Attack_Damaged <预设> 添加事件: (时间 - Attack_timer[循环整数A [R]] 到期)
[/trigger]
[trigger]攻击捕捉 001_Attack_Damaged
    事件
        单位 - 任意单位 被攻击
    条件
        ((攻击单位) 是 英雄) 等于 TRUE
    动作
        设置 Attack_Unit[Attack_I[0]] = (攻击单位)
        设置 Damaged_Unit[Attack_I[0]] = (触发单位)
        计时器 - 启动 Attack_timer[Attack_I[0]],应用计时方式: 一次性,计时周期为 0.80 秒
        设置 Attack_I[0] = (Attack_I[0] + 1)
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                Attack_I[0] 大于或等于 100
            Then - 动作
                设置 Attack_I[0] = 1
            Else - 动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                ((攻击单位) 拥有 魔血项链(|cff00ff00开启|r)) 等于 TRUE
            Then - 动作
                玩家 - 设置 ((触发单位) 的所有者) 的 闪避 (中立敌对 100%) 为 禁用
            Else - 动作
[/trigger]
[trigger]攻击捕捉 003_Attack_Damaged
    事件
        事件<YDWE> -  任意单位 接受伤害
    条件
        (单位所受伤害) 大于 0.00
        ((伤害来源) 是 英雄) 等于 TRUE
    动作
        循环动作[Attack_I[1]]从 1 到 100, 运行 (Loop - 动作)
            Loop - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        (伤害来源) 等于 Attack_Unit[Attack_I[1]]
                        (触发单位) 等于 Damaged_Unit[Attack_I[1]]
                    Then - 动作
                        游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 攻击伤害
                        设置 Attack_Unit[Attack_I[1]] = 没有单位
                        设置 Damaged_Unit[Attack_I[1]] = 没有单位
                        计时器 - 暂停 Attack_timer[Attack_I[1]]
                        玩家 - 设置 ((触发单位) 的所有者) 的 闪避 (中立敌对 100%) 为 允许
                        跳过剩余动作
                    Else - 动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                (触发单位) 不等于 (伤害来源)
            Then - 动作
                游戏 - 对 玩家1(红色) 在屏幕位移(0.00,0.00)处显示文本: 技能伤害!
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((伤害来源) 拥有 卡波拉水晶之塔) 等于 TRUE
                        (单位所受伤害) 大于或等于 50.00
                        ((触发单位) 在 SJ_B_Unit_G[1] 中) 等于 FALSE
                        ((触发单位) 在 SJ_B_Unit_G[2] 中) 等于 FALSE
                    Then - 动作
                        触发器 - 关闭 (当前触发)
                        单位 - 命令 (伤害来源) 对 (触发单位) 造成 175.00 点伤害(不是 攻击伤害, 不是远程攻击) 攻击类型: 法术 伤害类型: 魔法 武器类型: 无
                        特殊效果 - 删除 (新建特效 Abilities\\Spells\\Undead\\OrbOfDeath\\OrbOfDeathMissile.mdl 并绑定到 (触发单位) 的 overhead 附加点上)
                        漂浮文字 - 创建漂浮文字: (转换 175 为字符串) 在 (触发单位)的头顶, Z轴偏移 0.00,字体大小: 10.00 ,颜色值:(0.00%, 100.00%, 0.00%) ,透明度: 25.00%
                        漂浮文字 - 设置 最后创建的漂浮文字 <New> 的移动速率为 64.00 ,方向为 90.00 度
                        漂浮文字 - 设置 最后创建的漂浮文字 <New> : 禁用 永久显示.
                        漂浮文字 - 设置 (最后创建的漂浮文字) 的显示时间为 2.00 秒
                        漂浮文字 - 设置 最后创建的漂浮文字 <New> 的消逝时间点为 2.00 秒
                        单位组 - 为 SJ_B_Unit_G[1] 添加 (触发单位)
                        触发器 - 开启 (当前触发)
                    Else - 动作
            Else - 动作
[/trigger]
[trigger]攻击捕捉 004_Attack_Damaged
    事件
    条件
    动作
        循环动作[Attack_I[1]]从 1 到 100, 运行 (Loop - 动作)
            Loop - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        (到期的计时器) 等于 Attack_timer[Attack_I[1]]
                    Then - 动作
                        玩家 - 设置 (Damaged_Unit[Attack_I[1]] 的所有者) 的 闪避 (中立敌对 100%) 为 允许
                        设置 Attack_Unit[Attack_I[1]] = 没有单位
                        设置 Damaged_Unit[Attack_I[1]] = 没有单位
                        跳过剩余动作
                    Else - 动作
[/trigger]
回复

使用道具 举报

 楼主| 发表于 2011-12-23 20:06:05 | 显示全部楼层
好吧,虽然我觉得是没有关系的,有人鸟总比没有鸟要好
以上为攻击捕捉部分,添加后初始化无效,以下为初始化动作
回复

使用道具 举报

 楼主| 发表于 2011-12-23 20:09:25 | 显示全部楼层
初始化动作:
[trigger]Melee Initialization
    事件
        地图初始化
    条件
    动作
        循环动作[循环整数A]从 1 到 5, 运行 (Loop - 动作)
            Loop - 动作
                镜头 - 平移 (玩家 循环整数A [R]) 的镜头到 (JusticeArea <预设> 的中心点),持续 0.00 秒
                可见度 - 创建一个状态为 允许 的可见度修正器给 (玩家 循环整数A [R]) ,设置 可见 在 JusticeArea <预设>
                可见度 - 创建一个状态为 允许 的可见度修正器给 (玩家 循环整数A [R]) ,设置 可见 在 EvilArea <预设>
        循环动作[循环整数B]从 7 到 11, 运行 (Loop - 动作)
            Loop - 动作
                镜头 - 平移 (玩家 循环整数B [R]) 的镜头到 (EvilArea <预设> 的中心点),持续 0.00 秒
                可见度 - 创建一个状态为 允许 的可见度修正器给 (玩家 循环整数B [R]) ,设置 可见 在 JusticeArea <预设>
                可见度 - 创建一个状态为 允许 的可见度修正器给 (玩家 循环整数B [R]) ,设置 可见 在 EvilArea <预设>
        对战游戏 - 使用对战昼夜设置
        循环动作[循环整数A]从 1 到 12, 运行 (Loop - 动作)
            Loop - 动作
                玩家 - 设置 (玩家 循环整数A [R]) 的 现有黄金 为 750
                玩家 - 设置 (玩家 循环整数A [R]) 的 现有木材 为 0
                玩家 - 设置 给予奖励 打开 对 (玩家 循环整数A [R])
        单位 - 隐藏 张辽(魂) (邪恶的) 0455 <预设>
        单位 - 隐藏 能量圈 0454 <预设>
        单位 - 隐藏 兔仔 0280 <预设>
        单位 - 隐藏 能量圈 0279 <预设>
        设置 YXchushengdian[1] = (home 01 <预设> 的中心点)
        单位 - 创建 1 个 快乐小绵羊 给 玩家6(橙色) 在 YXchushengdian[1] ,面向角度为 默认建筑朝向 度
        单位 - 设置 120.00 秒 治疗守卫 类型的生命周期对 (最后创建的单位)
        设置 YXchushengdian[2] = (home 02 <预设> 的中心点)
        单位 - 创建 1 个 愤怒小黑猪 给 玩家12(棕色) 在 YXchushengdian[2] ,面向角度为 默认建筑朝向 度
        单位 - 设置 100.00 秒 治疗守卫 类型的生命周期对 (最后创建的单位)
        游戏 - 设置 锁定资源交易 为 打开
        循环动作[循环整数A]从 1 到 5, 运行 (Loop - 动作)
            Loop - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((玩家 循环整数A [R]) 的游戏状态) 不等于 正在游戏
                    Then - 动作
                        不做任何动作
                    Else - 动作
                        设置 WJS[1] = (WJS[1] + 1)
        循环动作[循环整数A]从 7 到 11, 运行 (Loop - 动作)
            Loop - 动作
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        ((玩家 循环整数A [R]) 的游戏状态) 不等于 正在游戏
                    Then - 动作
                        不做任何动作
                    Else - 动作
                        设置 WJS[2] = (WJS[2] + 1)
[/trigger]
回复

使用道具 举报

发表于 2011-12-23 22:26:43 | 显示全部楼层
LZ将攻击捕捉的第一个T事件改为游戏开始0秒试试~
额。。之前没仔细看顶楼。。
数组上限8192,如果超过了使触发器初始化失效(不单是初始化为事件的触发)


不过不是超过一点就立马失效,地图本身自带各种初始化函数,也有个运行极限
可以参考下此帖地下室和地板:
http://bbs.islga.org/read-htm-tid-707185.html
回复

使用道具 举报

发表于 2011-12-23 22:53:41 | 显示全部楼层
刚测试了一下,只有一个显示地图上一个步兵名字的T,两个计时器变量的情况下
计时器数组分别为8192(8193个)和8157(8158个),再加上一个触发器变量,一共16352个变量然后触发器失效了,如果减少一个计时器变量那么触发器仍可照常运行

但是这个不能作为极限来考虑……LZ还是参考上面那个链接里夜星的回复吧~
回复

使用道具 举报

 楼主| 发表于 2011-12-24 00:56:33 | 显示全部楼层
已经测试过了,创建两个大小8192的数组就会停止地图真正初始化的动作
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 04:30 , Processed in 0.396931 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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