Advertisement
Guest User

Artifact Weapon Base Placer

a guest
Feb 18th, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.38 KB | None | 0 0
  1. class ArtifactWeaponBasePlacer extends ArtifactCraftWeapon;
  2.  
  3. struct PossibleWeaponsStruct
  4. {
  5. var() class<Weapon> WeaponClass;
  6. var() int Requirement;
  7. };
  8.  
  9. var array< PossibleWeaponsStruct > PossibleWeapons;
  10. var int Resources;
  11. var int iLastSelected;
  12. var float AltLastUseTime;
  13.  
  14.  
  15. function GiveTo( pawn Other, optional Pickup Source )
  16. {
  17. local int i,k,j,L;
  18. local class<Weapon> WepClass;
  19. local bool bDuplicate;
  20. local ArtifactWeaponBasePlacerPickup WBPPickup;
  21.  
  22. //log (self $ " Hi ");
  23. Instigator = Other;
  24. if ( Other.AddInventory( Self ) )
  25. {
  26. //log (self $ " Hi Hi ");
  27. GotoState('');
  28. WBPPickup = ArtifactWeaponBasePlacerPickup(Source);
  29. if (WBPPickup != None)
  30. {
  31. for (i=0; i < WBPPickup.StoredPossibleWeapons.length; i++)
  32. {
  33. L=PossibleWeapons.length;
  34. bDuplicate = false;
  35. WepClass = WBPPickup.StoredPossibleWeapons[i].WeaponClass;
  36. for(j=0; j < L ; j++)
  37. {
  38. if (WepClass==PossibleWeapons[j].WeaponClass)
  39. {
  40. bDuplicate = true;
  41. if (WBPPickup.StoredPossibleWeapons[i].Requirement < PossibleWeapons[j].Requirement)
  42. PossibleWeapons[j].Requirement = WBPPickup.StoredPossibleWeapons[i].Requirement;
  43. j = L;
  44. }
  45. }
  46. if (!bDuplicate && WBPPickup.StoredPossibleWeapons[i].WeaponClass != None)
  47. {
  48. PossibleWeapons.length = PossibleWeapons.length + 1;
  49. //PossibleWeapons[k] = WBPPickup.StoredPossibleWeapons[i];
  50. PossibleWeapons[k].WeaponClass = WBPPickup.StoredPossibleWeapons[i].WeaponClass;
  51. PossibleWeapons[k].Requirement = WBPPickup.StoredPossibleWeapons[i].Requirement;
  52. k++;
  53. }
  54. }
  55. //log (self $ " GT Resources1= " $ Resources $ " StoredResources1= " $ WBPPickup.StoredResources);
  56. Resources = WBPPickup.StoredResources;
  57. //log (self $ " GT Resources2= " $ Resources $ " StoredResources2= " $ WBPPickup.StoredResources);
  58. }
  59. }
  60. else
  61. {
  62. log (self $ " ded ");
  63. Destroy();
  64. }
  65. }
  66.  
  67. function bool HandlePickupQuery(Pickup Item)
  68. {
  69. local int i,k,j,L,StartL;
  70. local class<Weapon> WepClass;
  71. local bool bDuplicate;
  72. local ArtifactWeaponBasePlacerPickup Source;
  73.  
  74. if (item.InventoryType == class)
  75. {
  76. Source = ArtifactWeaponBasePlacerPickup(Item);
  77. if (Source != None)
  78. {
  79. k = PossibleWeapons.length;
  80. StartL = k;
  81. //log (self $ " HPQ Resources1= " $ Resources $ " StoredResources1= " $ Source.StoredResources);
  82. Resources += Source.StoredResources;
  83. //log (self $ " HPQ Resources2= " $ Resources $ " StoredResources2= " $ Source.StoredResources);
  84. for( i=0; i < Source.StoredPossibleWeapons.length; i++ )
  85. {
  86.  
  87. L=PossibleWeapons.length;
  88. bDuplicate = false;
  89. WepClass = Source.StoredPossibleWeapons[i].WeaponClass;
  90. for(j=0; j < L ; j++)
  91. {
  92. if (WepClass==PossibleWeapons[j].WeaponClass)
  93. {
  94. bDuplicate = true;
  95. if (Source.StoredPossibleWeapons[i].Requirement < PossibleWeapons[j].Requirement)
  96. PossibleWeapons[j].Requirement = Source.StoredPossibleWeapons[i].Requirement;
  97. j = L;
  98. }
  99. }
  100. if (!bDuplicate && Source.StoredPossibleWeapons[i].WeaponClass != None)
  101. {
  102. PossibleWeapons.length = PossibleWeapons.length + 1;
  103. PossibleWeapons[k].WeaponClass = Source.StoredPossibleWeapons[i].WeaponClass;
  104. PossibleWeapons[k].Requirement = Source.StoredPossibleWeapons[i].Requirement;
  105. k++;
  106. }
  107.  
  108. }
  109. }
  110. if ( (k > 0 && k > StartL) || (Source.StoredResources != 0) )
  111. {
  112. Item.AnnouncePickup(Pawn(Owner));
  113. Item.SetRespawn();
  114. return true;
  115. }
  116. else
  117. return true;
  118. }
  119. if ( Inventory == None ) // Next in inventory chain
  120. return false;
  121.  
  122. return Inventory.HandlePickupQuery(Item);
  123. }
  124.  
  125. function Activate()
  126. {
  127. local int i;
  128.  
  129. Instigator.ClientMessage(" Available Resources: " $ Resources);
  130.  
  131. for( i=0; i < PossibleWeapons.length; i++ )
  132. {
  133. Instigator.ClientMessage("[" $ i $ "] = " $ string(PossibleWeapons[i].WeaponClass) $ " Requirement= " $ PossibleWeapons[i].Requirement ); //.Default.FriendlyName);
  134. }
  135. }
  136.  
  137. function bool GetUsability()
  138. {
  139. //Can't use this if you don't have enough adrenaline...
  140. if (Instigator.Controller.Adrenaline < GetCost() )
  141. {
  142. Instigator.ReceiveLocalizedMessage(MessageClass, GetCost(), None, None, Class);
  143. return false;
  144. }
  145.  
  146. return true;
  147. }
  148.  
  149. function AltActivate(optional string Param)
  150. {
  151. local float TimeDelta;
  152. local int ISelected;
  153. local class<Weapon> TempWClass;
  154.  
  155. TimeDelta = Level.TimeSeconds - AltLastUseTime;
  156. if (Level.TimeSeconds - AltLastUseTime < UseDelay)
  157. {
  158. Instigator.ReceiveLocalizedMessage(MessageClass, 5000 + UseDelay - TimeDelta, None, None, Class);
  159. bActive = false;
  160. GotoState('');
  161. return;
  162. }
  163. AltLastUseTime = Level.TimeSeconds;
  164.  
  165. if (Param != "" &&( strcmp(Param, "0") == 0 || int(Param) > 0 ))
  166. {
  167. ISelected = Min(int(Param), PossibleWeapons.length);
  168. if (PossibleWeapons[ISelected].Requirement <= Resources)
  169. {
  170. TempWClass = PossibleWeapons[ISelected].WeaponClass;
  171. if (TempWClass != None)
  172. {
  173. iLastSelected = ISelected;
  174. WeaponClass = TempWClass;
  175. Super.AltActivate();
  176. }
  177. }
  178. }
  179.  
  180. }
  181.  
  182. function Timer()
  183. {
  184. local PickUp WeaponPickUp;
  185.  
  186. if (A.myPickUp != None)
  187. WeaponPickUp = A.myPickUp;
  188.  
  189. if (WeaponPickUp != None)
  190. {
  191. ModifyPickUp (WeaponPickUp);
  192.  
  193. //cost
  194. if (!bIsFree && bSuccess)
  195. PayUp ();
  196. }
  197. }
  198.  
  199. function ModifyPickup (PickUp TMWeaponPickUp)
  200. {
  201. TMWeaponPickUp.GotoState( 'Pickup' );
  202.  
  203. TMWeaponPickUp.RespawnEffect();
  204.  
  205. TMWeaponPickUp.NetUpdateTime = Level.TimeSeconds - 1;
  206. TMWeaponPickUp.bHidden = false;
  207. bSuccess = true;
  208. }
  209.  
  210. function PayUp ()
  211. {
  212. Instigator.Controller.Adrenaline -= GetCost();
  213. if (Instigator.Controller.Adrenaline < 0)
  214. Instigator.Controller.Adrenaline = 0;
  215. Resources -= PossibleWeapons[iLastSelected].Requirement;
  216. }
  217.  
  218. exec function TossArtifact()
  219. {
  220. Super(RPGArtifact).TossArtifact();
  221. }
  222.  
  223. function DropFrom(vector StartLocation)
  224. {
  225. local ArtifactWeaponBasePlacerPickup P;
  226. local int i;
  227.  
  228. if (bActive)
  229. GotoState('');
  230.  
  231. if ( Instigator != None )
  232. {
  233. DetachFromPawn(Instigator);
  234. Instigator.DeleteInventory(self);
  235. }
  236. SetDefaultDisplayProperties();
  237. Instigator = None;
  238. StopAnimating();
  239. GotoState('');
  240.  
  241. Class'ArtifactWeaponBasePlacerPickup'.default.bInternalListOnly = true;
  242. P = ArtifactWeaponBasePlacerPickup(spawn(PickupClass,,,StartLocation));
  243. Class'ArtifactWeaponBasePlacerPickup'.default.bInternalListOnly = false;
  244.  
  245. if ( P == None )
  246. {
  247. destroy();
  248. return;
  249. }
  250.  
  251. //some properties to transfer
  252. P.bInternalListOnly = true;
  253. P.StoredResources = Resources;
  254. P.StoredPossibleWeapons.length = PossibleWeapons.length;
  255. for (i=0; i< PossibleWeapons.length ;i++)
  256. {
  257. P.StoredPossibleWeapons[i].WeaponClass = PossibleWeapons[i].WeaponClass;
  258. P.StoredPossibleWeapons[i].Requirement = PossibleWeapons[i].Requirement;
  259. }
  260.  
  261. P.InitDroppedPickupFor(self);
  262. P.Velocity = Velocity;
  263. Velocity = vect(0,0,0);
  264. }
  265.  
  266. defaultproperties
  267. {
  268. ChangelingClass=Class'SillyRPG.XIsAChangeling'
  269. AbilityLevel=1
  270. UseDelay=2
  271. WeaponClass=None
  272. bIsFree=false
  273. bIsDropped=false
  274. MinActivationTime=0.000001
  275. ActivateSound=Sound'WeaponSounds.BaseGunTech.BReload2'
  276. PickupClass=Class'SillyRPGv1-1.ArtifactWeaponBasePlacerPickup'
  277. IconMaterial=Texture'ME_RPGExpansion.Icons.CraftSpiderMines'
  278. ItemName="Weapon Base Placer"
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement