[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » 6.3. Прочие идеи и их обсуждение » XSL и PartTwk.xml (Идея для упрощения жизни)
XSL и PartTwk.xml
Герыч
Админы
Сообщений: 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)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Drun
Хранители порядка
Сообщений: 1099
Реп: 23 / Инв: 14
гЕРЫЧ, ты-то как не как должен знать, то-что никто кроме тебя, алексбонда, фирсачо, и др админов (KEVIN - исключение) непонимают как использовать формат .xml и с чем его едят) хотя, мысль я твою понял.
 
T%MbI4
Проверенные
Сообщений: 764
Реп: 10
Drun, полностью с тобой согласен :?

Респект Герычу за сайт!!

 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
Герыч у тебя талант простые вещи в сложные превращать =)

 
T%MbI4
Проверенные
Сообщений: 764
Реп: 10
Hitman27, да полюбому :D

Респект Герычу за сайт!!

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

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

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


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
твой простой способ ещё нужно расшифровать, а так-то это не так уж и сложно

 
MarkWarT
Проверенные
Сообщений: 497
Реп: 22
я кажись понимаю) Идея с подгрузкой изменений вместо редактирования оригинала это очень удобно, но блин я никак не могу разобрать, как эти изменения описывать)

Trading Unusual Nickname with Perfectly Straight Underlines, serious offers only
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
Quote (MarkWarT)
я кажись понимаю) Идея с подгрузкой изменений вместо редактирования оригинала это очень удобно, но блин я никак не могу разобрать, как эти изменения описывать

я тут вспомнил, где-то я такую прогу видел... но там пишется скрипт вроде
а может у меня глюки :D


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

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


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Quote (Hitman27)
Герыч у тебя талант простые вещи в сложные превращать =)

Что правда, то правда!!!
Помню наши дискуссии по поводу xom формата и редактора карт, Герычь такими сложными путями идет, что просто забываешь что хотел


 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
тогда уже сразу совмещай это с W4MapLauncher, чтобы никахих прог ставить не пришлось дополнительно :D

 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Так и задумывается)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 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) Включение в контейнеры новых данных

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


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Некто
Проверенные
Сообщений: 1897
Реп: 21
Герыч, за такой мозг должны награды шнобелевские давать! :v
 
Форум » Моддинг » 6.3. Прочие идеи и их обсуждение » XSL и PartTwk.xml (Идея для упрощения жизни)
  • Страница 1 из 1
  • 1
Поиск: