13.02.2010, 13:31
try this
Код:
#define FILTERSCRIPT #define COLOR_LIGHTBLUE 0x33CCFFAA #define COLOR_RED 0xAA3333AA #include <a_samp> enum HydrogenBomb { Nuke, Float:x, Float:y, Float:z, bool:bombactive, timer, shock, count, area }; new NuclearBomb[MAX_PLAYERS][HydrogenBomb]; new bool:PlayerPushed[MAX_PLAYERS]; new bool:detonated[MAX_PLAYERS]; public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Hydrogen Bomb "); print("--------------------------------------\n"); for(new i=0;i<MAX_PLAYERS;i++) { NuclearBomb[i][bombactive] = false; NuclearBomb[i][count] = 0; NuclearBomb[i][area] = 0; PlayerPushed[i] = false; detonated[i] = false; } return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { if(strcmp(cmdtext, "/plantbomb", true) == 0) { if(!NuclearBomb[playerid][bombactive]) { new Float:bx, Float:by, Float:bz, Float:ba; GetPlayerPos(playerid, bx, by, bz); GetPlayerFacingAngle(playerid, ba); bx += (floatsin(-ba, degrees)); by += (floatcos(-ba, degrees)); NuclearBomb[playerid][Nuke] = CreateObject(3786, bx, by, bz, 0, 0, ba); NuclearBomb[playerid][x] = bx; NuclearBomb[playerid][y] = by; NuclearBomb[playerid][z] = bz; NuclearBomb[playerid][area] = 0; ApplyAnimation(playerid, "BOMBER","BOM_Plant_In",4.0,0,0,0,0,0); NuclearBomb[playerid][bombactive] = true; detonated[playerid] = false; SendClientMessage(playerid, COLOR_LIGHTBLUE, "Bomb planted. Flee the area."); } else return SendClientMessage(playerid, COLOR_RED, "You've already planted a bomb!"); } if(strcmp(cmdtext, "/detonate", true) == 0) { if(NuclearBomb[playerid][bombactive]) { NuclearBomb[playerid][timer] = SetTimerEx("Detonation", 250, 1, "i", playerid); DestroyObject(NuclearBomb[playerid][Nuke]); SendClientMessage(playerid, COLOR_LIGHTBLUE, "Bomb detonated."); } else return SendClientMessage(playerid, COLOR_RED, "You haven't planted a bomb!"); } return 0; } forward Detonation(playerid); public Detonation(playerid) { if(NuclearBomb[playerid][count] == 0) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z], 7, 10); } else if(NuclearBomb[playerid][count] == 1) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z], 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+3, 7, 10); } else if(NuclearBomb[playerid][count] == 2) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z], 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+3, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+6, 7, 10); } else if(NuclearBomb[playerid][count] == 3) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+3, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+6, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+9, 7, 10); } else if(NuclearBomb[playerid][count] == 4) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+6, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+9, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+12, 7, 10); } else if(NuclearBomb[playerid][count] == 5) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+9, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+12, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+15, 7, 10); } else if(NuclearBomb[playerid][count] == 6) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+12, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+15, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+18, 7, 10); } else if(NuclearBomb[playerid][count] == 7) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+15, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+18, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+21, 7, 10); } else if(NuclearBomb[playerid][count] == 9) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+18, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+21, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); } else if(NuclearBomb[playerid][count] == 10) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+21, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+7, NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-7, NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+7, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-7, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); } else if(NuclearBomb[playerid][count] >= 11) { CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-10, NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-10, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+24, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+7, NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-7, NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+7, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-7, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+27, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z]+30, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]+3, NuclearBomb[playerid][z]+30, 7, 10); CreateExplosion(NuclearBomb[playerid][x], NuclearBomb[playerid][y]-3, NuclearBomb[playerid][z]+30, 7, 10); CreateExplosion(NuclearBomb[playerid][x]+3, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+30, 7, 10); CreateExplosion(NuclearBomb[playerid][x]-3, NuclearBomb[playerid][y], NuclearBomb[playerid][z]+30, 7, 10); KillTimer(NuclearBomb[playerid][timer]); NuclearBomb[playerid][count] = 0; NuclearBomb[playerid][bombactive] = false; } if(!detonated[playerid]) { NuclearBomb[playerid][shock] = SetTimerEx("Shockwave", 500, 1, "i", playerid); detonated[playerid] = true; } NuclearBomb[playerid][count]++; return 0; } forward Shockwave(playerid); public Shockwave(playerid) { NuclearBomb[playerid][area]+= 100; for(new sz=0; sz<MAX_PLAYERS;sz++) { if(PlayerToPoint(NuclearBomb[playerid][area], sz, NuclearBomb[playerid][x], NuclearBomb[playerid][y], NuclearBomb[playerid][z])/* && !PlayerPushed[sz]*/) { PushPlayer(sz, NuclearBomb[playerid][x], NuclearBomb[playerid][y]); PlayerPushed[sz] = true; } } if(NuclearBomb[playerid][area] >= 1000) { NuclearBomb[playerid][area] = 0; for(new pz=0;pz<MAX_PLAYERS;pz++) PlayerPushed[pz] = false; detonated[playerid] = false; KillTimer(NuclearBomb[playerid][shock]); } return 0; } stock PushPlayer(playerid, Float:X, Float:Y) { new Float:pX, Float:pY, Float:pZ; GetPlayerPos(playerid, pX, pY, pZ); new Float:ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0); pX = (-3 * floatsin(-ang, degrees)); pY = (-3 * floatcos(-ang, degrees)); if(GetPlayerState(playerid) == 2) { SetVehicleVelocity(GetPlayerVehicleID(playerid), pX, pY, 1.0); SetVehicleHealth(GetPlayerVehicleID(playerid), 0.0); } else if(GetPlayerState(playerid) == 1) { SetPlayerVelocity(playerid, pX, pY, 1.0); } SetPlayerHealth(playerid, 1.0); return 0; } PlayerToPoint(Float:radius, playerid, Float:X, Float:Y, Float:Z) { new Float:oldpos[3], Float:temppos[3]; GetPlayerPos(playerid, oldpos[0], oldpos[1], oldpos[2]); temppos[0] = (oldpos[0] -X); temppos[1] = (oldpos[1] -Y); temppos[2] = (oldpos[2] -Z); if(((temppos[0] < radius) && (temppos[0] > -radius)) && ((temppos[1] < radius) && (temppos[1] > -radius)) && ((temppos[2] < radius) && (temppos[2] > -radius))) { return true; } return false; }