Guest User

PeejsterM

a guest
Feb 13th, 2010
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.38 KB | None | 0 0
  1. $DefaultClimbable = 1;
  2. package Agility
  3. {
  4. function Armor::onTrigger(%db,%player,%slot,%io)
  5. {
  6. Parent::onTrigger(%db,%player,%slot,%io);
  7.  
  8. if(%player.getDatablock().isAgilePlayer)
  9. {
  10. if(%slot == 3 && %io)
  11. {
  12. if(isEventPending(%player.fallDamageSched))
  13. {
  14. if(%player.getEnergyLevel() < %player.fallDamageVelMult + 5)
  15. {
  16. return;
  17. }
  18. cancel(%player.fallDamageSched);
  19. %dir = getWords(%player.getEyeVector(),0,1);
  20. %x = getWord(%dir,0); %y = getWord(%dir,1);
  21. %nx = mAbs(%x) * %player.fallDamageVelMult;
  22. %ny = mAbs(%y) * %player.fallDamageVelMult;
  23. if(%x < 0)
  24. {
  25. %nx = 0 - %nx;
  26. }
  27. if(%y < 0)
  28. {
  29. %ny = 0 - %ny;
  30. }
  31. %player.addVelocity(%nx SPC %ny SPC 5);
  32. %player.setEnergyLevel(%player.getEnergyLevel() - %player.fallDamageVelMult);
  33. return;
  34. }
  35. }
  36. if(%slot == 4)
  37. {
  38. %player.pkm = %io;
  39. }
  40. if(!%player.getMountedImage(0) || %player.getDatablock().alwaysClimb)
  41. {
  42. %side = %player.getDatablock().wallJumpVel;
  43. %up = %player.getDatablock().wallClimbVel;
  44. if(%slot == 2 && %io)
  45. {
  46. if(%player.holding)
  47. {
  48. if(%player.getEnergyLevel() < %player.getDatablock().wallJumpEnergy + 5)
  49. {
  50. return;
  51. }
  52. %up = %side;
  53. %side += 4;
  54. %dir = %player.getEyeVector();
  55. %player.holding = 0;
  56. cancel(%player.nhtick);
  57. %player.holdposition = "";
  58. %vel = mClampF(getword(%dir,0) * %side,0 - %side,%side) SPC mClampF(getword(%dir,1) * %side,0 - %side,%side) SPC mClampF(getword(%dir,2) * %up,0 - %up,%up);
  59. %player.setVelocity(%vel);
  60. %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallJumpEnergy);
  61. %player.playThread(2,"jump");
  62. return;
  63. }
  64. %touch = containerRayCast(%player.getPosition(),vectorAdd(vectorScale(vectorNormalize(setword(%player.getEyeVector(),2,"0")),2),%player.getPosition()),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
  65. if(!isObject(%touch))
  66. {
  67. return;
  68. }
  69. if(%touch.getClassName() $= "InteriorInstance")
  70. {
  71. %col = 1;
  72. } else {
  73. %col = %touch.isColliding();
  74. }
  75. if(isObject(%touch) && %col && (%touch.rejClimb == !$DefaultClimbable))
  76. {
  77. if(%player.pkm)
  78. {
  79. if(%player.getDatablock().highLevel !$= "")
  80. {
  81. %down = containerRayCast(%player.getPosition(),vectorAdd(%player.getPosition(),"0 0" SPC 0 - %player.getDatablock().highLevel),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
  82. if(!isObject(%down))
  83. {
  84. %fallchance = getRandom(0,1000);
  85. if(%fallchance <= %player.getDatablock().fumbleChance)
  86. {
  87. %player.setEnergyLevel(%player.getEnergyLevel() - 10);
  88. %player.addVelocity("0 0 -5");
  89. return;
  90. }
  91. }
  92. }
  93. %dir = %player.getEyeVector();
  94. if(getWord(%dir,2) > 0)
  95. {
  96. if(%player.getEnergyLevel() < %player.getDatablock().wallClimbEnergy + 5)
  97. {
  98. return;
  99. }
  100. %player.setVelocity("0 0" SPC %up);
  101. %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallClimbEnergy);
  102. %player.playThread(2,"shiftUp");
  103. %player.schedule(150,"playThread",2,"shiftDown");
  104. } else {
  105. if(%player.getEnergyLevel() < %player.getDatablock().wallJumpEnergy + 5)
  106. {
  107. return;
  108. }
  109. %vel = mClampF(getword(%dir,0) * (0 - %side),0 - %side,%side) SPC mClampF(getword(%dir,1) * (0 - %side),0 - %side,%side) SPC %up;
  110. %player.setVelocity(%vel);
  111. %player.setEnergyLevel(%player.getEnergyLevel() - %player.getDatablock().wallJumpEnergy);
  112. %player.playThread(2,"shiftDown");
  113. %player.schedule(66,"playThread",2,"shiftUp");
  114. }
  115. if(%touch.getClassName() $= "fxDTSBrick")
  116. {
  117. %touch.onClimb(%player);
  118. }
  119. }
  120. }
  121. }
  122. if(%slot == 0)
  123. {
  124. if(%io)
  125. {
  126. %touch = containerRayCast(%player.getPosition(),vectorAdd(vectorScale(vectorNormalize(setword(%player.getEyeVector(),2,"0")),2),%player.getPosition()),$TypeMasks::FxBrickAlwaysObjectType|$TypeMasks::InteriorObjectType);
  127. if(!isObject(%touch))
  128. {
  129. return;
  130. }
  131. if(%touch.getClassName() $= "InteriorInstance")
  132. {
  133. %col = 1;
  134. } else {
  135. %col = %touch.isColliding();
  136. }
  137. if(isObject(%touch) && %col && (%touch.rejClimb == !$DefaultClimbable))
  138. {
  139. if(%player.pkm)
  140. {
  141. if(!%player.Holding)
  142. {
  143. %player.HoldPosition = %player.getPosition();
  144. %player.nhtick = schedule(100,0,"HoldTick",%player);
  145. %player.holding = 1;
  146. %player.PlayThread(1,"armReady");
  147. } else {
  148. %player.holding = 0;
  149. cancel(%player.nhtick);
  150. %player.holdposition = "";
  151. }
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }
  159. function Armor::onImpact(%db,%player,%obj,%vel,%totalvel)
  160. {
  161. if(!%player.getDatablock().isAgilePlayer)
  162. {
  163. Parent::onImpact(%db,%player,%obj,%vel,%totalvel);
  164. return;
  165. }
  166. %minigame = getMinigameFromObject(%player);
  167. if(!isObject(%minigame))
  168. {
  169. %falldmg = $Pref::Server::FallingDamage;
  170. } else {
  171. %falldmg = %minigame.fallingDamage;
  172. }
  173. if(!%falldmg)
  174. {
  175. Parent::onImpact(%db,%player,%obj,%vel,%totalvel);
  176. return;
  177. }
  178. %damage = (%totalvel * %player.getDatablock().SpeedDamageScale);
  179. %time = 250 + %player.client.getPing();
  180. %player.fallDamageVelMult = mClampF(%damage/5,5,25);
  181. %player.fallDamageSched = %player.schedule(%time,"damage",0,%player.getPosition(),%damage,$DamageType::Fall);
  182. }
  183. function Player::ActivateStuff(%player)
  184. {
  185. if(%player.pkm)
  186. {
  187. return;
  188. }
  189. Parent::ActivateStuff(%player);
  190. }
  191. function Armor::onCollision(%this, %obj, %col, %pos, %vel)
  192. {
  193. if(%vel > 7.5)
  194. {
  195. %start = %obj.getPosition();
  196. %end = vectorSub(%start, "0 0 1");
  197. %masks = ($TypeMasks::FxBrickObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::VehicleObjectType);
  198.  
  199. %sorryThatILandedOnYou = containerRayCast(%start, %end, %masks, %obj);
  200.  
  201. if(miniGameValidZombieTarget(%obj, %sorryThatILandedOnYou))
  202. {
  203. %damage = (%vel / 7) * 10;
  204. %sorryThatILandedOnYou.damage(%obj, %start, %damage, $DamageType::LeaperJump);
  205. }
  206. }
  207.  
  208. return parent::onCollision(%this, %obj, %col, %pos, %vel);
  209. }
  210.  
  211. function Armor::onImpact(%this, %obj, %vel)
  212. {
  213. return;
  214. }
  215.  
  216.  
  217. };
  218. ActivatePackage(Agility);
  219. function fxDTSBrick::setClimbable(%brick,%bool)
  220. {
  221. if($DefaultClimbable)
  222. {
  223. %brick.rejClimb = !%bool;
  224. } else {
  225. %brick.rejClimb = %bool;
  226. }
  227. }
  228. registerOutputEvent(fxDTSBrick,"setClimbable","bool",0);
  229. function fxDTSBrick::onClimb(%brick,%player)
  230. {
  231. $inputTarget_Self = %brick;
  232. $inputTarget_Player = %player;
  233. $inputTarget_Client = %player.client;
  234. %brick.processInputEvent("onClimb",%player.client);
  235. }
  236. registerInputEvent(fxDTSBrick,"onClimb","Self fxDTSBrick\tPlayer Player\tClient GameConnection");
  237.  
  238. function HoldTick(%player)
  239. {
  240. if(!isObject(%player))
  241. {
  242. return;
  243. }
  244. cancel(%player.nhtick);
  245. if(%player.pkm && %player.holding)
  246. {
  247. %player.setTransform(%player.HoldPosition);
  248. %player.setVelocity("0 0 2");
  249. %player.nhtick = schedule(100,0,"HoldTick",%player);
  250. } else {
  251. %player.holdPosition = "";
  252. }
  253. }
  254.  
  255. datablock PlayerData(PlayerAgile : PlayerStandardArmor)
  256. {
  257. cameramaxdist = 10;
  258. cameraVerticalOffset = 1.4;
  259. cameraHorizontalOffset = 0;
  260. cameraTilt = 0.2;
  261. maxfreelookangle = 2;
  262.  
  263. runForce = 6000;
  264. runEnergyDrain = 0;
  265. minRunEnergy = 0;
  266.  
  267. maxForwardSpeed = 14;
  268. maxBackwardSpeed = 10;
  269. maxSideSpeed = 10;
  270.  
  271. maxForwardCrouchSpeed = 5;
  272. maxBackwardCrouchSpeed = 5;
  273. maxSideCrouchSpeed = 5;
  274.  
  275. jumpForce = 1080;
  276. jumpEnergyDrain = 0;
  277. minJumpEnergy = 0;
  278. jumpDelay = 0;
  279.  
  280. minJetEnergy = 0;
  281. jetEnergyDrain = 0;
  282. canJet = 0;
  283.  
  284. showEnergyBar = 1;
  285. maxEnergy = 100;
  286. rechargeRate = 0.2;
  287.  
  288. maxDamage = 100;
  289.  
  290. isAgilePlayer = 1;
  291. alwaysClimb = 0;
  292. wallJumpVel = 12;
  293. wallJumpEnergy = 15;
  294. wallClimbVel = 12;
  295. wallClimbEnergy = 12;
  296. minWallEnergy = 20;
  297. highLevel = 7.2; // 5 plates = 1 unit, so 36 plates = 7.2 units
  298. fumbleChance = 150; // 150 out of 1000 = 15%
  299.  
  300. airControl = 0.15;
  301. speedDamagescale = 1.9;
  302.  
  303. uiName = "GoombaPlayer";
  304.  
  305. isSurvivor = 1;
  306. };
Advertisement
Add Comment
Please, Sign In to add comment