Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Firing(playerid){
- new up_dw,lf_rg,o_keys,weapon;
- new Float:x,Float:y,Float:z;
- weapon = GetPlayerWeapon(playerid);
- GetPlayerKeys(playerid,o_keys,up_dw,lf_rg);
- if(o_keys == KEY_FIRE || o_keys == (KEY_FIRE+128) ){
- if(!FiringClick[playerid] || Automatic(weapon))
- {
- FiringClick[playerid] = true;
- GetPlayerPos(playerid,x,y,z);
- foreach(Bot,b){
- if(IsPlayerFacingPlayer(playerid,b,5.0)){
- if(IsPlayerInRangeOfPoint(b,WeaponRanges[weapon],x,y,z)){
- Zombies[b][LastZombieHealth] -= float(WeaponDamage[weapon]);
- if(Zombies[b][LastZombieHealth] <= 0.0 && !Zombies[b][Dying]){
- SendDeathMessage(playerid,b,weapon);
- Zombies[b][Dying] = true;
- }
- }
- }
- }
- }
- }else{
- FiringClick[playerid] = false;
- }
- }
- public KickZombie(playerid){
- Kick(playerid);
- Zombies[playerid][Dying]=false;
- KillTimer(Zombies[playerid][HPtimer]); Zombies[playerid][HPtimer] = false;
- KillTimer(Zombies[playerid][Ztimers]); Zombies[playerid][Ztimers] = false;
- if(Zombies[playerid][NPTIMER]){
- KillTimer(Zombies[playerid][NPTIMER]);
- Zombies[playerid][NPTIMER] = false;
- }
- }
- public CheckHP(playerid){
- new Float:x,Float:y,Float:z;
- new cp = GetClosestPlayer(playerid);
- if(IsPlayerInAnyVehicle(cp)){
- new cpc = GetPlayerVehicleID(cp);
- GetVehiclePos(cpc,x,y,z);
- GetXYInFrontOfVehicle(cpc,x,y,1.5);
- if(IsPlayerInRangeOfPoint(playerid,2.0,x,y,z) && GetPlayerSpeed(cp) > 10.0){
- Zombies[playerid][LastZombieHealth] -= (GetPlayerSpeed(cp)*2);
- }
- }
- if( Zombies[playerid][LastZombieHealth] <= 0.0 && Zombies[playerid][ZombieSpawned]){
- // ApplyAnimation(playerid,"Knife","KILL_Knife_Ped_Die",1,0,1,0,0,0);
- SetTimerEx("KickZombie",1500,0,"i",playerid);
- Zombies[playerid][Dying] = true;
- }
- }
- public NewPos(playerid){
- if( Zombies[playerid][LastZombieHealth] > 0.0 ){
- new Float:x,Float:y,Float:z;
- new Float:ax,Float:ay,Float:az,Float:dif;
- GetPlayerPos(Zombies[playerid][ZombieTarget],ax,ay,az);
- GetPlayerPos(playerid,x,y,z);
- if( az <= (z+3.0) && az >= (z-3.0)){
- if(Zombies[playerid][ZombieRunning] == 1){
- ApplyAnimation(playerid,"Muscular","MuscleRun",1,1,1,0,0,0);
- GetXYInFrontOfPlayer(playerid,x,y,2.0);
- }
- else if(Zombies[playerid][ZombieRunning] == 2){
- ApplyAnimation(playerid,"Muscular","MuscleSprint",1,1,1,0,0,0);
- GetXYInFrontOfPlayer(playerid,x,y,2.8);
- }
- dif = az;
- SetPlayerPos(playerid,x,y,dif);
- }else{
- if(Zombies[playerid][ZombieRunning]) Parar(playerid);
- GetPlayerPos(playerid,x,y,z);
- SetPlayerPosFindZ(playerid,x,y,z);
- }
- }
- }
- public CheckCloserPlayers(playerid){
- if( Zombies[playerid][LastZombieHealth] > 0.0 ){
- new cp = GetClosestPlayer(playerid);
- new Float:MinDistance = 3.0;
- if(IsPlayerInAnyVehicle(cp)){ MinDistance = 5.0; }
- Zombies[playerid][ZombieTarget] = cp;
- if(GetDistanceToPlayer(playerid,cp) <= 70.0 && GetDistanceToPlayer(playerid,cp) > 15.0){
- IrParaPlayer(1,playerid,cp);
- }else if(GetDistanceToPlayer(playerid,cp) <= 15.0 && GetDistanceToPlayer(playerid,cp) > MinDistance){
- IrParaPlayer(0,playerid,cp);
- }else if(GetDistanceToPlayer(playerid,cp) <= MinDistance){
- Parar(playerid);
- }
- if(GetDistanceToPlayer(playerid,cp) <= MinDistance){
- new Float:h;
- if(IsPlayerInAnyVehicle(cp)){
- new cpc = GetPlayerVehicleID(cp);
- GetVehicleHealth(cpc,h);
- if(GetDistanceToPlayer(playerid,cp) < MinDistance){
- SetVehicleHealth(cpc,h-80.0);
- ApplyAnimation(playerid,"Gangs","shake_carSH",1,1,1,0,0,0);
- }
- }else{
- if(GetDistanceToPlayer(playerid,cp) > 1.5){
- GetPlayerHealth(cp,h);
- SetPlayerHealth(cp,h-5.0);
- }else if(GetDistanceToPlayer(playerid,cp) <= 1.5){
- if(Zombies[playerid][ZombieKilling] == -1){
- if(!IsDying(cp)){
- FinishHim(playerid,cp);
- }
- }
- }
- }
- }
- }
- }
- public KilledBy(playerid,killer){
- if(Zombies[killer][ZombieKilling] == playerid){
- //ApplyAnimation(playerid,"Knife","KILL_Knife_Ped_Die",1,0,1,0,0,0);
- TogglePlayerControllable(playerid,true);
- // SetPlayerHealth(playerid,0.0);
- ClearAnimations(killer);
- print("Player wird HP Abgezogen");
- Var_Timer = SetTimerEx("Hp_Weg", 5000, 1, "i", playerid);
- ZombieKill[playerid] = killer;
- }
- }
- forward Hp_Weg(playerid);
- public Hp_Weg(playerid){
- TogglePlayerControllable(playerid,1);
- new Float:health;
- GetPlayerHealth(playerid, health);
- SetPlayerHealth(playerid, health-5);
- KillTimer(Var_Timer);
- return 1;
- }
- stock Automatic(weaponid){
- switch(weaponid){
- case 9,22,23,24,27,28,29,30,31,32,37,38: return true;
- }
- return false;
- }
- stock IsDying(playerid){
- foreach(Bot,b){
- if(Zombies[b][ZombieKilling] == playerid) return true;
- }
- return false;
- }
- stock SetupZombie(playerid){
- new Float:px,Float:py,Float:pz;
- Zombies[playerid][HPtimer] = SetTimerEx("CheckHP",100,1,"i",playerid);
- Zombies[playerid][Ztimers] = SetTimerEx("CheckCloserPlayers",1000,1,"i",playerid);
- GetPlayerPos(Caller,px,py,pz);
- SetPlayerPos(playerid,px,py,pz);
- Zombies[playerid][ZombieRunning] = false;
- SendClientMessageToAll(COLOR_RED,"A Zombie Connected!");
- new Zskin=1;
- if(Zombie_Skin == -1){
- new rd = random(sizeof(ZombieSkins));
- if(IsValidSkin(ZombieSkins[rd])){
- Zskin = ZombieSkins[rd];
- }
- }else if(Zombie_Skin == -2){
- new rd = random(299);
- if(IsValidSkin(rd)){
- Zskin = rd;
- }
- }else if(IsValidSkin(Zombie_Skin)){
- Zskin = Zombie_Skin;
- }
- SetPlayerSkin(playerid,Zskin);
- Zombies[playerid][ZombieKilling] = -1;
- Zombies[playerid][ZombieSpawned] = true;
- Zombies[playerid][LastZombieHealth] = 100.0;
- }
- stock FinishHim(playerid,target){
- Zombies[playerid][ZombieKilling] = target;
- TogglePlayerControllable(target,false);
- SetPlayerToFacePlayer(playerid,target);
- SetPlayerToFacePlayer(target,playerid);
- // ApplyAnimation(target,"Knife","KILL_Knife_Ped_Damage",1,0,1,0,0,0);
- // ApplyAnimation(playerid,"Knife","KILL_Knife_Player",1,0,1,0,0,0);
- SetTimerEx("KilledBy",1500,0,"ii",target,playerid);
- }
- stock Parar(playerid){
- if(Zombies[playerid][ZombieRunning]){
- if(Zombies[playerid][NPTIMER]){
- KillTimer(Zombies[playerid][NPTIMER]);
- Zombies[playerid][NPTIMER] = false;
- }
- Zombies[playerid][ZombieRunning] = false;
- ClearAnimations(playerid);
- }
- }
- stock IrParaPlayer(modo,playerid,paraid){
- SetPlayerToFacePlayer(playerid,paraid);
- if(modo == 0 && Zombies[playerid][ZombieRunning] != 1) Caminhar(playerid);
- else if(modo == 1 && Zombies[playerid][ZombieRunning] != 2) Correr(playerid);
- }
- stock Caminhar(playerid){
- Zombies[playerid][ZombieRunning] = 1;
- Zombies[playerid][NPTIMER] = SetTimerEx("NewPos",400,1,"i",playerid);
- }
- stock Correr(playerid){
- Zombies[playerid][ZombieRunning] = 2;
- Zombies[playerid][NPTIMER] = SetTimerEx("NewPos",300,1,"i",playerid);
- }
- stock AlvoDeAlguem(alvoid){
- foreach(Bot,b){
- if(Zombies[b][ZombieTarget] == alvoid) return b;
- }
- return false;
- }
- stock KickZombies(){
- foreach(Bot,b){
- if(!strfind(PlayerName(b),ZOMBIE_NAME,true)){
- SetTimerEx("KickZombie",1,0,"i",b);
- }
- }
- }
- stock SetPlayerToFacePlayer(playerid, targetid)
- {
- new
- Float:pX,
- Float:pY,
- Float:pZ,
- Float:X,
- Float:Y,
- Float:Z,
- Float:ang;
- if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;
- GetPlayerPos(targetid, X, Y, Z);
- GetPlayerPos(playerid, pX, pY, pZ);
- if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
- else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
- else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
- if(X > pX) ang = (floatabs(floatabs(ang) + 180.0));
- else ang = (floatabs(ang) - 180.0);
- SetPlayerFacingAngle(playerid, ang);
- return 0;
- }
- stock PlayerName(playerid){
- new pname[MAX_PLAYER_NAME];
- GetPlayerName(playerid,pname,MAX_PLAYER_NAME);
- return pname;
- }
- stock Float:GetDistanceToPlayer(playerid,playerid2) {
- new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
- if (!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) {
- return -1.00;
- }
- GetPlayerPos(playerid,x1,y1,z1);
- GetPlayerPos(playerid2,x2,y2,z2);
- return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
- }
- stock GetClosestPlayer(p1){
- new Float:dis,Float:dis2,playerid;
- playerid = -1;
- dis = 99999.99;
- foreach(Player,x){
- dis2 = GetDistanceToPlayer(p1,x);
- if (dis2 < dis && dis2 != -1.00)
- {
- dis = dis2;
- playerid = x;
- }
- }
- //printf("[%d]%s",playerid,PlayerName(playerid));
- return playerid;
- }
- stock Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetPlayerPos(playerid, x, y, a);
- if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
- else GetPlayerFacingAngle(playerid, a);
- x += (distance * floatsin(-a, degrees));
- y += (distance * floatcos(-a, degrees));
- return a;
- }
- stock IsValidSkin(skinid)
- {
- #define MAX_BAD_SKINS 22
- new badSkins[MAX_BAD_SKINS] =
- { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289 };
- if (skinid < 0 || skinid > 299) return false;
- for (new i = 0; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; }
- #undef MAX_BAD_SKINS
- return 1;
- }
- stock Float:GetPlayerSpeed(playerid)
- {
- new Float:vX, Float:vY, Float:vZ;
- if (!IsPlayerInAnyVehicle(playerid))
- {
- GetPlayerVelocity(playerid, vX, vY, vZ);
- }
- else
- {
- GetVehicleVelocity(GetPlayerVehicleID(playerid), vX, vY, vZ);
- }
- return floatsqroot(vX*vX + vY*vY + vZ*vZ)*100;
- }
- stock Float:GetXYInFrontOfVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetVehiclePos(vehicleid, x, y, a);
- GetVehicleZAngle(vehicleid, a);
- x += (distance * floatsin(-a, degrees));
- y += (distance * floatcos(-a, degrees));
- return a;
- }
- stock IsPlayerFacingPlayer(playerid, playerid2, Float:dOffset)
- {
- new
- Float:X,
- Float:Y,
- Float:Z,
- Float:pX,
- Float:pY,
- Float:pZ,
- Float:pA,
- Float:ang;
- if(!IsPlayerConnected(playerid)) return 0;
- GetPlayerPos(playerid2, pX, pY, pZ);
- GetPlayerPos(playerid, X, Y, Z);
- GetPlayerFacingAngle(playerid, pA);
- if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
- else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
- else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
- if(AngleInRangeOfAngle(-ang, pA, dOffset)) return true;
- return false;
- }
- stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)
- {
- a1 -= a2;
- if((a1 < range) && (a1 > -range)) return true;
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment