找回密码
 点一下
查看: 6605|回复: 15

CItem物品系统详解

[复制链接]
发表于 2010-4-12 20:14:14 | 显示全部楼层 |阅读模式
这次用例子来说明好了


注意如果你要在地图上放置物品,你需要指定一个单位,然后指定它的Item属性,指向ItemData.xml里的一个模板。然后把这个单位放到地图上去。


其实在SC2里物品就是单位。ItemData.xml里定义的只是该物品被拾取到物品栏里之后的表现而已。


拾取后立刻使用的物品


这类物品其实和本帖无关,所以我另外写了个帖子来说明:
http://bbs.islga.org/read-htm-tid-39729.html


被动效果物品



[codes=xml]
    <CItem id="testItem">
        <Face value="CalldownMULE"/>
        <Flags index="CanDrop" value="1"/>
        <Class value="testClass"/>
        <Container value="TestCont"/>
        <Level value="10"/>
        <CarryBehaviorArray value="PermanentlyCloaked"/>
        <CarryWeaponArray Link="BattlecruiserG"/>
        <EquipBehaviorArray value="PermanentlyInvulnerable"/>
        <EquipWeaponArray Link="BattlecruiserA"/>
    </CItem>
[/codes]

Face
物品的图标,你需要指定的是ButtonData.xml里的某个按钮。

Flags
物品的一些标记,除了这里举例的以外还有

"CanDrop" - 是否可以丢弃
"DropOnDeath" - 是否死后掉落
"KillWhenDepleted" - 是否在使用次数耗尽时消灭。当然被动物品没有使用次数,主动使用的物品才有。

Class
物品分类,在ItemClassData.xml中定义。

Container
物品包裹,在ItemContainerData.xml中定义。可以不填。

Level
物品等级。

CarryBehaviorArray
拾取后附加的行为,注意只要拾取就会附加,不论该物品所在的格子是否Equip="1"
比如在本例中,就是附加PermanentlyCloaked行为。永久隐身。
在物品丢弃后行为会被自动移除。
注意它是个属性数组。所以你可以附加多个行为。

CarryWeaponArray
拾取后替换武器。其余同上。
本例中将武器替换为BattlecruiserG.

EquipBehaviorArray
装备后附加的行为,注意这些行为只有当物品所在格Equip="1"时才会出现。
另外,当你装备物品时CarryBehaviorArray属性所附加的那些行为同样也会出现。
其余同上。
本例中附加永久无敌的buff。

EquipWeaponArray
装备后替换的武器。
另外,当你装备物品时CarryWeaponArray和EquipWeaponArray所指定的武器会被同时附加。不过英雄面板默认只显示一个武器,但其余武器依然还是存在的。
其余同上。


附图:

拾取时

Screenshot271.Jpg

装备时

Screenshot272.Jpg



主动使用的点目标效果物品



[codes=xml]
    <CItemEffectTarget id="CalldownMULE">
        <Face value="CalldownMULE"/>
        <Flags index="CanDrop" value="1"/>
        <Class value="testClass"/>
        <Container value="TestCont"/>
        <Level value="10"/>
        <CarryBehaviorArray value="PermanentlyCloaked"/>
        <CarryWeaponArray Link="BattlecruiserG"/>
        <EquipBehaviorArray value="PermanentlyInvulnerable"/>
        <EquipWeaponArray Link="BattlecruiserA"/>
        <!-- 以上属性继承自CItem -->

        <Effect value="CalldownMULECreateUnit"/>
        <EffectCost>
            <Vital index="Energy" value="100"/>
        </EffectCost>
        <EffectFlags index="Transient" value="0"/>
        <RefundFraction>
                    <Resource index="Minerals" value="-1"/>
                    <Resource index="Vespene" value="-1"/>
                    <Resource index="Terrazine" value="-1"/>
                    <Resource index="Custom" value="-1"/>
                    <Charge value="-1"/>
                    <Cooldown value="-1"/>
        </RefundFraction>
        <Range value="500"/>
        <!-- 以上属性继承自CItemEffect -->
    </CItemEffectTarget>
[/codes]

由于CItemEffectTarget类的祖先是CItem,因此之前部分属性不多说了。

以下部分属性继承自CItemEffect

Effect
使用效果,指定EffectData.xml里的一个效果。


EffectCost
效果花费,可以是资源也可以是能量、生命值等等。你也可以用Charge来指定使用次数。


EffectFlags
物品效果标记,可用的只有Transient


RefundFraction
效果回收\取消时返还的资源比率。比如你Shift了一个物品建造效果,又取消了,钱当然得退给你了是吧?


Range
施法范围。


以下附图:

z.jpg


魔法不够的时候,物品会以蓝色表示

z1.jpg

使用效果,召唤电骡。

z2.jpg

z3.jpg


主动使用的无目标物品


基础类换成CItemEffectInstant 所有属性和CItemEffectTarget完全相同

[codes=xml]
    <CItemEffectInstant id="CalldownMULE">
        <Face value="Zealot"/>
        <Flags index="CanDrop" value="1"/>
        <Class value="testClass"/>
        <Container value="TestCont"/>
        <Level value="10"/>
        <CarryBehaviorArray value="PermanentlyCloaked"/>
        <CarryWeaponArray Link="BattlecruiserG"/>
        <EquipBehaviorArray value="PermanentlyInvulnerable"/>
        <EquipWeaponArray Link="BattlecruiserA"/>
        <!-- 以上属性继承自CItem -->

        <Effect value="HallucinationCreateZealot"/>
        <EffectCost>
            <Vital index="Energy" value="100"/>
        </EffectCost>
        <EffectFlags index="Transient" value="0"/>
        <RefundFraction>
                    <Resource index="Minerals" value="-1"/>
                    <Resource index="Vespene" value="-1"/>
                    <Resource index="Terrazine" value="-1"/>
                    <Resource index="Custom" value="-1"/>
                    <Charge value="-1"/>
                    <Cooldown value="-1"/>
        </RefundFraction>
        <Range value="500"/>
        <!-- 以上属性继承自CItemEffect -->
    </CItemEffectInstant>
[/codes]

所有属性和CItemEffectTarget完全相同,就不重复介绍了。

效果是召唤出两个Zealot幻象。

z4.jpg

2楼更新CItem的类继承结构。
发表于 2010-4-12 20:16:32 | 显示全部楼层
yes..沙发
回复

使用道具 举报

 楼主| 发表于 2010-4-12 20:17:29 | 显示全部楼层
你插楼了,我还要更新CItem继承关系呢 。

写这里好了


蓝色标注的为抽象类。

可见CItem本身不是一个抽象类,但是它的子类CItemEffect却是一个抽象类。

由此我们可知。抽象类的父类不一定都是抽象类。

CItem
        CItemEffect
                CItemEffectInstant
                CItemEffectTarget
回复

使用道具 举报

发表于 2010-4-12 20:19:35 | 显示全部楼层
-,-!!!!!
回复

使用道具 举报

发表于 2010-4-12 20:29:12 | 显示全部楼层
引用第2楼Renee于2010-04-12 20:17发表的  :
你插楼了,我还要更新CItem继承关系呢 。
笑...^_^
回复

使用道具 举报

发表于 2010-4-12 20:48:05 | 显示全部楼层
膜拜
回复

使用道具 举报

发表于 2010-4-12 21:13:35 | 显示全部楼层
头目威武~ 学习了
回复

使用道具 举报

发表于 2010-4-12 22:23:02 | 显示全部楼层
物品能不能放在地上?? 物品放在地上是什么样的呢? ^^
回复

使用道具 举报

 楼主| 发表于 2010-4-12 22:24:57 | 显示全部楼层
物品就是个单位,所以放在地上就是单位原本的样子。
回复

使用道具 举报

发表于 2010-4-12 22:29:54 | 显示全部楼层
...还真能简单的将单位装进物品栏Orz...

投射物、物品、可破坏物都是单位么……
回复

使用道具 举报

 楼主| 发表于 2010-4-12 22:32:50 | 显示全部楼层
都是。
回复

使用道具 举报

发表于 2010-4-12 22:36:37 | 显示全部楼层
估计暴雪是这么想的:为什么我不能把我的宠物猫放进我的口袋呢?
回复

使用道具 举报

发表于 2010-4-12 22:39:40 | 显示全部楼层
用SC2做口袋妖怪的游戏应该很合适 。嗯。。。。
回复

使用道具 举报

发表于 2010-4-13 09:24:12 | 显示全部楼层
不错不错就等编辑器了[s:199][s:199]
回复

使用道具 举报

发表于 2010-4-13 09:28:56 | 显示全部楼层
全部单位么 太方便了
回复

使用道具 举报

发表于 2010-4-13 09:39:24 | 显示全部楼层
同上。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 14:34 , Processed in 0.139219 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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