Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define MAX_PLAYERS_EX 250
- #include <sscanf>
- #include <dini>
- #include <zcmd>
- #define SCM SendClientMessage
- #define SCMToAll SendClientMessageToAll
- #define RED 0xFF0000FF
- #define MAX_PEACE_ZONES 50
- enum Peace_Zone
- {
- Float:PposX,
- Float:PposY,
- Float:PposZ,
- Float:Prange,
- Ppickup,
- CreatedBy[24],
- Text3D:Plabel,
- bool:Pcreated,
- name[101],
- }
- new PeaceInfo[MAX_PEACE_ZONES][Peace_Zone];
- new PeaceCount=-1;
- forward CreatePeaceZone(playerid,Float:PPX,Float:PPY,Float:PPZ,Float:PPRange,zonename[],reason[]);
- public CreatePeaceZone(playerid,Float:PPX,Float:PPY,Float:PPZ,Float:PPRange,zonename[],reason[])
- {
- if(PeaceCount+1<MAX_PEACE_ZONES)
- {
- PeaceCount++;
- new FreePeaceCount;
- for(new i;i<MAX_PEACE_ZONES;i++)
- {
- if(!PeaceInfo[i][Pcreated])
- {
- FreePeaceCount=i;
- break;
- }
- }
- new vw = GetPlayerVirtualWorld(playerid);
- PeaceInfo[FreePeaceCount][PposX]=PPX;
- PeaceInfo[FreePeaceCount][PposY]=PPY;
- PeaceInfo[FreePeaceCount][PposZ]=PPZ;
- PeaceInfo[FreePeaceCount][Prange]=PPRange;
- PeaceInfo[FreePeaceCount][Pcreated]=true;
- PeaceInfo[FreePeaceCount][CreatedBy]=PlayerName(playerid);
- PeaceInfo[FreePeaceCount][Ppickup]=CreatePickup(1254,1,PPX,PPY,PPZ,vw);
- format(PeaceInfo[FreePeaceCount][name],101,"%s",zonename);
- new s[128];
- format(s,sizeof(s),"[NoKill]{FFFFFF}\nName: %s\nRange: %d meters\nCreated by: %s\nReason: %s",zonename,floatround(PPRange),PlayerName(playerid),reason);
- PeaceInfo[FreePeaceCount][Plabel]=Create3DTextLabel(s,RED,PPX,PPY,PPZ+1,PPRange,vw,1);
- format(s,sizeof(s),"[NoKill] {FFFFFF}Admin %s (ID:%d) created NoKill zone %s in range of %d meters [Reason: %s]!",PlayerName(playerid),playerid,zonename,floatround(PPRange),reason);
- SCMToAll(RED,s);
- format(s,sizeof(s),"NoKill/Zone%d.ini",FreePeaceCount);
- dini_Create(s);
- dini_FloatSet(s,"PosX",PPX);
- dini_FloatSet(s,"PosY",PPY);
- dini_FloatSet(s,"PosZ",PPZ);
- dini_FloatSet(s,"PosR",PPRange);
- dini_IntSet(s,"VW",vw);
- dini_Set(s,"Name",zonename);
- dini_Set(s,"Reason",reason);
- dini_Set(s,"Created",PlayerName(playerid));
- }
- else
- SCM(playerid,RED,"[Server] {FFFFFF}Maximum number of zones reached, zone cannot be created!");
- return 1;
- }
- stock DeletePeaceZone(playerid,zoneid)
- {
- PeaceCount--;
- new s[128];
- format(s,sizeof(s),"[Server] {FFFFFF}Admin %s (ID:%d) has removed NoKill zone %s in range of %d meters!",PlayerName(playerid),playerid,PeaceInfo[zoneid][name],floatround(PeaceInfo[zoneid][Prange]));
- SCMToAll(RED,s);
- format(s,sizeof(s),"NoKill/Zone%d.ini",zoneid);
- dini_Remove(s);
- format(PeaceInfo[zoneid][name],101," ");
- PeaceInfo[zoneid][PposX]=0;
- PeaceInfo[zoneid][PposY]=0;
- PeaceInfo[zoneid][PposZ]=0;
- PeaceInfo[zoneid][Prange]=0;
- PeaceInfo[zoneid][Pcreated]=false;
- DestroyPickup(PeaceInfo[zoneid][Ppickup]);
- Delete3DTextLabel(PeaceInfo[zoneid][Plabel]);
- }
- stock PlayerName(i)
- {
- new p[MAX_PLAYER_NAME];
- GetPlayerName(i,p,MAX_PLAYER_NAME);
- return p;
- }
- forward PlayerInPeace();
- public PlayerInPeace()
- {
- for(new i;i<MAX_PLAYERS_EX;i++)
- {
- if(IsPlayerConnected(i)&&!IsPlayerNPC(i))
- {
- for(new z;z<MAX_PEACE_ZONES;z++)
- {
- if(IsPlayerInRangeOfPoint(i,PeaceInfo[z][Prange],PeaceInfo[z][PposX],PeaceInfo[z][PposY],PeaceInfo[z][PposZ]))
- {
- if(GetPlayerWeapon(i)!=0)
- {
- SetPlayerArmedWeapon(i,0);
- }
- }
- }
- }
- }
- }
- public OnFilterScriptInit()
- {
- print("+------------------------------------------------+");
- print("| |");
- print("| Dynamic NoKill Zone creator by _Michael_ |");
- print("| LOADED! |");
- print("| |");
- print("+------------------------------------------------+");
- new s[100],Float:p[4],vw,str[101],reason[101],created[24];
- for(new i;i<MAX_PEACE_ZONES;i++)
- {
- format(s,20,"NoKill/Zone%d.ini",i);
- if(fexist(s))
- {
- PeaceCount++;
- p[0]=dini_Float(s,"PosX");
- p[1]=dini_Float(s,"PosY");
- p[2]=dini_Float(s,"PosZ");
- p[3]=dini_Float(s,"PosR");
- vw=dini_Int(s,"VW");
- format(str,101,"%s",dini_Get(s,"Name"));
- format(reason,101,"%s",dini_Get(s,"Reason"));
- format(created,24,"%s",dini_Get(s,"Created"));
- PeaceInfo[i][PposX]=p[0];
- PeaceInfo[i][PposY]=p[1];
- PeaceInfo[i][PposZ]=p[2];
- PeaceInfo[i][Prange]=p[3];
- PeaceInfo[i][Pcreated]=true;
- PeaceInfo[i][Ppickup]=CreatePickup(1254,1,p[0],p[1],p[2],vw);
- format(s,sizeof(s),"[NoKill]{FFFFFF}\nName: %s\nRange: %d meters\nCreated by: %s\nReason: %s",str,floatround(p[3]),created,reason);
- PeaceInfo[i][Plabel]=Create3DTextLabel(s,RED,p[0],p[1],p[2]+1,p[3],vw,1);
- format(PeaceInfo[i][name],101,"%s",str);
- printf("...Zone [%d] %s loaded... X:%f Y:%f Z:%f Range:%d VirtualWorld:%d",i,str,p[0],p[1],p[2],floatround(p[3]),vw);
- }
- }
- SetTimer("PlayerInPeace",525,true);
- return 1;
- }
- CMD:nkzones(playerid,params[])
- {
- #pragma unused params
- if(!IsPlayerAdmin(playerid))return SCM(playerid,RED,"[Server] {FFFFFF}You must be logged as RCON admin!");
- if(PeaceCount>-1)
- {
- new s[1000];
- for(new i;i<MAX_PEACE_ZONES;i++)
- {
- if(PeaceInfo[i][Pcreated])
- {
- format(s,sizeof(s),"%s[%d] %s\n",s,i,PeaceInfo[i][name]);
- }
- }
- ShowPlayerDialog(playerid,1235,DIALOG_STYLE_LIST,"Zones",s,"Ok","Cancel");
- }
- else
- {
- ShowPlayerDialog(playerid,1235,DIALOG_STYLE_LIST,"Zones","<NONE>","OK","Cancel");
- }
- return 1;
- }
- CMD:createnk(playerid,params[])
- {
- if(!IsPlayerAdmin(playerid))return SCM(playerid,RED,"[Server] {FFFFFF}You must be logged as RCON admin!");
- if(strlen(params)>100)return SCM(playerid,RED,"[Server] {FFFFFF}Name is too long!");
- new Float:range,zonename[101], reason[101];
- if(sscanf(params,"fzz",range,zonename,reason))return SCM(playerid,RED,"[Server] {FFFFFF}Usage: /createnk [RANGE 10-500] [NAME 1-100 chars] [REASON 1-100 chars]");
- if(range < 10 || range > 500)return SCM(playerid,RED,"[Server] {FFFFFF}Usage: /createnk [RANGE 10-500] [NAME 1-100 chars] [REASON 1-100 chars]");
- if(strlen(reason) < 1 || strlen(reason) > 100)return SCM(playerid,RED,"[Server] {FFFFFF}Usage: /createnk [RANGE 10-500] [NAME 1-100 chars] [REASON 1-100 chars]");
- new Float:pos[3];
- GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
- CreatePeaceZone(playerid,pos[0],pos[1],pos[2],range,zonename,reason);
- return 1;
- }
- CMD:deletenk(playerid,params[])
- {
- #pragma unused params
- if(!IsPlayerAdmin(playerid))return SCM(playerid,RED,"[ Server ] {FFFFFF}You must be logged as RCON admin!");
- for(new i;i<MAX_PEACE_ZONES;i++)
- {
- if(PeaceInfo[i][Pcreated])
- {
- if(IsPlayerInRangeOfPoint(playerid,2,PeaceInfo[i][PposX],PeaceInfo[i][PposY],PeaceInfo[i][PposZ]))
- {
- DeletePeaceZone(playerid,i);
- break;
- }
- }
- }
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(newkeys == KEY_FIRE)
- {
- for(new z;z<MAX_PEACE_ZONES;z++)
- {
- if(PeaceInfo[z][Pcreated])
- {
- if(IsPlayerInRangeOfPoint(playerid,PeaceInfo[z][Prange],PeaceInfo[z][PposX],PeaceInfo[z][PposY],PeaceInfo[z][PposZ]))
- {
- TogglePlayerControllable(playerid,false);
- TogglePlayerControllable(playerid,true);
- break;
- }
- }
- }
- }
- return 1;
- }
- public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
- {
- for(new z;z<MAX_PEACE_ZONES;z++)
- {
- if(PeaceInfo[z][Pcreated])
- {
- if(IsPlayerInRangeOfPoint(playerid,PeaceInfo[z][Prange],PeaceInfo[z][PposX],PeaceInfo[z][PposY],PeaceInfo[z][PposZ]))
- {
- TogglePlayerControllable(playerid,false);
- SetTimerEx("UnFreeze",5000,false,"i",playerid);
- GameTextForPlayer(playerid,"~r~YOU CANNOT ATTACK IN NOKILL ZONE!",5000,5);
- break;
- }
- }
- }
- return 1;
- }
- forward UnFreeze(i);
- public UnFreeze(i)
- {
- TogglePlayerControllable(i,true);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement