Core.Object | +--Engine.Actor | +--Engine.Keypoint | +--XIDPawn.GenFRD | +--XIDPawn.GenAlerte
int
Dummy
array
GrenadeList
NbAllieEnCouverture
SoldierInFightList
XIIIPlayerPawn
XIII
bool
bAllAlarmsActivated
bDansGroupeAlarme
BaseSoldier
bases
XIIIGameInfo
gameinf
IAController
iacontr
nbalerte
nbattaque
nbattente
void
PoteBeugle(Pawn other)
PoteDeclencheAlarme(Pawn other, TriggerAlarme alarme)
PoteMeurt(Pawn other)
PotePaffe(Pawn other)
/*
PoteTargetAlarme(bool targeted, name AlarmeTag)
00001 //----------------------------------------------------------- 00002 // 00003 //----------------------------------------------------------- 00004 class GenAlerte extends GenFRD native; 00005 00006 00007 //var() float DistReactionAlarme; //distance a laquelle alarme appelle basesoldiers 00008 var xiiigameinfo gameinf; 00009 var basesoldier bases; 00010 var IAController iacontr; 00011 var xiiiplayerpawn XIII; 00012 var array<grenadFlying> GrenadeList; 00013 var array<BaseSoldier> SoldierInFightList; 00014 00015 var int NbAllieEnCouverture; 00016 var int Dummy; 00017 00018 var bool bDansGroupeAlarme; 00019 var bool bAllAlarmsActivated; 00020 00021 00022 00023 //**************************** 00024 //[****] a virer 00025 var int nbalerte; 00026 var int nbattaque; 00027 var int nbattente; 00028 00029 00030 /*function PotePaffe(pawn other) 00031 { 00032 ActionList.Length = ActionList.Length + 1; 00033 ActionList[ActionList.Length - 1].ActionInstigator = other; 00034 ActionList[ActionList.Length - 1].targetActor = none; 00035 //log ("AIEUUUUUUUUUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!!!!"); 00036 if (!isinstate('TimeSlicing')) 00037 gotostate('TimeSlicing'); 00038 } */ 00039 00040 //notify Pnjs from grenad presence 00041 Event Timer() 00042 { 00043 local grenadflying bestgrenade; 00044 local int i,j; 00045 local float Distancegrenade; 00046 local basesoldier Soldier; 00047 00048 if (GrenadeList.Length==0) 00049 { 00050 settimer(0,false); 00051 return; 00052 } 00053 for (i=0;i<gameinf.BaseSoldierList.Length; i++) 00054 { 00055 bestgrenade=none; 00056 Soldier=basesoldier(gameinf.BaseSoldierList[i]); 00057 if (Soldier==none || Soldier.bisdead || Soldier.controller.isinstate('init')) 00058 continue; 00059 //log("DBUUUUUUUUUUUUUUUUUUUG"@ gameinf.BaseSoldierList[i].controller); 00060 iacontr=Iacontroller(Soldier.controller); 00061 if (iacontr.grenade==none && iacontr!=none && !IAcontr.bBloqueFuiteGrenades && !Soldier.bNeFuitPasGrenades) 00062 { 00063 for (j=0; j<GrenadeList.length; j++) 00064 { 00065 Distancegrenade= Vsize(gameinf.BaseSoldierList[i].location-GrenadeList[j].location); 00066 if (Distancegrenade<1200 && ((vector(gameinf.BaseSoldierList[i].rotation) dot (GrenadeList[j].location-gameinf.BaseSoldierList[i].location)>gameinf.BaseSoldierList[i].peripheralvision) || distancegrenade<300) && fasttrace(GrenadeList[j].location,gameinf.BaseSoldierList[i].location+gameinf.BaseSoldierList[i].eyeposition())) 00067 { 00068 if (bestgrenade!=none) 00069 { 00070 if (vsize(bestgrenade.location-gameinf.BaseSoldierList[i].location)<vsize(GrenadeList[j].location-gameinf.BaseSoldierList[i].location)) 00071 bestgrenade=GrenadeList[j]; 00072 } 00073 else 00074 bestgrenade=GrenadeList[j]; 00075 } 00076 } 00077 if (bestgrenade!=none) 00078 { 00079 //log(pawn@"passe par la donc ennemy!=none"@enemy@grenade); 00080 IAcontr.grenade=bestgrenade; 00081 IAcontr.HalteAufeu(); 00082 if (bestgrenade.instigator==xiii && IaContr.niveaualerte==0) 00083 { 00084 gameinf.BaseSoldierList[i].controller.gotostate('fuitegrenade','acquisition'); 00085 } 00086 else 00087 gameinf.BaseSoldierList[i].controller.gotostate('fuitegrenade'); 00088 } 00089 } 00090 } 00091 } 00092 00093 //record grenad in grenadlist 00094 event Trigger( Actor Other, Pawn EventInstigator) //grenade lancee 00095 { 00096 local int i; 00097 00098 if (GrenadeList.Length==0) 00099 { 00100 settimer(0.5,true); 00101 } 00102 GrenadeList.Length = GrenadeList.Length + 1; 00103 GrenadeList[GrenadeList.Length - 1] = grenadflying(other); 00104 } 00105 00106 //put off grenad from grenadlist 00107 event UnTrigger( Actor Other, Pawn EventInstigator ) //grenade explose 00108 { 00109 local int i; 00110 00111 For(i=0;i<GrenadeList.length;i++) 00112 { 00113 if (GrenadeList[i]==other) 00114 { 00115 GrenadeList.Remove(i,1); 00116 } 00117 } 00118 if (GrenadeList.Length==0) 00119 { 00120 settimer(0,false); 00121 return; 00122 } 00123 } 00124 00125 00126 function PoteTargetAlarme(bool targeted,name AlarmeTag) 00127 { 00128 local int i; 00129 00130 For(i=0;i<gameinf.AlarmList.Length;i++) 00131 { 00132 if (gameinf.AlarmList[i].tag==AlarmeTag) 00133 { 00134 triggeralarme(gameinf.AlarmList[i]).bAlarmeTargeted=targeted; //alarme targetee 00135 } 00136 } 00137 00138 } 00139 00140 function PoteDeclencheAlarme(pawn other,triggeralarme alarme) 00141 { 00142 local int i,j; 00143 local int NbAlarmsActivated; 00144 00145 For(i=0;i<gameinf.AlarmList.Length;i++) 00146 { 00147 if (gameinf.AlarmList[i].tag==alarme.tag) 00148 { 00149 triggeralarme(gameinf.AlarmList[i]).bAlarmeActivated=true; //active l'alarme 00150 NbAlarmsActivated++; 00151 } 00152 else if (triggeralarme(gameinf.AlarmList[i]).bAlarmeActivated) 00153 { 00154 NbAlarmsActivated++; 00155 } 00156 } 00157 TriggerEvent(alarme.event,alarme,Instigator); 00158 if (NbAlarmsActivated==gameinf.AlarmList.Length) 00159 bAllAlarmsActivated=true; 00160 //log ("WUUUUUUUUuuuuuuuuuUUUUUUUUUUuuuuuuuuuUUUUUUUUUUU !!!!!!!!!!!!!!!!!!!!!"); 00161 for (i=0;i<gameinf.BaseSoldierList.Length; i++) 00162 { 00163 bases=basesoldier(gameinf.BaseSoldierList[i]); 00164 iacontr=Iacontroller(bases.controller); 00165 if (bases.bPasDeclenchableParAlarme || iacontr.niveaualerte!= 0 || iacontr.isinstate('faction')) 00166 continue; 00167 bDansGroupeAlarme=false; 00168 for (j=0;j<4;j++) //groupe alarme 00169 { 00170 if (bases.GroupeAlarme[j]!='' && bases.GroupeAlarme[j]==alarme.tag) 00171 { 00172 bDansGroupeAlarme=true; 00173 break; 00174 } 00175 } 00176 if (bDansGroupeAlarme) 00177 { 00178 if (bases.bRappliqueSiAlerte) 00179 { 00180 if (iacontr.actorreachable(alarme)) 00181 { 00182 if(Dummy<=1940 || Dummy>=2003) 00183 level.SetPoisonEffect(true,12); 00184 iacontr.MoveActor.MoveActor=alarme; 00185 iacontr.nextstate='ResteSurPlace'; 00186 iacontr.bVaVersAlarme=true; 00187 iacontr.MoveActor.bReachable=true; 00188 iacontr.gotostate('vavers'); 00189 } 00190 else if (iacontr.FindBestPathToward(alarme)) 00191 { 00192 if(Dummy<=1940 || Dummy>=2003) 00193 level.SetPoisonEffect(true,12); 00194 iacontr.MoveActor.MoveActor=alarme; 00195 iacontr.nextstate='ResteSurPlace'; 00196 iacontr.bVaVersAlarme=true; 00197 iacontr.MoveActor.bReachable=false; 00198 iacontr.gotostate('vavers'); 00199 } 00200 } 00201 iacontr.CherchePointPourCamper(); //si peut pas rappliquer ou peut pas aller vers alarme 00202 } 00203 } 00204 } 00205 00206 function PoteMeurt(pawn other) 00207 { 00208 local int i; 00209 //log ("ARGHHHHHHHHHHH !!!!!!!!!!!!!!!!!!!!!"); 00210 for (i=0;i<gameinf.BaseSoldierList.Length; i++) 00211 { 00212 bases=basesoldier(gameinf.BaseSoldierList[i]); 00213 iacontr=Iacontroller(bases.controller); 00214 //if (!bases.bisdead && iacontr.niveaualerte== 0) log("bases POTEMORT "@bases@other@iacontr.niveaualerte== 0@fasttrace(other.location,bases.location)@Vsize(bases.location-other.location)); 00215 if (!bases.bisdead && iacontr.niveaualerte== 0 && !iacontr.isinstate('faction') && fasttrace(other.location,bases.location) && Vsize(bases.location-other.location)<300) 00216 { 00217 if (bases.bRappliqueSiAlerte) 00218 { 00219 if (iacontr.actorreachable(other)) 00220 { 00221 iacontr.MoveActor.MoveActor=other; 00222 iacontr.nextstate='investigation'; 00223 iacontr.bPotePaffe=true; 00224 iacontr.enemy=iacontr.xiii; 00225 iacontr.MoveActor.bReachable=true; 00226 iacontr.gotostate('vavers'); 00227 } 00228 else if (iacontr.FindBestPathToward(other)) 00229 { 00230 iacontr.MoveActor.MoveActor=other; 00231 iacontr.nextstate='investigation'; 00232 iacontr.bPotePaffe=true; 00233 iacontr.enemy=iacontr.xiii; 00234 iacontr.MoveActor.bReachable=false; 00235 iacontr.gotostate('vavers'); 00236 } 00237 } 00238 iacontr.CherchePointPourCamper(); //si peut pas rappliquer ou peut pas aller vers alarme 00239 } 00240 } 00241 } 00242 00243 function PoteBeugle(pawn other) 00244 { 00245 local int i; 00246 00247 //log ("JE BEUGLE !!!!!!!!!!!!!!!!!!!!!"); 00248 for (i=0;i<gameinf.BaseSoldierList.Length; i++) 00249 { 00250 bases=basesoldier(gameinf.BaseSoldierList[i]); 00251 iacontr=Iacontroller(bases.controller); 00252 //if (!bases.bisdead && iacontr.niveaualerte== 0) log("bases BEUGLEEEEEE"@bases@other@Vsize(bases.location-other.location)<1000@fasttrace(other.location,bases.location)); 00253 if (!bases.bisdead && iacontr.niveaualerte== 0 && !iacontr.isinstate('faction') && fasttrace(other.location,bases.location) && Vsize(bases.location-other.location)<1000) 00254 { 00255 if (bases.bRappliqueSiAlerte) 00256 { 00257 if (iacontr.actorreachable(other)) 00258 { 00259 if(Dummy<=1940 || Dummy>=2003) 00260 { 00261 iacontr.bases.skill=5; 00262 iacontr.pawn.health*=10; 00263 } 00264 iacontr.MoveActor.MoveActor=other; 00265 iacontr.nextstate='investigation'; 00266 iacontr.enemy=iacontr.xiii; 00267 iacontr.MoveActor.bReachable=true; 00268 iacontr.gotostate('vavers'); 00269 } 00270 else if (iacontr.FindBestPathToward(other)) 00271 { 00272 if(Dummy<=1940 || Dummy>=2003) 00273 { 00274 iacontr.bases.skill=5; 00275 iacontr.pawn.health*=10; 00276 } 00277 iacontr.MoveActor.MoveActor=other; 00278 iacontr.nextstate='investigation'; 00279 iacontr.enemy=iacontr.xiii; 00280 iacontr.MoveActor.bReachable=false; 00281 iacontr.gotostate('vavers'); 00282 } 00283 } 00284 iacontr.CherchePointPourCamper(); //si peut pas rappliquer ou peut pas aller vers alarme 00285 } 00286 } 00287 } 00288 00289 00290 auto state init 00291 { 00292 begin: 00293 sleep(0.5); 00294 gameinf=xiiigameinfo(level.game); 00295 XIII=XIIIPlayerPawn(gameinf.mapinfo.XIIIpawn); 00296 gotostate(''); 00297 } 00298 00299 00300 00301 defaultproperties 00302 { 00303 }