BigBen1174
Новичок
Дорогие пользователи Pawno info ru помогите пожалуйста
1. Использование шипов (их создание на землю) - Надо зделать Чо бы не прокалывало калёса всей банде (Gang) поставить как то параметр что бы не трогал калёса машин банды
Код
PHP:
#if defined _ship_included
#endinput
#endif
#define _ship_included
#pragma library ship
#define MAX_SPIKESTRIPS 200
enum sInfo
{
sCreated,
Float:sX,
Float:sY,
Float:sZ,
sObject,
};
new SpikeInfo[MAX_SPIKESTRIPS][sInfo];
static Deleteship;
stock ship_OnPlayerCommandText(playerid, cmdtext[])
{
#pragma unused playerid
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
if (strcmp(cmd,"/ship",true) == 0)
{
new vehicleid = GetPlayerVehicleID(playerid);
new Float:plocx,Float:plocy,Float:plocz,Float:ploca;
GetVehiclePos(vehicleid, plocx, plocy, plocz);
GetVehicleZAngle(vehicleid,ploca);
CreateStrip(plocx,plocy,plocz,ploca);
Deleteship = SetTimer("DeleteAllStrip",1000*60,true);
return 1;
}
return 0;
}
stock ship_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
#pragma unused oldkeys
if ((newkeys==KEY_NO)) // Љлавиша N
{
if (GetPlayerVIP(playerid))
{
{
OnPlayerCommandText(playerid, "/ship");
}
}
}
//------------------------------------------------------------------------------
return 1;
}
stock ship_OnPlayerUpdate(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
for(new i = 0; i < sizeof(SpikeInfo); i++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, SpikeInfo[i][sX], SpikeInfo[i][sY], SpikeInfo[i][sZ]))
{
if(SpikeInfo[i][sCreated] == 1)
{
new panels, doors, lights, tires;
new carid = GetPlayerVehicleID(playerid);
GetVehicleDamageStatus(carid, panels, doors, lights, tires);
tires = encode_tires(1, 1, 1, 1);
UpdateVehicleDamageStatus(carid, panels, doors, lights, tires);
return 0;
}
}
}
}
return 1;
}
stock CreateStrip(Float:x,Float:y,Float:z,Float:Angle)
{
for(new i = 0; i < sizeof(SpikeInfo); i++)
{
if(SpikeInfo[i][sCreated] == 0)
{
SpikeInfo[i][sCreated]=1;
SpikeInfo[i][sX]=x;
SpikeInfo[i][sY]=y;
SpikeInfo[i][sZ]=z;
SpikeInfo[i][sObject] = CreateObject(2899, x, y-1.5, z-0.6, 0, 0, Angle-z-100);
return 1;
}
}
return 0;
}
forward DeleteAllStrip();
public DeleteAllStrip()
{
for(new i = 0; i < sizeof(SpikeInfo); i++)
{
if(SpikeInfo[i][sCreated] == 1)
{
SpikeInfo[i][sCreated]=0;
SpikeInfo[i][sX]=0.0;
SpikeInfo[i][sY]=0.0;
SpikeInfo[i][sZ]=0.0;
DestroyObject(SpikeInfo[i][sObject]);
KillTimer(Deleteship);
}
}
return 0;
}
encode_tires(tires1, tires2, tires3, tires4) {
return tires1 | (tires2 << 1) | (tires3 << 2) | (tires4 << 3);
}
PHP:
//
// Created: 14.09.06
// Aurthor: Iain Gilbert
//
#if defined _gang_included
#endinput
#endif
#define _gang_included
#pragma library gang
#include "base"
forward GangLoadConfig();
forward GangSaveConfig();
forward GetFreeMemberID();
forward GangLoad(gangname[]);
forward GangCommandHandler(playerid,text[]);
forward PlayerGangColour(playerid);
forward GangJoinMember(gangid,playerid);
forward GangRemoveMember(gangid,kickplayername[]);
forward GangCreate(leaderid,gangname[],gangcolour);
forward GangCleanup(gangid);
forward GangSaveAll();
forward GangMemberLogout(playerid,gangid);
forward GangSave(gangid);
forward GangUnload(gangid);
forward GangKill(gangid,killerid,victimid,reason);
forward GangMemberLogin(playerid,gangid);
forward SendGangMessage(gangid,message[MAX_STRING],colour);
forward GangOnlineCount(gangid);
forward GangGiveXP(gangid,xpamount,giverid);
forward SetGangColour(gangid,colour);
#define MAX_GANGS MAX_PLAYERS // maximum gangs (at runtime), (total maximum gangs is unlimited)
#define MAX_GANG_SIZE 6 // maximum number of ppl can be in any specific gang
new GANG_CREATE_COST = 70000; // money cost to create a gang
new GANG_COLOUR_COST = 20000; // cost to change gang colour
new GangDB[MAX_STRING] = "GTO/Gang/";
enum MemberInfo {
member_active,
member_online, // bool
member_name[MAX_NAME],
member_playerid
}
enum GangInfo {
gang_active, //bool
gang_name[MAX_NAME],
gang_colour,
gang_kills,
gang_score
}
enum ColourInfo {
colour_name[MAX_NAME],
colour_code
}
#define COLOURS_SIZE 10
new GangColours[COLOURS_SIZE][ColourInfo] = {
{ "Red", COLOUR_RED},
{ "LightRed", COLOUR_LIGHTRED},
{ "Orange", COLOUR_ORANGE},
{ "Yellow", COLOUR_YELLOW},
{ "Green", COLOUR_GREEN},
{ "LightGreen", COLOUR_LIGHTGREEN},
{ "Blue", COLOUR_BLUE},
{ "LightBlue", COLOUR_LIGHTBLUE},
{ "White", COLOUR_WHITE},
{ "Purple", COLOUR_PURPLE}
};
new GangMemberInfo[MAX_GANGS*MAX_GANG_SIZE][MemberInfo]; //shit way of '3d' array
new GangMembers[MAX_GANGS][MAX_GANG_SIZE]; // shit
new Gangs[MAX_GANGS][GangInfo];
new GangInvite[MAX_PLAYERS];
new tempstring[MAX_STRING];
public GangLoadConfig()
{
if (ForceOverwrite) return;
if (!dini_Exists(ConfigDB)) return;
new temp[MAX_STRING];
set(temp,dini_Get(ConfigDB,"Gang_DB"));
if (strlen(temp) > 0) set(GangDB,temp);
set(temp,nullstr);
set(temp,dini_Get(ConfigDB,"Gang_Create_Cost"));
if (strlen(temp) > 0) GANG_CREATE_COST = strval(temp);
set(temp,nullstr);
set(temp,dini_Get(ConfigDB,"Gng_Colour_Cost"));
if (strlen(temp) > 0) GANG_COLOUR_COST =strval(temp);
return;
}
public GangSaveConfig()
{
if (!dini_Exists(ConfigDB)) return;
new temp[MAX_STRING];
dini_Set(ConfigDB,"Gang_DB",GangDB);
valstr(temp,GANG_CREATE_COST);
dini_Set(ConfigDB,"Gang_Create_Cost",temp);
valstr(temp,GANG_COLOUR_COST);
dini_Set(ConfigDB,"Gang_Colour_Cost",temp);
return;
}
public GetFreeMemberID()
{
for (new memberid = 1;memberid<MAX_GANG_SIZE*MAX_GANGS;memberid++)
{
if (GangMemberInfo[memberid][member_active] == 0)
{
return memberid;
}
}
return 0;
}
public GangLoad(gangname[])
{
// search for gang in runtime memory
for (new id=1;id<MAX_GANGS;id++)
{
if (Gangs[id][gang_active] == 1)
{
if (strcomp(gangname,Gangs[id][gang_name],false) == 1)
{
return id; // gang found in runtime memory
}
}
}
new gangid;
for (new id=1;id<MAX_GANGS;id++)
{
if(!Gangs[id][gang_active])
{
gangid = id;
Gangs[id][gang_active] = true; // find first free gang slot and andd our gang
break;
}
}
gang_load_db_dini(gangid,gangname);
new logstring[256];
format(logstring, sizeof (logstring), "gang_loaded: %d",gangid);
WriteLog(logstring);
return gangid;
}
gang_load_db_dini(gangid,gangname[])
{
// udb
new udbfilename[MAX_NAME];
set(udbfilename,gangname);
strcat(udbfilename,".Gang",sizeof(udbfilename));
// dini
new dinifilename[MAX_STRING];
format(dinifilename,sizeof(dinifilename),"%sGTO.Gang.%s.txt",GangDB,gangname);
new useudb = 0;
if ((!udb_Exists(udbfilename)) && (!dini_Exists(dinifilename)))
{
return;
}
if ((udb_Exists(udbfilename)) && (!dini_Exists(dinifilename)))
{
useudb = 1;
}
if ((udb_Exists(udbfilename)) && (dini_Exists(dinifilename)))
{
udb_Remove(udbfilename);
}
if (useudb)
{
new gangdbstring[MAX_DBSTRING];
set(gangdbstring,udb_Loadfile(udbfilename));
if (gangdbstring[0] == 0) return;
new idx;
set(Gangs[gangid][gang_name],gangname);
Gangs[gangid][gang_colour] = strval(strcharsplit(gangdbstring,idx,DBSeperator));
Gangs[gangid][gang_kills] = strval(strcharsplit(gangdbstring,idx,DBSeperator));
Gangs[gangid][gang_score] = strval(strcharsplit(gangdbstring,idx,DBSeperator));
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member
GangMembers[gangid][gangmember] = GetFreeMemberID();
new memberid = GangMembers[gangid][gangmember];
if (memberid == 0)
{
WriteLog("script error: free gang member id not found.");
return;
}
GangMemberInfo[memberid][member_active] = 1;
GangMemberInfo[memberid][member_online] = 0;
set(GangMemberInfo[memberid][member_name],strcharsplit(gangdbstring,idx,DBSeperator));
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
}
}
else
{
set(Gangs[gangid][gang_name],dini_Get(dinifilename,"Name"));
Gangs[gangid][gang_colour] = strval(dini_Get(dinifilename,"Colour"));
Gangs[gangid][gang_kills] = strval(dini_Get(dinifilename,"Kills"));
Gangs[gangid][gang_score] = strval(dini_Get(dinifilename,"Score"));
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member
GangMembers[gangid][gangmember] = GetFreeMemberID();
new memberid = GangMembers[gangid][gangmember];
if (memberid == 0)
{
WriteLog("script error: free gang member id not found.");
break;
}
GangMemberInfo[memberid][member_active] = 1;
GangMemberInfo[memberid][member_online] = 0;
new dinistring[MAX_STRING];
format(dinistring,sizeof(dinistring),"Member%d" ,gangmember);
set(GangMemberInfo[memberid][member_name],dini_Get(dinifilename,dinistring));
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
}
}
}
public GangCommandHandler(playerid,text[]) // process player commands
{
new cmd[20];
new idx;
set(cmd,strcharsplit(text, idx,strchar(" ")));
if (strlen(cmd) == 0) return 0;
if (Player[playerid][Muted] == 1)
{
SendPlayerFormattedText(playerid,lang_texts[1][14], 0,COLOUR_RED);
return 1;
}
if(strcomp(cmd, "/g", true) == 1)
{
if (PlayerGangid[playerid] == 0) return 1;
new gangmessage[MAX_STRING];
set(gangmessage,text);
strdel(gangmessage, 0, idx);
if (!strlen(gangmessage)) return 1;
format(gangmessage, sizeof(gangmessage), lang_texts[6][2] , oGetPlayerName(playerid),gangmessage);
SendGangMessage(PlayerGangid[playerid],gangmessage,COLOUR_GANG_CHAT);
new logstring[256];
format(logstring, sizeof (logstring), "player: %d: %s: %s",playerid,oGetPlayerName(playerid),gangmessage);
WriteChatLog(logstring);
return 1;
}
if(strcomp(cmd, "/gang", true) == 1)
{
if (!IsPlayerRegistered(playerid))
{
SendPlayerFormattedText(playerid, lang_texts[6][3] , 0,COLOUR_RED);
return 1;
}
set(cmd,strcharsplit(text, idx,strchar(" ")));
if (strlen(cmd) == 0) return 0;
if(strcomp(cmd, "help", true) == 1)
{
SendPlayerScrollingText(playerid, lang_texts[6][4] );
SendPlayerScrollingText(playerid, lang_texts[6][5] );
SendPlayerScrollingText(playerid, lang_texts[6][6] );
SendPlayerScrollingText(playerid, lang_texts[6][7] );
SendPlayerScrollingText(playerid, lang_texts[6][8] );
SendPlayerScrollingText(playerid, lang_texts[6][9] );
return 1;
}
if(strcomp(cmd, "commands", true) == 1)
{
SendPlayerScrollingText(playerid, lang_texts[6][10] );
SendPlayerScrollingText(playerid, lang_texts[6][11] );
SendPlayerScrollingText(playerid, lang_texts[6][12] );
SendPlayerScrollingText(playerid, lang_texts[6][13] );
SendPlayerScrollingText(playerid, lang_texts[6][14] );
SendPlayerScrollingText(playerid, lang_texts[6][15] );
SendPlayerScrollingText(playerid, lang_texts[6][16] );
SendPlayerScrollingText(playerid, lang_texts[6][17] );
SendPlayerScrollingText(playerid, lang_texts[6][18] );
SendPlayerScrollingText(playerid, lang_texts[6][19] );
SendPlayerScrollingText(playerid, lang_texts[6][20] );
return 1;
}
if((strcomp(cmd, "colours", true) == 1) || (strcomp(cmd, "COLOURs", true) == 1))
{
SendPlayerFormattedText(playerid, lang_texts[6][22], 0,COLOUR_GREEN);
for (new i = 0;i<=COLOURS_SIZE;i++)
{
format(tempstring, sizeof(tempstring), lang_texts[6][23] ,GangColours[i][colour_name]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_GREY);
}
return 1;
}
if((strcomp(cmd, "stats", true) == 1) || (strcomp(cmd, "stat", true) == 1) || (strcomp(cmd, "status", true) == 1))
{
if (PlayerGangid[playerid] == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][24] , 0,COLOUR_RED);
return 1;
}
new gangid = PlayerGangid[playerid];
format(tempstring, sizeof(tempstring), lang_texts[6][25] , Gangs[gangid][gang_name]);
SendPlayerFormattedText(playerid, tempstring, 0,Gangs[gangid][gang_colour]);
format(tempstring, sizeof(tempstring), lang_texts[6][26] , Gangs[gangid][gang_kills]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_MISC);
format(tempstring, sizeof(tempstring), lang_texts[6][27] , Gangs[gangid][gang_score]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_MISC);
format(tempstring, sizeof(tempstring), lang_texts[6][28] , GangOnlineCount(gangid));
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_MISC);
return 1;
}
if(strcomp(cmd, "members", true) == 1)
{
if (PlayerGangid[playerid] == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][29] , 0,COLOUR_RED);
return 1;
}
new gangid = PlayerGangid[playerid];
new status[10];
format(tempstring, sizeof(tempstring), lang_texts[6][30] , Gangs[gangid][gang_name]);
SendPlayerFormattedText(playerid, tempstring, 0,Gangs[gangid][gang_colour]);
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member
new memberid = GangMembers[gangid][gangmember];
if (strlen(GangMemberInfo[memberid][member_name]) > 0)
{
if (GangMemberInfo[memberid][member_online])
{
set(status,"Online");
format(tempstring, sizeof(tempstring), lang_texts[6][31] , GangMemberInfo[memberid][member_name],status,GetPlayerLevel(GangMemberInfo[memberid][member_playerid]));
}
else
{
set(status,"Offline");
format(tempstring, sizeof(tempstring), lang_texts[6][32] , GangMemberInfo[memberid][member_name],status);
}
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_MISC);
}
}
return 1;
}
if(strcomp(cmd, "create", true) == 1)
{
if (PlayerGangid[playerid] != 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][33] , 0,COLOUR_RED);
return 1;
}
if (oGetPlayerMoney(playerid) < GANG_CREATE_COST)
{
format(tempstring, sizeof(tempstring), lang_texts[6][34] , GANG_CREATE_COST);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_RED);
return 1;
}
new gangname[MAX_STRING];
new colourname[MAX_NAME];
new gangcolour=255;
set(colourname,strcharsplit(text, idx,strchar(" ")));
if(!strlen(colourname))
{
SendPlayerFormattedText(playerid, lang_texts[6][35] , 0,COLOUR_RED);
SendPlayerFormattedText(playerid, lang_texts[6][36] , 0,COLOUR_RED);
return 1;
}
for (new colourid=0;colourid<COLOURS_SIZE;colourid++)
{
if (strcomp(colourname,GangColours[colourid][colour_name],true) == 1)
{
gangcolour = GangColours[colourid][colour_code];
}
}
if (gangcolour == 255)
{
SendPlayerFormattedText(playerid, lang_texts[6][37] , 0,COLOUR_RED);
SendPlayerFormattedText(playerid, lang_texts[6][38] , 0,COLOUR_RED);
return 1;
}
set(gangname,text);
strdel(gangname, 0, idx);
if (strlen(gangname) <3)
{
SendPlayerFormattedText(playerid, lang_texts[6][39] , 0,COLOUR_RED);
return 1;
}
if (strlen(gangname) >40)
{
SendPlayerFormattedText(playerid, lang_texts[6][40] , 0,COLOUR_RED);
return 1;
}
new tempname[MAX_STRING];
set(tempname,gangname);
if (!StringCharCheck(tempname))
{
SendPlayerFormattedText(playerid, lang_texts[6][41] , 0,COLOUR_RED);
return 1;
}
if (GangCreate(playerid,gangname,gangcolour) != 0)
{
oGivePlayerMoney(playerid,0-GANG_CREATE_COST,1);
SendPlayerFormattedText(playerid, lang_texts[6][42] , 0,COLOUR_GREEN);
new logstring[256];
format(logstring, sizeof (logstring), "player: %d: %s: created gang '%s' ",playerid,oGetPlayerName(playerid),gangname);
WriteLog(logstring);
}
else
{
SendPlayerFormattedText(playerid, lang_texts[6][43] , 0,COLOUR_RED);
}
return 1;
} // end create
if((strcomp(cmd, "accept", true) == 1) || (strcomp(cmd, "join", true) == 1))
{
if (PlayerGangid[playerid] != 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][44] , 0,COLOUR_RED);
return 1;
}
if (GangInvite[playerid] == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][45] , 0,COLOUR_RED);
return 1;
}
new gangid = GangInvite[playerid];
if (GangOnlineCount(gangid) >= MAX_GANG_SIZE)
{
SendPlayerFormattedText(playerid, lang_texts[6][46] , 0,COLOUR_RED);
GangInvite[playerid] = 0;
return 1;
}
if (GangJoinMember(gangid,playerid) == 1)
{
format(tempstring, sizeof(tempstring), lang_texts[6][47] ,Gangs[gangid][gang_name]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_GANG);
format(tempstring, sizeof(tempstring), lang_texts[6][48] , oGetPlayerName(playerid));
SendGangMessage(gangid,tempstring,COLOUR_GANG);
new logstring[256];
format(logstring, sizeof (logstring), "player: %d: %s: have joined '%s' gang.",playerid,oGetPlayerName(playerid),Gangs[gangid][gang_name]);
WriteLog(logstring);
return 1;
}
else
{
format(tempstring, sizeof(tempstring), lang_texts[6][49] , Gangs[gangid][gang_name]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_RED);
return 1;
}
}
if (PlayerGangid[playerid] == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][50] , 0,COLOUR_RED);
return 1;
}
new gangid = PlayerGangid[playerid];
new leadermemberid = GangMembers[gangid][0];
if((strcomp(cmd, "quit", true) == 1) || (strcomp(cmd, "leave", true) == 1))
{
if (PlayerGangid[playerid] == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][51] , 0,COLOUR_RED);
return 1;
}
GangRemoveMember(gangid,oGetPlayerName(playerid));
return 1;
}
if(strcomp(cmd, "invite", true) == 1)
{
if (strcomp(GangMemberInfo[leadermemberid][member_name],oGetPlayerName(playerid),false) == 0)
{ // player is not leader of this gang
SendPlayerFormattedText(playerid, lang_texts[6][52] , 0,COLOUR_RED);
return 1;
}
new inviteid = INVALID_PLAYER_ID;
new inviteplayername[MAX_NAME];
set(inviteplayername,text);
strdel(inviteplayername, 0, idx);
if (!strlen(inviteplayername))
{
SendPlayerFormattedText(playerid, lang_texts[6][53] , 0,COLOUR_RED);
return 1;
}
for (new i = 0;i<MAX_PLAYERS;i++)
{
if (IsPlayerRegistered(i))
{
if (strcomp(oGetPlayerName(i),inviteplayername,true) == 1)
{
inviteid = i;
break;
}
}
}
if (inviteid == INVALID_PLAYER_ID)
{
SendPlayerFormattedText(playerid, lang_texts[6][54] , 0,COLOUR_RED);
return 1;
}
if (!IsPlayerRegistered(inviteid))
{
SendPlayerFormattedText(playerid, lang_texts[6][55] , 0,COLOUR_RED);
SendPlayerFormattedText(playerid, lang_texts[6][56] , 0,COLOUR_RED);
return 1;
}
if (PlayerGangid[inviteid] != 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][57] , 0,COLOUR_RED);
return 1;
}
format(tempstring, sizeof(tempstring), lang_texts[6][58] , oGetPlayerName(playerid),Gangs[gangid][gang_name]);
SendPlayerFormattedText(inviteid, tempstring, 0,COLOUR_GANG);
format(tempstring, sizeof(tempstring), lang_texts[6][59] , oGetPlayerName(inviteid),Gangs[gangid][gang_name]);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_GANG);
GangInvite[inviteid] = gangid;
new logstring[256];
format(logstring, sizeof (logstring), "player: %d: %s: has invited %s to join gang '%s'.",playerid,oGetPlayerName(playerid),oGetPlayerName(inviteid),Gangs[gangid][gang_name]);
WriteLog(logstring);
return 1;
}
if(strcomp(cmd, "kick", true) == 1)
{
if (strcomp(GangMemberInfo[leadermemberid][member_name],oGetPlayerName(playerid),false) == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][60] , 0,COLOUR_RED);
return 1;
}
new kickplayername[MAX_NAME];
set(kickplayername,text);
strdel(kickplayername, 0, idx);
if (!strlen(kickplayername))
{
SendPlayerFormattedText(playerid, lang_texts[6][61] , 0,COLOUR_RED);
return 1;
}
if (GangRemoveMember(gangid,kickplayername))
{
format(tempstring, sizeof(tempstring), lang_texts[6][62] , kickplayername);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_GREEN);
}
else
{
format(tempstring, sizeof(tempstring), lang_texts[6][63] , kickplayername);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_RED);
}
return 1;
}
if((strcomp(cmd, "colour", true) == 1) || (strcomp(cmd, "COLOUR", true) == 1))
{
if (strcomp(GangMemberInfo[leadermemberid][member_name],oGetPlayerName(playerid),false) == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][64] , 0,COLOUR_RED);
return 1;
}
if (oGetPlayerMoney(playerid) < GANG_COLOUR_COST)
{
SendPlayerFormattedText(playerid, lang_texts[6][65] , GANG_COLOUR_COST,COLOUR_RED);
return 1;
}
new colourname[MAX_NAME];
new gangcolour;
set(colourname,strcharsplit(text, idx,strchar(" ")));
if(!strlen(colourname))
{
SendPlayerFormattedText(playerid, lang_texts[6][66] , 0,COLOUR_RED);
return 1;
}
for (new colourid=0;colourid<COLOURS_SIZE;colourid++)
{
if (strcomp(colourname,GangColours[colourid][colour_name],true) == 1)
{
gangcolour = GangColours[colourid][colour_code];
}
}
if (gangcolour == 0)
{
SendPlayerFormattedText(playerid, lang_texts[6][67] , 0,COLOUR_RED);
SendPlayerFormattedText(playerid, lang_texts[6][68] , 0,COLOUR_RED);
return 1;
}
SendPlayerFormattedText(playerid, lang_texts[6][69] , GANG_COLOUR_COST,gangcolour);
SetGangColour(gangid,gangcolour);
oGivePlayerMoney(playerid,0-GANG_COLOUR_COST,1);
return 1;
}
} // end gang
return 0;
}
public PlayerGangColour(playerid)
{
new gangid = PlayerGangid[playerid];
new newcolour = COLOUR_PLAYER;
if (gangid != 0)
{
if (Gangs[gangid][gang_colour] != 0)
{
newcolour = Gangs[gangid][gang_colour];
}
}
return newcolour;
}
public GangJoinMember(gangid,playerid)
{
if (gangid == 0)
{
WriteLog("script_warning: invalid gang id.");
return 0;
}
if (PlayerGangid[playerid] != 0)
{
WriteLog("script_warning: player already in a gang!");
return 0;
}
if (GangOnlineCount(gangid) >= MAX_GANG_SIZE)
{
WriteLog("script_warning: Gang is already full.");
return 0;
}
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (strlen(GangMemberInfo[memberid][member_name]) == 0) // if member slot free
{
set(GangMemberInfo[memberid][member_name],oGetPlayerName(playerid));
GangMemberInfo[memberid][member_playerid] = playerid;
GangMemberInfo[memberid][member_online] = 1;
PlayerGangid[playerid] = gangid;
set(PlayerGangName[playerid],Gangs[gangid][gang_name]);
GangMemberLogin(gangid,playerid);
return 1;
}
}
return 0;
}
public GangRemoveMember(gangid,kickplayername[])
{
new playerid = INVALID_PLAYER_ID;
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (strcomp(GangMemberInfo[memberid][member_name],kickplayername,true) == 1)
{
playerid = GangMemberInfo[memberid][member_playerid];
GangMemberInfo[memberid][member_online] = 0;
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
set(GangMemberInfo[memberid][member_name],nullstr);
format(tempstring, sizeof(tempstring), lang_texts[6][70] , kickplayername);
SendGangMessage(gangid,tempstring,COLOUR_GANG);
new logstring[256];
format(logstring, sizeof (logstring), "%s has been removed from gang '%s'", kickplayername,Gangs[gangid][gang_name]);
WriteLog(logstring);
if (playerid != INVALID_PLAYER_ID)
{
format(tempstring, sizeof(tempstring), lang_texts[6][71] , Gangs[gangid][gang_name]);
SendClientMessage(playerid,COLOUR_GANG,tempstring);
PlayerGangid[playerid] = 0;
set(PlayerGangName[playerid],nullstr);
}
if (GangOnlineCount(gangid) == 0)
{
GangUnload(gangid);
}
return 1;
}
}
return 0;
}
public GangCreate(leaderid,gangname[],gangcolour)
{
if (!IsPlayerRegistered(leaderid)) return 0;
new tempname[MAX_STRING];
set(tempname,gangname);
if (!StringCharCheck(tempname))
{
SendPlayerFormattedText(leaderid, lang_texts[6][72] , 0,COLOUR_RED);
return 0;
}
// udb
new udbfilename[MAX_NAME];
set(udbfilename,gangname);
strcat(udbfilename,".Gang",sizeof(udbfilename));
// dini
new dinifilename[MAX_STRING];
format(dinifilename,sizeof(dinifilename),"%sGTO.Gang.%s.txt",GangDB,gangname);
if ((udb_Exists(udbfilename)) || (dini_Exists(dinifilename)))
{
SendClientMessage(leaderid,COLOUR_RED, lang_texts[6][73] );
return 0;
}
// Create the gang
new gangid;
for (new id=1;id<MAX_GANGS;id++)
{
if(!Gangs[id][gang_active])
{
gangid = id;
Gangs[id][gang_active] = true; // find first free gang slot and andd our gang
break;
}
}
set(Gangs[gangid][gang_name],gangname);
Gangs[gangid][gang_colour] = gangcolour;
Gangs[gangid][gang_kills] = 0;
Gangs[gangid][gang_score] = 0;
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member
GangMembers[gangid][gangmember] = GetFreeMemberID();
new memberid = GangMembers[gangid][gangmember];
if (memberid == 0)
{
WriteLog("script error: free gang member id not found.");
return 0;
}
GangMemberInfo[memberid][member_active] = 1;
GangMemberInfo[memberid][member_online] = 0;
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
}
new memberid = GangMembers[gangid][0];
set(GangMemberInfo[memberid][member_name],oGetPlayerName(leaderid));
GangMemberInfo[memberid][member_playerid] = leaderid;
GangMemberInfo[memberid][member_online] = 1;
set(PlayerGangName[leaderid],gangname);
PlayerGangid[leaderid] = gangid;
GangSave(gangid);
return gangid;
}
public GangCleanup(gangid)
{
if (!Gangs[gangid][gang_active]) return;
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (GangMemberInfo[memberid][member_online])
{
if (GangMemberInfo[memberid][member_playerid] == INVALID_PLAYER_ID) return;
if (!IsPlayerRegistered(GangMemberInfo[memberid][member_playerid]))
{
GangMemberLogout(GangMemberInfo[memberid][member_playerid],gangid);
GangMemberInfo[memberid][member_online] = 0;
}
}
}
if (GangOnlineCount(gangid) == 0)
{
GangUnload(gangid);
}
}
public GangSaveAll()
{
for (new i = 1;i<MAX_GANGS;i++)
{
if (Gangs[i][gang_active])
{
GangSave(i);
GangCleanup(i);
}
}
}
public GangMemberLogout(playerid,gangid)
{
GangInvite[playerid] = 0;
if (gangid == 0)
{
return;
}
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (GangMemberInfo[memberid][member_playerid] == playerid)
{
GangMemberInfo[memberid][member_online] = 0;
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
break;
}
}
if (GangOnlineCount(gangid) == 0)
{
GangUnload(gangid);
}
else
{
format(tempstring, sizeof(tempstring), lang_texts[6][74] , oGetPlayerName(playerid));
SendGangMessage(gangid,tempstring,COLOUR_GANG);
}
}
public GangSave(gangid)
{
if (gangid == 0) return 0;
if (!Gangs[gangid][gang_active]) return 0;
if (!strlen(Gangs[gangid][gang_name])) return 0;
gang_save_db_dini(gangid);
return 1;
}
gang_save_db_dini(gangid)
{
new gangname[MAX_STRING];
set(gangname,Gangs[gangid][gang_name]);
new dinifilename[MAX_STRING];
format(dinifilename,sizeof(dinifilename),"%sGTO.Gang.%s.txt",GangDB,gangname);
if (!dini_Exists(dinifilename))
{
dini_Create(dinifilename);
}
new temp[MAX_STRING];
dini_Set(dinifilename,"Name",gangname);
valstr(temp,Gangs[gangid][gang_colour]);
dini_Set(dinifilename,"Colour",temp);
valstr(temp,Gangs[gangid][gang_kills]);
dini_Set(dinifilename,"Kills",temp);
valstr(temp,Gangs[gangid][gang_score]);
dini_Set(dinifilename,"Score",temp);
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new dinistring[MAX_STRING];
format(dinistring,sizeof(dinistring),"Member%d",gangmember);
new memberid = GangMembers[gangid][gangmember];
dini_Set(dinifilename,dinistring,GangMemberInfo[memberid][member_name]);
}
}
public GangUnload(gangid)
{
GangSave(gangid);
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member
new memberid = GangMembers[gangid][gangmember];
GangMemberInfo[memberid][member_active] = 0;
GangMemberInfo[memberid][member_online] = 0;
GangMemberInfo[memberid][member_playerid] = INVALID_PLAYER_ID;
}
Gangs[gangid][gang_active] = 0;
}
public GangKill(gangid,killerid,victimid,reason)
{
if (victimid != INVALID_PLAYER_ID)
{
Gangs[gangid][gang_kills]++;
}
if (PlayerGangid[killerid] == PlayerGangid[victimid])
{ // killed a gang member
format(tempstring, sizeof(tempstring), lang_texts[6][76] , oGetPlayerName(killerid));
SendGangMessage(PlayerGangid[killerid],tempstring,COLOUR_GANG);
return 1;
}
return 0;
}
public GangMemberLogin(playerid,gangid)
{
if (PlayerGangid[playerid] != 0)
{
PlayerGangid[playerid] = 0;
}
if (gangid == 0)
{
return 0;
}
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (strcomp(GangMemberInfo[memberid][member_name],oGetPlayerName(playerid),false) == 1)
{
format(tempstring, sizeof(tempstring), lang_texts[6][77] , oGetPlayerName(playerid));
SendGangMessage(gangid,tempstring,COLOUR_GANG);
GangMemberInfo[memberid][member_online] = 1;
GangMemberInfo[memberid][member_playerid] = playerid;
PlayerGangid[playerid] = gangid;
set(PlayerGangName[playerid],Gangs[gangid][gang_name]);
format(tempstring, sizeof(tempstring), lang_texts[6][78] ,Gangs[gangid][gang_name],GangOnlineCount(gangid)-1);
SendPlayerFormattedText(playerid, tempstring, 0,COLOUR_GANG);
GangInvite[playerid] = 0;
SetPlayerColour(playerid,Gangs[gangid][gang_colour]);
return 1;
}
}
return 0;
}
public SendGangMessage(gangid,message[MAX_STRING],colour)
{
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if(GangMemberInfo[memberid][member_online]) SendPlayerFormattedText(GangMemberInfo[memberid][member_playerid], message, 0,colour);
}
}
public GangOnlineCount(gangid)
{
new memberscount;
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if (GangMemberInfo[memberid][member_online]) memberscount++;
}
return memberscount;
}
public GangGiveXP(gangid,xpamount,giverid)
{
Gangs[gangid][gang_score] = Gangs[gangid][gang_score] + xpamount;
new giveamount;
giveamount = xpamount / GangOnlineCount(gangid);
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if((GangMemberInfo[memberid][member_online] == 1) && (giverid != GangMemberInfo[memberid][member_playerid]))
{
if (GetPlayerXP(GangMemberInfo[memberid][member_playerid]) < MAX_LVLXP)
{
GivePlayerXP(GangMemberInfo[memberid][member_playerid],giveamount,0);
new string[MAX_STRING];
format(string, sizeof(string), lang_texts[6][79] ,xpamount,oGetPlayerName(giverid));
SendPlayerFormattedText(GangMemberInfo[memberid][member_playerid], string, 0,COLOUR_XP_GOOD);
CheckPlayerLevel(GangMemberInfo[memberid][member_playerid]);
} else {
new string[MAX_STRING];
format(string, sizeof(string), lang_texts[9][17] );
SendClientMessage(GangMemberInfo[memberid][member_playerid], COLOUR_RED, string);
}
}
}
}
public SetGangColour(gangid,colour)
{
Gangs[gangid][gang_colour] = colour;
for (new gangmember = 0;gangmember<MAX_GANG_SIZE;gangmember++)
{ // foreach member of the gang
new memberid = GangMembers[gangid][gangmember]; // get memberid
if(GangMemberInfo[memberid][member_online] == 1)
{
new playerid = GangMemberInfo[memberid][member_playerid];
SetPlayerColour(playerid,colour);
}
}
}
2. Помогите Зделать Что бы в Green Zone Не Отнималась и не прибовлялась Exp при смерти, убийстве ..
Скрипт GreenZone
PHP:
//Last UpDate 15.07.16 by SaiBit
@___If_u_can_read_this_u_r_nerd();
@___If_u_can_read_this_u_r_nerd()
{
#emit stack 0x7FFFFFFF
#emit inc.s cellmax
static const ___[][] = {"mq", "DAMX"};
#emit retn
#emit load.s.pri ___
#emit proc
#emit proc
#emit fill cellmax
#emit proc
#emit stor.alt ___
#emit strb.i 2
#emit switch 4
#emit retn
L1:
#emit jump L1
#emit zero cellmin
}
#include <a_samp>
#define PlayerToPoint(%0,%1,%2,%3,%4) IsPlayerInRangeOfPoint(%1,%0,%2,%3,%4)
#define publics:%0(%1) forward %0(%1); public %0(%1)
#define MAX_ZONES 1000
new Float:Anti_Zona[MAX_ZONES][4],
PlayerText:antidmzone[MAX_PLAYERS];
stock green_OnPlayerConnect(playerid)
{
antidmzone[playerid] = CreatePlayerTextDraw(playerid, 275.666564, 409.836822, "~g~Green Zone");
PlayerTextDrawLetterSize(playerid, antidmzone[playerid], 0.268666, 1.375999);
PlayerTextDrawAlignment(playerid, antidmzone[playerid], 1);
PlayerTextDrawColor(playerid, antidmzone[playerid], -1);
PlayerTextDrawSetShadow(playerid, antidmzone[playerid], 0);
PlayerTextDrawSetOutline(playerid, antidmzone[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, antidmzone[playerid], 51);
PlayerTextDrawFont(playerid, antidmzone[playerid], 2);
PlayerTextDrawSetProportional(playerid, antidmzone[playerid], 1);
PlayerTextDrawHide(playerid, antidmzone[playerid]);
return true;
}
stock green_OnPlayerDisconnect(playerid, reason)
{
#pragma unused reason
PlayerTextDrawHide(playerid, antidmzone[playerid]);
return true;
}
stock green_OnPlayerDeath(playerid, killerid, reason)
{
#pragma unused reason, playerid
GivePlayerXP(killerid, 100);
return 1;
}
stock green_OnPlayerUpdate(playerid)
{
new killerid = INVALID_PLAYER_ID;
if(IsPlayerInAntiDMZone(playerid,killerid))
{
if(IsPlayerInAnyVehicle(playerid)) return true;
}
return true;
}
stock green_OnGameModeInit()
{
if(LoadAntiDMZones())
{
print("\n-------------------------------------------------------");
print("[DM zone] Загружен");
print("--------------------------------------------------------\n");
}
else
{
print("\n-----------------------------");
print("[DM][Error]");
print("-----------------------------\n");
}
return 1;
}
stock LoadAntiDMZones()
{
new cords[4][20];
new ReadFile[256];
new File: file = fopen("AntiDM.ini", io_read);
if (file)
{
for (new i; i < MAX_ZONES; i ++)
{
fread(file, ReadFile);
split(ReadFile, cords, ',');
Anti_Zona[i][0] = floatstr(cords[0]);
Anti_Zona[i][1] = floatstr(cords[1]);
Anti_Zona[i][2] = floatstr(cords[2]);
Anti_Zona[i][3] = floatstr(cords[3]);
}
fclose(file);
return 1;
}
return 0;
}
stock IsPlayerInAntiDMZone(playerid,killerid)
{
for(new i;i < MAX_ZONES;i ++)
{
if(PlayerToPoint(Anti_Zona[i][3],playerid,Anti_Zona[i][0],Anti_Zona[i][1],Anti_Zona[i][2]))
{
PlayCrimeReportForPlayer(killerid, killerid, random(0));
PlayCrimeReportForPlayer(playerid, killerid, random(0));
PlayerTextDrawShow(playerid, antidmzone[playerid]);
return 1;
}
PlayerTextDrawHide(playerid, antidmzone[playerid]);
}
return 0;
}
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;
}
//Конец скрипта
PHP:
stock player_OnPlayerKill(killerid, victimid, reason) // earn xp, kills++ функуия которая выдаёт Exp и отнимает
{
if (GetPVarInt(killerid, "GangID") != 0) Скрипт банды выше, пробывал играться ну походу я туповат для этого
{
if (GangKill(GetPVarInt(killerid, "GangID"), killerid, victimid, reason) == 1)
{
return;
}
}
GivePVarInt(killerid, "Kills", 1);
// Give XP
new XP_give_victim = -((GetPlayerXP(victimid) / 100) * PLAYER_XP_DEATH_MINUS_PROC);
new XP_give_killer = 0;
new level_difference = GetPlayerLevel(victimid) - GetPlayerLevel(killerid);
switch (level_difference)
{
default: XP_give_killer = ( (GetPlayerLevel(victimid)+1) * 2 ) * ( (GetPlayerLevel(victimid)+1) * 2 ) * PLAYER_XP_KILL_TARIF;
}
if ((GetPlayerXP(killerid) + XP_give_killer) > MAX_XP)
{
SetPlayerXP(killerid, MAX_XP);
}
else if (XP_give_killer != 0)
{
GivePlayerXP(killerid, XP_give_killer, 1);
CheckPlayerLevel(killerid);
}
if (XP_give_victim != 0)
{
GivePlayerXP(victimid, XP_give_victim, 1);
CheckPlayerLevel(victimid);
}
//
// Give Money
new stolencash = (oGetPlayerMoney(victimid) / 100) * PLAYER_MONEY_DEATH_MINUS_PROC;
if (stolencash != 0)
{
oGivePlayerMoney(victimid,-stolencash, 1);
oGivePlayerMoney(killerid, stolencash, 1);
}
//
return;
}
[/COLOR]надеюсь верю и ждуО_о
Последнее редактирование:
