Core.Object | +--Engine.Actor | +--Engine.Keypoint | +--XIDPawn.GenFRD | +--XIDPawn.GenNMI
GenNMI
GenEnnemi
int
NbNMIActifs
NbNMIGen
NbNMIGenere
NbNMIMax
NbNMIPresents
name
Numtimbre
PV_NMI
vector
PointSpawn
BaseSoldier
SpawnActor
SpawnLocation
float
TimeBetweenGen
XIIIPlayerPawn
XIII
bool
bDestroySoldiersWhenDestroyed
bDestroyedAtEndOfGen
bGenerationCamouflee
bPasseAttScr_ApresGen
bWaitAllDeadToDestroy
XIIIGameInfo
gameinf
void
AssignePV()
//------------------------------------------------ // GENESE //------------------------------------------------
Timer()
Trigger(Actor Other, Pawn EventInstigator)
//------------------------------------------------ // TRIGGER: Fonction Trigger declenchee par detectionvolume //------------------------------------------------
UnNMIenMoins()
endstate()
00001 //============================================================================= 00002 // GenNMI. 00003 //============================================================================= 00004 class GenNMI extends GenFRD; 00005 00006 struct InventoryItem { 00007 var() class<Inventory> Inventory; 00008 var() int Count; 00009 }; 00010 00011 struct InitialAllianceInfo { 00012 var() Name AllianceName; 00013 var() float AllianceLevel; 00014 }; 00015 //----------------------------- 00016 var() int NbNMIMax; 00017 var() float TimeBetweenGen; 00018 var() int NbNMIGen; 00019 var() int NbNMIActifs; 00020 var() int PV_NMI; 00021 var() vector PointSpawn; 00022 var() bool bDestroyedAtEndOfGen;// se detruit a la fin de la generation 00023 var() bool bGenerationCamouflee; //ne genere que si perso peut pas voir le GENNMI 00024 var() bool bWaitAllDeadToDestroy; // attend que tous les persos generes soient morts 00025 var() bool bDestroySoldiersWhenDestroyed; //detruit les autres baseoldiers quand il est detruit 00026 var() bool bPasseAttScr_ApresGen; //le perso declenche passe direct en attaquescriptee 00027 00028 //pour se detruire et declencher un event 00029 00030 //----------------------------- 00031 00032 var(AI) float PeripheralVision; 00033 var(AI) float SightRadius; 00034 var(AI) float HearingThreshold; 00035 var(AI) bool bLOSHearing; 00036 var(AI) bool bSameZoneHearing; 00037 var(AI) bool bAdjacentZoneHearing; 00038 var(AI) bool bMuffledHearing; 00039 var(AI) bool bAroundCornerHearing; 00040 00041 00042 //----------------------------- 00043 var(Alliances) name Alliance; 00044 var(Inventory) InventoryItem InitialInventory[8]; 00045 var(Alliances) InitialAllianceInfo InitialAlliances[4]; 00046 var(BaseSoldier) name Bases_Event; 00047 var(BaseSoldier) name Bases_Tag; 00048 var(BaseSoldier) int skill; 00049 var(BaseSoldier) float TempsIdentification; 00050 var(BaseSoldier) name Order; 00051 var(BaseSoldier) float ProbaDeclencheAlarme; 00052 var(BaseSoldier) float PourcErrance; 00053 var(BaseSoldier) float TempsRechercheNMI; 00054 var(BaseSoldier) float Agressivite; 00055 var(BaseSoldier) float TempsVisee; 00056 var(BaseSoldier) int NumReseauPropre; 00057 var(BaseSoldier) int NumReseauAttaque; 00058 var(Basesoldier) float TempsPasVu; 00059 var(basesoldier) float DistanceAttaque; 00060 var(basesoldier) bool bRappliqueSiAlerte; 00061 var(BaseSoldier) bool bAlerte; //permet de dire que le perso est en etat alerte<->declenche par trigger 00062 var(BaseSoldier) int StrategicPointAttraction; // 0 a 100 : proportion d'utilisation des strategicpoints 00063 00064 var(BaseSoldier_Advanced) bool bPasseAttScr_SiDeclenche; 00065 var(BaseSoldier_Advanced) float OffsetTimeBetweenShots; // 00066 var(BaseSoldier_Advanced) float WalkingSpeed; 00067 var(BaseSoldier_Advanced) bool bNeVoitPasCadavre; // detecte un cadavre ou pas 00068 var(BaseSoldier_Advanced) bool bPasDeclenchableParAlarme; //ben heu 00069 var(BaseSoldier_Advanced) bool bMeurtEnTombant; //bah quand on le bute il chute 00070 var(BaseSoldier_Advanced) bool bTirPasLorsReplacement; //En attaque se repositionne sans regarder xiii (ni tirer) 00071 var(baseSoldier_Advanced) WanderingVolume MyWanderingVolume; //volume d'errance 00072 var(BaseSoldier_Advanced) bool bPatrolWithWalkSearchAnim; // fait sa premiere patrouille en anim de marche suspicieuse 00073 var(BaseSoldier_Advanced) bool bAlerteAmisEnCriant; //crie pour avertir potes 00074 var(BaseSoldier_Advanced) bool bForceSoldierInUniverse; //the basesoldier is in the Universe Zone. 00075 var(baseSoldier_Advanced) Array<MeshAnimation> SpecificAnimations; 00076 VAR(baseSoldier_Advanced) bool bSpawnInAir; //si personnage genere en l'air 00077 00078 00079 var(Cine_Behavior) Pawn.EGameOver GameOver; // Do shooting this guy will make pbs ? 00080 00081 var(pawn) bool bDestroyWhenDead; // i should be destroyed wxhen dead to optimize 00082 var(pawn) float DelayBeforeDestroyWhenDead; 00083 var(pawn) float DistanceBeforeDestroyWhenDead; 00084 var(pawn) bool bCauseEventOnStun; 00085 var(pawn) bool bCanBeGrabbed; // to allow grab of myself like Corpse/Prisonner 00086 var(pawn) bool bStunnedIfJumpedOn; // to allow dogs not being stunned by jumping on their head (too easy) 00087 00088 00089 var(sound) string TimbresPossibles; 00090 var(sound) int CodeMesh; 00091 var(Sound) int SoundStepCategory; 00092 var name Numtimbre; 00093 00094 00095 00096 00097 00098 // GenNMI 00099 var GenNMI GenEnnemi; 00100 00101 //*------------------------------* 00102 var vector SpawnLocation; 00103 var basesoldier SpawnActor; 00104 var int NbNMIGenere; 00105 var int NbNMIPresents; 00106 00107 00108 var xiiiplayerpawn XIII; 00109 var Xiiigameinfo gameinf; 00110 00111 //_____________________________________________________________________________ 00112 event ParseDynamicLoading(LevelInfo MyLI) 00113 { 00114 local int i; 00115 00116 Log("ParseDynamicLoading Actor="$self); 00117 for (i=0; i<8; i++) 00118 { 00119 if ( InitialInventory[i].Inventory != none ) 00120 { 00121 MyLI.ForcedClasses[MyLI.ForcedClasses.Length] = InitialInventory[i].Inventory; 00122 (InitialInventory[i].Inventory).Static.StaticParseDynamicLoading(MyLI); 00123 } 00124 } 00125 } 00126 00127 //------------------------------------------------ 00128 // TRIGGER: Fonction Trigger declenchee par detectionvolume 00129 //------------------------------------------------ 00130 function Trigger( actor Other, pawn EventInstigator ) 00131 { 00132 //NbNMIPresents=0; 00133 if (NbNMIGenere==0) 00134 gotostate('genese'); 00135 else if (((NbNMIGenere<NbNMIMax) || NbNMIMAX==-1) && NbNMIPresents<NbNMIActifs) 00136 gotostate('genese','suitegeneration'); 00137 } 00138 00139 function UnNMIenMoins() 00140 { 00141 } 00142 00143 00144 //------------------------------------------------ 00145 // GENESE 00146 //------------------------------------------------ 00147 state() genese 00148 { 00149 function AssignePV() 00150 { 00151 SpawnActor.Health = PV_NMI; 00152 } 00153 00154 function Timer() 00155 { 00156 local int i,j; 00157 local bool result; 00158 00159 if ((NbNMIGenere<NbNMIMax) || (NbNMIMAX==-1)) 00160 { 00161 for (i=0;i<NbNMIGen;i++) 00162 { 00163 if (NbNMIPresents<NbNMIActifs) 00164 { 00165 if (PointSpawn!=vect(0,0,0)) 00166 SpawnLocation=PointSpawn; 00167 else 00168 SpawnLocation=self.location + vect(0,0,1)*78+ i*90*((-1)**i)*vect(1,1,0); 00169 result=false; 00170 if (!bGenerationCamouflee || !FastTrace(SpawnLocation,XIII.location+ XIII.eyeposition()) || ((XIII.location-SpawnLocation) dot vector(XIII.rotation))>0) 00171 { 00172 SpawnActor=spawn(class'BaseSoldier',self,,SpawnLocation); 00173 if (SpawnActor == none) 00174 { 00175 SpawnLocation=self.location+vect(0,0,1)*78-i*90*((-1)**i)*vect(1,1,0); 00176 SpawnActor=spawn(class'BaseSoldier',self,,SpawnLocation); 00177 if (SpawnActor == none) 00178 { 00179 result=false; 00180 //log(self$"ca merde je peux pas spawner, j'ai pas la place"); 00181 } 00182 else 00183 result=true; 00184 } 00185 else 00186 { 00187 result=true; 00188 } 00189 } 00190 00191 if (result) 00192 { 00193 NbNMIGenere++; 00194 NbNMIPresents++; 00195 if ((SpawnActor.ControllerClass != None) && SpawnActor.Controller == None) 00196 SpawnActor.Controller = spawn(SpawnActor.ControllerClass); 00197 if (SpawnActor.Controller != None ) 00198 SpawnActor.Controller.Possess(SpawnActor); 00199 gameinf.MapInfo.GeneratedPawn(self,spawnactor); 00200 gameinf.BaseSoldierList.Length=gameinf.BaseSoldierList.Length+1; 00201 gameinf.BaseSoldierList[gameinf.BaseSoldierList.Length-1]=SpawnActor; 00202 instigator=spawnactor; 00203 SpawnActor.GenEnnemi=self; 00204 // initialisation des variables 00205 //ai 00206 SpawnActor.GameOver=GameOver; 00207 SpawnActor.bStunnedIfJumpedOn=bStunnedIfJumpedOn; 00208 SpawnActor.bCanBeGrabbed=bCanBeGrabbed; 00209 SpawnActor.bLOSHearing=bLOSHearing; 00210 SpawnActor.bSameZoneHearing=bSameZoneHearing; 00211 SpawnActor.bAdjacentZoneHearing=bAdjacentZoneHearing; 00212 SpawnActor.bMuffledHearing=bMuffledHearing; 00213 SpawnActor.bAroundCornerHearing=bAroundCornerHearing; 00214 SpawnActor.SightRadius=sightradius; 00215 SpawnActor.HearingThreshold=hearingthreshold; 00216 SpawnActor.PeripheralVision=PeripheralVision; 00217 SpawnActor.Alliance=Alliance; 00218 //basesoldier 00219 for (j=0;j<8;j++) 00220 { 00221 SpawnActor.InitialInventory[j].Inventory=InitialInventory[j].Inventory; 00222 SpawnActor.InitialInventory[j].count=InitialInventory[j].count; 00223 } 00224 for (j=0;j<4;j++) 00225 { 00226 if (InitialAlliances[j].AllianceName!='') 00227 { 00228 SpawnActor.InitialAlliances[j].AllianceName=InitialAlliances[j].AllianceName; 00229 SpawnActor.InitialAlliances[j].AllianceLevel=InitialAlliances[j].AllianceLevel; 00230 } 00231 } 00232 SpawnActor.TempsIdentification=TempsIdentification; 00233 SpawnActor.skill=skill; 00234 SpawnActor.PourcErrance=PourcErrance; 00235 SpawnActor.WalkingSpeed=WalkingSpeed; 00236 SpawnActor.bNeVoitPasCadavre=bNeVoitPasCadavre; 00237 SpawnActor.bPasDeclenchableParAlarme=bPasDeclenchableParAlarme; 00238 SpawnActor.SetCollisionSize(CollisionRadius, CollisionHeight); 00239 SpawnActor.TempsRechercheNMI=TempsRechercheNMI; 00240 SpawnActor.Agressivite=Agressivite; 00241 SpawnActor.TempsVisee=TempsVisee; 00242 SpawnActor.DistanceAttaque=DistanceAttaque; 00243 SpawnActor.bMeurtEnTombant=bMeurtEnTombant; 00244 SpawnActor.StrategicPointAttraction=StrategicPointAttraction; 00245 SpawnActor.NumReseauPropre=NumReseauPropre; 00246 SpawnActor.bAlerte=bAlerte; 00247 SpawnActor.event=Bases_event; 00248 SpawnActor.tag=Bases_Tag; 00249 spawnActor.bcancrouch=true; 00250 SpawnActor.NumReseauAttaque=NumReseauAttaque; 00251 SpawnActor.TempsPasVu=TempsPasVu; 00252 SpawnActor.OffsetTimeBetweenShots=OffsetTimeBetweenShots; 00253 SpawnActor.ProbaDeclencheAlarme=ProbaDeclencheAlarme; 00254 SpawnActor.bBasesGenere=true; 00255 SpawnActor.bSpawnInAir=bSpawnInAir; 00256 SpawnActor.MyWanderingVolume=MyWanderingVolume; 00257 SpawnActor.bAlerteAmisEnCriant=bAlerteAmisEnCriant; 00258 SpawnActor.bRappliqueSiAlerte=bRappliqueSiAlerte; 00259 SpawnActor.bPasseAttScr_SiDeclenche=bPasseAttScr_SiDeclenche; 00260 SpawnActor.bPasseAttScr_ApresGen=bPasseAttScr_ApresGen; 00261 if ( bForceSoldierInUniverse ) 00262 { 00263 SpawnActor.bForceInUniverse = bForceSoldierInUniverse; 00264 SpawnActor.RefreshDisplaying(); 00265 } 00266 if (!bActorShadows && SpawnActor.Shadow != none) 00267 { 00268 SpawnActor.Shadow.Destroy(); 00269 SpawnActor.Shadow = none; 00270 } 00271 SpawnActor.bCauseEventOnStun=bCauseEventOnStun; 00272 //son 00273 j=InStr(TimbresPossibles,";"); 00274 if (j>1) 00275 { 00276 Switch(byte(mid(TimbresPossibles,rand(j)))) 00277 { 00278 case 1 : SpawnActor.NumeroTimbre=timbre_1; break; 00279 case 2 : SpawnActor.NumeroTimbre=timbre_2; break; 00280 case 3 : SpawnActor.NumeroTimbre=timbre_3; break; 00281 } 00282 } 00283 SpawnActor.bHasPosition=bHasPosition; 00284 SpawnActor.bHasRollOff=bHasRollOff; 00285 SpawnActor.PanCoeff=PanCoeff; 00286 SpawnActor.CodeMesh=CodeMesh; 00287 SpawnActor.SoundStepCategory=SoundStepCategory; 00288 SpawnActor.SaturationDistance=SaturationDistance; 00289 SpawnActor.StabilisationDistance=StabilisationDistance; 00290 SpawnActor.StabilisationVolume=StabilisationVolume; 00291 SpawnActor.VoicesSaturationDistance=VoicesSaturationDistance; 00292 SpawnActor.VoicesStabilisationDistance=VoicesStabilisationDistance; 00293 SpawnActor.VoicesStabilisationVolume=VoicesStabilisationVolume; 00294 //assigne PVs 00295 AssignePV(); 00296 SpawnActor.controller.focalpoint=SpawnActor.location+vector(self.rotation); 00297 //BaseSoldier(SpawnActor).setCollisionSize(collisionradius,collisionheight); 00298 if (Mesh!=none) 00299 { 00300 SpawnActor.mesh=mesh; 00301 } 00302 if (SpecificAnimations.Length>0) 00303 { 00304 for (j=0;j<SpecificAnimations.Length;j++) 00305 SpawnActor.LinkSkelAnim (SpecificAnimations[j]); 00306 } 00307 if (Skins.length>0 && Skins[0]!=none) 00308 { 00309 SpawnActor.Skins[0]=Skins[0]; 00310 00311 } 00312 if (order!='') 00313 { 00314 SpawnActor.order=order; 00315 } 00316 SpawnActor.bDestroyWhenDead=bDestroyWhenDead; 00317 SpawnActor.DelayBeforeDestroyWhenDead=DelayBeforeDestroyWhenDead; 00318 SpawnActor.DistanceBeforeDestroyWhenDead=DistanceBeforeDestroyWhenDead; 00319 } 00320 } 00321 else 00322 { 00323 settimer(0,false); 00324 gotostate('PauseGenese'); 00325 break; 00326 } 00327 } 00328 } 00329 else 00330 { 00331 gotostate('AttendMortNMIs'); 00332 } 00333 } 00334 00335 function endstate() 00336 { 00337 } 00338 00339 begin: 00340 //log(self$"GENERE BASESOLDIER"); 00341 sleep(0.04); 00342 gameinf=xiiigameinfo(level.game); 00343 XIII=XIIIPlayerpawn(gameinf.mapinfo.XIIIpawn); 00344 if (XIII==none) 00345 { 00346 log(self@"********************* ATTENTION LA VARIABLE XIII N'A PAS ETE INITIALISEE"); 00347 goto('begin'); 00348 } 00349 suitegeneration: 00350 timer(); 00351 sleep(0.04); 00352 settimer(TimeBetweenGen,true); 00353 } 00354 00355 state AttendMortNMIs 00356 { 00357 function UnNMIenMoins() 00358 { 00359 if (!bWaitAllDeadToDestroy) 00360 { 00361 if (bDestroyedAtEndOfGen) 00362 destroy(); 00363 } 00364 else if (NbNMIPresents<=0) 00365 { 00366 destroy(); 00367 } 00368 } 00369 begin: 00370 UnNMIenMoins(); 00371 } 00372 00373 State PauseGenese 00374 { 00375 } 00376 00377 event Destroyed() 00378 { 00379 local int index; 00380 local int i; 00381 local pawn PersoAVirer; 00382 local IACOntroller PersoAVirerController; 00383 00384 TriggerEvent(Event, Self, none); 00385 if (!bDestroySoldiersWhenDestroyed) 00386 return; 00387 //vire perso de la BaseSoldierList et le detruit 00388 for (Index = 0; Index < level.game.BaseSoldierList.Length; Index++) 00389 { 00390 if (basesoldier(level.game.BaseSoldierList[Index]).GenEnnemi == self ) 00391 { 00392 PersoAVirer=level.game.BaseSoldierList[Index]; 00393 PersoAVirerController=IACOntroller(PersoAVirer.controller); 00394 If (PersoAVirerController==none || PersoAVirerController.XIII==none) 00395 continue; 00396 for (i = 0; i < gameinf.BaseSoldierList.Length; i++) 00397 { 00398 if (gameinf.BaseSoldierList[i] == PersoAVirer ) 00399 { 00400 gameinf.BaseSoldierList.Remove(i,1); 00401 break; 00402 } 00403 } 00404 if (!PersoAVirerController.XIII.Controller.CanSee(PersoAVirer) 00405 && (PersoAVirer!= PersoAVirerController.XIII.LHand.pOnShoulder ) ) 00406 PersoAVirer.destroy(); 00407 } 00408 } 00409 } 00410 00411 // InitialInventory(0)=(Inventory=Class'XIII.Beretta',Count=1) 00412 00413 00414 defaultproperties 00415 { 00416 NbNMIMax=10 00417 TimeBetweenGen=4.000000 00418 NbNMIGen=1 00419 NbNMIActifs=2 00420 PV_NMI=150 00421 bPasseAttScr_ApresGen=True 00422 PeripheralVision=120.000000 00423 SightRadius=2000.000000 00424 HearingThreshold=1500.000000 00425 Alliance="NMI" 00426 InitialAlliances(0)=(AllianceName="Player",AllianceLevel=-1.000000) 00427 InitialAlliances(1)=(AllianceName="NMI",AllianceLevel=1.000000) 00428 Skill=1 00429 TempsIdentification=2.000000 00430 TempsRechercheNMI=3.000000 00431 Agressivite=0.300000 00432 TempsVisee=1.000000 00433 DistanceAttaque=600.000000 00434 bRappliqueSiAlerte=True 00435 StrategicPointAttraction=100 00436 OffsetTimeBetweenShots=0.250000 00437 WalkingSpeed=0.300000 00438 bAlerteAmisEnCriant=True 00439 bCanBeGrabbed=True 00440 TimbresPossibles="123;" 00441 bActorShadows=True 00442 CollisionRadius=34.000000 00443 CollisionHeight=78.000000 00444 bDirectional=True 00445 }