Advertisement
Lorenc

Zombie Filterscript by zeruel_angel (REUP)

Aug 5th, 2011
1,499
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 36.90 KB | None | 0 0
  1. //------------------------------------------------------------------------------
  2. //
  3. //   Zombie Filter Script v1.4
  4. //   Designed for SA-MP v0.2.2
  5. //
  6. //   Created by zeruel_angel
  7. //   If you speak spanish, please visit SPANISH forum in samp.tilens.com
  8. //   Si hablas español, por favor visita el foro en ESPAÑOL samp.tilens.com
  9. //------------------------------------------------------------------------------
  10.  
  11. #include <a_samp>
  12.  
  13. #define PRESS 123
  14. #define HOLD 456
  15.  
  16. new Ticket[MAX_PLAYERS];
  17.  
  18. forward HoldingFire();
  19. enum weapParts
  20. {
  21.     WeapId,
  22.     allow,
  23.     Float:range,
  24.     Float:wide,
  25.     damageMin,
  26.     damageMax,
  27.     cutting,
  28.     instaGib,
  29.     continua,
  30.     mnsg[150]
  31. };
  32.  
  33. new weapL[55][weapParts]=
  34. {
  35. //  ID                      allow   range   wide    dMin    dMax    cutting insGib  continua    msng
  36.     {0,                     true,   1.0,    45.0,    5,     10,     falsefalsefalse,  "~n~~n~~n~~n~~n~~n~~n~~w~Punch!!!"},
  37.     {WEAPON_BRASSKNUCKLE,   true,   1.5,    45.0,   5,      15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~y~Plack~w~!!!"},
  38.     {WEAPON_GOLFCLUB,       true,   2.0,    35.0,   20,     25,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~w~Fiuuuff!!! ~b~~h~Fiuuuff~w~!!!"},
  39.     {WEAPON_NITESTICK,      true,   1.5,    35.0,   10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~b~~h~Plafff~w~!!!"},
  40.     {WEAPON_KNIFE,          true,   1.5,    15.0,   10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~r~Fisss~w~!!!"},
  41.     {WEAPON_BAT,            true,   2.0,    35.0,   10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~g~~h~Paffffff~w~!!!"},
  42.     {WEAPON_SHOVEL,         true,   2.0,    35.0,   10,     25,     true,   falsefalse"~n~~n~~n~~n~~n~~n~~n~~r~~h~~h~PlanK~w~!!!"},
  43.     {WEAPON_POOLSTICK,      true,   2.0,    35.0,   10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~g~~h~Paffffff~w~!!!"},
  44.     {WEAPON_KATANA,         true,   2.0,    45.0,   20,     45,     true,   falsefalse"~n~~n~~n~~n~~n~~n~~n~~b~SWIFT~w~! ~b~SWIFT~w~!"},
  45.     {WEAPON_CHAINSAW,       true,   2.5,    35.0,   20,     35,     true,   falsetrue,   "~n~~n~~n~~n~~n~~n~~n~~g~BRRRRRRRNNNNNN~w~!!!!"},
  46.     {WEAPON_DILDO,          false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  47.     {WEAPON_DILDO2,         false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  48.     {WEAPON_VIBRATOR,       false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  49.     {WEAPON_VIBRATOR2,      false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  50.     {WEAPON_FLOWER,         false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  51.     {WEAPON_CANE,           true,   2.0,    35.0,   10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~g~~h~Paffffff~w~!!!"},
  52.     {WEAPON_GRENADE,        false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  53.     {WEAPON_TEARGAS,        false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  54.     {WEAPON_MOLTOV,         false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  55.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  56.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  57.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  58.     {WEAPON_COLT45,         true,   20.0,   7.0,    10,     15,     falsefalsetrue,   "~n~~n~~n~~n~~n~~n~~n~~r~Bang~w~!!~r~Bang~w~!!"},
  59.     {WEAPON_SILENCED,       true,   20.0,   3.0,    10,     15,     falsefalsefalse"~n~~n~~n~~n~~n~~n~~n~~r~Piuufff~w~!!"},
  60.     {WEAPON_DEAGLE,         true,   25.0,   3.0,    15,     20,     falsetrue,   true,   "~n~~n~~n~~n~~n~~n~~n~~r~Baaang~w~!!"},
  61.     {WEAPON_SHOTGUN,        true,   18.0,   7.0,    10,     25,     true,   true,   true,   "~n~~n~~n~~n~~n~~n~~n~~r~BUM~w~!!!!"},
  62.     {WEAPON_SAWEDOFF,       true,   12.0,   10.0,   12,     18,     true,   true,   true,   "~n~~n~~n~~n~~n~~n~~n~~r~BUM~w~!!~r~BUM~w~!!"},
  63.     {WEAPON_SHOTGSPA,       true,   18.0,   7.0,    25,     45,     true,   true,   true,   "~n~~n~~n~~n~~n~~n~~n~~r~BUUUM~w~!!!!"},
  64.     {WEAPON_UZI,            false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  65.     {WEAPON_MP5,            false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  66.     {WEAPON_AK47,           false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  67.     {WEAPON_M4,             false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  68.     {WEAPON_TEC9,           false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  69.     {WEAPON_RIFLE,          true,   50.0,   2.0,    0,      50,     falsetrue,   true,   "~n~~n~~n~~n~~n~~n~~n~~g~PUUUM~w~!!!!"},
  70.     {WEAPON_SNIPER,         true,   100.01.0,    0,      60,     falsetrue,   false"~n~~n~~n~~n~~n~~n~~n~~g~PUUUUUUUUMMMMM~w~!!!!"},
  71.     {WEAPON_ROCKETLAUNCHER, false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  72.     {WEAPON_HEATSEEKER,     false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  73.     {WEAPON_FLAMETHROWER,   true,   8.0,    15.0,   10,     20,     falsefalsetrue,   "~n~~n~~n~~n~~n~~n~~n~~r~Fuuu~y~uffffff~w~!!!!"},
  74.     {WEAPON_MINIGUN,        true,   25.0,   3.0,    1,      99,     true,   true,   true,   "~n~~n~~n~~n~~n~~n~~n~~r~MUAJAJAJAJAJAJ~w~!!!!!"},
  75.     {WEAPON_SATCHEL,        false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  76.     {WEAPON_BOMB,           false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  77.     {WEAPON_SPRAYCAN,       true,   2.0,    25.0,   10,     0,      falsefalsetrue,   "~n~~n~~n~~n~~n~~n~~n~~y~FS~b~SS~r~SS~g~SS~y~SS~w~!!!"},
  78.     {WEAPON_FIREEXTINGUISHER,true3.5,    15.0,   10,     0,      falsefalsetrue,   "~n~~n~~n~~n~~n~~n~~n~~w~Fuuuusssshhh~b~!!!!"},
  79.     {WEAPON_CAMERA,         false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  80.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  81.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  82.     {WEAPON_PARACHUTE,      false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  83.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  84.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  85.     {WEAPON_VEHICLE,        false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  86.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  87.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  88.     {-1,                    false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  89.     {WEAPON_DROWN,          false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."},
  90.     {WEAPON_COLLISION,      false0.0,    0.0,    0,      0,      falsefalsefalse"~w~This ~r~weapon ~w~is not yet ~b~available ~w~for beeing used against ~g~zombies~w~!!!! ~y~sorry~w~. ~n~~b~zeruel_angel~w~."}
  91. };
  92.  
  93. new setNumber = 0;
  94.  
  95. new set[6][3][2]=
  96. {
  97.     {{WEAPON_KATANA,1000},      {WEAPON_SHOTGUN,50},            {WEAPON_FIREEXTINGUISHER,500}},
  98.     {{WEAPON_KATANA,1000},      {WEAPON_SILENCED,100},          {WEAPON_SAWEDOFF,25}},
  99.     {{WEAPON_NITESTICK,1000},   {WEAPON_COLT45,100},            {WEAPON_SHOTGUN,25}},
  100.     {{WEAPON_GOLFCLUB,1000},    {WEAPON_FIREEXTINGUISHER,400}{WEAPON_FLAMETHROWER,50}},
  101.     {{WEAPON_SHOVEL,1000},      {WEAPON_SHOTGSPA,100},          {WEAPON_RIFLE,25}},
  102.     {{WEAPON_KNIFE,1000},       {WEAPON_SHOTGSPA,100},          {WEAPON_SNIPER,25}}
  103. };
  104.  
  105. new NOFZombies=0;
  106. new TOTALZombies=10;
  107. new Float:Zspeed = 2.0;
  108. new ZTimerSpeed = 500;
  109. new Float:vaiven = 5.0;
  110. new Float:X,Float:Y,Float:Z;
  111.  
  112. #define MAX_ZOMBIES 100
  113.  
  114. #define brazo1 1
  115. #define brazo2 2
  116. #define pierna1 4
  117. #define pierna2 8
  118. enum zombiParts
  119. {
  120.     rArm,
  121.     lArm,
  122.     rLeg,
  123.     lLeg,
  124.     head,
  125.     torso,
  126.     pedazos,
  127.     HP,
  128.     Float:ArmAngle,
  129.     Float:ArmStatus,
  130.     Float:angulo,
  131.     Float:speed,
  132.     LegsH,
  133.     undead,
  134.     target
  135. };
  136.  
  137. new zombie[MAX_ZOMBIES][zombiParts];
  138.  
  139. enum zombiPos
  140. {
  141.     partModel,
  142.     Float:RelX,
  143.     Float:RelY,
  144.     Float:RelZ,
  145.     Float:RelrX,
  146.     Float:RelrY,
  147.     Float:RelrZ
  148. }
  149. enum zpart
  150. {
  151.     rLegZ,
  152.     rArmZ,
  153.     torsoZ,
  154.     lArmZ,
  155.     headZ,
  156.     lLegZ
  157. }
  158. new z1[zpart][zombiPos]=
  159. {
  160.     {2905,-0.115479,-0.023924, -1.280131, -90.000000, 90.000000,0.000000},
  161.     {2906, -0.218995, 0.200928, -0.253135, 0.000000, 180.000000, 0.000000},
  162.     {2907, -0.032227, -0.045897, -0.544213, 270.000000, 0.000000, 0.000000},
  163.     {2906, 0.187987, 0.158448, -0.265793, 0.000000, 0.000000, 0.000000},
  164.     {2908, 0.000000, 0.000000, 0.000000, 270.000000, 90.000000, 0.000000},
  165.     {2905, 0.101074, -0.012694, -1.288253, 270.000000, 90.000000, 0.000000}
  166. };
  167.  
  168. new z2[6][zombiPos]=
  169. {
  170.     {2905, 0.005614, -0.110107, -1.280131, -90.000000, 90.000000, 90.000000},
  171.     {2906, -0.148926, -0.180663, -0.253135, 0.000000, 180.000000, 90.000000},
  172.     {2907, 0.047852, -0.039061, -0.544213, 270.000000, 0.000000, 90.000000},
  173.     {2906, -0.152343, 0.171387, -0.265793, 0.000000, 0.000000, 90.000000},
  174.     {2908, 0.000000, 0.000000, 0.000000, 270.000000, 90.000000, 90.000000},
  175.     {2905, 0.000977, 0.090332, -1.288253, 270.000000, 90.000000, 90.000000}
  176. };
  177. enum zArm
  178. {
  179.     Float:AZ,
  180.     Float:AA
  181. };
  182. enum tipo
  183. {
  184.     der,
  185.     izq
  186. };
  187. new A1[tipo][zArm]=
  188. {
  189.     {-0.253135,0.0},
  190.     {-0.265793,0.0}
  191. };
  192. new A2[tipo][zArm]=
  193. {
  194.     {-0.359635, -90.0},
  195.     {-0.338874, -90.0}
  196. };
  197. forward zombieAtaca(playerid);
  198. forward attacknearest();
  199. new TimerAtaca=-1;
  200. new TimerAPO=-1;
  201. new PlayerDeath[MAX_PLAYERS];
  202.  
  203. new apocalipsis = false;
  204.  
  205. enum WeaponType
  206. {
  207.     pWeapId,
  208.     pAmmo
  209. };
  210. new WeaponList[MAX_PLAYERS][12][WeaponType];
  211. new LastWeaponUsed[MAX_PLAYERS];
  212. forward QuitarArmasZombie(playerid);
  213. forward DevolverArmasZombie(playerid);
  214. forward CreateRandomZombie();
  215. new money[MAX_PLAYERS];
  216. new scorez=0;
  217. new scorep=0;
  218.  
  219. #define delay 500
  220. //------------------------------------------------------------------------------
  221. public OnFilterScriptInit()
  222. {
  223.     print("\n ZOMBIE Filter Script v1.2 Loading...\n**********************\n      (Zeruel_Angel)\n");
  224.     return 1;
  225. }
  226. public OnGameModeInit()
  227. {
  228.     return 1;
  229. }
  230. //------------------------------------------------------------------------------
  231. public OnFilterScriptExit()
  232. {
  233.     print("\n*********** ZOMBIE (zeruel_angel) ***********\n");
  234.     cleanZombies();
  235.     return 1;
  236. }
  237. public OnGameModeExit()
  238. {
  239.     cleanZombies();
  240.     return 1;
  241. }
  242. //------------------------------------------------------------------------------
  243. public attacknearest()
  244. {
  245.     new Float:pX,Float:pY,Float:pZ;
  246.     new Float:distNew,Float:distOld;
  247.     new candidato;
  248.     for (new j=0;j<TOTALZombies;j++)
  249.     {
  250.         if (zombie[j][undead])
  251.         {
  252.             distOld=9999.9;
  253.             candidato=-1;
  254.             GetObjectPos(zombie[j][head],X,Y,Z);
  255.             for(new i=0;i<MAX_PLAYERS;i++)
  256.             {
  257.                 if(IsPlayerConnected(i))
  258.                 {
  259.                     GetPlayerPos(i,pX,pY,pZ);
  260.                     distNew = floatabs(pX-X) + floatabs(pY-Y);
  261.                     if (distNew<distOld)
  262.                     {
  263.                     distOld = distNew;
  264.                     candidato = i;
  265.                     }
  266.                 }
  267.             }
  268.             if (distOld>100.0)
  269.             {
  270.                 DestroyObject(zombie[j][head]);
  271.                 DestroyObject(zombie[j][rLeg]);
  272.                 DestroyObject(zombie[j][lLeg]);
  273.                 DestroyObject(zombie[j][rArm]);
  274.                 DestroyObject(zombie[j][lArm]);
  275.                 DestroyObject(zombie[j][torso]);
  276.                 NOFZombies--;
  277.                 zombie[j][undead]=false;
  278.                 SetTimer("CreateRandomZombie",1000,0);
  279.             }
  280.             zombie[j][target]=candidato;
  281.         }
  282.     }
  283. }
  284. //------------------------------------------------------------------------------
  285. cleanZombies()
  286. {
  287.     for (new j=0;j<TOTALZombies;j++)
  288.     {
  289.         zombie[j][undead]=false;
  290.         if (IsValidObject(zombie[j][torso]))DestroyObject(zombie[j][torso]);
  291.         if (IsValidObject(zombie[j][head])) DestroyObject(zombie[j][head]);
  292.         if (IsValidObject(zombie[j][rLeg])) DestroyObject(zombie[j][rLeg]);
  293.         if (IsValidObject(zombie[j][lLeg])) DestroyObject(zombie[j][lLeg]);
  294.         if (IsValidObject(zombie[j][rArm])) DestroyObject(zombie[j][rArm]);
  295.         if (IsValidObject(zombie[j][lArm])) DestroyObject(zombie[j][lArm]);
  296.         NOFZombies--;
  297.     }
  298.     if (TimerAPO!=-1){KillTimer(TimerAPO);}
  299.     if (TimerAtaca!=-1){KillTimer(TimerAtaca);}
  300. }
  301. //------------------------------------------------------------------------------
  302.  strtok(const string[], &index)
  303. {
  304.     new length = strlen(string);
  305.     while ((index < length) && (string[index] <= ' '))
  306. {
  307.         index++;
  308. }
  309.  
  310.     new offset = index;
  311.     new result[20];
  312.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  313. {
  314.         result[index - offset] = string[index];
  315.         index++;
  316. }
  317.     result[index - offset] = EOS;
  318.     return result;
  319. }
  320. //------------------------------------------------------------------------------
  321. CrearZombie(Float:pX,Float:pY,Float:pZ,Float:angle)
  322. {
  323.     new Float:PEPE = floatsin((angle*3.14159/180.0));
  324.     new Float:PIPO = floatcos((angle*3.14159/180.0));
  325.     if (NOFZombies<TOTALZombies)
  326.     {
  327.         new j=0;
  328.         while ((zombie[j][undead])){j++;}
  329.         if (IsValidObject(zombie[j][torso]))
  330.         {
  331.             DestroyObject(zombie[j][head]);
  332.             DestroyObject(zombie[j][rLeg]);
  333.             DestroyObject(zombie[j][lLeg]);
  334.             DestroyObject(zombie[j][rArm]);
  335.             DestroyObject(zombie[j][lArm]);
  336.             DestroyObject(zombie[j][torso]);
  337.         }
  338.         zombie[j][head]=CreateObject(z1[headZ][partModel],pX,pY,pZ,z1[headZ][RelrX],z1[headZ][RelrY],angle);
  339.         zombie[j][torso]=CreateObject(z1[torsoZ][partModel],pX+z1[torsoZ][RelX]*PIPO+PEPE*z2[torsoZ][RelX],pY+z1[torsoZ][RelY]*PIPO+PEPE*z2[torsoZ][RelY],pZ+z1[torsoZ][RelZ],z1[torsoZ][RelrX],z1[torsoZ][RelrY],angle);
  340.         zombie[j][lArm]=CreateObject(z1[lArmZ][partModel],pX+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],pY+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],pZ+z1[lArmZ][RelZ],z1[lArmZ][RelrX],z1[lArmZ][RelrY],angle);
  341.         zombie[j][rArm]=CreateObject(z1[rArmZ][partModel],pX+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],pY+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],pZ+z1[rArmZ][RelZ],z1[rArmZ][RelrX],z1[rArmZ][RelrY],angle);
  342.         zombie[j][rLeg]=CreateObject(z1[rLegZ][partModel],pX+z1[rLegZ][RelX]*PIPO+PEPE*z2[rLegZ][RelX],pY+z1[rLegZ][RelY]*PIPO+PEPE*z2[rLegZ][RelY],pZ+z1[rLegZ][RelZ],z1[rLegZ][RelrX],z1[rLegZ][RelrY],angle);
  343.         zombie[j][lLeg]=CreateObject(z1[lLegZ][partModel],pX+z1[lLegZ][RelX]*PIPO+PEPE*z2[lLegZ][RelX],pY+z1[lLegZ][RelY]*PIPO+PEPE*z2[lLegZ][RelY],pZ+z1[lLegZ][RelZ],z1[lLegZ][RelrX],z1[lLegZ][RelrY],angle);
  344.  
  345.         zombie[j][LegsH]=true;
  346.         zombie[j][speed]=random(100)+50;
  347.         zombie[j][ArmAngle]=0;
  348.         zombie[j][ArmStatus]=random(5)+5;
  349.         zombie[j][undead]=true;
  350.         zombie[j][HP]=100;
  351.         zombie[j][pedazos]= brazo1 + brazo2 + pierna1 + pierna2;
  352.         zombie[j][angulo]=angle;
  353.         NOFZombies++;
  354.     }
  355.     return 1;
  356. }
  357. //------------------------------------------------------------------------------
  358. public zombieAtaca()
  359. {
  360.     new Float:pX,Float:pY,Float:pZ,Float:angle,Float:PEPE,Float:PIPO,Float:AA1,Float:AA2,Float:H;
  361.     new vehicleStatus;
  362.     if (NOFZombies<1 && !apocalipsis)
  363.     {
  364.         if (TimerAPO!=-1){KillTimer(TimerAPO);}
  365.         if (TimerAtaca!=-1){KillTimer(TimerAtaca);}
  366.     }
  367.     HoldingFire();
  368.     for (new j=0;j<TOTALZombies;j++)
  369.     {
  370.         if(zombie[j][undead]&&IsPlayerConnected(zombie[j][target]) && GetPlayerInterior(zombie[j][target])==0)
  371.         {
  372.             vehicleStatus = IsPlayerInAnyVehicle(zombie[j][target]);
  373.             GetPlayerPos(zombie[j][target],pX,pY,pZ);
  374.             pZ+=0.7;
  375.             GetObjectPos(zombie[j][head],X,Y,Z);
  376.             angle = 180.0-atan2(X-pX,Y-pY);
  377.             angle+=vaiven;
  378.             vaiven*=-1;
  379.             PEPE = floatsin((angle*3.14159/180.0));
  380.             PIPO = floatcos((angle*3.14159/180.0));
  381.             zombie[j][angulo]=angle;
  382.             if(floatabs(zombie[j][ArmAngle])>10.0){zombie[j][ArmStatus]*=-1;}
  383.             zombie[j][ArmAngle]+=zombie[j][ArmStatus];
  384.  
  385.             zombie[j][LegsH]=!zombie[j][LegsH];
  386.  
  387.             AA1 = floatcos(zombie[j][ArmAngle]*3.14159/180.0);
  388.             AA2 = floatsin(zombie[j][ArmAngle]*3.14159/180.0);
  389.  
  390.             if ((pZ-Z)>3.0)
  391.             {
  392.                 Z+=1.0;
  393.             }
  394.             else if((pZ-Z)<-3.0)
  395.             {
  396.                 Z-=1.0;
  397.             }
  398.             //we destroy the old zombi
  399.             DestroyObject(zombie[j][torso]);
  400.             DestroyObject(zombie[j][head]);
  401.             if (zombie[j][pedazos] & brazo1) DestroyObject(zombie[j][rArm]);
  402.             if (zombie[j][pedazos] & brazo2) DestroyObject(zombie[j][lArm]);
  403.             if (zombie[j][pedazos] & pierna1) DestroyObject(zombie[j][rLeg]);
  404.             if (zombie[j][pedazos] & pierna2) DestroyObject(zombie[j][lLeg]);
  405.  
  406.             //we recreate the zombie
  407.             zombie[j][head]=CreateObject(z1[headZ][partModel],X,Y,pZ,z1[headZ][RelrX],z1[headZ][RelrY],angle+vaiven);
  408.             zombie[j][torso]=CreateObject(z1[torsoZ][partModel],X+z1[torsoZ][RelX]*PIPO+PEPE*z2[torsoZ][RelX],Y+z1[torsoZ][RelY]*PIPO+PEPE*z2[torsoZ][RelY],pZ+z1[torsoZ][RelZ],z1[torsoZ][RelrX],z1[torsoZ][RelrY],angle);
  409.             if (zombie[j][pedazos] & brazo1)
  410.             zombie[j][rArm]=CreateObject(z1[rArmZ][partModel],X+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],Y+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],pZ+A1[der][AZ]*AA1+AA2*A2[der][AZ],(-1)*zombie[j][ArmAngle],z1[rArmZ][RelrY],angle);
  411.             if (zombie[j][pedazos] & brazo2)
  412.             zombie[j][lArm]=CreateObject(z1[lArmZ][partModel],X+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],Y+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],pZ+A1[izq][AZ]*AA1-AA2*A2[izq][AZ],zombie[j][ArmAngle],z1[lArmZ][RelrY],angle);
  413.             if (zombie[j][pedazos] & pierna1)
  414.             zombie[j][rLeg]=CreateObject(z1[rLegZ][partModel],X+z1[rLegZ][RelX]*PIPO+PEPE*z2[rLegZ][RelX],Y+z1[rLegZ][RelY]*PIPO+PEPE*z2[rLegZ][RelY],pZ+z1[rLegZ][RelZ]+float(zombie[j][LegsH])*0.2,z1[rLegZ][RelrX],z1[rLegZ][RelrY],angle);
  415.  
  416.             if (zombie[j][pedazos] & pierna2)
  417.             zombie[j][lLeg]=CreateObject(z1[lLegZ][partModel],X+z1[lLegZ][RelX]*PIPO+PEPE*z2[lLegZ][RelX],Y+z1[lLegZ][RelY]*PIPO+PEPE*z2[lLegZ][RelY],pZ+z1[lLegZ][RelZ]+float(!zombie[j][LegsH])*0.2,z1[lLegZ][RelrX],z1[lLegZ][RelrY],angle);
  418.  
  419.             if ( (floatabs(pX-X) + floatabs(pY-Y) + floatabs(pZ-Z) )>(2.0+6.0*vehicleStatus))//The zombie will move to your position to eat you because if you are too far away
  420.             {
  421.                 MoveObject(zombie[j][head],pX,pY,pZ,zombie[j][speed]*0.01*Zspeed);
  422.                 MoveObject(zombie[j][torso],pX+z1[torsoZ][RelX]*PIPO+PEPE*z2[torsoZ][RelX],pY+z1[torsoZ][RelY]*PIPO+PEPE*z2[torsoZ][RelY],pZ+z1[torsoZ][RelZ],zombie[j][speed]*0.01*Zspeed);
  423.                 if (zombie[j][pedazos] & brazo1)
  424.                 MoveObject(zombie[j][rArm],pX+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],pY+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],pZ+A1[der][AZ]*AA1+AA2*A2[der][AZ],zombie[j][speed]*0.01*Zspeed);
  425.                 if (zombie[j][pedazos] & brazo2)
  426.                 MoveObject(zombie[j][lArm],pX+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],pY+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],pZ+A1[izq][AZ]*AA1-AA2*A2[izq][AZ],zombie[j][speed]*0.01*Zspeed);
  427.                 if (zombie[j][pedazos] & pierna1)
  428.                 MoveObject(zombie[j][rLeg],pX+z1[rLegZ][RelX]*PIPO+PEPE*z2[rLegZ][RelX],pY+z1[rLegZ][RelY]*PIPO+PEPE*z2[rLegZ][RelY],pZ+z1[rLegZ][RelZ]+float(zombie[j][LegsH])*0.2,zombie[j][speed]*0.01*Zspeed);
  429.                 if (zombie[j][pedazos] & pierna2)
  430.                 MoveObject(zombie[j][lLeg],pX+z1[lLegZ][RelX]*PIPO+PEPE*z2[lLegZ][RelX],pY+z1[lLegZ][RelY]*PIPO+PEPE*z2[lLegZ][RelY],pZ+z1[lLegZ][RelZ]+float(!zombie[j][LegsH])*0.2,zombie[j][speed]*0.01*Zspeed);
  431.             }
  432.             else//the zombie EATS you unless you are in a vehicle or you are alredy dead
  433.             {
  434.                 StopObject(zombie[j][head]);
  435.                 StopObject(zombie[j][torso]);
  436.                 StopObject(zombie[j][rArm]);
  437.                 StopObject(zombie[j][lArm]);
  438.                 StopObject(zombie[j][rLeg]);
  439.                 StopObject(zombie[j][lLeg]);
  440.                 GetPlayerHealth(zombie[j][target],H);
  441.                 if ( !vehicleStatus && !PlayerDeath[zombie[j][target]])
  442.                 {
  443.                     SetPlayerHealth(zombie[j][target],H-5.0);
  444.                 }
  445.             }
  446.         }
  447.     }
  448.     return 1;
  449. }
  450. //------------------------------------------------------------------------------
  451. public OnPlayerSpawn(playerid)
  452. {
  453.     PlayerDeath[playerid]=false;
  454.     if (apocalipsis)
  455.     {
  456.         ResetPlayerMoney(playerid);
  457.         ResetPlayerWeapons(playerid);
  458.         GivePlayerWeapon(playerid,set[setNumber][0][0],set[setNumber][0][1]);
  459.         GivePlayerWeapon(playerid,set[setNumber][1][0],set[setNumber][1][1]);
  460.         GivePlayerWeapon(playerid,set[setNumber][2][0],set[setNumber][2][1]);
  461.     }
  462.     return 1;
  463. }
  464. //------------------------------------------------------------------------------
  465. public OnPlayerDeath(playerid, killerid, reason)
  466. {
  467.     PlayerDeath[playerid]=true;
  468.     if (apocalipsis && killerid==INVALID_PLAYER_ID)
  469.     {
  470.         new tmp[255];
  471.         format(tmp,255,"~w~SCORE~n~~r~Zombies~w~: %d ~y~+1 ~n~~b~Humans~w~: %d",scorez,scorep);
  472.         scorez++;
  473.         GameTextForAll(tmp,2000,4);
  474.         attacknearest();
  475.     }
  476.  
  477.     return 1;
  478. }
  479. //------------------------------------------------------------------------------
  480. public OnPlayerConnect(playerid)
  481. {
  482.     if (apocalipsis)
  483.     {
  484.         money[playerid]=GetPlayerMoney(playerid);
  485.         ResetPlayerMoney(playerid);
  486.         QuitarArmasZombie(playerid);
  487.     }
  488.     return 1;
  489. }
  490. //------------------------------------------------------------------------------
  491. public OnPlayerCommandText(playerid, cmdtext[])
  492. {
  493.     new cmd[256];
  494.     new tmp[255];
  495.     new idx;
  496.     cmd = strtok(cmdtext, idx);
  497.     if (IsPlayerAdmin(playerid))
  498.     {
  499.     if  (strcmp(cmd, "/zspeed", true)==0)
  500.     {
  501.         tmp = strtok(cmdtext, idx);
  502.         if  (!strlen(tmp))
  503.         {
  504.             SendClientMessage(playerid, 0xFFFFFFAA, "USE: /zspeed [speed]");
  505.             return 1;
  506.         }
  507.         Zspeed=floatstr(tmp);
  508.         return 1;
  509.     }
  510.     if  (strcmp(cmd, "/ZTimerSpeed", true)==0)
  511.     {
  512.         tmp = strtok(cmdtext, idx);
  513.         if  (!strlen(tmp))
  514.         {
  515.             SendClientMessage(playerid, 0xFFFFFFAA, "USE: /ZTimerSpeed [timer speed]");
  516.             return 1;
  517.         }
  518.         ZTimerSpeed=strval(tmp);
  519.         OnPlayerCommandText(playerid, "/zstop");
  520.         OnPlayerCommandText(playerid, "/zstart");
  521.         return 1;
  522.     }
  523.     if (strcmp(cmd, "/zo", true)==0)
  524.     {
  525.         new Float:pX,Float:pY,Float:pZ,Float:Ang;
  526.         GetPlayerPos(playerid,pX,pY,pZ);
  527.         GetPlayerFacingAngle(playerid,Ang);
  528.         pX=pX+3.0*floatsin(-Ang,degrees);
  529.         pY=pY+3.0*floatcos(-Ang,degrees);
  530.         pZ=pZ+0.7;
  531.         CrearZombie(pX,pY,pZ,Ang+180.0);
  532.         return 1;
  533.     }
  534.     if  (strcmp(cmd, "/zstart", true)==0)
  535.     {
  536.         if (NOFZombies>0)
  537.         {
  538.             new id;
  539.             tmp = strtok(cmdtext, idx);
  540.             if  (!strlen(tmp))
  541.             {
  542.                 id = playerid;
  543.             }
  544.             else
  545.             {
  546.                 if (!IsPlayerConnected(strval(tmp)))
  547.                 {
  548.                     SendClientMessage(playerid, 0xFFFFFFAA, "That player is not conected!");
  549.                     return 1;
  550.                 }
  551.                 id = strval(tmp);
  552.             }
  553.             if (TimerAtaca!=-1){KillTimer(TimerAtaca);}
  554.             for (new j=0;j<TOTALZombies;j++){zombie[j][target]=id;}
  555.             TimerAtaca=SetTimer("zombieAtaca",ZTimerSpeed,1);
  556.             return 1;
  557.         }
  558.         SendClientMessage(playerid, 0xFFFFFFAA, "There are no zombies");
  559.         return 1;
  560.     }
  561.     if  (strcmp(cmd, "/zstop", true)==0)
  562.     {
  563.         if (NOFZombies>0)
  564.         {
  565.             if (TimerAtaca!=-1)
  566.             {
  567.                 KillTimer(TimerAtaca);
  568.             }
  569.             for (new j=0;j<TOTALZombies;j++)
  570.             {
  571.                 if (zombie[j][undead])
  572.                 {
  573.                     StopObject(zombie[j][head]);
  574.                     StopObject(zombie[j][torso]);
  575.                     StopObject(zombie[j][rArm]);
  576.                     StopObject(zombie[j][lArm]);
  577.                     StopObject(zombie[j][rLeg]);
  578.                     StopObject(zombie[j][lLeg]);
  579.                 }
  580.             }
  581.             return 1;
  582.         }
  583.         SendClientMessage(playerid, 0xFFFFFFAA, "There are no zombies");
  584.         return 1;
  585.     }
  586.     if  (strcmp(cmd, "/zclean", true)==0)
  587.     {
  588.         cleanZombies();
  589.         SendClientMessage(playerid, 0xFFFFFFAA, "There are no zombies anymore!");
  590.         return 1;
  591.     }
  592.     if  (strcmp(cmd, "/ttt", true)==0)
  593.     {
  594.         tmp = strtok(cmdtext, idx);
  595.         if(!strlen(tmp))
  596.         {
  597.             SendClientMessage(playerid, 0xFFFFFFAA, "USO: /ttt [hora]");
  598.             return 1;
  599.         }
  600.         new hora = strval(tmp);
  601.         SetWorldTime(hora);
  602.         format(tmp, sizeof(tmp), "Ahora la hora es: %d", hora);
  603.         SendClientMessage(playerid, 0xFFFFFFAA, tmp);
  604.         return 1;
  605.     }
  606.     if  (strcmp(cmd, "/www", true)==0)
  607.     {
  608.         tmp = strtok(cmdtext, idx);
  609.         if(!strlen(tmp))
  610.         {
  611.             SendClientMessage(playerid, 0xFFFFFFAA, "USO: /www [weather]");
  612.             return 1;
  613.         }
  614.         new www = strval(tmp);
  615.         SetWeather(www);
  616.         format(tmp, sizeof(tmp), "Ahora el clima es: %d", www);
  617.         SendClientMessage(playerid, 0xFFFFFFAA, tmp);
  618.         return 1;
  619.     }
  620.     if  (strcmp(cmd, "/zcantZombies", true)==0)
  621.     {
  622.         tmp = strtok(cmdtext, idx);
  623.         if(!strlen(tmp))
  624.         {
  625.             SendClientMessage(playerid, 0xFFFFFFAA, "USO: /zcantZombies [cuantity]");
  626.             return 1;
  627.         }
  628.         cleanZombies();
  629.         TOTALZombies = strval(tmp);
  630.         return 1;
  631.     }
  632.     if  (strcmp(cmd, "/ambient", true)==0)
  633.     {
  634.         SetWorldTime(0);
  635.         SetWeather(8);
  636.         return 1;
  637.     }
  638.     if  (strcmp(cmd, "/apocalipsison", true)==0)
  639.     {
  640.         apocalipsis = true;
  641.         for (new i=0;i<MAX_PLAYERS;i++)
  642.         {
  643.             if(IsPlayerConnected(i))
  644.             {
  645.                 QuitarArmasZombie(i);
  646.                 money[playerid]=GetPlayerMoney(playerid);
  647.                 ResetPlayerMoney(playerid);
  648.             }
  649.         }
  650.         scorez=0;
  651.         scorep=0;
  652.         SetWorldTime(0);
  653.         SetWeather(8);
  654.         GameTextForAll("~r~apocalipsis ~w~mode:~b~on~w~! ~n~~n~~n~~g~ZOMBIES~w~!!!",5000,5);
  655.         if (TimerAPO!=-1){KillTimer(TimerAPO);}
  656.         TimerAPO = SetTimer("attacknearest",10000,1);
  657.         if (TimerAtaca!=-1){KillTimer(TimerAtaca);}
  658.         TimerAtaca=SetTimer("zombieAtaca",ZTimerSpeed,1);
  659.         while (NOFZombies<TOTALZombies)CreateRandomZombie();
  660.         attacknearest();
  661.         return 1;
  662.     }
  663.     if  (strcmp(cmd, "/apocalipsisoff", true)==0)
  664.     {
  665.         if (apocalipsis)
  666.         {
  667.             for (new i=0;i<MAX_PLAYERS;i++)if(IsPlayerConnected(i)){DevolverArmasZombie(i);GivePlayerMoney(i,money[i]);}
  668.             format(tmp,255,"~w~SCORE ~r~Zombies~w~: %d ~b~Humans~w~: %d~n~~n~~r~apocalipsis ~w~mode:~b~off~w~",scorez,scorep);
  669.             GameTextForAll(tmp,6000,4);
  670.             apocalipsis = false;
  671.             SetWorldTime(12);
  672.             SetWeather(7);
  673.             cleanZombies();
  674.         }
  675.         if (TimerAPO!=-1){KillTimer(TimerAPO);}
  676.         if (TimerAtaca!=-1){KillTimer(TimerAtaca);}
  677.         return 1;
  678.     }
  679.     if      (strcmp(cmd, "/vaiven", true)==0)
  680.     {
  681.             tmp = strtok(cmdtext, idx);
  682.             if      (!strlen(tmp))
  683.             {
  684.                     SendClientMessage(playerid, 0xFFFFFFAA, "USO: /vaiven [angulo]");
  685.                     return 1;
  686.             }
  687.             vaiven=floatstr(tmp);
  688.             return 1;
  689.     }
  690.     if      (strcmp(cmd, "/zSetWeaponSet", true)==0)
  691.     {
  692.             tmp = strtok(cmdtext, idx);
  693.             if      (!strlen(tmp))
  694.             {
  695.                     SendClientMessage(playerid, 0xFFFFFFAA, "USO: /zSetWeaponSet [SET]");
  696.                     return 1;
  697.             }
  698.             if      (strval(tmp)<sizeof(set))
  699.             {
  700.                     format(tmp,sizeof(tmp),"Please pick a number beetwen 0-%d",sizeof(set));
  701.                     SendClientMessage(playerid, 0xFFFFFFAA, tmp);
  702.                     return 1;
  703.             }
  704.             setNumber=strval(tmp);
  705.             return 1;
  706.     }
  707.     if      (strcmp(cmd, "/zGetWeapon", true)==0)
  708.     {
  709.             tmp = strtok(cmdtext, idx);
  710.             if      (!strlen(tmp))
  711.             {
  712.                     SendClientMessage(playerid, 0xFFFFFFAA, "USO: /zGetWeapon [weapon]");
  713.                     return 1;
  714.             }
  715.             GivePlayerWeapon(playerid,strval(tmp),10000);
  716.             return 1;
  717.     }
  718.     if      (strcmp(cmd, "/zGiveWeaponForAll", true)==0)
  719.     {
  720.             tmp = strtok(cmdtext, idx);
  721.             if      (!strlen(tmp))
  722.             {
  723.                     SendClientMessage(playerid, 0xFFFFFFAA, "USO: /zGiveWeaponForAll [weapon]");
  724.                     return 1;
  725.             }
  726.             new w = strval(tmp);
  727.             for (new i=0;i<MAX_PLAYERS;i++)if(IsPlayerConnected(i))
  728.             GivePlayerWeapon(i,w,10000);
  729.             return 1;
  730.     }
  731.  
  732.     }//IF PLAYER ADMIN
  733.     return 0;
  734. }
  735. //------------------------------------------------------------------------------
  736. fire(playerid,STAT)
  737. {
  738.     new tmp[250];
  739.     new  weap = GetPlayerWeapon(playerid);
  740.     format(tmp,sizeof(tmp),"ARMA ID : %d ", weap);
  741.     SendClientMessageToAll(0xFFFF00AA,tmp);
  742.     if (!weapL[weap][allow])
  743.     {
  744.  
  745.         GameTextForPlayer(playerid,weapL[weap][mnsg],2000,5);
  746.         return 1;
  747.     }
  748.     if (!weapL[weap][continua] && STAT==HOLD)
  749.     {
  750.         return 1;
  751.     }
  752.     Ticket[playerid]=tickcount()+delay;
  753.  
  754.     new Float:pX,Float:pY,Float:pZ,Float:pA,Float:PEPE,Float:PIPO;
  755.     new Float:zzX,Float:zzY,Float:zzA;
  756.     GetPlayerPos(playerid,pX,pY,pZ);
  757.     GetPlayerFacingAngle(playerid,pA);
  758.     pZ=pZ+0.7;
  759.     new ran;
  760.     for (new j=0;j<TOTALZombies;j++)
  761.     {
  762.         if (IsValidObject(zombie[j][torso]))
  763.         {
  764.             GetObjectPos(zombie[j][head],X,Y,Z);
  765.             zzX=X-pX;zzY=Y-pY;zzA=atan2(zzX,zzY);if(zzA>0)zzA-=360.0;
  766.         }
  767.         if (zombie[j][undead]&&(floatsqroot(floatpower(zzX,2)+floatpower(zzY,2)))<weapL[weap][range] && (floatabs(zzA+pA)<weapL[weap][wide]))
  768.         {
  769.             Z-=1.7;
  770.             zombie[j][HP]-= random(weapL[weap][damageMax]-weapL[weap][damageMin])+weapL[weap][damageMin];
  771.             GameTextForPlayer(playerid,weapL[weap][mnsg],delay-100,5);
  772.             PEPE = floatsin((zombie[j][angulo]*3.14159/180.0));
  773.             PIPO = floatcos((zombie[j][angulo]*3.14159/180.0));
  774. /*          if (weapL[weap][cutting] || weapL[weap][instaGib])
  775.             {
  776.                 ran = random (30);
  777.                 if (ran < 5)
  778.                 {
  779.                     zombie[j][undead]=false;
  780.                     NOFZombies--;
  781.                     if (apocalipsis)
  782.                     {
  783.                         format(tmp,sizeof(tmp),"~w~SCORE~n~~r~Zombies~w~: %d ~n~~b~Humans~w~: %d ~y~+1",scorez,scorep);
  784.                         scorep++;
  785.                         GameTextForAll(tmp,2000,4);
  786.                         SetTimer("CreateRandomZombie",10000,0);
  787.                         attacknearest();
  788.                     }
  789.                     Z+=1.7;
  790.                     DestroyObject(zombie[j][head]);
  791.                     StopObject(zombie[j][torso]);
  792.                     if (zombie[j][pedazos] & brazo1)
  793.                     MoveObject(zombie[j][rArm],X+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],Y+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],Z-0.253135,100.0);
  794.                     if (zombie[j][pedazos] & brazo2)
  795.                     MoveObject(zombie[j][lArm],X+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],Y+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],Z-0.265793,100.0);
  796.                     if (zombie[j][pedazos] & pierna1)
  797.                     MoveObject(zombie[j][rLeg],X+z1[rLegZ][RelX]*PIPO+PEPE*z2[rLegZ][RelX],Y+z1[rLegZ][RelY]*PIPO+PEPE*z2[rLegZ][RelY],Z+z1[rLegZ][RelZ],100.0);
  798.                     if (zombie[j][pedazos] & pierna2)
  799.                     MoveObject(zombie[j][lLeg],X+z1[lLegZ][RelX]*PIPO+PEPE*z2[lLegZ][RelX],Y+z1[lLegZ][RelY]*PIPO+PEPE*z2[lLegZ][RelY],Z+z1[lLegZ][RelZ],100.0);
  800.                     NOFZombies--;
  801.                     Z-=1.7;
  802.                 }
  803.  
  804.                 else
  805.  
  806. */          if (weapL[weap][cutting])
  807.             {
  808.                 if  ((zombie[j][pedazos] & brazo1) || (zombie[j][pedazos] & brazo2))
  809.                 {
  810.                     if (ran < 20)
  811.                     {
  812.                         if (( ran < 10 || !(zombie[j][pedazos] & brazo2)) && (zombie[j][pedazos] & brazo1))
  813.                         {
  814.                             zombie[j][pedazos]-=brazo1;MoveObject(zombie[j][rArm],X+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],Y+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],Z,1.0);
  815.                         }
  816.                         else
  817.                         {
  818.                             zombie[j][pedazos]-=brazo2;MoveObject(zombie[j][lArm],X+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],Y+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],Z,1.0);
  819.                         }
  820.                     }
  821.                 }
  822.                 else if  (zombie[j][HP]<40 && (zombie[j][pedazos] & pierna1 ) && (zombie[j][pedazos] & pierna2))
  823.                 {
  824.                     if (ran < 15){zombie[j][pedazos]-=pierna1;MoveObject(zombie[j][rLeg],X+z1[rLegZ][RelX]*PIPO+PEPE*z2[rLegZ][RelX],Y+z1[rLegZ][RelY]*PIPO+PEPE*z2[rLegZ][RelY],Z,1.0);}
  825.                     else{zombie[j][pedazos]-=pierna2;MoveObject(zombie[j][lLeg],X+z1[lLegZ][RelX]*PIPO+PEPE*z2[lLegZ][RelX],Y+z1[lLegZ][RelY]*PIPO+PEPE*z2[lLegZ][RelY],Z,1.0);}
  826.                     zombie[j][speed]-=float(40);
  827.                 }
  828. //          }
  829.             }
  830.             if (zombie[j][HP]<0 && zombie[j][undead])
  831.             {
  832.                 zombie[j][undead]=false;
  833.                 NOFZombies--;
  834.                 MoveObject(zombie[j][head],X,Y,Z,1.5);
  835.                 MoveObject(zombie[j][torso],X+z1[torsoZ][RelX]*PIPO+PEPE*z2[torsoZ][RelX],Y+z1[torsoZ][RelY]*PIPO+PEPE*z2[torsoZ][RelY],Z+0.4,1.5);
  836.                 if (zombie[j][pedazos] & brazo1)
  837.                 MoveObject(zombie[j][rArm],X+z1[rArmZ][RelX]*PIPO+PEPE*z2[rArmZ][RelX],Y+z1[rArmZ][RelY]*PIPO+PEPE*z2[rArmZ][RelY],Z,1.5);
  838.                 if (zombie[j][pedazos] & brazo2)
  839.                 MoveObject(zombie[j][lArm],X+z1[lArmZ][RelX]*PIPO+PEPE*z2[lArmZ][RelX],Y+z1[lArmZ][RelY]*PIPO+PEPE*z2[lArmZ][RelY],Z,1.5);
  840.                 if (zombie[j][pedazos] & pierna1)
  841.                 StopObject(zombie[j][rLeg]);
  842.                 if (zombie[j][pedazos] & pierna2)
  843.                 StopObject(zombie[j][lLeg]);
  844.                 if (apocalipsis)
  845.                 {
  846.                     format(tmp,sizeof(tmp),"~w~SCORE~n~~r~Zombies~w~: %d ~n~~b~Humans~w~: %d ~y~+1",scorez,scorep);
  847.                     scorep++;
  848.                     GameTextForAll(tmp,2000,4);
  849.                     ran = random(10);
  850.                     SetTimer("CreateRandomZombie",ran*1000,0);
  851.                     attacknearest();
  852.                 }
  853.             }
  854.         }
  855.     }
  856.     return 1;
  857. }
  858. //------------------------------------------------------------------------------
  859. public HoldingFire()
  860. {
  861.     new keys,updown,leftright;
  862.     for (new i=0;i<MAX_PLAYERS;i++)
  863.     {
  864.         if (IsPlayerConnected(i))
  865.         {
  866.             GetPlayerKeys(i,keys,updown,leftright);
  867.             if ((keys & KEY_FIRE)&&(!IsPlayerInAnyVehicle(i))&&(Ticket[i]<tickcount()))
  868.             {
  869.                 fire(i,HOLD);
  870.             }
  871.         }
  872.     }
  873. }
  874. //------------------------------------------------------------------------------
  875. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  876. {
  877.     if ((NOFZombies>0) && (newkeys & KEY_FIRE)&&(!IsPlayerInAnyVehicle(playerid))&&(Ticket[playerid]<tickcount()))
  878.     {
  879.         fire(playerid,PRESS);
  880.     }
  881. }
  882. //------------------------------------------------------------------------------
  883. public CreateRandomZombie()
  884. {
  885.     new playerid = random(MAX_PLAYERS);
  886.     while (!IsPlayerConnected(playerid)&&GetPlayerInterior(playerid)==0)playerid = random(MAX_PLAYERS);
  887.     new Float:pX,Float:pY,Float:pZ,Float:Ang;
  888.     GetPlayerPos(playerid,pX,pY,pZ);
  889.     Ang=float(random(360));
  890.     pX=pX+50.0*floatsin(Ang,degrees);
  891.     pY=pY+50.0*floatcos(Ang,degrees);
  892.     pZ=pZ+0.7;
  893.     CrearZombie(pX,pY,pZ,Ang);
  894. }
  895. //------------------------------------------------------------------------------
  896. public QuitarArmasZombie(playerid)
  897. {
  898.     LastWeaponUsed[playerid]=GetPlayerWeapon(playerid);GetPlayerWeapon(playerid);
  899.     new WeaponId;
  900.     new ammo;
  901.     for (new i=0;i<11;i++)
  902.         {
  903.                 GetPlayerWeaponData(playerid, i, WeaponId, ammo);
  904.                 WeaponList[playerid][i][pWeapId]=WeaponId;
  905.                 WeaponList[playerid][i][pAmmo]=ammo;
  906.         }
  907.     ResetPlayerWeapons(playerid);
  908.     return 1;
  909. }
  910. //------------------------------------------------------------------------------
  911. public DevolverArmasZombie(playerid)
  912. {
  913.     new index;
  914.     for (new i=0;i<11;i++)
  915.         {
  916.                 if      (WeaponList[playerid][i][pWeapId]!=0)
  917.                 {
  918.                     if  (WeaponList[playerid][i][pWeapId]!=LastWeaponUsed[playerid])
  919.                 {
  920.                         GivePlayerWeapon(playerid,WeaponList[playerid][i][pWeapId],WeaponList[playerid][i][pAmmo]);
  921.                 }
  922.                         else
  923.                         {
  924.                                 index=i;
  925.                         }
  926.         }
  927.         }
  928.     GivePlayerWeapon(playerid,WeaponList[playerid][index][pWeapId],WeaponList[playerid][index][pAmmo]);
  929.     return 1;
  930. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement