[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Quote (AlexBond)
Вопрос не по теме, но все же, Герыч как думаешь эту библиотеку можно форварднуть?

Форварднуть - это что?


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Потому что по-другому игры с таким количеством багов не пишутся) Да и многие программисты любят пиво) + про Team17 ходят такие слухи)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Короче долго мучался и сделал это.
В чём идея и зачем это надо?
Откройте файл PartTwk.xml - он огромен и ужасен. Вот сидел я перед ним и мне пришла идея - придумать свой формат вместо PartTwk.xml и описывать в нём только изменение файла. Вот, поглядите:
Code
<?xml version="1.0" encoding="UTF-8"?>
<EffectLibrary using="PartTwk">
     <ComplexEffect id="WXP_Atomic">
         <Effect>WXP_Atomic_Ring1</Effect>
         <Effect>WXP_Atomic_Ring2</Effect>
         <Effect>WXP_Atomic_Ring3</Effect>
         <Effect>WXP_Atomic_Ring4</Effect>
         <Effect>WXP_Atomic_Ring5</Effect>
         <Effect>WXP_Atomic_Ring6</Effect>
         <Effect>WXP_Atomic_Ring7</Effect>
         <Effect>WXP_Atomic_Ring8</Effect>
         <Effect>WXP_Atomic_Ring9</Effect>
         <Effect>WXP_Atomic_Ring10</Effect>
         <Effect>WXP_Atomic_Ring11</Effect>
         <Effect>WXP_Atomic_Ring12</Effect>
     </ComplexEffect>
     <Effect id="WXP_Atomic_Ring1" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='50' y='0' z='50' />
         <EmitterOriginOffset x='0' y='0' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring2" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='40' y='0' z='40' />
         <EmitterOriginOffset x='0' y='10' z='0' />
         <ParticleColor r='0' g='0' b='1' />
     </Effect>
     <Effect id="WXP_Atomic_Ring3" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='30' y='0' z='30' />
         <EmitterOriginOffset x='0' y='20' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring4" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='20' y='0' z='20' />
         <EmitterOriginOffset x='0' y='30' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring5" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='10' y='0' z='10' />
         <EmitterOriginOffset x='0' y='40' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring6" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='20' y='0' z='20' />
         <EmitterOriginOffset x='0' y='50' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring7" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='30' y='0' z='30' />
         <EmitterOriginOffset x='0' y='60' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring8" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='40' y='0' z='40' />
         <EmitterOriginOffset x='0' y='70' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring9" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='50' y='0' z='50' />
         <EmitterOriginOffset x='0' y='80' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring10" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='60' y='0' z='60' />
         <EmitterOriginOffset x='0' y='90' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring11" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='70' y='0' z='70' />
         <EmitterOriginOffset x='0' y='100' z='0' />
     </Effect>
     <Effect id="WXP_Atomic_Ring12" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='80' y='0' z='80' />
         <EmitterOriginOffset x='0' y='110' z='0' />
         <ParticleColor r='1' g='0' b='0' />
     </Effect>
     <EffectBase id="WXP_Atomic_Base">
         <Comment></Comment>
         <EmitterType>0</EmitterType>
         <SpriteSet>Particle.WXSprite4</SpriteSet>
         <MeshAnimNodeName></MeshAnimNodeName>
         <EmitterAcceleration x='0' y='0' z='0' />
         <EmitterAccelerationRandomise x='0' y='0' z='0' />
         <EmitterIsAttachedToLand>false</EmitterIsAttachedToLand>
         <EmitterIsOfInterest>false</EmitterIsOfInterest>
         <EmitterIsLaunchedFromWeapon>false</EmitterIsLaunchedFromWeapon>
         <EmitterLifeTime>2000</EmitterLifeTime>
         <EmitterLifeTimeRandomise>0</EmitterLifeTimeRandomise>
         <EmitterMaxParticles>500</EmitterMaxParticles>
         <EmitterNumCollide>0</EmitterNumCollide>
         <EmitterNumSpawn>500</EmitterNumSpawn>
         <EmitterNumSpawnRadnomise>0</EmitterNumSpawnRadnomise>
         <EmitterOriginOffset x='0' y='9' z='0' />
         <EmitterOriginRandomise x='0' y='0' z='0' />
         <EmitterParticleExpireFX></EmitterParticleExpireFX>
         <EmitterParticleFX></EmitterParticleFX>
         <EmitterSameDirectionAsWorm>false</EmitterSameDirectionAsWorm>
         <EmitterSoundFX></EmitterSoundFX>
         <EmitterSoundFXVolume>1</EmitterSoundFXVolume>
         <EmitterSpawnFreq>80</EmitterSpawnFreq>
         <EmitterSpawnFreqRansomise>0</EmitterSpawnFreqRansomise>
         <EmitterSpawnSizeVelocity x='0' y='0' />
         <EmitterStartDelay>0</EmitterStartDelay>
         <EmitterVelocity x='0' y='0' z='0' />
         <EmitterVelocityRandomise x='0' y='0' z='0' />
         <ParticleAcceleration x='0' y='-1' z='0' />
         <ParticleAccelerationRandomise x='0' y='0' z='0' />
         <ParticleAlpha>1</ParticleAlpha>
         <ParticleAlphaFadeIn>0</ParticleAlphaFadeIn>
         <ParticleAlphaVelocity>0</ParticleAlphaVelocity>
         <ParticleAlphaVelocityDelay>4500</ParticleAlphaVelocityDelay>
         <ParticleAlternateAccelerationN>6500</ParticleAlternateAccelerationN>
         <ParticleAlternateAccelerationS>2e-006</ParticleAlternateAccelerationS>
         <ParticleAnimationFrame>0</ParticleAnimationFrame>
         <ParticleAnimationFrameRandomise>0</ParticleAnimationFrameRandomise>
         <ParticleAnimationSpeed>0</ParticleAnimationSpeed>
         <ParticleAnimationSpeedRandomize>0</ParticleAnimationSpeedRandomize>
         <ParticleAttractor x='0' y='0' z='0' />
         <ParticleAttractorRandomise x='0' y='0' z='0' />
         <ParticleAttractorIsActive>false</ParticleAttractorIsActive>
         <ParticleCanEnterWater>false</ParticleCanEnterWater>
         <ParticleCollisionFreq>0</ParticleCollisionFreq>
         <ParticleCollisionImmuneTime>0</ParticleCollisionImmuneTime>
         <ParticleCollisionMinAlpha>0</ParticleCollisionMinAlpha>
         <ParticleCollisonRadius>0</ParticleCollisonRadius>
         <ParticleCollisonRadiusOffset x='0' y='0' z='0' />
         <ParticleCollisonRadiusVelocity>0</ParticleCollisonRadiusVelocity>
         <ParticleCollisionShowDebug>false</ParticleCollisionShowDebug>
         <ParticleCollisionWormDamageMagnitude>0</ParticleCollisionWormDamageMagnitude>
         <ParticleCollisionWormImpulseMagnitude>0</ParticleCollisionWormImpulseMagnitude>
         <ParticleCollisionWormImpulseYMagnitude>0</ParticleCollisionWormImpulseYMagnitude>
         <ParticleCollisionWormPoisonMagnitude>0</ParticleCollisionWormPoisonMagnitude>
         <ParticleCollisionWormType>0</ParticleCollisionWormType>
         <ParticleColor r='0' g='0' b='0' />
         <ParticleExpireShake>true</ParticleExpireShake>
         <ParticleExpireShakeLength>1000</ParticleExpireShakeLength>
         <ParticleExpireShakeMagnitude>0</ParticleExpireShakeMagnitude>
         <ParticleIsAlternateAcceleration>true</ParticleIsAlternateAcceleration>
         <ParticleIsEffectedByWind>false</ParticleIsEffectedByWind>
         <ParticleIsSpiral>false</ParticleIsSpiral>
         <ParticleIsUnderWaterEffect>false</ParticleIsUnderWaterEffect>
         <ParticleLandCollideType>0</ParticleLandCollideType>
         <ParticleLife>20000</ParticleLife>
         <ParticleLifeRandomise>500</ParticleLifeRandomise>
         <ParticleMass>-0.5</ParticleMass>
         <ParticleNumColors>1</ParticleNumColors>
         <ParticleNumFrames>1</ParticleNumFrames>
         <ParticleOrientation x='0' y='0' z='0' />
         <ParticleOrientationRandomise x='0' y='0' z='0' />
         <ParticleOrientationVelocity x='0' y='0' z='0' />
         <ParticleOrientationVelocityRandomise x='0' y='0' z='8' />
         <ParticleSize x='8' y='8' />
         <ParticleSizeOriginIsCenterPoint>false</ParticleSizeOriginIsCenterPoint>
         <ParticleSizeRandomise>0</ParticleSizeRandomise>
         <ParticleSizeVelocity x='-0.2' y='-0.2' />
         <ParticleSizeVelocityRandomise x='-0.1' y='-0.1' />
         <ParticleSizeVelocityDelay>2750</ParticleSizeVelocityDelay>
         <ParticleSizeVelocityDelayRandomise>600</ParticleSizeVelocityDelayRandomise>
         <ParticleFinalSizeScale x='0' y='0' />
         <ParticleFinalSizeScaleRandomise>0</ParticleFinalSizeScaleRandomise>
         <ParticleSizeFadeIn>0</ParticleSizeFadeIn>
         <ParticleSizeFadeInRandomize>0</ParticleSizeFadeInRandomize>
         <ParticleSizeFadeInDelay>0</ParticleSizeFadeInDelay>
         <ParticleSizeFadeInDelayRandomize>0</ParticleSizeFadeInDelayRandomize>
         <ParticleRenderScene>0</ParticleRenderScene>
         <ParticleSpiralRadius>0</ParticleSpiralRadius>
         <ParticleSpiralRadiusRandomise>0</ParticleSpiralRadiusRandomise>
         <ParticleSpiralRadiusVelocity>0</ParticleSpiralRadiusVelocity>
         <ParticleSpiralRadiusVelocityRandomise>0</ParticleSpiralRadiusVelocityRandomise>
         <ParticleSpiralRadiusSizeVelocity>0</ParticleSpiralRadiusSizeVelocity>
         <ParticleVelocity x='0' y='0.02' z='0' />
         <ParticleVelocityRandomise x='12' y='0' z='12' />
         <ParticleVelocityIsNormalised>true</ParticleVelocityIsNormalised>
     </EffectBase>
</EffectLibrary>

Опишу формат:

Code
    <ComplexEffect id="WXP_Atomic">
          <Effect>WXP_Atomic_Ring1</Effect>
          <Effect>WXP_Atomic_Ring2</Effect>
          <Effect>WXP_Atomic_Ring3</Effect>
          <Effect>WXP_Atomic_Ring4</Effect>
          <Effect>WXP_Atomic_Ring5</Effect>
          <Effect>WXP_Atomic_Ring6</Effect>
          <Effect>WXP_Atomic_Ring7</Effect>
          <Effect>WXP_Atomic_Ring8</Effect>
          <Effect>WXP_Atomic_Ring9</Effect>
          <Effect>WXP_Atomic_Ring10</Effect>
          <Effect>WXP_Atomic_Ring11</Effect>
          <Effect>WXP_Atomic_Ring12</Effect>
      </ComplexEffect>

Будет заменено на:

Code
      <XContainerResourceDetails id="WXP_Atomic">
           <Value href="WXP_Atomic-0"/>
           <Name>WXP_Atomic</Name>
           <Flags>81</Flags>
        </XContainerResourceDetails>
        <EffectDetailsContainer id="WXP_Atomic-0">
           <EffectNames>WXP_Atomic_Ring1</EffectNames>
           <EffectNames>WXP_Atomic_Ring2</EffectNames>
           <EffectNames>WXP_Atomic_Ring3</EffectNames>
           <EffectNames>WXP_Atomic_Ring4</EffectNames>
           <EffectNames>WXP_Atomic_Ring5</EffectNames>
           <EffectNames>WXP_Atomic_Ring6</EffectNames>
           <EffectNames>WXP_Atomic_Ring7</EffectNames>
           <EffectNames>WXP_Atomic_Ring8</EffectNames>
           <EffectNames>WXP_Atomic_Ring9</EffectNames>
           <EffectNames>WXP_Atomic_Ring10</EffectNames>
           <EffectNames>WXP_Atomic_Ring11</EffectNames>
           <EffectNames>WXP_Atomic_Ring12</EffectNames>
        </EffectDetailsContainer>

Кроме того в XDataBank для этого контейнера будет дописана строчка

Code
         <ContainerResources href="WXP_Atomic"/>

Последний большой контейнер - копия эффекта из PartTwk.xml, то есть я взял содержимое ParticleEmitterContainer и поместил его в EffectBase. Это будет базой для всех новых контейнеров. Базу можно сразу поменять - никто не мешает(я вроде там время жизни частиц поменял)

Идём дальше:

Code
    <Effect id="WXP_Atomic_Ring2" base="WXP_Atomic_Base">
         <ParticleVelocityRandomise x='40' y='0' z='40' />
         <EmitterOriginOffset x='0' y='10' z='0' />
         <ParticleColor r='0' g='0' b='1' />
     </Effect>

Это превратится в ParticleEmitterContainer. Как это произойдёт? Программа смотрит в base="WXP_Atomic_Base" в контейнере Effect, ищет в файле контейнер EffectBase с id="WXP_Atomic_Base", и на его основе, заменяя тэги ParticleVelocityRandomise, EmitterOriginOffset и ParticleColor создаёт новый контейнер!

Таким образом на основе <Effect id="WXP_Atomic_Ring2" base="WXP_Atomic_Base"> и <EffectBase id="WXP_Atomic_Base"> мы получим это:

Code

       <XContainerResourceDetails id="WXP_Atomic_Ring2">
          <Value href="WXP_Atomic_Ring2-0"/>
          <Name>WXP_Atomic_Ring2</Name>
          <Flags>81</Flags>
       </XContainerResourceDetails>
       <ParticleEmitterContainer id="WXP_Atomic_Ring2-0">
          <Comment/>
          <EmitterType>0</EmitterType>
          <SpriteSet>Particle.WXSprite4</SpriteSet>
          <MeshAnimNodeName/>
          <EmitterAcceleration x="0" y="0" z="0"/>
          <EmitterAccelerationRandomise x="0" y="0" z="0"/>
          <EmitterIsAttachedToLand>false</EmitterIsAttachedToLand>
          <EmitterIsOfInterest>false</EmitterIsOfInterest>
          <EmitterIsLaunchedFromWeapon>false</EmitterIsLaunchedFromWeapon>
          <EmitterLifeTime>2000</EmitterLifeTime>
          <EmitterLifeTimeRandomise>0</EmitterLifeTimeRandomise>
          <EmitterMaxParticles>500</EmitterMaxParticles>
          <EmitterNumCollide>0</EmitterNumCollide>
          <EmitterNumSpawn>500</EmitterNumSpawn>
          <EmitterNumSpawnRadnomise>0</EmitterNumSpawnRadnomise>
          <EmitterOriginOffset x="0" y="10" z="0"/>
          <EmitterOriginRandomise x="0" y="0" z="0"/>
          <EmitterParticleExpireFX/>
          <EmitterParticleFX/>
          <EmitterSameDirectionAsWorm>false</EmitterSameDirectionAsWorm>
          <EmitterSoundFX/>
          <EmitterSoundFXVolume>1</EmitterSoundFXVolume>
          <EmitterSpawnFreq>80</EmitterSpawnFreq>
          <EmitterSpawnFreqRansomise>0</EmitterSpawnFreqRansomise>
          <EmitterSpawnSizeVelocity x="0" y="0"/>
          <EmitterStartDelay>0</EmitterStartDelay>
          <EmitterVelocity x="0" y="0" z="0"/>
          <EmitterVelocityRandomise x="0" y="0" z="0"/>
          <ParticleAcceleration x="0" y="-1" z="0"/>
          <ParticleAccelerationRandomise x="0" y="0" z="0"/>
          <ParticleAlpha>1</ParticleAlpha>
          <ParticleAlphaFadeIn>0</ParticleAlphaFadeIn>
          <ParticleAlphaVelocity>0</ParticleAlphaVelocity>
          <ParticleAlphaVelocityDelay>4500</ParticleAlphaVelocityDelay>
          <ParticleAlternateAccelerationN>6500</ParticleAlternateAccelerationN>
          <ParticleAlternateAccelerationS>2e-006</ParticleAlternateAccelerationS>
          <ParticleAnimationFrame>0</ParticleAnimationFrame>
          <ParticleAnimationFrameRandomise>0</ParticleAnimationFrameRandomise>
          <ParticleAnimationSpeed>0</ParticleAnimationSpeed>
          <ParticleAnimationSpeedRandomize>0</ParticleAnimationSpeedRandomize>
          <ParticleAttractor x="0" y="0" z="0"/>
          <ParticleAttractorRandomise x="0" y="0" z="0"/>
          <ParticleAttractorIsActive>false</ParticleAttractorIsActive>
          <ParticleCanEnterWater>false</ParticleCanEnterWater>
          <ParticleCollisionFreq>0</ParticleCollisionFreq>
          <ParticleCollisionImmuneTime>0</ParticleCollisionImmuneTime>
          <ParticleCollisionMinAlpha>0</ParticleCollisionMinAlpha>
          <ParticleCollisonRadius>0</ParticleCollisonRadius>
          <ParticleCollisonRadiusOffset x="0" y="0" z="0"/>
          <ParticleCollisonRadiusVelocity>0</ParticleCollisonRadiusVelocity>
          <ParticleCollisionShowDebug>false</ParticleCollisionShowDebug>
          <ParticleCollisionWormDamageMagnitude>0</ParticleCollisionWormDamageMagnitude>
          <ParticleCollisionWormImpulseMagnitude>0</ParticleCollisionWormImpulseMagnitude>
          <ParticleCollisionWormImpulseYMagnitude>0</ParticleCollisionWormImpulseYMagnitude>
          <ParticleCollisionWormPoisonMagnitude>0</ParticleCollisionWormPoisonMagnitude>
          <ParticleCollisionWormType>0</ParticleCollisionWormType>
          <ParticleColor r="0" g="0" b="1"/>
          <ParticleExpireShake>true</ParticleExpireShake>
          <ParticleExpireShakeLength>1000</ParticleExpireShakeLength>
          <ParticleExpireShakeMagnitude>0</ParticleExpireShakeMagnitude>
          <ParticleIsAlternateAcceleration>true</ParticleIsAlternateAcceleration>
          <ParticleIsEffectedByWind>false</ParticleIsEffectedByWind>
          <ParticleIsSpiral>false</ParticleIsSpiral>
          <ParticleIsUnderWaterEffect>false</ParticleIsUnderWaterEffect>
          <ParticleLandCollideType>0</ParticleLandCollideType>
          <ParticleLife>20000</ParticleLife>
          <ParticleLifeRandomise>500</ParticleLifeRandomise>
          <ParticleMass>-0.5</ParticleMass>
          <ParticleNumColors>1</ParticleNumColors>
          <ParticleNumFrames>1</ParticleNumFrames>
          <ParticleOrientation x="0" y="0" z="0"/>
          <ParticleOrientationRandomise x="0" y="0" z="0"/>
          <ParticleOrientationVelocity x="0" y="0" z="0"/>
          <ParticleOrientationVelocityRandomise x="0" y="0" z="8"/>
          <ParticleSize x="8" y="8"/>
          <ParticleSizeOriginIsCenterPoint>false</ParticleSizeOriginIsCenterPoint>
          <ParticleSizeRandomise>0</ParticleSizeRandomise>
          <ParticleSizeVelocity x="-0.2" y="-0.2"/>
          <ParticleSizeVelocityRandomise x="-0.1" y="-0.1"/>
          <ParticleSizeVelocityDelay>2750</ParticleSizeVelocityDelay>
          <ParticleSizeVelocityDelayRandomise>600</ParticleSizeVelocityDelayRandomise>
          <ParticleFinalSizeScale x="0" y="0"/>
          <ParticleFinalSizeScaleRandomise>0</ParticleFinalSizeScaleRandomise>
          <ParticleSizeFadeIn>0</ParticleSizeFadeIn>
          <ParticleSizeFadeInRandomize>0</ParticleSizeFadeInRandomize>
          <ParticleSizeFadeInDelay>0</ParticleSizeFadeInDelay>
          <ParticleSizeFadeInDelayRandomize>0</ParticleSizeFadeInDelayRandomize>
          <ParticleRenderScene>0</ParticleRenderScene>
          <ParticleSpiralRadius>0</ParticleSpiralRadius>
          <ParticleSpiralRadiusRandomise>0</ParticleSpiralRadiusRandomise>
          <ParticleSpiralRadiusVelocity>0</ParticleSpiralRadiusVelocity>
          <ParticleSpiralRadiusVelocityRandomise>0</ParticleSpiralRadiusVelocityRandomise>
          <ParticleSpiralRadiusSizeVelocity>0</ParticleSpiralRadiusSizeVelocity>
          <ParticleVelocity x="0" y="0.02" z="0"/>
          <ParticleVelocityRandomise x="40" y="0" z="40"/>
          <ParticleVelocityIsNormalised>true</ParticleVelocityIsNormalised>
       </ParticleEmitterContainer>

После всего этого в XDataBank дописываются ссылки на ресурсы:

Code

          <ContainerResources href="WXP_Atomic_Ring1"/>
          <ContainerResources href="WXP_Atomic_Ring2"/>
          <ContainerResources href="WXP_Atomic_Ring3"/>
          <ContainerResources href="WXP_Atomic_Ring4"/>
          <ContainerResources href="WXP_Atomic_Ring5"/>
          <ContainerResources href="WXP_Atomic_Ring6"/>
          <ContainerResources href="WXP_Atomic_Ring7"/>
          <ContainerResources href="WXP_Atomic_Ring8"/>
          <ContainerResources href="WXP_Atomic_Ring9"/>
          <ContainerResources href="WXP_Atomic_Ring10"/>
          <ContainerResources href="WXP_Atomic_Ring11"/>
          <ContainerResources href="WXP_Atomic_Ring12"/>

Что мы получили? С помощью коротенького файла сделали 12 колец от взрыва базуки, при этом у некоторых поменяли цвет, сделали смещение по вертикали, изменили радиус. И всё в этом мелком файле!

Всё делал с помощью <oXygen/> XML Editor. Все необходимые файлы прикреплены
Программа берёт файла WXP.xsl - это правило, по которому надо делать преобразование и два файла - base_PartTwk.xml(стандартный PartTwk-основа для нового файла) и wxpIn.xml(где описаны наши эффекты). На выходе получает WXP.xml, которым можно заменить PartTwk.xml в игре

Прикрепления: WXP.xsl (4.9 Kb) · base_PartTwk.xml (2.91 Mb) · wxpIn.xml (8.7 Kb) · WXP.xml (3.03 Mb)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Эх вы) Это кажется что я в сложню вещь превратил, просто теперь вместо того, чтобы ковыряться в длинном файле и делать море ошибок я смогу мигом описать нужный мне эффект.

Если вы xml не понимаете, то читайте эти 2 урока:
http://w4tweaks.ru/forum/12-9-1
http://w4tweaks.ru/forum/40-10-1

Честно скажу, то что написано там делать сложнее, чем написать мод моим способом!


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Hitman27, Ты видел прогу KillBurn'a. Идея та же. Только он писал для этого дела программу(наверно и с парсером мучался), я написал xsl документ, который может обработать любой XSL процессор(программа, которая на вход берёт xsl и xml файл, а на выходе выдаёт готовый к употреблению файл). Вот xsl процессоры http://allxml.h1.ru/articles/xslt-processors.html
А вот вроде этим я пользовался: http://saxon.sourceforge.net/

MarkWarT, я по-человечней инструкцию напишу в ближайшую из ночей)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Так и задумывается)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
В Local.xml есть много контейнеров, отвечающих за кнопки. Только где идёт привязка к действиям-неясно. А ещё неясно, есть ли вообще в Worms действие такое-выбор оружия.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Расширил идею. Всё вышло. Показываю предварительный пример:
Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="base_PartTwk.xml">
     <EffectDetailsContainer id='WXP_Atomic'>
         <EffectNames>WXP_Atomic_Ring1</EffectNames>
         <EffectNames>WXP_Atomic_Ring2</EffectNames>
         <EffectNames>WXP_Atomic_Ring3</EffectNames>
         <EffectNames>WXP_Atomic_Ring4</EffectNames>
         <EffectNames>WXP_Atomic_Ring5</EffectNames>
         <EffectNames>WXP_Atomic_Ring6</EffectNames>
         <EffectNames>WXP_Atomic_Ring7</EffectNames>
         <EffectNames>WXP_Atomic_Ring8</EffectNames>
         <EffectNames>WXP_Atomic_Ring9</EffectNames>
         <EffectNames>WXP_Atomic_Ring10</EffectNames>
         <EffectNames>WXP_Atomic_Ring11</EffectNames>
         <EffectNames>WXP_Atomic_Ring12</EffectNames>
     </EffectDetailsContainer>
     <ParticleEmitterContainer id='WXP_Atomic_base' base='WXP_ExplosionG_RingDark-0' include='no'>
         <Remove tag="ParticleColor" index='2' />
         <Remove tag="ParticleColorBand" index='2' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring1' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='1' y='0.1' z='1' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring2' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='2' y='0.1' z='2' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring3' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='3' y='0.1' z='3' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring4' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='4' y='0.1' z='4' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring5' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='5' y='0.1' z='5' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring6' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='6' y='0.1' z='6' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring7' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='7' y='0.1' z='7' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring8' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='8' y='0.1' z='8' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring9' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='9' y='0.1' z='9' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring10' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='10' y='0.1' z='10' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring11' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='11' y='0.1' z='11' />
     </ParticleEmitterContainer>
     <ParticleEmitterContainer id='WXP_Atomic_Ring12' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='12' y='0.1' z='12' />
     </ParticleEmitterContainer>
</Mod>

С помощью этого теперь можно описывать любые xml моды в считанные секунды.
Вся идея в том, чтобы взять за основу уже существующие файлы и вписать в них новые контейнеры, а некоторые удалить.
Мы можем сделать новый контейнер на базе существующего в файле, или на базе определённого нами контейнера.

Пробегусь по строчкам, комментируя, что делается::

Code
<Mod BaseFile="base_PartTwk.xml">
...
</Mod>

Тут написано, что наш мод основан на файле base_PartTwk.xml - копии PartTwk.xml.

Code

     <EffectDetailsContainer id='WXP_Atomic'>
         <EffectNames>WXP_Atomic_Ring1</EffectNames>
         <EffectNames>WXP_Atomic_Ring2</EffectNames>
         <EffectNames>WXP_Atomic_Ring3</EffectNames>
         <EffectNames>WXP_Atomic_Ring4</EffectNames>
         <EffectNames>WXP_Atomic_Ring5</EffectNames>
         <EffectNames>WXP_Atomic_Ring6</EffectNames>
         <EffectNames>WXP_Atomic_Ring7</EffectNames>
         <EffectNames>WXP_Atomic_Ring8</EffectNames>
         <EffectNames>WXP_Atomic_Ring9</EffectNames>
         <EffectNames>WXP_Atomic_Ring10</EffectNames>
         <EffectNames>WXP_Atomic_Ring11</EffectNames>
         <EffectNames>WXP_Atomic_Ring12</EffectNames>
     </EffectDetailsContainer>

Тут мы определяем самый обычный контейнер. Он будет добавлен в результирующий файл.
Code

     <ParticleEmitterContainer id='WXP_Atomic_base' base='WXP_ExplosionG_RingDark-0' include='no'>
         <Remove tag="ParticleColor" index='2' />
         <Remove tag="ParticleColorBand" index='2' />
     </ParticleEmitterContainer>

Тут я создаю контейнер который не будет включён в результирующий файл(include='no'), но будет использоваться в качестве основы другими контейнерами.
С помощью Remove я удаляю ненужные мне тэги ParticleColor и ParticleColorBand(то есть я убираю вторые тэги у WXP_ExplosionG_RingDark-0)
Code

     <ParticleEmitterContainer id='WXP_Atomic_Ring9' base='WXP_Atomic_base'>
         <ParticleVelocityRandomise x='9' y='0.1' z='9' />
     </ParticleEmitterContainer>

Ну а тут я создаю наконец новый контейнер на основе WXP_Atomic_base, заменяя ParticleVelocityRandomise на новое значение.

Из примера не очень ясно, но я добился следующего:
1) удаление любых тэгов по индексу, по диапазону, по имени и по номеру среди тэгов с данным индексом.
2) создание сколь угодно глубокой иерархии наследования контейнеров
3) Включение в контейнеры новых данных

Когда доделаю формат полностью и проверю работу всё покажу и расскажу на примерах. Сейчас можете просто порадоваться успехам)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Очень здорово. Как делал?

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Читаем правила и исправляем:
Quote
8) В названии темы и сообщениях запрещено:
а)Замена русских букв похожими английскими
б)Написание тем и сообщений ЗАГЛАВНЫМИ БУКВАМИ
в)написание сообщений прописными и строчными буквами вперемешку («вОТ тАкИм оБрАзОм») или буквами разных алфавитов («slеdующiм оbраzом»)
г) Запрещены неинформативные названия тем, например: «Памагите!», «У меня проблема!», «Крик души!» и т.п.
д) Запрещены названия тем перегруженные знаками препинания (более 5), например: «Как модить червей?????». Исключение составляет Флудилка.
е) Во всех разделах кроме Флудилки запрещается ответ содержащие только смайлики. Такие сообщения будут расценены как флуд.
ж) Сообщения с матами, тупизмом и тд- будут расцениваться как "токсичные отходы", а авторы данных сообщений наказываться.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
по-моему самый лучший вариант делать больше покселей в объекте. Этот баг вролде при больших размерах покселей вылезает.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Вы о чём? Разговариваете как будто на своём языке. Чё за идея? и 3ds модели уже давно можно вставлять в карты.

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
нет, но видел, что получается(гляди примеры Алексбонда)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Формат файла мода.

Файл мода - обычный xml файл. Корневой элемент - тэг Mod. Другими словами любой файл мода имеет следующий вид:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="имя базового xml файла">
     <!-- Тут содержимое -->
</Mod>

1. Тэг Mod имеет один обязательный атрибут BaseFile - относительный или абсолютный путь к базовому файлу.
Базовый файл - стандартный xml файл из игры. К примеру, C:/Program Files/Worms/data/Tweak/Local.xml
Пример:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="C:/Program Files/Worms/data/Tweak/Local.xml">
     <!-- Тут содержимое -->
</Mod>

В W4TweakGen для стандартных файлов выделена папка base, а для файлов модов samples,
поэтому, если в папке base лежит копия стандартного файла, а файл мода находится в samples,
то в атрибуте BaseFile можно написать относительный путь ../base/Local.xml
То есть это будет выглядеть так:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <!-- Тут содержимое -->
</Mod>

Внутри тэга Mod разрешены следующие тэги:
Remove
Int
Uint
Float
String
Color
Vector
Любой другой тэг.

1.1. Тэг Remove нужен для удаления из базового файла каких либо контейнеров.
Под удалением понимается удаление ссылки на контейнер в разделе XDataBank и самого контейнера из xomObjects.
Тэг Remove не имеет атрибутов.
Внутри тэга Remove пишется id контейнера, который надо удалить.
К примеру, чтобы удалить из базового файла Tweak.xml контейнер с id='Ninja.NumShoots'.

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Tweak.xml">
     <Remove>Ninja.NumShoots</Remove>
</Mod>


Можно указать любой id. Если это id контейнера XContainerResourceDetails, то удаляется и тот контейнер, на который ссылается XContainerResourceDetails.
К примеру, вот фрагмент файла Local.xml:
Code
...
<FlagDataContainer id='Flag.OldWorm-0'>
   <TextResource>FETXT.Flag.OldWorm</TextResource>
   <TargaName>Custom OldWorm</TargaName>
</FlagDataContainer>
<XContainerResourceDetails id='Flag.Pakistan'>
   <Value href='Flag.Pakistan-0'/>
   <Name>Flag.Pakistan</Name>
   <Flags>80</Flags>
</XContainerResourceDetails>
<FlagDataContainer id='Flag.Pakistan-0'>
   <TextResource>FETXT.Flag.Pakistan</TextResource>
   <TargaName>Pakistan</TargaName>
</FlagDataContainer>
<XContainerResourceDetails id='Flag.Poland'>
   <Value href='Flag.Poland-0'/>
   <Name>Flag.Poland</Name>
   <Flags>80</Flags>
</XContainerResourceDetails>
...

Если написать следующий мод:
Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <Remove>Flag.Pakistan</Remove>  
</Mod>

то будут удалены контейнеры <XContainerResourceDetails id='Flag.Pakistan'> и <FlagDataContainer id='Flag.Pakistan-0'>
Получим такой результат:
Code
...
<FlagDataContainer id='Flag.OldWorm-0'>
   <TextResource>FETXT.Flag.OldWorm</TextResource>
   <TargaName>Custom OldWorm</TargaName>
</FlagDataContainer>
<XContainerResourceDetails id='Flag.Poland'>
   <Value href='Flag.Poland-0'/>
   <Name>Flag.Poland</Name>
   <Flags>80</Flags>
</XContainerResourceDetails>
...

Если же написать
Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <Remove>Flag.Pakistan-0</Remove>  
</Mod>

то будет удалён только один контейнер <FlagDataContainer id='Flag.Pakistan-0'>Получим такой результат:
Code
...
<FlagDataContainer id='Flag.OldWorm-0'>
   <TextResource>FETXT.Flag.OldWorm</TextResource>
   <TargaName>Custom OldWorm</TargaName>
</FlagDataContainer>
<XContainerResourceDetails id='Flag.Pakistan'>
   <Value href='Flag.Pakistan-0'/>
   <Name>Flag.Pakistan</Name>
   <Flags>80</Flags>
</XContainerResourceDetails>
<XContainerResourceDetails id='Flag.Poland'>
   <Value href='Flag.Poland-0'/>
   <Name>Flag.Poland</Name>
   <Flags>80</Flags>
</XContainerResourceDetails>
...

Действие тэга Remove распространяется только на базовый файл! Если вы создаёте новый контейнер,
и пытаетесь его удалить, то ничего не выйдет.
1.2. Тэги Int,Uint,Float,String,Vector и Color
Предназначены для создания тех типов данных, которые не используют XContainerResourceDetails.
У каждого из этих тэгов имеется обязательный атрибут id. Он указывает, какой id должен иметь
созданный контейнер.

Внутри тэгов Int,Uint,Float и String просто пишется значение:

Code
<Int id="the.integer">-356</Int>  
<Uint id="unsigned.number">55</Uint>  
<Float id="some.float">0.3</Float>  
<String id="txtGerich">Герыч</String>

Vector и Color немного посложнее:

Code
<Vector id="pos">  
     <x>3</x>  
     <y>20</y>  
     <z>0</z>  
</Vector>

Code
<Color id="transparentred">  
     <r>255</r>  
     <g>0</g>  
     <b>0</b>  
     <a>128</a>  
</Color>

Внутренние тэги у тэгов Vector и Color необязательные, по умолчанию принимаются равными 0.

Пример. Такой мод:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
    <String id="txtGerich">Герыч</String>
</Mod>

Добавит в базовый файл Local.xml в раздел XDataBank следующую строчку:
Code
...
<StringResources href='txtGerich'/>
...

а в конце xomObjects
Code
...
<XStringResourceDetails id='txtGerich'>
     <Name>'txtGerich'</Name>
     <Value>Герыч</Value>
     <Flags>80</Flags>
</XStringResourceDetails>
...

Важная особенность: если при создании контейнера вы указываете id контейнера из базового файла,
то он будет заменён на ваш контейнер.
К примеру следующий мод просто изменит значение Jetpack.InitFuel с 7500 на 30000

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Tweak.xml">
     <Int id="Jetpack.InitFuel">30000</Int>
</Mod>

1.3. Остальные тэги.
Если написать любой другой тэг внутри тэга Mod, то он воспринимается как новый контейнер,
который надо добавить в базовый файл.
Обязательным атрибутом является id.

Пример:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <FlagDataContainer id='Flag.Gerich'>  
         <TextResource>txtGerich</TextResource>  
         <TargaName>Gerich</TargaName>  
     </FlagDataContainer>
</Mod>

Такой мод добавит в результате строчку в XDataBank:
Code
...
<ContainerResources href='Flag.Gerich'/>
...

и создаст 2 контейнера: сам FlagDataContainer и XContainerResourceDetails, ссылающийся на него.
В итоге получим:
Code
...
<XContainerResourceDetails id='Flag.Gerich'>  
     <Value href='Flag.Gerich-0'/>  
     <Name>Flag.Gerich</Name>  
     <Flags>80</Flags>  
</XContainerResourceDetails>  
<FlagDataContainer id='Flag.Gerich-0'>  
     <TextResource>txtGerich</TextResource>  
     <TargaName>Gerich</TargaName>  
</FlagDataContainer>
...

Иногда не надо добавлять ссылку в XDataBank и не надо делать XContainerResourceDetails.
Для этого надо предназначен атрибут header. Если он равен 'no', то не будет
генерироваться заголовок и XContainerResourceDetails:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <FlagDataContainer id='Flag.Gerich' header='no'>  
         <TextResource>txtGerich</TextResource>  
         <TargaName>Gerich</TargaName>  
     </FlagDataContainer>
</Mod>

В результате получим:
Code
...
<FlagDataContainer id='Flag.Gerich'>  
     <TextResource>txtGerich</TextResource>  
     <TargaName>Gerich</TargaName>  
</FlagDataContainer>
...

Для собственных тэгов действует то же правило, что и для Int, Uint и т.д:
если при создании контейнера вы указываете id контейнера из базового файла,
то он будет заменён на ваш контейнер.

Часто 2 однотипных контейнера отличаются одним-двумя тэгами.
Если каждый раз копировать содержимое тэга полностью можно устать, запутаться и ошибиться.
Для этого контейнеру можно задать атрибут base. Он указывает id того элемента, на основе которого будет
будет создан новый контейнер.
Пример:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <FlagDataContainer id='Flag.Gerich' base='Flag.RussianFederation'/>
</Mod>

Тут мы создаём новый контейнер - копию контейнера Flag.RussianFederation, но с другим id. При этом контейнер Flag.RussianFederation удалён/заменён или изменён не будет.

Теперь изменим полученную копию:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <FlagDataContainer id='Flag.Gerich' base='Flag.RussianFederation'>
         <TextResource>txtGerich</TextResource>
     </FlagDataContainer>
</Mod>

Этот код изменит копию, заменив значение тэга TextResource, то есть у этого флага будет та же картинка, но другое название.

Рассмотрим ещё несколько задач, решаемых с помощью W4TweakGen, на примере работы с контейнерами эффектов в файле PartTwk.xml.

Code
...
<XContainerResourceDetails id='WXP_MeshBang_HotCoreLarge'>
   <Value href='WXP_MeshBang_HotCoreLarge-0'/>
   <Name>WXP_MeshBang_HotCoreLarge</Name>
   <Flags>81</Flags>
</XContainerResourceDetails>
<ParticleEmitterContainer id='WXP_MeshBang_HotCoreLarge-0'>
   <Comment></Comment>
   <EmitterType>0</EmitterType>
   <SpriteSet>Particle.WXSprite3</SpriteSet>
   <MeshAnimNodeName></MeshAnimNodeName>
   <EmitterAcceleration x='0' y='0' z='0' />
   <EmitterAccelerationRandomise x='0' y='0' z='0' />
   <EmitterIsAttachedToLand>false</EmitterIsAttachedToLand>
   <EmitterIsOfInterest>false</EmitterIsOfInterest>
   <EmitterIsLaunchedFromWeapon>false</EmitterIsLaunchedFromWeapon>
   <EmitterLifeTime>1</EmitterLifeTime>
   <EmitterLifeTimeRandomise>0</EmitterLifeTimeRandomise>
   <EmitterMaxParticles>2</EmitterMaxParticles>
   <EmitterNumCollide>0</EmitterNumCollide>
   <EmitterNumSpawn>1</EmitterNumSpawn>
   <EmitterNumSpawnRadnomise>0</EmitterNumSpawnRadnomise>
   <EmitterOriginOffset x='0' y='0' z='0' />
   <EmitterOriginRandomise x='0' y='0' z='0' />
   <EmitterParticleExpireFX></EmitterParticleExpireFX>
   <EmitterParticleFX></EmitterParticleFX>
   <EmitterSameDirectionAsWorm>false</EmitterSameDirectionAsWorm>
   <EmitterSoundFX></EmitterSoundFX>
   <EmitterSoundFXVolume>1</EmitterSoundFXVolume>
   <EmitterSpawnFreq>10</EmitterSpawnFreq>
   <EmitterSpawnFreqRansomise>0</EmitterSpawnFreqRansomise>
   <EmitterSpawnSizeVelocity x='0' y='0' />
   <EmitterStartDelay>250</EmitterStartDelay>
   <EmitterVelocity x='0' y='0' z='0' />
   <EmitterVelocityRandomise x='0' y='0' z='0' />
   <ParticleAcceleration x='0' y='-1' z='0' />
   <ParticleAccelerationRandomise x='0' y='0' z='0' />
   <ParticleAlpha>1</ParticleAlpha>
   <ParticleAlphaFadeIn>5</ParticleAlphaFadeIn>
   <ParticleAlphaVelocity>-1</ParticleAlphaVelocity>
   <ParticleAlphaVelocityDelay>50</ParticleAlphaVelocityDelay>
   <ParticleAlternateAccelerationN>0</ParticleAlternateAccelerationN>
   <ParticleAlternateAccelerationS>0</ParticleAlternateAccelerationS>
   <ParticleAnimationFrame>0</ParticleAnimationFrame>
   <ParticleAnimationFrameRandomise>0</ParticleAnimationFrameRandomise>
   <ParticleAnimationSpeed>0</ParticleAnimationSpeed>
   <ParticleAnimationSpeedRandomize>0</ParticleAnimationSpeedRandomize>
   <ParticleAttractor x='0' y='0' z='0' />
   <ParticleAttractorRandomise x='0' y='0' z='0' />
   <ParticleAttractorIsActive>false</ParticleAttractorIsActive>
   <ParticleCanEnterWater>true</ParticleCanEnterWater>
   <ParticleCollisionFreq>0</ParticleCollisionFreq>
   <ParticleCollisionImmuneTime>0</ParticleCollisionImmuneTime>
   <ParticleCollisionMinAlpha>0</ParticleCollisionMinAlpha>
   <ParticleCollisonRadius>0</ParticleCollisonRadius>
   <ParticleCollisonRadiusOffset x='0' y='0' z='0' />
   <ParticleCollisonRadiusVelocity>0</ParticleCollisonRadiusVelocity>
   <ParticleCollisionShowDebug>false</ParticleCollisionShowDebug>
   <ParticleCollisionWormDamageMagnitude>0</ParticleCollisionWormDamageMagnitude>
   <ParticleCollisionWormImpulseMagnitude>0</ParticleCollisionWormImpulseMagnitude>
   <ParticleCollisionWormImpulseYMagnitude>0</ParticleCollisionWormImpulseYMagnitude>
   <ParticleCollisionWormPoisonMagnitude>0</ParticleCollisionWormPoisonMagnitude>
   <ParticleCollisionWormType>0</ParticleCollisionWormType>
   <ParticleColor r='1' g='1' b='1' />
   <ParticleColor r='1' g='0.8' b='0' />
   <ParticleColor r='1' g='0' b='0' />
   <ParticleColorBand>0</ParticleColorBand>
   <ParticleColorBand>0.2</ParticleColorBand>
   <ParticleColorBand>0.5</ParticleColorBand>
   <ParticleColorBand>1</ParticleColorBand>
   <ParticleExpireShake>false</ParticleExpireShake>
   <ParticleExpireShakeLength>0</ParticleExpireShakeLength>
   <ParticleExpireShakeMagnitude>0</ParticleExpireShakeMagnitude>
   <ParticleIsAlternateAcceleration>false</ParticleIsAlternateAcceleration>
   <ParticleIsEffectedByWind>false</ParticleIsEffectedByWind>
   <ParticleIsSpiral>false</ParticleIsSpiral>
   <ParticleIsUnderWaterEffect>false</ParticleIsUnderWaterEffect>
   <ParticleLandCollideType>1</ParticleLandCollideType>
   <ParticleLife>1600</ParticleLife>
   <ParticleLifeRandomise>800</ParticleLifeRandomise>
   <ParticleMass>0</ParticleMass>
   <ParticleNumColors>2</ParticleNumColors>
   <ParticleNumFrames>0</ParticleNumFrames>
   <ParticleOrientation x='0' y='0' z='0' />
   <ParticleOrientationRandomise x='0' y='0' z='0' />
   <ParticleOrientationVelocity x='0' y='0' z='0' />
   <ParticleOrientationVelocityRandomise x='0' y='0' z='5' />
   <ParticleSize x='65' y='65' />
   <ParticleSizeOriginIsCenterPoint>false</ParticleSizeOriginIsCenterPoint>
   <ParticleSizeRandomise>0</ParticleSizeRandomise>
   <ParticleSizeVelocity x='1' y='1' />
   <ParticleSizeVelocityRandomise x='0.4' y='0.4' />
   <ParticleSizeVelocityDelay>0</ParticleSizeVelocityDelay>
   <ParticleSizeVelocityDelayRandomise>0</ParticleSizeVelocityDelayRandomise>
   <ParticleFinalSizeScale x='0' y='0' />
   <ParticleFinalSizeScaleRandomise>0</ParticleFinalSizeScaleRandomise>
   <ParticleSizeFadeIn>0</ParticleSizeFadeIn>
   <ParticleSizeFadeInRandomize>0</ParticleSizeFadeInRandomize>
   <ParticleSizeFadeInDelay>0</ParticleSizeFadeInDelay>
   <ParticleSizeFadeInDelayRandomize>0</ParticleSizeFadeInDelayRandomize>
   <ParticleRenderScene>1</ParticleRenderScene>
   <ParticleSpiralRadius>0</ParticleSpiralRadius>
   <ParticleSpiralRadiusRandomise>0</ParticleSpiralRadiusRandomise>
   <ParticleSpiralRadiusVelocity>0</ParticleSpiralRadiusVelocity>
   <ParticleSpiralRadiusVelocityRandomise>0</ParticleSpiralRadiusVelocityRandomise>
   <ParticleSpiralRadiusSizeVelocity>0</ParticleSpiralRadiusSizeVelocity>
   <ParticleVelocity x='0' y='0' z='0' />
   <ParticleVelocityRandomise x='0.02' y='0' z='0.02' />
   <ParticleVelocityIsNormalised>false</ParticleVelocityIsNormalised>
</ParticleEmitterContainer>
...

Как видите контейнер ужасно большой и с ним очень неудобно возиться, поэтому, создавая свой эффект,
хочется не переписывать всё заново, а создать эффект на основе уже существуещего.
Если вы внимательно посмотрите содержимое контейнера, то заметите, что в нём повторяются имена тэгов:
Code
  <ParticleColor r='1' g='1' b='1' />
   <ParticleColor r='1' g='0.8' b='0' />
   <ParticleColor r='1' g='0' b='0' />

и
Code
  <ParticleColorBand>0</ParticleColorBand>
   <ParticleColorBand>0.2</ParticleColorBand>
   <ParticleColorBand>0.5</ParticleColorBand>
   <ParticleColorBand>1</ParticleColorBand>

Поэкспериментируем с этим контейнером.
За основу возьмём такой мод:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
     </ParticleEmitterContainer>
</Mod>

а затем будем его менять.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
1.3.1. Тэг Remove внутри контейнера созданного на базе другого.
С помощью тэга Remove можно удалять из базового контейнера какие либо элементы
Тэг Remove имеет атрибуты tag, index, from, to, которые в разном сочетании дают разные эффекты

Удаление 5-го по счёту элемента, т.е. <EmitterAcceleration x='0' y='0' z='0' />:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove index='5'/>
     </ParticleEmitterContainer>
</Mod>

Удаление 7-го,8-го,9-го,10-го,11-го по счёту элементов:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove from='7' to='11'/>
     </ParticleEmitterContainer>
</Mod>

Удаление всех элементов ParticleColor:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove tag='ParticleColor'/>
     </ParticleEmitterContainer>
</Mod>

Удаление 2-го элемента ParticleColor:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove tag='ParticleColor' index='2'/>
     </ParticleEmitterContainer>
</Mod>

Удаление 2-го, 3-го, 4-го элемента ParticleColorBand:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove tag='ParticleColorBand' from='2' to='4'/>
     </ParticleEmitterContainer>
</Mod>

В одном контейнере может быть несколько правил для удаления. Тут удаляются элементы ParticleColor и ParticleColorBand:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Remove tag='ParticleColor' from='2' to='3'/>
         <Remove tag='ParticleColorBand' from='2' to='4'/>
     </ParticleEmitterContainer>
</Mod>

1.3.2. Тэг Append внутри контейнера созданного на базе другого.
Тэг Append просто добавляет своё содержимое в конец базового контейнера.

Тут добавляются 2 совершенно произвольных тэга:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Append>
             <SomeTag>Новый тэг</SomeTag>
             <OtherTag>Другой новый тэг</OtherTag>
         </Append>
     </ParticleEmitterContainer>
</Mod>

1.3.3. Тэг Insert внутри контейнера созданного на базе другого.
Тэг Insert вставляет своё содержимое в заданную базового контейнера.
У тэга Insert есть обязательный атрибут index, который указывает в каком месте вставить содержимое,
и два необязательных before и after, в которых можно указать, перед или после какого элемента(по имени тэга) вставить содержимое.
Если задан before или after, то index определяет номер элемента, среди элементов с тем же именем тэга.
Если есть 2 тэга Insert с одинаковым значением index и без before или after, то они работают так, будто это один тэг Insert

Пример вставки. Вставляет новый элемент ParticleColor в 57-ую позицию(то есть перед первым элементом ParticleColor):

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Insert index='57'>
             <ParticleColor r='0.5' g='0.5' b='1' />
         </Insert>
     </ParticleEmitterContainer>
</Mod>

То же самое проще сделать так:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <Insert before='ParticleColor' index='1'>
             <ParticleColor r='0.5' g='0.5' b='1' />
         </Insert>
     </ParticleEmitterContainer>
</Mod>

Если указанный index больше размера контейнера, то Insert работает как Append

2. Всякие фишечки.
2.1. Замены всех элементов и замены по номеру.
Бывает необходимо заменить отдельный элемент среди элементов с одним именем тэга. К примеру, требуется
изменить 3-ий элемент ParticleColor.
Но следующий код изменяет сразу все элементы ParticleColor:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <ParticleColor r='0.5' g='0.5' b='1' />
     </ParticleEmitterContainer>
</Mod>

Для изменения только одного, можно указать атрибут index равный номеру элементу среди элементов с таким именем.
Таким образом следующий код меняет только нужный нам элемент.

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <ParticleColor index='3' r='0.5' g='0.5' b='1' />
     </ParticleEmitterContainer>
</Mod>

2.2. Атрибут base и include.
Атрибут base может указывать на любой индекс в базовом файле(на XContainerResourceDetails или на сам контейнер),
а также на контейнеры определённые в моде. Примеры:
1) в базовом файле, XContainerResourceDetails:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
     </ParticleEmitterContainer>
</Mod>

2) в базовом файле, сам контейнер:
Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge-0'>
     </ParticleEmitterContainer>
</Mod>

3) в файле мода:
Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <ParticleColor index='3' r='0.5' g='0.5' b='1' />
     </ParticleEmitterContainer>
      
     <ParticleEmitterContainer id='Very.New.Effect' base='New.Effect'>
         <ParticleVelocity x='0' y='10' z='0' />
     </ParticleEmitterContainer>
</Mod>

В последнем примере в результирующем файле получается 2 новых контенера, при этом второй основан на первом.
Иногда удобно делать один базовый контейнер для нескольких других контейнеров:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge'>
         <ParticleColor index='3' r='0.5' g='0.5' b='1' />
     </ParticleEmitterContainer>
      
     <ParticleEmitterContainer id='Very.New.Effect1' base='New.Effect'>
         <ParticleVelocity x='0' y='10' z='0' />
     </ParticleEmitterContainer>
      
     <ParticleEmitterContainer id='Very.New.Effect2' base='New.Effect'>
         <ParticleVelocity x='0' y='0' z='10' />
     </ParticleEmitterContainer>
</Mod>

Но иногда базовый контейнер не нужно включать в файл-результат. Для этого служит атрибут include:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/PartTwk.xml">
     <ParticleEmitterContainer id='New.Effect' base='WXP_MeshBang_HotCoreLarge' include='no'>
         <ParticleColor index='3' r='0.5' g='0.5' b='1' />
     </ParticleEmitterContainer>
      
     <ParticleEmitterContainer id='Very.New.Effect1' base='New.Effect'>
         <ParticleVelocity x='0' y='10' z='0' />
     </ParticleEmitterContainer>
      
     <ParticleEmitterContainer id='Very.New.Effect2' base='New.Effect'>
         <ParticleVelocity x='0' y='0' z='10' />
     </ParticleEmitterContainer>
</Mod>

Написав include='no' мы исключаем New.Effect из генерации, но порождённые контейнеры будут сгенерированы.
Атрибут include можно применять к любым контейнерам(в том числе и Int, Uint, Float, String, Vector, Color).

2.3 Замена и base
Очень крутая фишка - при замене контейнера, можно использовать его в качестве базы.
Пример:

Code
<?xml version="1.0" encoding="UTF-8"?>
<Mod BaseFile="../base/Local.xml">
     <WeaponFactoryCollective id='DATA.LockedWeapons-0' base='DATA.LockedWeapons-0' header='no'>
         <Append>
             <Weapons href='newweapon'/>
         </Append>
     </WeaponFactoryCollective>
</Mod>

Этот код элегантно заменяет контейнер DATA.LockedWeapons-0 его копией, но с добавленным новым оружием.

Так можно делать, потому что базовый контейнер сначала ищется среди контейнеров базового файла, а уже если
не найден, то среди контейнеров мода.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
забавно, ты же ничего не сделал! Нажал скомпилировать и всё=)
Изучай лучше C#(имхо)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
чего у тебя нет?) может компилятора?) Качай Microsoft Visual Studio 2008

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
пиратская студия должна=)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Чтобы писать программы на C++/C#/Visual Basic

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Да. Имя тэга должно совпадать. Есть идея сделать возможность такой записи:
Code
<?xml version="1.0" encoding="UTF-8"?>  
<Mod BaseFile="../base/Tweak.xml">  
       <Replace id="Jetpack.InitFuel">30000</Replace>
       <Replace id="Abduction.AverageHeight">0.5</Replace>  
       <Replace id="Bomber.Direction">
           <x>30</x>
       </Replace>  
       <Replace id="Bomber.Direction">
           <x>30</x>
       </Replace>  
       <Replace id="kWeaponSuperSheep">
          <MaxRollSpeed>0.1</MaxRollSpeed>
       </Replace>  
</Mod>

то есть тэг Replace будет сам определять тип заменяего контейнера и менять его содержимое. Если это будет сложный тип(как к примеру kWeaponSuperSheep), то он будет работать аналогично:

Code
<?xml version="1.0" encoding="UTF-8"?>  
<Mod BaseFile="../base/Tweak.xml">  
       <FlyingPayloadWeaponPropertiesContainer id="kWeaponSuperSheep" base="kWeaponSuperSheep" >
          <MaxRollSpeed>0.1</MaxRollSpeed>
       </FlyingPayloadWeaponPropertiesContainer>  
</Mod>


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Поиск: