-
Публикации
3011 -
Зарегистрирован
-
Посещение
Все публикации пользователя LoadLine Calibration
-
Вопросы Андриевской Вероники
LoadLine Calibration ответил в тему пользователя LoadLine Calibration в Разработка модов
Ой 8) -
Вопросы Андриевской Вероники
LoadLine Calibration ответил в тему пользователя LoadLine Calibration в Разработка модов
Я на днях написала код для альт. режима атаки. Вообще-то сделать этот альтернативный режим оказалось просто--надо взять функцию FIRE, сделать ее копию и переименовать в AltFire. И мне было нужно чтобы при разных режимах наносились разные типы повреждений. С огнестрельным оружием это просто но вот если HandToHand--тут пришлось подумать. И я добавила две переменных, изменяющих свое значение при разных режимах. Код при этом выглядит так :D : //============================================================================= // AV_Crowbar. Copyright © Андриевская Вероника. //============================================================================= class AV_Crowbar expands WeaponCrowbar; // Это очень важно, эти переменные хранят информацию! var bool b_UseAltFireMode; //TRUE если альт. атака var bool b_UseFireMode; // TRUE если первичная атака. //----------------------------------------------------------------------------- // Первичная атака--обычные удары и сбоку. //----------------------------------------------------------------------------- simulated function PlaySelectiveFiring() { local Pawn aPawn; local float rnd; local Name anim; // У нас первичная атака, поэтому: b_UseFireMode=true; b_UseAltFireMode=false; // —------------------------------ anim = 'Shoot'; if (bHandToHand) { rnd = FRand(); if (rnd < 0.33) anim = 'Attack'; else if (rnd < 0.66) anim = 'Attack2'; else anim = 'Attack'; // Анимацию «Attack3» я убрала 8) Ее я зарезервировала для альтернативной атаки. } if (( Level.NetMode == NM_Standalone ) || ( DeusExPlayer(Owner) == DeusExPlayer(GetPlayerPawn())) ) { if (bAutomatic) LoopAnim(anim,, 0.1); else PlayAnim(anim,,0.1); } else if ( Role == ROLE_Authority ) { for ( aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.nextPawn ) { if ( aPawn.IsA('DeusExPlayer') && ( DeusExPlayer(Owner) != DeusExPlayer(aPawn) ) ) { // If they can't see the weapon, don't bother if ( DeusExPlayer(aPawn).FastTrace( DeusExPlayer(aPawn).Location, Location )) DeusExPlayer(aPawn).ClientPlayAnimation( Self, anim, 0.1, bAutomatic ); } } } } //----------------------------------------------------------------------------- // Вторичный режим атаки: удар сверху и «усыпляющий», типа как дубинка ;) //----------------------------------------------------------------------------- simulated function PlaySelectiveAltFiring() { local Pawn aPawn; local float rnd; local Name anim; // Это вторичная атака, поэтому: b_UseFireMode=False; b_UseAltFireMode=True; // —---------------------------- anim = 'Shoot'; if (bHandToHand) { anim = 'Attack3'; // Удар сверху } if (( Level.NetMode == NM_Standalone ) || ( DeusExPlayer(Owner) == DeusExPlayer(GetPlayerPawn())) ) { if (bAutomatic) LoopAnim(anim,, 0.1); else PlayAnim(anim,,0.1); } else if ( Role == ROLE_Authority ) { for ( aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.nextPawn ) { if ( aPawn.IsA('DeusExPlayer') && ( DeusExPlayer(Owner) != DeusExPlayer(aPawn) ) ) { // If they can't see the weapon, don't bother if ( DeusExPlayer(aPawn).FastTrace( DeusExPlayer(aPawn).Location, Location )) DeusExPlayer(aPawn).ClientPlayAnimation( Self, anim, 0.1, bAutomatic ); } } } } //-- function AltFire(float Value) { local float sndVolume; local bool bListenClient; bListenClient = (Owner.IsA('DeusExPlayer') && DeusExPlayer(Owner).PlayerIsListenClient()); sndVolume = TransientSoundVolume; if ( Level.NetMode != NM_Standalone ) // Turn up the sounds a bit in mulitplayer { sndVolume = TransientSoundVolume * 2.0; if ( Owner.IsA('DeusExPlayer') && (DeusExPlayer(Owner).NintendoImmunityTimeLeft > 0.01) || (!bClientReady && (!bListenClient)) ) { DeusExPlayer(Owner).bJustFired = False; // bReadyToFire = True; bPointing = False; bFiring = False; // return; } } // check for surrounding environment if ((EnviroEffective == ENVEFF_Air) || (EnviroEffective == ENVEFF_Vacuum) || (EnviroEffective == ENVEFF_AirVacuum)) { if (Region.Zone.bWaterZone) { if (Pawn(Owner) != None) { Pawn(Owner).ClientMessage(msgNotWorking); if (!bHandToHand) PlaySimSound( Misc1Sound, SLOT_None, sndVolume, 1024 ); // play dry fire sound } GotoState('Idle'); return; } } if (bHandToHand) { if (ReloadCount > 0) AmmoType.UseAmmo(1); if (( Level.NetMode != NM_Standalone ) && !bListenClient ) bClientReady = False; bReadyToFire = False; GotoState('NormalFire'); bPointing=True; if ( Owner.IsA('PlayerPawn') ) PlayerPawn(Owner).PlayFiring(); PlaySelectiveAltFiring(); // PlayFiringSound(); } // if we are a single-use weapon, then our ReloadCount is // 0 and we don't use ammo else if ((ClipCount < ReloadCount) || (ReloadCount == 0)) { if ((ReloadCount == 0) || AmmoType.UseAmmo(1)) { if (( Level.NetMode != NM_Standalone ) && !bListenClient ) bClientReady = False; ClipCount++; bFiring = True; // bReadyToFire = False; GotoState('NormalFire'); if (( Level.NetMode == NM_Standalone ) || ( Owner.IsA('DeusExPlayer') && DeusExPlayer(Owner).PlayerIsListenClient()) ) { if ( PlayerPawn(Owner) != None ) // shake us based on accuracy PlayerPawn(Owner).ShakeView(ShakeTime, currentAccuracy * ShakeMag + ShakeMag, currentAccuracy * ShakeVert); } bPointing=True; if ( bInstantHit ) TraceFire(currentAccuracy); else ProjectileFire(ProjectileClass, ProjectileSpeed, bWarnTarget); if ( Owner.IsA('PlayerPawn') ) PlayerPawn(Owner).PlayFiring(); // Don't play firing anim for 20mm if ( Ammo20mm(AmmoType) == None ) PlaySelectiveAltFiring(); // PlayFiringSound(); if ( Owner.bHidden ) CheckVisibility(); } else PlaySimSound( Misc1Sound, SLOT_None, sndVolume, 1024 ); // play dry fire sound } else PlaySimSound( Misc1Sound, SLOT_None, sndVolume, 1024 ); // play dry fire sound // Update ammo count on object belt if (DeusExPlayer(Owner) != None) DeusExPlayer(Owner).UpdateBeltText(Self); } //----------------------------------------------------------------------------- // Здесь мы раздаем разные повреждения при разных режимах! //----------------------------------------------------------------------------- function name WeaponDamageType() { if (b_UseAltFireMode) return 'KnockedOut'; // Они уснут и даже не заметят!!!!!!!!!!!!!!! else if (b_UseFireMode) return 'Shot'; // Ну в принципе можно // сюда вставить и 'Exploded' вот только нужно-ли? :D))))) } defaultproperties { HitDamage=20 BobDamping=0.800000 // размахивание оружием при ходьбе Description=«Удар этой металлической штукой может быть смертелен в руках мастера. Ударив по голове сверху (альтернативный огонь), вы скорее всего отключите жертву, ударив сбоку--вероятно нанесете сильный урон (первичный огонь).|n|n<ПРИМЕЧАНИЕ AV:>Вообще-то этой штукой вытаскивают гвозди, но похоже что нынче это мало кто знает :D<КОНЕЦ ПРИМЕЧАНИЯ>» } Примечание: нужно редактировать файл User.ini чтобы назначить альтернативный режим атаки на левую кнопку мыши (правая--первичный режим) Вот мой отредактированный файл и готовый мод, поместите их в папку DeusEx\SYSTEM\, в игре нажмите T и введите: Summon AV_CrowBar.av_crowBar Сначала надо сделать резервную копию своего файла USER.ini AV_CrowBar.zip -
Знаете, я сегодня проснулась и у меня появлась такая идея--сделать некий вид огнестрельного оружия который будет универсален. То есть в него можно будет зарядить все виды патронов какие только есть в игре, и можно будет сделать два режима атаки (основной+альтернативный). 8) Представьте себе--всего одно оружие, и может быть использовано как ракетница, пистолет, огнемет и как угодно. То есть в инвентаре можно будет таскать с собой только это оружие + меч Зуб Дракона + для остального будет много места... :D :D :D Если что--можно будет сослаться на нанотехнологии будущего ;) Если есть желающие--постараюсь сделать. Возможно не очень пригодиться но для эксперимента--почему-бы и нет!?
-
Ой я же хотела написать как пересчитывать модельки :) И совсем забыла :evil: Сначало нужно извлечь модели DeusEx в формат Unreal, используя WotGreal либо DeusExExtractor либо UTPT. Затем: 1.Переписываем скрипт импорта, часть MeshMap Scale так:x=X*32 Y=Y*32 Z=Z*64. Пример: #exec MESH IMPORT MESH=Valve ANIVFILE=Models\Valve_a.3d DATAFILE=Models\Valve_d.3d ZEROTEX=1 [u]#exec MESHMAP SCALE MESHMAP=Valve X=0.125 Y=0.125 Z=0.25[/u] #exec MESH SEQUENCE MESH=Valve SEQ=All STARTFRAME=0 NUMFRAMES=50 #exec MESH SEQUENCE MESH=Valve SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Valve SEQ=Close STARTFRAME=1 NUMFRAMES=25 RATE=10 #exec MESH SEQUENCE MESH=Valve SEQ=Open STARTFRAME=26 NUMFRAMES=24 RATE=10 2.Если есть MeshMap Origin то пересчитываем так: X=X/32 Y=Y/32 Z=Z/64 Это НЕОБХОДИМО сделать, иначе модель либо не будет видна либо будет пропадать при приближении вида! 3.Если модель в редакторе не видна до добавляем цифру 5 к Z, например Z=0.01259098 и мы добавим 5, будет Z=0.012590985. При этом высота модели немного увеличиться, но для расстаеновки в редакторе это приемлемо. Почему так надо делать--не знаю, но это все что я придумала. Уменьшение не помогало. Вообще я давно хотела конвертнуть все модели в формат Unreal, уж очень мне приглянулся и понравился UED2 :D :D :D Примечание: модели я всегда расставляю исходя из Collision а не нижней части модели. Примечание2: ОБЯЗАТЕЛЬНО надо перемножать значение Z на 64 а не 32, иначе модель будет сжата ровно вдвое :) Почему--не знаю. Примечание3: Очевидно нужно переименовывать файлы моделей и текстур либо менять имена в скрипте импорта.
-
Поменяла язык на Английский в своем профиле--ничего не изменилось!
-
Эту программку я нашла довольно давно. Я думаю она пригодиться всем кто делает текстуры. Ее возможности весьма обширны, можно создавать любые текстуры, любого размера и притом довольно быстро, имея небольшой навык. Есть множество предустановленных функций, и скриптов :rofl2: Есть и другие возможности, например генератор случайных текстур, или генератор последовательности изображений. Можно также смешивать несколько текстур в одну и много еще чего. Скачать можно на http://www.textureMaker.com Брать нужно версию 2.81 (trial), так как более поздние версии требуют регистрацию. Trial версия ограничивает размер сохраняемых текстур до 320x320 но я не думаю что для DeusEx нужно больше. Я написала loader, убирающий окно с напоминанием о регистрации. Если кому надо...
-
Патчить до версии 1.2 и сверху ложить русификатор. Брать на сайте Алекса.
-
Я выложила все куски архива, они здесь: http://veronika-and.nm.ru/PlanetDX/ Надо скачать все файлы в одну папку (18 МБ) и открыть тот что с расширением .ZIP в WinZip 8.1 или новее. Распаковать содержимое SFX-архива в папку с UED2, на вопрос о замене ответить ДА. Потом запустить UED2 и я надеюсь что все будет хорошо :mrgreen:
-
Сначала надо знать английский хоть немного, а потом можно делать всякие разные карты просто так. Потом создавать свои собственные паки в которые можно импортировать диалоги, модельки, звуки и пр. И опыт придет со временем. Насчет диалогов--там ничего особенно сложного и нет, все необходимое есть в документации по SDK (DeusexDocs) Для диалогов нужен ConEdit 8)
-
Уж если я ОНА то у меня этого не отнять никак. Моя половая принадлежность определена с момента зачатия или как там это еще называеться не помню, я в школе плохо училась :))) И у меня нет детей. Насчет моделей: ничего лучше не придумала как порезать 18МБ инсталлер на 18 кусков и выложить по частям. Надеюсь у всех есть WinZip 8.1 и выше > Ступайте сюда: http://Veronika-and.nm.ru/PlanetDX/ Там лежат куски архива. Когда я выложу все части я об этом сообщу, пока в процессе. Как делала конвертацию? Расскажу чуть позже, и формулы тоже предоставлю.
-
Придумаю что-нибудь :)
-
Ну вот и все. Все готово, все модели оригинального DeusEx видны в UED2 также как в UED1, в таком-же масштабе. :) 8) 8) На днях постараюсь все это куда-нибудь выложить... (архив будет ~20 МБ, наверное надо идти искать выделенку)
-
Спасибо что интересуетесь моей работой над моделями :) Только что пересчитала всех персонажей, осталось только оружие.
-
Ну вообще-то если поработать конвертером, калькулятором, текстовым редактором и UCC.exe от UED2 то модели будут видны в UED2. Я перенесла все декорации, почти все оружие, теперь осталось пересчитать скрипт импорта персонажей (людей, роботов и т.п.). Они такого-же масштаба что и в UED1, я все пересчитала. Когда я закончу перенос, я выложу специальные паки для UED2, так что все смогут расставлять модели не покидая UED2 :)
-
Утилита для замены текстур
LoadLine Calibration ответил в тему пользователя LLIypik в Разработка модов
Почитай раздел FONT (https://planetdeusex.ru/forum/viewtopic.php?t=619) Там все подробно расписано :o И никаких смещений знать не нужно. Я без проблем меняла шрифты в DeusExUI.u UPD: Все делала через официальный редактор; никаких перекомпиляций :lol: -
http://planetDeusEx.com/Tack/ Там есть прога для извлечения моделей в формат Милк Шейп
-
Утилита для замены текстур
LoadLine Calibration ответил в тему пользователя LLIypik в Разработка модов
Вообще-то текстуры можно заменять через редактор :o Для извлечения подойдет WotGrealExporter или DeusExExtractor. Сгодиться и UTPT (UnrealTournamentPackageTool) -
Социометрия - тест на измерение отношений
LoadLine Calibration ответил в тему пользователя Forevener в General off topic
Сейчас EXCEL установлю заполню и отправлю UPD: Отправила. Очень хотела-бы посмотреть на многих. -
Если тебе нужно название именно из ресурсов то это AugmentationUpgradeCannister
-
Моя подпись на данный момент--защита.
-
Вопросы Андриевской Вероники
LoadLine Calibration ответил в тему пользователя LoadLine Calibration в Разработка модов
Сегодня нашла у себя в папке со скаченными файлами довольно интересный скрипт. Если взять любое оружие и объявить его подклассом DoubleWeapBase (я хочу сказать Class НЕЧТО expands DoubleWeapBase) то можно будет стрелять сразу с двух оружий. Второе оружия в руке появляеться если подобрать такой-же класс оружия. Скрипт правда глюковатый но рабочий. Если позабавиться--то вполне сойдет :lol: :lol: :lol: :D Или как Easter egg :lol: А так я не думаю что скажем два дробовика в DeusEx это нормально. Скриншот с моим варианотм применения: http://veronika-and.nm.ru/doubleweapon.jpg Сам скрипт: //============================================================================= // DoubleWeapBase. // Created on 11th June 2001 @ 11:23:01 // // <Version> 0.4a // <RenZo> // <MAILTO> // <Double> // <and> // <also> // if u use this class or any part of it in any of yourmods or maps // please give me and the Dx Community credit for the parts you use // also let us know what the mod is so we can download it and play it // <Created> //============================================================================= class DoubleWeapBase expands DeusExWeapon; /*Var(DualWeapons) bool bReplaceCrossHair;*/ Var Bool bDual,bSlave; var byte WeapUsed; var DoubleWeapBase SlaveWeap; var(DeusExWeapon) String SecondPickupMsg; replication { reliable if(ROLE==Role_Authority) bDual,bSlave,SlaveWeap,WeapUsed/*,setCrossHairVis*/; } simulated Function PreBeginPlay() { Super.prebeginplay(); // please in the Child classes include the multiplayer // info here } /*Simulated Function SetCrossHairVis(bool HideShow) { DeusExRootWindow(DeusExPlayer(owner).rootWindow).hud.Cross.setCrosshair(HideShow); }*/ function SetHand(float Hand) { if(!bSlave && !bDual) super.SetHand(Hand); else if(bDual) Super.SetHand(-1); else if(bSlave) Super.SetHand(1); } // OverRide Function for fire offsets simulated function Vector ComputeProjectileStart(Vector X, Vector Y, Vector Z) { local Vector Start; // if we are instant-hit, non-projectile, then don't offset our starting point by PlayerViewOffset if (bInstantHit) Start = Owner.Location + Pawn(Owner).BaseEyeHeight * vect(0,0,1);// — Vector(Pawn(Owner).ViewRotation)*(0.9*Pawn(Owner).CollisionRadius); else{ if(WeapUsed == 0 || SlaveWeap == none) { Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; } Else { Start = Owner.Location + SlaveWeap.CalcDrawOffset() + SlaveWeap.FireOffset.X * X + SlaveWeap.FireOffset.Y * Y + SlaveWeap.FireOffset.Z * Z; } } return Start; } function Tick(float DeltaTime) { // the stuff in here isnt Very Delta Time Friendly // but it needs to be changed on Frame //This is just a quick fix at the moment Super.tick(deltaTime); if(owner == none) { SlaveWeap.ReloadCount=class.Default.ReloadCount; SlaveWeap.ShotTime = class.Default.shotTime; ReloadCount = Class.Default.ReloadCount; ShotTime = class.Default.shotTime; } //added this because i maybe Changing the CrossHair Later on /*SetCrossHairVis(bReplaceCrossHair);*/ if(slaveWeap != none && SlaveWeap.bHasMuzzleFlash) SlaveWeap.EraseMuzzleFlashTexture(); } function fire(float value) { if(bSlave) return; Super.Fire(value); } simulated function PlaySelectiveFiring() { local Pawn aPawn; local float rnd; local Name anim; anim = 'Shoot'; if (bHandToHand) { rnd = FRand(); if (rnd < 0.33) anim = 'Attack'; else if (rnd < 0.66) anim = 'Attack2'; else anim = 'Attack3'; } if(WeapUSed==0 || SlaveWeap==None){ if (( Level.NetMode == NM_Standalone ) || ( DeusExPlayer(Owner) == DeusExPlayer(GetPlayerPawn())) ) { if (bAutomatic) LoopAnim(anim,, 0.1); else PlayAnim(anim,,0.1); } else if ( Role == ROLE_Authority ) { for ( aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.nextPawn ) { if ( aPawn.IsA('DeusExPlayer') && ( DeusExPlayer(Owner) != DeusExPlayer(aPawn) ) ) { // If they can't see the weapon, don't bother if ( DeusExPlayer(aPawn).FastTrace( DeusExPlayer(aPawn).Location, Location )) DeusExPlayer(aPawn).ClientPlayAnimation( Self, anim, 0.1, bAutomatic ); } } } } Else { if (( Level.NetMode == NM_Standalone ) || ( DeusExPlayer(Owner) == DeusExPlayer(GetPlayerPawn())) ) { if (bAutomatic) SlaveWeap.LoopAnim(anim,, 0.1); else SlaveWeap.PlayAnim(anim,,0.1); } else if ( Role == ROLE_Authority ) { for ( aPawn = Level.PawnList; aPawn != None; aPawn = aPawn.nextPawn ) { if ( aPawn.IsA('DeusExPlayer') && ( DeusExPlayer(Owner) != DeusExPlayer(aPawn) ) ) { // If they can't see the weapon, don't bother if ( DeusExPlayer(aPawn).FastTrace( DeusExPlayer(aPawn).Location, Location )) DeusExPlayer(aPawn).ClientPlayAnimation( Self, anim, 0.1, bAutomatic ); } } } } if(WeapUsed==1) WeapUsed=0; else WeapUsed=1; } Function TweenDown() { Super.TweenDown(); /*bReplaceCrossHair = False;*/ if(SlaveWeap != none) SlaveWeap.TweenDown(); } function PlaySelect() { PlayAnim('Select',1.0,0.0); if(SlaveWeap!=None) SlaveWeap.PlayAnim('Select',1.0,0.0); Owner.PlaySound(SelectSound, SLOT_Misc, Pawn(Owner).SoundDampening); } function BringUp() { if(SlaveWeap!=None) SlaveWeap.SetHand(1); Super.BringUp(); } simulated event RenderOverlays( canvas Canvas ) { local rotator NewRot; Super.RenderOverlays(Canvas); if(SlaveWeap!=None) { NewRot=Pawn(Owner).ViewRotation; newRot.Roll=Default.Rotation.Roll; SlaveWeap.setRotation(newRot); SlaveWeap.SetLocation(Owner.Location+SlaveWeap.CalcDrawOffset()); Canvas.DrawActor(SlaveWeap, false); } } function bool HandlePickupQuery( inventory Item ) { local int OldAmmo; local Pawn P; if (Item.Class == Class) { if ( (Weapon(item).bWeaponStay && SlaveWeap!=None) && (!Weapon(item).bHeldItem || Weapon(item).bTossedOut) ) return true; P = Pawn(Owner); if ( AmmoType != None ) { OldAmmo = AmmoType.AmmoAmount; if ( AmmoType.AddAmmo(PickupAmmoCount) && (OldAmmo == 0) && (P.Weapon.class != item.class) && !P.bNeverSwitchOnPickup ) WeaponSet(P); } if(!bDual && SecondpickupMsg != ""){ p.clientMessage(SecondPickupMsg); } if (SlaveWeap==None) { SlaveWeap=Spawn(class<DoubleWeapBase>(DynamicLoadObject(String(item.class), class'Class'))); SlaveWeap.BecomeItem(); SlaveWeap.SetOwner(Owner); SlaveWeap.bSlave=True; SlaveWeap.setHand(69); SlaveWeap.ReloadCount=class.Default.ReloadCount; SlaveWeap.ShotTime = class.Default.shotTime; ReloadCount = Class.Default.ReloadCount * 2; SlaveWeap.BringUp(); bDual=True; SetHand(69); } Item.PlaySound(Item.PickupSound); Item.SetRespawn(); return true; } if ( Inventory == None ) return false; return Inventory.HandlePickupQuery(Item); } function DropFrom(vector StartLocation) { if(SLaveWeap!=None) SlaveWeap.DropFrom(StartLocation); SlaveWeap.bSlave=False; bDual=False; bSlave=False; SlaveWeap=None; Super.DropFrom(StartLocation); } // Finish a firing sequence (ripped off and modified from EngineWeapon.uc) function Finish() { local Pawn PawnOwner; if ( bChangeWeapon ) { GotoState('DownWeapon'); return; } PawnOwner = Pawn(Owner); if ( PawnOwner == None ) return; if ( PlayerPawn(Owner) == None ) { if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) { PawnOwner.StopFiring(); PawnOwner.SwitchToBestWeapon(); if ( bChangeWeapon ) GotoState('DownWeapon'); } // Removed this as it would have stopped the slave from Reloading // else if ( (PawnOwner.bFire != 0) && (FRand() < RefireRate) ) // Global.Fire(0); // else if ( (PawnOwner.bAltFire != 0) && (FRand() < AltRefireRate) ) // Global.AltFire(0); // else // { // PawnOwner.StopFiring(); // GotoState('Idle'); // } return; } if ( ((AmmoType != None) && (AmmoType.AmmoAmount<0> 0)) { if (PlayerPawn(Owner) != None) Global.Fire(0); else { GotoState('FinishFire'); } } else { GotoState('FinishFire'); } } else { // if we are a thrown weapon and we run out of ammo, destroy the weapon if (bHandToHand && (ReloadCount > 0) && (AmmoType.AmmoAmount <0>= ReloadCount) && (ReloadCount != 0)) { if (!bAutomatic) { bFiring = False; FinishAnim(); } if (Owner != None) { if (Owner.IsA('DeusExPlayer')) { bFiring = False; // should we autoreload? if (DeusExPlayer(Owner).bAutoReload) { // auto switch ammo if we're out of ammo and // we're not using the primary ammo if ((AmmoType.AmmoAmount == 0) && (AmmoName != AmmoNames[0])) { CycleAmmo(); SlaveWeap.CycleAmmo(); } SlaveWeap.ReloadAmmo(); ReloadAmmo(); } else { if (bHasMuzzleFlash) { EraseMuzzleFlashTexture(); } if(SlaveWeap.bHasMuzzleFlash) { SlaveWeap.EraseMuzzleFlashTexture(); } GotoState('Idle'); } } else if (Owner.IsA('ScriptedPawn')) { bFiring = False; ReloadAmmo(); } } else { if (bHasMuzzleFlash) { EraseMuzzleFlashTexture(); } if(SlaveWeap.bHasMuzzleFlash) { SlaveWeap.EraseMuzzleFlashTexture(); } GotoState('Idle'); } } // if ( bAutomatic && (( Level.NetMode == NM_DedicatedServer ) || ((Level.NetMode == NM_ListenServer) && Owner.IsA('DeusExPlayer') && !DeusExPlayer(Owner).PlayerIsListenClient()))) // GotoState('Idle'); Sleep(GetShotTime()); if (bAutomatic) { GenerateBullet(); // In multiplayer bullets are generated by the client which will let the server know when Goto('Begin'); } bFiring = False; FinishAnim(); // if ReloadCount is 0 and we're not hand to hand, then this is a // single-use weapon so destroy it after firing once if ((ReloadCount == 0) && !bHandToHand) { if (DeusExPlayer(Owner) != None) DeusExPlayer(Owner).RemoveItemFromSlot(Self); // remove it from the inventory grid Destroy(); } ReadyToFire(); Done: bFiring = False; Finish(); } // modifyed reload State so that the Second Weapon looks as if it is reloading state Reload { ignores Fire, AltFire; function float GetReloadTime() { local float val; val = ReloadTime; if (ScriptedPawn(Owner) != None) { val = ReloadTime * (ScriptedPawn(Owner).BaseAccuracy*2+1); } else if (DeusExPlayer(Owner) != None) { // check for skill use if we are the player val = GetWeaponSkill(); val = ReloadTime + (val*ReloadTime); } return val; } function NotifyOwner(bool bStart) { local DeusExPlayer player; local ScriptedPawn pawn; player = DeusExPlayer(Owner); pawn = ScriptedPawn(Owner); if (player != None) { if (bStart) player.Reloading(self, GetReloadTime()+(1.0/AnimRate)); else { player.DoneReloading(self); } } else if (pawn != None) { if (bStart) pawn.Reloading(self, GetReloadTime()+(1.0/AnimRate)); else pawn.DoneReloading(self); } } Begin: FinishAnim(); // only reload if we have ammo left if (AmmoType.AmmoAmount > 0) { if (( Level.NetMode == NM_DedicatedServer ) || ((Level.NetMode == NM_ListenServer) && Owner.IsA('DeusExPlayer') && !DeusExPlayer(Owner).PlayerIsListenClient())) { ClientReload(); Sleep(GetReloadTime()); ReadyClientToFire( True ); } else { bWasZoomed = bZoomed; if (bWasZoomed) ScopeOff(); Owner.PlaySound(CockingSound, SLOT_None,,, 1024); // CockingSound is reloadbegin // Added to Make it look like the SlaveWeapon HasReloaded as well if(SlaveWeap != none) { PlayAnim('ReloadBegin'); SlaveWeap.PlayAnim('ReloadBegin'); NotifyOwner(True); FinishAnim(); LoopAnim('Reload'); SlaveWeap.LoopAnim('Reload'); Sleep(GetReloadTime()); Owner.PlaySound(AltFireSound, SLOT_None,,, 1024); // AltFireSound is reloadend PlayAnim('ReloadEnd'); SlaveWeap.PlayAnim('ReloadEnd'); FinishAnim(); NotifyOwner(False); if (bWasZoomed) ScopeOn(); ClipCount = 0; } Else { PlayAnim('ReloadBegin'); NotifyOwner(True); FinishAnim(); LoopAnim('Reload'); Sleep(GetReloadTime()); Owner.PlaySound(AltFireSound, SLOT_None,,, 1024); // AltFireSound is reloadend PlayAnim('ReloadEnd'); FinishAnim(); NotifyOwner(False); if (bWasZoomed) ScopeOn(); ClipCount = 0; } } } WeapUsed=0; GotoState('Idle'); } DefaultProperties { SecondPickupMsg=«TIME TO CLEAN HOUSE» } -
Написала аналогичную программу но без интерфейса. УСТАНОВКА: 1. Прочитать ReadMe.txt :lol: 2. Поместить UnrealTournament.exe в папку c UED2 После этого из UED2 можно сразу запускть карту, без всяких запросов. Примечание: я не знаю зачем UED1/2 подставляет параметр вида HWND=459044 в командную строку, похоже на дескриптор окна? Моя программа этот параметр отбрасывает. Если мне кто-нибудь объяснит зачем он нужен то могу сделать чтобы он не пропускался :lol: Скачать loader: http://veronika-and.nm.ru/Ued2DXStarter_WO_Int.zip Также я создала патч. если его применить к файлу UnrealED.exe (из UED2 для DX конечно) то редактор по умолчанию будет открывать/сохранять файлы карт с расширением .DX а не .UNR. По моему так удобнее. Скачать патч: http://veronika-and.nm.ru/Ued2_Unr_dx.zip
-
Deus Ex и Deus Ex: IW от Нового Диска!
LoadLine Calibration ответил в тему пользователя ZwerPSF в Вселенная Deus Ex
Куплю только из-за русской озвучки А может как обычно за так достану :o -
Жаль... А я так хотела...
-
Ваш Рабочий Стол (Desktop)
LoadLine Calibration ответил в тему пользователя Kronos в General off topic
У меня даже фонового изображения теперь нет, надоели. Такой черный десктоп со значками. :) Половину значков перетащила в панельки на таскбаре. :D http://veronika-and.nm.ru/AV_Desk.jpg