Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define SCRIPT_VERSION "0.1"
- #define MAX_COWS 25
- #define FILE_COWS "KillableCows.txt"
- #define COLOR_RED 0xFF0000AA
- #define COLOR_ORANGE 0xFF9900AA
- #if !defined dcmd
- #define dcmd(%1,%2,%3) if((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
- #endif
- enum cowinfos
- {
- iObjectID,
- Float:sX,
- Float:sY,
- Float:sZ,
- Float:Angle[3],
- IsDead
- }
- new CowInfo[MAX_COWS][cowinfos];
- new bool:IsPlayerSpawned[MAX_PLAYERS];
- forward LoadCows();
- public OnFilterScriptInit()
- {
- new string[128];
- format(string,sizeof(string),".:: Killable Cows v%d by ~AWESOME~ loaded ::.\n",SCRIPT_VERSION);
- print(string);
- LoadCows();
- }
- public LoadCows()
- {
- new File:cowfile, string[128], data[26][32], count = 0;
- if(fexist(FILE_COWS))
- {
- cowfile = fopen(FILE_COWS,io_read);
- for(new id = 0; id < MAX_COWS; id++)
- {
- fread(cowfile,string);
- split(string,data,',');
- CowInfo[id][IsDead] = 0;
- CowInfo[id][sX] = floatstr(data[0]);
- CowInfo[id][sY] = floatstr(data[1]);
- CowInfo[id][sZ] = floatstr(data[2]);
- CowInfo[id][Angle][0] = floatstr(data[3]);
- CowInfo[id][Angle][1] = floatstr(data[4]);
- CowInfo[id][Angle][2] = floatstr(data[5]);
- CowInfo[id][iObjectID] = CreateObject(16442,CowInfo[id][sX],CowInfo[id][sY],CowInfo[id][sZ],CowInfo[id][Angle][0],CowInfo[id][Angle][1],CowInfo[id][Angle][2]);
- count++;
- }
- printf(">=== Cows loaded\n",count);
- fclose(cowfile);
- }
- else
- {
- print(">=== ERROR: Cows couldn't be loaded\n");
- }
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(newkeys == KEY_FIRE && GetPlayerWeapon(playerid) != 0 && IsPlayerSpawned[playerid] == true)
- {
- new Float:X,
- Float:Y,
- Float:Z;
- GetPosFromView(playerid,80.0,X,Y,Z);
- for(new id = 0; id < MAX_COWS; id++)
- {
- if(ObjectToPoint(playerid,4.0,CowInfo[id][iObjectID],X,Y,Z) != 0)
- {
- if(CowInfo[id][IsDead] == 0)
- {
- KillCow(id);
- }
- }
- }
- }
- return 0;
- }
- public OnPlayerCommandText(playerid,cmdtext[])
- {
- dcmd(respawncows,11,cmdtext);
- return 0;
- }
- dcmd_respawncows(playerid,params[])
- {
- #pragma unused params
- new string[100], count = 0;
- for(new id = 0; id < MAX_COWS; id++)
- {
- if(CowInfo[id][IsDead] == 1)
- {
- SetObjectPos(CowInfo[id][iObjectID], CowInfo[id][sX], CowInfo[id][sY], CowInfo[id][sZ]);
- SetObjectRot(CowInfo[id][iObjectID], CowInfo[id][Angle][0], CowInfo[id][Angle][1], CowInfo[id][Angle][2]);
- CowInfo[id][IsDead] = 0;
- count++;
- }
- }
- format(string,sizeof(string),">> %d Cows respawnt.",count);
- SendClientMessage(playerid,COLOR_ORANGE,string);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- IsPlayerSpawned[playerid] = false;
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- IsPlayerSpawned[playerid] = true;
- return 1;
- }
- public OnPlayerDeath(playerid,killerid,reason)
- {
- IsPlayerSpawned[playerid] = false;
- return 1;
- }
- stock KillCow(CowID)
- {
- SetObjectRot(CowInfo[CowID][iObjectID], 90.0, CowInfo[CowID][Angle][1], CowInfo[CowID][Angle][2]);
- SetObjectPos(CowInfo[CowID][iObjectID], CowInfo[CowID][sX], CowInfo[CowID][sY], CowInfo[CowID][sZ] - 1.25);
- CowInfo[CowID][IsDead] = 0;
- return 1;
- }
- stock ObjectToPoint(playerid, Float:Distance, ObjectID, Float:X, Float:Y, Float:Z)
- {
- new Float:oldposx, Float:oldposy, Float:oldposz, Float:tempposx, Float:tempposy, Float:tempposz;
- GetPlayerObjectPos(playerid, ObjectID, oldposx, oldposy, oldposz);
- tempposx = (oldposx -X);
- tempposy = (oldposy -Y);
- tempposz = (oldposz -Z);
- if(((tempposx < Distance) && (tempposx > -Distance)) && ((tempposy < Distance) && (tempposy > -Distance)) && ((tempposz < Distance) && (tempposz > -Distance)))
- {
- return 1;
- }
- return 0;
- }
- stock GetPosFromView(playerid, Float:Distance, &Float:X, &Float:Y, &Float:Z)
- {
- new Float:cx,
- Float:cy,
- Float:cz,
- Float:fx,
- Float:fy,
- Float:fz;
- GetPlayerCameraPos(playerid,cx,cy,cz);
- GetPlayerCameraFrontVector(playerid,fx,fy,fz);
- X = fx * Distance + cx;
- Y = fy * Distance + cy;
- Z = fz * Distance + cz;
- return 1;
- }
- stock split(const strsrc[], strdest[][], delimiter)
- {
- new i, li;
- new aNum;
- new len;
- while(i <= strlen(strsrc))
- {
- if(strsrc[i] == delimiter || i == strlen(strsrc))
- {
- len = strmid(strdest[aNum], strsrc, li, i, 128);
- strdest[aNum][len] = 0;
- li = i+1;
- aNum++;
- }
- i++;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment