PHP код:
/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++######+++++++++########++++########+++++##++++##+++
+++########++++++##########+++#########++++##+++##++++
+++##+++++##++++##++++++++##++##++++++##+++##++##+++++
+++##++++++##+++##++++++++##++##+++++++##++##+##++++++
+++##+++++++##++##++++++++##++##########+++####+++++++
+++##++++++##+++############++##++##+++++++##+##++++++
+++##+++++##++++##++++++++##++##+++##++++++##++##+++++
+++########+++++##++++++++##++##++++##+++++##+++##++++
+++######+++++++##++++++++##++##+++++##++++##++++#++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
#define FILTERSCRIPT
#include <a_samp>
#include <streamer>
#include <Dini>
#include <sscanf2>
#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
#define COLOR_ROSSO 0xFF0000FF
#define COLOR_FUCSIA 0x9900FFFF
#define COLOR_BLU 0x0000FFFF
#define COLOR_CELESTE 0x00BFFFFF
#define COLOR_VERDE 0x00FF00FF
#define COLOR_VERDEACQUA 0x00FF99FF
#define COLOR_GIALLO 0xFFFF00FF
#define COLOR_ARANCIONE 0xFF9900FF
#define COLOR_MARRONE 0x663300FF
#define COLOR_ROSA 0xFF6666FF
#define COLOR_SALMONE 0xFF9966FF
#define COLOR_NERO 0x000000FF
#define COLOR_GRIGIO 0x4F5152FF
#define COLOR_BIANCO 0xFFFFFFFF
#define GCOLOR_ROSSO 0xFF0000BB
#define GCOLOR_FUCSIA 0x9900FFBB
#define GCOLOR_BLU 0x0000FFBB
#define GCOLOR_CELESTE 0x00BFFFBB
#define GCOLOR_VERDE 0x00FF00BB
#define GCOLOR_VERDEACQUA 0x00FF99BB
#define GCOLOR_GIALLO 0xFFFF00BB
#define GCOLOR_ARANCIONE 0xFF9900BB
#define GCOLOR_MARRONE 0x663300BB
#define GCOLOR_ROSA 0xFF6666BB
#define GCOLOR_SALMONE 0xFF9966BB
#define GCOLOR_NERO 0x000000BB
#define GCOLOR_GRIGIO 0x4F5152BB
#define GCOLOR_BIANCO 0xFFFFFFBB
#define DIALOG_GANGCREATE 73
#define DIALOG_GANGCOLOUR 74
#define DIALOG_GANGINVITE 75
#define DIALOG_GANGKICK 76
#define DIALOG_GANGPICKUP 77
#define DIALOG_GANGTAG 78
#define DIALOG_PAYMENT 79
#define MAX_ZONES 64 //Max zones
#define MAX_GANGS 20 //Max gangs
#define MAX_MEMBERS 15 //Max Gang's members
#define MAX_GVEHICLES 3 //Max Vehicle for a zone
#define GANG_CASH_ICON_ID 0
#define AllowDecreaseTotKills true //If it is true, when a player in a gang death, the player's gang TotKills will decrease
#define MembersForConq 3 //Members needed to conquer a gangzone
#define TimeForConq 60000 //Time in milliseconds to conquire a gangzone
#define MoneyAfterConq 2500 //Will give this value at all members who conquired a zone
#define TimerAddCash 60000 //Every this time, the gangzone will receve the value AddCash
#define AddCash 25 //influeced by TimerAddCash: Every that time, the cash of gang zones will increased with this value
#define mapiconid 0
#define GangPayDay 12 //Expressed in hour (Will give gang money on this hour of the day at the members, default: 12:00)
#define GangCFGFile "M3_Server/GangFS/Gang.cfg" //Create a little Info about Gang and Zones created
#define GangIDFile "M3_Server/GangFS/Gangs/%d.cfg" //Storage the gang file
#define GangZoneFile "M3_Server/GangFS/Zones/%d.cfg" //Storage the zone file
#define GangUserFile "M3_Server/GangFS/Users/%s.ini" //Storage User file (Of gang system)
#define UserBankFile "M3_Server/GangFS/Users/%s.ini" //Storage the cash of the payday's Player (Important to change it if you have an another folder for your Bank System)
new TotGang,
TotZone,
TotVeh;
new Float: ZonePos[2][3],
bool: CreatingZone;
new Invaders[MAX_GANGS][MAX_ZONES];
new GangTimer[MAX_GANGS][MAX_ZONES];
new TimerCash;
enum ZONE_INFO_MAIN
{
ID,
GZID,
CKID,
OfGangID,
Float: PosX1,
Float: PosY1,
Float: PosX2,
Float: PosY2,
Color,
Float: PickX,
Float: PickY,
Float: PickZ,
PickUp,
PickUpCash,
Text3D: Label
}
new ZoneInfo[MAX_ZONES][ZONE_INFO_MAIN];
enum GANG_INFO_MAIN
{
GangID,
GangName[255],
Tag[255],
Color,
Owner[255],
Bank,
Members,
TotConqZ,
TotKills,
VehModel,
VehCol1,
VehCol2
}
new GangInfo[MAX_GANGS][GANG_INFO_MAIN];
enum MEMBER_INFO_MAIN
{
Name[255],
Percentage
}
new MemberInfo[MAX_GANGS][MAX_MEMBERS][MEMBER_INFO_MAIN];
enum gVehicle
{
VehID,
Float: PosX,
Float: PosY,
Float: PosZ,
Float: Angle
}
new GangVehicle[MAX_ZONES][MAX_GVEHICLES][gVehicle];
enum PLAYER_INFO_MAIN
{
GangID,
bool:GangOwner,
InvitedByGang,
bool:Invader,
idarea0,
idarea1
}
new PlayerInfo[MAX_PLAYERS][PLAYER_INFO_MAIN];
new VehicleNames[][] =
{
"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel",
"Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
"Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
"Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection",
"Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
"Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
"Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster A", "Admiral",
"Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
"Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van",
"Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale",
"Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
"Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
"Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper",
"Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring A", "Sandking",
"Blista Compact", "Police Maverick", "Boxville", "Benson", "Mesa", "RC Goblin",
"Hotring B", "Hotring C", "Bloodring Banger", "Rancher", "Super GT",
"Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt",
"Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
"FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune",
"Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer",
"Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent",
"Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo",
"Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
"Windsor", "Monster B", "Monster C", "Uranus", "Jester", "Sultan", "Stratium",
"Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
"Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper",
"Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400",
"News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
"Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police LS",
"Police SF", "Police LV", "Police Ranger", "Picador", "SWAT", "Alpha",
"Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville",
"Tiller", "Utility Trailer"
};
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
//Carica le gang
SetTimer("CheckGangPayDayTime", 1000, true);
new GangFile[255], SlotFile[255];
for(new gangid = 0; gangid < MAX_GANGS; gangid++)
{
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(dini_Exists(GangFile))
{
GangInfo[gangid][GangID] = dini_Int(GangFile, "GangID");
GangInfo[gangid][GangName] = dini_Get(GangFile, "Name");
GangInfo[gangid][Tag] = dini_Get(GangFile, "Tag");
GangInfo[gangid][Owner] = dini_Get(GangFile, "Owner");
GangInfo[gangid][Color] = dini_Int(GangFile, "Color");
GangInfo[gangid][Members] = dini_Int(GangFile, "Members");
GangInfo[gangid][TotConqZ] = dini_Int(GangFile, "TotConqZ");
GangInfo[gangid][TotKills] = dini_Int(GangFile, "TotKills");
GangInfo[gangid][VehModel] = dini_Int(GangFile, "VehModel");
GangInfo[gangid][VehCol1] = dini_Int(GangFile, "VehCol1");
GangInfo[gangid][VehCol2] = dini_Int(GangFile, "VehCol2");
for(new slotid; slotid < MAX_PLAYERS; slotid++)
{
format(SlotFile, sizeof(SlotFile), "Member_%d", slotid);
MemberInfo[gangid][slotid][Name] = dini_Get(GangFile, SlotFile);
format(SlotFile, sizeof(SlotFile), "MemberCash_%d", slotid);
MemberInfo[gangid][slotid][Percentage] = dini_Int(GangFile, SlotFile);
}
TotGang ++;
}
}
//Carica le GangZone
new ZoneFile[255];
for(new zoneid = 1; zoneid < MAX_ZONES; zoneid++)
{
format(ZoneFile,sizeof(ZoneFile),GangZoneFile, zoneid);
if(dini_Exists(ZoneFile))
{
ZoneInfo[zoneid][ID] = dini_Int(ZoneFile,"ZoneID");
ZoneInfo[zoneid][OfGangID] = dini_Int(ZoneFile,"OfGangID");
ZoneInfo[zoneid][PosX1] = dini_Float(ZoneFile,"X1");
ZoneInfo[zoneid][PosY1] = dini_Float(ZoneFile,"Y1");
ZoneInfo[zoneid][PosX2] = dini_Float(ZoneFile,"X2");
ZoneInfo[zoneid][PosY2] = dini_Float(ZoneFile,"Y2");
ZoneInfo[zoneid][ID] = zoneid;
ZoneInfo[zoneid][GZID] = GangZoneCreate(ZoneInfo[zoneid][PosX1], ZoneInfo[zoneid][PosY1], ZoneInfo[zoneid][PosX2], ZoneInfo[zoneid][PosY2]);
if(ZoneInfo[zoneid][OfGangID] == -1)
{
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid)) GangZoneShowForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_GRIGIO);
}
}
else
{
format(GangFile, sizeof(GangFile), GangIDFile, ZoneInfo[zoneid][OfGangID]);
if(dini_Exists(GangFile))
{
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid)) GangZoneShowForPlayer(playerid, ZoneInfo[zoneid][GZID], GangInfo[ZoneInfo[zoneid][OfGangID]][Color]);
}
}
else
{
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid)) GangZoneShowForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_GRIGIO);
}
dini_IntSet(ZoneFile,"OfGangID", -1);
ZoneInfo[zoneid][OfGangID] = -1;
}
}
ZoneInfo[zoneid][CKID] = CreateDynamicRectangle(ZoneInfo[zoneid][PosX1], ZoneInfo[zoneid][PosY1], ZoneInfo[zoneid][PosX2], ZoneInfo[zoneid][PosY2]);
TotZone ++;
ZoneInfo[zoneid][PickX] = dini_Float(ZoneFile,"PickX");
ZoneInfo[zoneid][PickY] = dini_Float(ZoneFile,"PickY");
ZoneInfo[zoneid][PickZ] = dini_Float(ZoneFile,"PickZ");
ZoneInfo[zoneid][PickUpCash] = dini_Int(ZoneFile,"Cash");
ZoneInfo[zoneid][PickUp] = CreatePickup(1274, 1, ZoneInfo[zoneid][PickX], ZoneInfo[zoneid][PickY], ZoneInfo[zoneid][PickZ]);
new txt[50];
format(txt, sizeof(txt), "Money\n%d$", ZoneInfo[zoneid][PickUpCash]);
ZoneInfo[zoneid][Label] = Create3DTextLabel(txt, COLOR_VERDE, ZoneInfo[zoneid][PickX], ZoneInfo[zoneid][PickY], ZoneInfo[zoneid][PickZ]+0.5, 10, 0, 0);
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++)
{
new strX[16], strY[16], strZ[16], strAngle[16];
format(strX, sizeof(strX), "Veh%d_X", gvehicleid);
format(strY, sizeof(strY), "Veh%d_Y", gvehicleid);
format(strZ, sizeof(strZ), "Veh%d_Z", gvehicleid);
format(strAngle, sizeof(strAngle), "Veh%d_Ang", gvehicleid);
GangVehicle[zoneid][gvehicleid][PosX] = dini_Float(ZoneFile, strX);
GangVehicle[zoneid][gvehicleid][PosY] = dini_Float(ZoneFile, strY);
GangVehicle[zoneid][gvehicleid][PosZ] = dini_Float(ZoneFile, strZ);
GangVehicle[zoneid][gvehicleid][Angle] = dini_Float(ZoneFile, strAngle);
if(ZoneInfo[zoneid][OfGangID] != -1)
{
new gangid = ZoneInfo[zoneid][OfGangID], gPlate[8];
if(GangInfo[gangid][VehModel] >= 400 && GangInfo[gangid][VehModel] <= 609 && GangVehicle[zoneid][gvehicleid][PosX] != 0)
{
new vehiclemodel = GangInfo[gangid][VehModel], col1 = GangInfo[gangid][VehCol1], col2 = GangInfo[gangid][VehCol2];
GangVehicle[zoneid][gvehicleid][VehID] = CreateVehicle(vehiclemodel, GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle], col1, col2, 1800000);
format(gPlate, sizeof(gPlate), "[%s]-%d", GangInfo[gangid][Tag], gvehicleid);
SetVehicleNumberPlate(GangVehicle[zoneid][gvehicleid][VehID], gPlate);
TotVeh++;
}
}
}
}
}
TimerCash = SetTimer("AddCashInPickUp", TimerAddCash, true);
for(new gangid = 0; gangid < MAX_GANGS; gangid++)
{
for(new zoneid = 0; zoneid < MAX_ZONES; zoneid++)
{
Invaders[gangid][zoneid] = 0;
}
}
//Carica l'UserFile se il giocatore и connesso
new UserFile[255], pName[MAX_PLAYER_NAME];
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
PlayerInfo[playerid][InvitedByGang] = -1;
GetPlayerName(playerid, pName, sizeof(pName));
format(UserFile,sizeof(UserFile),GangUserFile, pName);
if(!dini_Exists(UserFile))
{
dini_Create(UserFile);
dini_IntSet(UserFile,"GangID", -1);
dini_BoolSet(UserFile,"GangOwner", false);
}
PlayerInfo[playerid][GangID] = dini_Int(UserFile,"GangID");
PlayerInfo[playerid][GangOwner] = dini_Bool(UserFile,"GangOwner");
//controlla se la gang del player esiste
format(GangFile, sizeof(GangFile), GangIDFile, PlayerInfo[playerid][GangID]);
if(!dini_Exists(GangFile))
{
PlayerInfo[playerid][GangID] = -1;
PlayerInfo[playerid][GangOwner] = false;
}
}
}
//visualizza nel log/console quante GangZone e Gang sono state caricate
print("\n--------------------------------------");
print("Gang system By DarK_FeneR Loaded");
printf("Zones loaded: %d", TotZone);
printf("Gangs loaded: %d", TotGang);
printf("Vehicles loaded: %d", TotVeh);
print("--------------------------------------\n");
return 1;
}
public OnFilterScriptExit()
{
//Distrugge GangZone
for(new zoneid = 1; zoneid < MAX_ZONES; zoneid++)
{
GangZoneDestroy(ZoneInfo[zoneid][GZID]);
DestroyDynamicArea(ZoneInfo[zoneid][CKID]);
DestroyPickup(ZoneInfo[zoneid][PickUp]);
Delete3DTextLabel(ZoneInfo[zoneid][Label]);
}
KillTimer(TimerCash);
//salva gli userfile se il giocatore и connesso
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
new GangFile[255], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(GangFile,sizeof(GangFile),GangUserFile, pName);
if(dini_Exists(GangFile))
{
dini_Create(GangFile);
dini_IntSet(GangFile,"GangID", PlayerInfo[playerid][GangID]);
dini_BoolSet(GangFile,"GangOwner", PlayerInfo[playerid][GangOwner]);
}
}
return 1;
}
#else
main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}
#endif
public OnPlayerRequestClass(playerid, classid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
//carica l'UserFile
new UserFile[255], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(UserFile,sizeof(UserFile),GangUserFile, pName);
if(!dini_Exists(UserFile))
{
dini_Create(UserFile);
dini_IntSet(UserFile,"GangID", -1);
dini_BoolSet(UserFile,"GangOwner", false);
}
PlayerInfo[playerid][GangID] = dini_Int(UserFile,"GangID");
PlayerInfo[playerid][GangOwner] = dini_Bool(UserFile,"GangOwner");
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//salva l'UserFile
new GangFile[255], pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(GangFile,sizeof(GangFile),GangUserFile, pName);
if(dini_Exists(GangFile))
{
dini_Create(GangFile);
dini_IntSet(GangFile,"GangID", PlayerInfo[playerid][GangID]);
dini_BoolSet(GangFile,"GangOwner", PlayerInfo[playerid][GangOwner]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
if(PlayerInfo[playerid][GangID] != -1) SetPlayerColor(playerid, GangInfo[PlayerInfo[playerid][GangID]][Color]); //setta il colore della gang al player se и in qualche gang
//fa visualizzare le GangZone al player che si и connesso
new ZoneFile[255];
for(new zoneid = 1; zoneid < MAX_ZONES; zoneid++)
{
format(ZoneFile,sizeof(ZoneFile),GangZoneFile, zoneid);
if(dini_Exists(ZoneFile))
{
if(ZoneInfo[zoneid][OfGangID] == -1)
{
GangZoneShowForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_GRIGIO);
}
else
{
GangZoneShowForPlayer(playerid, ZoneInfo[zoneid][GZID], GangInfo[ZoneInfo[zoneid][OfGangID]][Color]);
}
}
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(PlayerInfo[killerid][GangID] != -1 && PlayerInfo[playerid][GangID] != -1)
{
//increase TotKills to killer's gang
new gangid = PlayerInfo[killerid][GangID], GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
dini_IntSet(GangFile, "TotKills", GangInfo[gangid][TotKills]++);
GangInfo[gangid][TotKills] = dini_Int(GangFile, "TotKills");
#if AllowDecreaseTotKills == true
//decrease TotKills to killed's gang
gangid = PlayerInfo[playerid][GangID];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
dini_IntSet(GangFile, "TotKills", GangInfo[gangid][TotKills]++);
GangInfo[gangid][TotKills] = dini_Int(GangFile, "TotKills");
#endif
}
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
if(text[0] == '!' && PlayerInfo[playerid][GangID] != -1)
{
if(strlen(text) < 2) return 1;
new string[128];
new name[MAX_PLAYER_NAME];
new gangid = PlayerInfo[playerid][GangID];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "[GANG][%s: %s]", name, text[1]);
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && PlayerInfo[p][GangID] == gangid) SendClientMessage(p, GangInfo[gangid][Color], string);
}
return 0;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(g, 1, cmdtext);
dcmd(gang, 4, cmdtext);
return 0;
}
//gang inizio
dcmd_g(playerid, params[]) return dcmd_gang(playerid, params);
dcmd_gang(playerid, params[])
{
new gcmd[32];
if(sscanf(params, "s[32]", gcmd))
{
SendClientMessage(playerid, COLOR_ARANCIONE, "Use: /g(ang) <Type>");
SendClientMessage(playerid, COLOR_GIALLO, "_________________Gang System Commands_________________");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) info - Help the gang system");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) stats - Look at the details of the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) top - See the score of the gangs");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) list - Generate a list of gang created along with the gang info");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) create - Create a new gang");
if(PlayerInfo[playerid][GangOwner] == true)
{
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) tag - Set tag for the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) color - Select the color of the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) kick - Kick a member of the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) PaymentSet - Set the payday's percentage of a Member");
}
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) invite - Invites a player to enter the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) join - Get into the gang to which you have been invited");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) leave - Leave the gang");
SendClientMessage(playerid, COLOR_VERDE, "/g(ang) PaymentList - See percentage of all member's payday");
SendClientMessage(playerid, COLOR_GIALLO, "______________________________________________________");
return 1;
}
if(strcmp("info", gcmd, true, sizeof(gcmd)) == 0)
{
SendClientMessage(playerid, COLOR_GIALLO, "_________________Tutorial Gang System_________________");
SendClientMessage(playerid, COLOR_VERDE, "Conquest: In order to win GangZone must be at least 2");
SendClientMessage(playerid, COLOR_VERDE, "Conquest: If the GangZone is not nobody takes 30 seconds if you are already conquered two minutes");
SendClientMessage(playerid, COLOR_VERDE, "Earnings: Every conquest of GangZone receive Money");
SendClientMessage(playerid, COLOR_VERDE, "Earnings: The founder may collect the revenues of the zones (money) and can spartirli, HE WANTS");
SendClientMessage(playerid, COLOR_VERDE, "Earnings: Most areas have and the more money you'll get");
SendClientMessage(playerid, COLOR_VERDE, "Withdrawal revenues: The founder may withdraw the revenues going into a Pickup ($ symbol)");
SendClientMessage(playerid, COLOR_VERDE, "Withdrawal revenues: The Pickup can be found in all gangzone (PS: you can find inside interior sometimes");
SendClientMessage(playerid, COLOR_VERDE, "Gang Chat: Each gang has its own chat, to use it just type '!' + Text (eg '! Let's win?')");
SendClientMessage(playerid, COLOR_GIALLO, "______________________________________________________");
return 1;
}
if(strcmp(gcmd, "create", true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] != -1) return SendClientMessage(playerid, COLOR_VERDE, "You're already in a gang, use /g(ang) leave to leave the gang");
ShowPlayerDialog(playerid, DIALOG_GANGCREATE, DIALOG_STYLE_INPUT, "Gang Create", "Input the nome of your new gang", "Ok", "Cancel");
return 1;
}
if(strcmp("tag", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
ShowPlayerDialog(playerid, DIALOG_GANGTAG, DIALOG_STYLE_INPUT, "Gang Tag", "Input the tag for your gang", "Ok", "Cancel");
return 1;
}
if(strcmp("color", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
ShowPlayerDialog(playerid, DIALOG_GANGCOLOUR, DIALOG_STYLE_LIST, "Change Gang Color", "{FF0000}Red\n{9900FF}Fuchsia\n{0000FF}Blue\n{0066FF}Light Blue\n{00FF00}Green\n{00FF99}Water Green\n{FFFF00}Yellow\n{FF9900}Orange\n{663300}Brown\n{FF6666}Pink\n{9900FF}Salmon", "Ok", "Cancel");
return 1;
}
if(strcmp("zone", gcmd, true, sizeof(gcmd)) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_VERDE, "You need to be admin RCon to use this command!");
if(CreatingZone == false)
{
GetPlayerPos(playerid, ZonePos[0][0], ZonePos[0][1], ZonePos[0][2]);
CreatingZone = true;
SendClientMessage(playerid, COLOR_GIALLO, "Redo the command in the other side to terminate the creation");
}
else
{
CreatingZone = false;
GetPlayerPos(playerid, ZonePos[1][0], ZonePos[1][1], ZonePos[1][2]);
for(new zoneid = 1; zoneid <= MAX_ZONES; zoneid++) //inizio controllo degli ID liberi
{
new ZoneFile[255];
format(ZoneFile,sizeof(ZoneFile),GangZoneFile, zoneid);
if(!dini_Exists(ZoneFile))
{
//salvataggio CFG
new cfgFile[255];
TotZone ++;
format(cfgFile,sizeof(cfgFile),GangCFGFile);
dini_Create(cfgFile);
dini_IntSet(cfgFile,"TotZone", TotZone);
//creazione zona
format(ZoneFile,sizeof(ZoneFile),GangZoneFile, zoneid);
dini_Create(ZoneFile);
dini_IntSet(ZoneFile,"ZoneID", zoneid);
dini_IntSet(ZoneFile,"OfGangID", -1);
if(ZonePos[0][0] < ZonePos[1][0])
{
dini_FloatSet(ZoneFile,"X1", ZonePos[0][0]);
dini_FloatSet(ZoneFile,"X2", ZonePos[1][0]);
}
else
{
dini_FloatSet(ZoneFile,"X1", ZonePos[1][0]);
dini_FloatSet(ZoneFile,"X2", ZonePos[0][0]);
}
if(ZonePos[0][1] < ZonePos[1][1])
{
dini_FloatSet(ZoneFile,"Y1", ZonePos[0][1]);
dini_FloatSet(ZoneFile,"Y2", ZonePos[1][1]);
}
else
{
dini_FloatSet(ZoneFile,"Y1", ZonePos[1][1]);
dini_FloatSet(ZoneFile,"Y2", ZonePos[0][1]);
}
ZoneInfo[zoneid][ID] = dini_Int(ZoneFile,"ZoneID");
ZoneInfo[zoneid][OfGangID] = dini_Int(ZoneFile,"OfGangID");
ZoneInfo[zoneid][PosX1] = dini_Float(ZoneFile,"X1");
ZoneInfo[zoneid][PosY1] = dini_Float(ZoneFile,"Y1");
ZoneInfo[zoneid][PosX2] = dini_Float(ZoneFile,"X2");
ZoneInfo[zoneid][PosY2] = dini_Float(ZoneFile,"Y2");
ZoneInfo[zoneid][GZID] = GangZoneCreate(ZoneInfo[zoneid][PosX1], ZoneInfo[zoneid][PosY1], ZoneInfo[zoneid][PosX2], ZoneInfo[zoneid][PosY2]);
if(ZoneInfo[zoneid][OfGangID] == -1)
{
GangZoneShowForAll(ZoneInfo[zoneid][GZID], GCOLOR_GRIGIO);
}
else
{
GangZoneShowForAll(ZoneInfo[zoneid][GZID], GangInfo[ZoneInfo[zoneid][OfGangID]][Color]);
}
ZoneInfo[zoneid][CKID] = CreateDynamicRectangle(ZoneInfo[zoneid][PosX1], ZoneInfo[zoneid][PosY1], ZoneInfo[zoneid][PosX2], ZoneInfo[zoneid][PosY2]);
//ferma il ciclo dopo la creazione gang
zoneid = MAX_ZONES;
}
}
}
return 1;
}
if(strcmp("pickup", gcmd, true, sizeof(gcmd)) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_VERDE, "You need to be admin RCon to use this command!");
ShowPlayerDialog(playerid, DIALOG_GANGPICKUP, DIALOG_STYLE_INPUT, "PickUp Zone Create", "Input the ID of the zone to assign the Pickup", "Ok", "Cancel");
return 1;
}
if(strcmp("stats", gcmd, true, sizeof(gcmd)) == 0)
{
new gangid = PlayerInfo[playerid][GangID];
if(gangid == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
new GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(!dini_Exists(GangFile)) return SendClientMessage(playerid, COLOR_ROSSO, "Gang doesn't exist! Il founder will abandoned the gang...");
new MembriOn = 0;
for(new l = 0; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == gangid) MembriOn ++;
}
new ZoneDellaGang = 0;
new ZoneFile[255];
for(new z = 0; z < MAX_ZONES; z++)
{
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, z);
if(dini_Exists(ZoneFile)) if(ZoneInfo[z][OfGangID] == gangid) ZoneDellaGang ++;
}
new strENG[255];
format(strENG, sizeof(strENG), "ID: %d | Name: %s | Founder: %s | Conquired zones: %d | Online Members: %d", GangInfo[gangid][GangID], GangInfo[gangid][GangName], GangInfo[gangid][Owner], ZoneDellaGang, MembriOn);
SendClientMessage(playerid, GangInfo[gangid][Color], strENG);
return 1;
}
if(strcmp("invite", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
new gangid = PlayerInfo[playerid][GangID];
if(GangInfo[gangid][Members] >= MAX_MEMBERS) return SendClientMessage(playerid, COLOR_ROSSO, "Gang reached maximum members");
ShowPlayerDialog(playerid, DIALOG_GANGINVITE, DIALOG_STYLE_INPUT, "Gang Invite", "Insert the ID of the Player to invite", "Ok", "Cancel");
return 1;
}
if(strcmp("join", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] != -1) return SendClientMessage(playerid, COLOR_ROSSO, "Are you already part of a gang! Use / gang leave to leave the gang present");
if(PlayerInfo[playerid][InvitedByGang] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You have no invitation gang");
new gangid = PlayerInfo[playerid][InvitedByGang];
if(GangInfo[gangid][Members] >= MAX_MEMBERS) return SendClientMessage(playerid, COLOR_ROSSO, "Gang reached maximum members");
new GangFile[255], pName[MAX_PLAYER_NAME], strENG[255], SlotFile[255], slotid = CheckFreeGangSeat(gangid);
GetPlayerName(playerid, pName, sizeof(pName));
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
format(SlotFile, sizeof(SlotFile), "Member_%d", slotid);
dini_Set(GangFile, SlotFile, pName);
MemberInfo[gangid][slotid][Name] = dini_Get(GangFile, SlotFile);
if(IsPlayerInAnyDynamicArea(playerid))
{
new zoneid = GetPlayerNumberDynamicAreas(playerid);
Invaders[gangid][zoneid] ++;
if(Invaders[gangid][zoneid] == MembersForConq)
{
for(new l = 0; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == gangid)
{
SendClientMessage(l, GangInfo[gangid][Color], "You are conquiring the zone");
}
}
GangZoneFlashForAll(ZoneInfo[zoneid][GZID], GangInfo[gangid][Color]);
if(ZoneInfo[zoneid][OfGangID] != -1)
{
GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq, false, "ii", zoneid, gangid);
}
else
{
GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq/2, false, "ii", zoneid, gangid);
}
for(new l; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == ZoneInfo[zoneid][OfGangID] && PlayerInfo[playerid][GangID] != ZoneInfo[zoneid][OfGangID] && PlayerInfo[l][GangID] != -1)
{
SendClientMessage(l, GangInfo[ZoneInfo[zoneid][OfGangID]][Color], "Your zone is under attack!");
}
}
}
}
GangInfo[gangid][Members] ++;
dini_IntSet(GangFile,"Members", GangInfo[gangid][Members]);
format(strENG, sizeof(strENG), "%s (ID:%d) has joined the gang %s", pName, playerid, GangInfo[PlayerInfo[playerid][InvitedByGang]][GangName]);
SendClientMessageToAll(GangInfo[gangid][Color], strENG);
format(strENG, sizeof(strENG), "%s (ID:%d) has joined your gang", pName, playerid);
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && PlayerInfo[p][GangID] == gangid) SendClientMessage(p, GangInfo[gangid][Color], strENG);
}
SetPlayerColor(playerid, GangInfo[gangid][Color]);
PlayerInfo[playerid][GangID] = PlayerInfo[playerid][InvitedByGang];
PlayerInfo[playerid][InvitedByGang] = -1;
return 1;
}
if(strcmp("leave", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
new GangFile[255], SlotFile[255], NomeGang[255];
new gangid = PlayerInfo[playerid][GangID];
new strENG[255];
if(IsPlayerInAnyDynamicArea(playerid))
{
new zoneid = GetPlayerNumberDynamicAreas(playerid);
Invaders[gangid][zoneid] --;
if(Invaders[gangid][zoneid] < MembersForConq)
{
KillTimer(GangTimer[gangid][zoneid]);
GangZoneStopFlashForAll(ZoneInfo[zoneid][GZID]);
}
}
if(PlayerInfo[playerid][GangOwner] == true)
{
format(strENG, sizeof(strENG), "The founder of the gang {FFFF00}'%s' {00FF00}has abandoned the gang. The gang has dissolved", GangInfo[gangid][GangName]);
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && PlayerInfo[p][GangID] == gangid)
{
SendClientMessage(p, COLOR_VERDE, strENG);
}
}
for(new z = 1; z < MAX_ZONES; z++)
{
new ZoneFile[255];
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, z);
if(dini_Exists(ZoneFile))
{
if(ZoneInfo[z][OfGangID] == gangid)
{
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++) DestroyVehicle(GangVehicle[z][gvehicleid][VehID]);
dini_IntSet(ZoneFile,"OfGangID",-1);
ZoneInfo[z][OfGangID] = dini_Int(ZoneFile,"OfGangID");
GangZoneShowForAll(ZoneInfo[z][GZID], GCOLOR_GRIGIO);
}
}
}
format(GangFile, sizeof(GangFile), GangIDFile, PlayerInfo[playerid][GangID]);
if(dini_Exists(GangFile))
{
dini_Remove(GangFile);
}
PlayerInfo[playerid][GangOwner] = false;
}
else
{
new slotid = CheckGangPlayerSlot(gangid, playerid);
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
format(SlotFile, sizeof(GangFile), "Member_%d", slotid);
GangInfo[gangid][Members] --;
dini_IntSet(GangFile,"Members", GangInfo[gangid][Members]);
dini_Set(GangFile, SlotFile, "");
MemberInfo[gangid][slotid][Name] = dini_Get(GangFile, SlotFile);
format(GangFile, sizeof(GangFile), GangIDFile, PlayerInfo[playerid][GangID]);
if(dini_Exists(GangFile))
{
NomeGang = dini_Get(GangFile,"Name");
}
format(strENG, sizeof(strENG), "You left the gang %s (ID:%d)", GangInfo[gangid][GangName], gangid);
SendClientMessage(playerid, COLOR_VERDE, strENG);
}
PlayerInfo[playerid][GangID] = -1;
PlayerInfo[playerid][GangOwner] = false;
return 1;
}
if(strcmp("kick", gcmd, true, sizeof(gcmd)) == 0)
{
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
ShowPlayerDialog(playerid, DIALOG_GANGKICK, DIALOG_STYLE_INPUT, "Kick Player from Gang", "Input the ID of the player to kick by the Gang", "Ok", "Cancel");
return 1;
}
if(strcmp("list", gcmd, true, sizeof(gcmd)) == 0)
{
SendClientMessage(playerid, COLOR_VERDE, "________________Gang List________________");
for(new g = 0; g < MAX_GANGS; g++)
{
new GangFile[255], strENG[255];
format(GangFile, sizeof(GangFile), GangIDFile, g);
if(dini_Exists(GangFile))
{
new MembriOn = 0;
for(new l = 0; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == g) MembriOn ++;
}
new ZoneDellaGang = 0;
new ZoneFile[255];
for(new z = 0; z < MAX_ZONES; z++)
{
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, z);
if(dini_Exists(ZoneFile)) if(ZoneInfo[z][OfGangID] == g) ZoneDellaGang ++;
}
format(strENG, sizeof(strENG), "ID: %d | Name: %s | Founder: %s | Conquired zones: %d | Members: %d | Online Members: %d", GangInfo[g][GangID], GangInfo[g][GangName], GangInfo[g][Owner], ZoneDellaGang, GangInfo[g][Members], MembriOn);
SendClientMessage(playerid, GangInfo[g][Color], strENG);
}
}
return 1;
}
if(strcmp("top", gcmd, true, sizeof(gcmd)) == 0)
{
SendClientMessage(playerid, COLOR_VERDE, "________________Gang List________________");
for(new g = 0; g < MAX_GANGS; g++)
{
new GangFile[255], strENG[255];
format(GangFile, sizeof(GangFile), GangIDFile, g);
if(dini_Exists(GangFile))
{
new GangScore = GangInfo[g][TotConqZ] + (GangInfo[g][TotKills]/10);
format(strENG, sizeof(strENG), "ID: %d | Name: %s | Score: %d | Tot Conquired Zones: %d | Tot kills: %d", GangInfo[g][GangID], GangInfo[g][GangName], GangScore, GangInfo[g][TotConqZ], GangInfo[g][TotKills]);
SendClientMessage(playerid, GangInfo[g][Color], strENG);
}
}
return 1;
}
if(strcmp("resetcash", gcmd, true, sizeof(gcmd)) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_VERDE, "You must be RCon Admin to use this command!");
new ZoneFile[255];
for(new zoneid = 1; zoneid <= MAX_ZONES; zoneid++)
{
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, zoneid);
if(dini_Exists(ZoneFile))
{
dini_IntSet(ZoneFile,"Cash", 0);
ZoneInfo[zoneid][PickUpCash] = 0;
new txt[50];
format(txt, sizeof(txt), "Money\n%d$", ZoneInfo[zoneid][PickUpCash]);
Update3DTextLabelText(ZoneInfo[zoneid][Label], COLOR_VERDE, txt);
}
}
SendClientMessage(playerid, COLOR_VERDE, "Zones' zone resetted!");
return 1;
}
if(strcmp("vehzone", gcmd, true, 7) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be admin RCon to use this command!");
new zoneid, gvehicleid;
if(sscanf(params, "s[16]dd", gcmd, zoneid, gvehicleid)) return SendClientMessage(playerid, COLOR_ARANCIONE, "Use: /g(ang) Vehicle <zoneid> <slotvehicleid>");
if(zoneid > MAX_ZONES || zoneid < 1) return SendClientMessage(playerid, COLOR_ROSSO, "Zone ID too large or small");
if(gvehicleid >= MAX_GVEHICLES || gvehicleid < 0) return SendClientMessage(playerid, COLOR_ROSSO, "Vehicle slot too large or small");
new Float: gvPos[3], Float: gvAngle;
if(IsPlayerInAnyVehicle(playerid))
{
new vehicleid = GetPlayerVehicleID(playerid);
GetVehiclePos(vehicleid, gvPos[0], gvPos[1], gvPos[2]);
GetVehicleZAngle(vehicleid, gvAngle);
}
else
{
GetPlayerPos(playerid, gvPos[0], gvPos[1], gvPos[2]);
GetPlayerFacingAngle(playerid, gvAngle);
}
new ZoneFile[255], strX[16], strY[16], strZ[16], strAngle[16];
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, zoneid);
format(strX, sizeof(strX), "Veh%d_X", gvehicleid);
format(strY, sizeof(strY), "Veh%d_Y", gvehicleid);
format(strZ, sizeof(strZ), "Veh%d_Z", gvehicleid);
format(strAngle, sizeof(strAngle), "Veh%d_Ang", gvehicleid);
dini_FloatSet(ZoneFile, strX, gvPos[0]);
dini_FloatSet(ZoneFile, strY, gvPos[1]);
dini_FloatSet(ZoneFile, strZ, gvPos[2]);
dini_FloatSet(ZoneFile, strAngle, gvAngle);
GangVehicle[zoneid][gvehicleid][PosX] = dini_Float(ZoneFile, strX);
GangVehicle[zoneid][gvehicleid][PosY] = dini_Float(ZoneFile, strY);
GangVehicle[zoneid][gvehicleid][PosZ] = dini_Float(ZoneFile, strZ);
GangVehicle[zoneid][gvehicleid][Angle] = dini_Float(ZoneFile, strAngle);
new strENG[128];
format(strENG, sizeof(strENG), "vPosX: %0.02f | vPosY: %0.02f | vPosZ: %0.02f | vAng: %0.02f", GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle]);
SendClientMessage(playerid, COLOR_VERDE, strENG);
DestroyVehicle(GangVehicle[zoneid][gvehicleid][VehID]);
if(ZoneInfo[zoneid][OfGangID] != -1)
{
new gangid = ZoneInfo[zoneid][OfGangID], gPlate[8];
if(GangInfo[gangid][VehModel] >= 400 && GangInfo[gangid][VehModel] <= 611)
{
new vehiclemodel = GangInfo[gangid][VehModel], col1 = GangInfo[gangid][VehCol1], col2 = GangInfo[gangid][VehCol2];
GangVehicle[zoneid][gvehicleid][VehID] = CreateVehicle(vehiclemodel, GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle], col1, col2, 1800000);
format(gPlate, sizeof(gPlate), "[%s]-%d", GangInfo[gangid][Tag], gvehicleid);
SetVehicleNumberPlate(GangVehicle[zoneid][gvehicleid][VehID], gPlate);
}
}
format(strENG, sizeof(strENG), "Zone ID: %d | Vehicle Slot: %d", zoneid, gvehicleid);
SendClientMessage(playerid, COLOR_VERDE, strENG);
return 1;
}
if(strcmp("paymentlist", gcmd, true, 11) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
new strENG[512], gangid = PlayerInfo[playerid][GangID], PerCentRemain, strTitle[128];
format(strENG, sizeof(strENG), "Member Name\tPercentage\n");
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(MemberInfo[gangid][slotid][Name]) > 1) format(strENG, sizeof(strENG), "%s{00FF00}%s\t%d/100\n", strENG, MemberInfo[gangid][slotid][Name], MemberInfo[gangid][slotid][Percentage]);
else format(strENG, sizeof(strENG), "%s{FF0000}<Empty>\t%d/100\n", strENG, MemberInfo[gangid][slotid][Name], MemberInfo[gangid][slotid][Percentage]);
PerCentRemain += MemberInfo[gangid][slotid][Percentage];
}
PerCentRemain = 100 - PerCentRemain;
format(strTitle, sizeof(strTitle), "Payment (%d/100 percentage Remains) Gang's Bank: $%d", PerCentRemain, GangInfo[gangid][Bank]);
ShowPlayerDialog(playerid, DIALOG_PAYMENT, DIALOG_STYLE_TABLIST_HEADERS, strTitle, strENG, "Select", "Exit");
return 1;
}
if(strcmp("paymentset", gcmd, true, 10) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
new pName[MAX_PLAYER_NAME], UserPay, strENG[128];
if(sscanf(params, "s[32]s[16]d", gcmd, pName, UserPay)) return SendClientMessage(playerid, COLOR_ARANCIONE, "Use: /g(ang) PaymentSet <NickName> <Percentage>");
new GangFile[255], gangid = PlayerInfo[playerid][GangID], SlotFile[255], slotid;
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(IsNumeric(pName))
{
new UserID = strval(pName);
if(!IsPlayerConnected(UserID)) return SendClientMessage(playerid, COLOR_ROSSO, "The player is not connected");
slotid = CheckGangPlayerSlot(gangid, UserID);
}
else slotid = CheckGangPlayerNameSlot(gangid, pName);
new PercentageRem;
for(new sid; sid < MAX_MEMBERS; sid++)
{
if(sid == slotid) PercentageRem += UserPay;
else PercentageRem += MemberInfo[gangid][sid][Percentage];
}
PercentageRem = 100 - PercentageRem;
if(PercentageRem < 0) return SendClientMessage(playerid, COLOR_ROSSO, "Percentage you wrote is too high");
format(SlotFile, sizeof(SlotFile), "MemberCash_%d", slotid);
dini_IntSet(GangFile, SlotFile, UserPay);
MemberInfo[gangid][slotid][Percentage] = dini_Int(GangFile, SlotFile);
format(strENG, sizeof(strENG), "[GANG]You change %s's payment percentage to %d/100. %d/100 will give to the owner", pName, MemberInfo[gangid][slotid][Percentage], PercentageRem);
SendClientMessage(playerid, COLOR_VERDE, strENG);
return 1;
}
if(strcmp("vehicle", gcmd, true, 7) == 0)
{
if(PlayerInfo[playerid][GangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "You aren't in any gang!");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "You need to be founder of the gang!");
new modelid, col1, col2;
if(sscanf(params, "s[16]ddd", gcmd, modelid, col1, col2)) return SendClientMessage(playerid, COLOR_ARANCIONE, "Use: /g(ang) vehicle <modelid> <Color1> <Color2>");
if(modelid < 400 || modelid > 611) return SendClientMessage(playerid, COLOR_ROSSO, "Use numbers from 400 to 611");
new GangFile[255], gangid = PlayerInfo[playerid][GangID];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
dini_IntSet(GangFile, "VehModel", modelid);
dini_IntSet(GangFile, "VehCol1", col1);
dini_IntSet(GangFile, "VehCol2", col2);
GangInfo[gangid][VehModel] = dini_Int(GangFile, "VehModel");
GangInfo[gangid][VehCol1] = dini_Int(GangFile, "VehCol1");
GangInfo[gangid][VehCol2] = dini_Int(GangFile, "VehCol2");
new strENG[128];
format(strENG, sizeof(strENG), "You setted %s (Model: %d) (Color 1: %d | Color 2: %d) as gang vehicle", VehicleNames[GangInfo[gangid][VehModel]-400], GangInfo[gangid][VehModel], GangInfo[gangid][VehCol1], GangInfo[gangid][VehCol2]);
SendClientMessage(playerid, GangInfo[gangid][Color], strENG);
for(new zoneid = 1; zoneid < MAX_ZONES; zoneid++)
{
if(ZoneInfo[zoneid][PosX1] != 0 && ZoneInfo[zoneid][OfGangID] == gangid)
{
new gPlate[8];
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++)
{
DestroyVehicle(GangVehicle[zoneid][gvehicleid][VehID]);
if(GangVehicle[zoneid][gvehicleid][PosX] != 0)
{
GangVehicle[zoneid][gvehicleid][VehID] = CreateVehicle(GangInfo[gangid][VehModel], GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle], GangInfo[gangid][VehCol1], GangInfo[gangid][VehCol2], 1800000);
format(gPlate, sizeof(gPlate), "[%s]-%d", GangInfo[gangid][Tag], gvehicleid);
SetVehicleNumberPlate(GangVehicle[zoneid][gvehicleid][VehID], gPlate);
}
}
}
}
return 1;
}
return SendClientMessage(playerid, COLOR_ROSSO, "[Gang]Unknown gang command: type /g(ang) to see all gang's commands");
}
//gang fine
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
new ZoneFile[255], area[MAX_ZONES], zonaid;
GetPlayerDynamicAreas(playerid, area, sizeof(area));
zonaid = area[0];
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, zonaid);
if(pickupid == ZoneInfo[zonaid][PickUp])
{
if(ZoneInfo[zonaid][OfGangID] == -1) return SendClientMessage(playerid, COLOR_ROSSO, "To withdraw the cash of the zone, the zone must be of your gang");
if(PlayerInfo[playerid][GangID] != ZoneInfo[zonaid][OfGangID]) return SendClientMessage(playerid, COLOR_ROSSO, "To withdraw the cash of the zone, the zone must be of your gang");
if(PlayerInfo[playerid][GangOwner] == false) return SendClientMessage(playerid, COLOR_ROSSO, "Per ritirare i soldi della zona devi essere il Founder della gang To withdraw the cash of the zone you must be Founder of the gang");
if(ZoneInfo[zonaid][PickUpCash] == 0) return SendClientMessage(playerid, COLOR_ROSSO, "There are no money... What do you want to withdraw?");
GangZoneStopFlashForPlayer(playerid, ZoneInfo[zonaid][GZID]);
new String[255], GangFile[255], gangid = PlayerInfo[playerid][GangID];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
format(String, sizeof(String), "You dropped the gain of the zone: %d$", ZoneInfo[zonaid][PickUpCash]);
SendClientMessage(playerid, GangInfo[PlayerInfo[playerid][GangID]][Color], String);
dini_IntSet(GangFile, "Bank", GangInfo[gangid][Bank] + ZoneInfo[zonaid][PickUpCash]);
GangInfo[gangid][Bank] = dini_Int(GangFile, "Bank");
ZoneInfo[zonaid][PickUpCash] = 0;
dini_IntSet(ZoneFile, "Cash", 0);
new txt[50];
format(txt, sizeof(txt), "Money\n%d$", ZoneInfo[zonaid][PickUpCash]);
Update3DTextLabelText(ZoneInfo[zonaid][Label], COLOR_VERDE, txt);
}
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//gang inizio
if(dialogid == DIALOG_GANGCREATE)
{
if(response)
{
if(strlen(inputtext) > 20 || strlen(inputtext) < 3 ) return SendClientMessage(playerid, COLOR_ROSSO, "Invalid name's lenght. MIN 4 - MAX 19 letters");
new GangFile[255];
for(new gangid = 0; gangid < MAX_GANGS; gangid++) //inizio controllo degli id liberi
{
format(GangFile,sizeof(GangFile),GangIDFile, gangid);
if(!dini_Exists(GangFile))
{
//salvataggio CFG
new cfgFile[255];
TotGang ++;
format(cfgFile,sizeof(GangFile),GangCFGFile);
dini_Create(cfgFile);
dini_IntSet(cfgFile,"TotGang", TotGang);
//creazione gang
format(GangFile,sizeof(GangFile),GangIDFile, gangid);
GangInfo[gangid][GangID] = gangid;
GetPlayerName(playerid, GangInfo[gangid][Owner], 30);
dini_Create(GangFile);
dini_IntSet(GangFile,"GangID", GangInfo[gangid][GangID]);
dini_IntSet(GangFile,"Color", -1);
dini_Set(GangFile,"Name", inputtext);
dini_Set(GangFile,"Tag", "");
dini_Set(GangFile,"Owner", GangInfo[gangid][Owner]);
dini_IntSet(GangFile,"Members", 1);
GangInfo[gangid][GangID] = dini_Int(GangFile,"GangID");
GangInfo[gangid][Color] = dini_Int(GangFile,"Color");
GangInfo[gangid][GangName] = dini_Get(GangFile,"Name");
GangInfo[gangid][Tag] = dini_Get(GangFile,"Tag");
GangInfo[gangid][Owner] = dini_Get(GangFile,"Owner");
GangInfo[gangid][Members] = dini_Int(GangFile,"Members");
//mostra info gang creata
PlayerInfo[playerid][GangID] = gangid;
PlayerInfo[playerid][GangOwner] = true;
new strENG[255];
format(strENG, sizeof(strENG), "ID Gang: %d | Gang Name: %s | Founder: %s", GangInfo[gangid][GangID], GangInfo[gangid][GangName], GangInfo[gangid][Owner]);
SendClientMessage(playerid, COLOR_VERDE, strENG);
//ferma il ciclo dopo la creazione gang
gangid = MAX_GANGS;
//manda al dialogo della scelta colore della gang
ShowPlayerDialog(playerid, DIALOG_GANGCOLOUR, DIALOG_STYLE_LIST, "Change Gang Color", "{FF0000}Red\n{9900FF}Fuchsia\n{0000FF}Blue\n{0066FF}Light Blue\n{00FF00}Green\n{00FF99}Water Green\n{FFFF00}Yellow\n{FF9900}Orange\n{663300}Brown\n{FF6666}Pink\n{9900FF}Salmon", "Ok", "Cancel");
}
}
}
}
if(dialogid == DIALOG_GANGTAG)
{
if(response)
{
if(strlen(inputtext) < 1 || strlen(inputtext) > 4) return SendClientMessage(playerid, COLOR_ROSSO, "The tag must have minimum 1 and maximum 4 characters!");
if(strfind(inputtext, "[", true) != -1 || strfind(inputtext, "]", true) != -1) return SendClientMessage(playerid, COLOR_ROSSO, "Don't use square brackets ('[' e ']')");
new gangid = PlayerInfo[playerid][GangID];
new GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(dini_Exists(GangFile))
{
dini_Set(GangFile,"Tag", inputtext);
GangInfo[gangid][Tag] = dini_Get(GangFile,"Tag");
new gPlate[8];
for(new zoneid = 1; zoneid <= MAX_ZONES; zoneid++)
{
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++)
{
DestroyVehicle(GangVehicle[zoneid][gvehicleid][VehID]);
if(GangInfo[gangid][VehModel] >= 400 && GangInfo[gangid][VehModel] <= 609 && GangVehicle[zoneid][gvehicleid][PosX] != 0 && GangVehicle[zoneid][gvehicleid][PosY] != 0 && GangVehicle[zoneid][gvehicleid][PosZ] != 0)
{
new vehiclemodel = GangInfo[gangid][VehModel], col1 = GangInfo[gangid][VehCol1], col2 = GangInfo[gangid][VehCol2];
GangVehicle[zoneid][gvehicleid][VehID] = CreateVehicle(vehiclemodel, GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle], col1, col2, 1800000);
format(gPlate, sizeof(gPlate), "[%s]-%d", GangInfo[gangid][Tag], gvehicleid);
SetVehicleNumberPlate(GangVehicle[zoneid][gvehicleid][VehID], gPlate);
}
}
}
new strENG[255];
format(strENG, sizeof(strENG), "The gang's founder has setted [%s] as the gang tag", GangInfo[gangid][Tag]);
for(new p; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && PlayerInfo[p][GangID] == gangid)
{
SendClientMessage(p, GangInfo[gangid][Color], strENG);
}
}
format(strENG, sizeof(strENG), "You've setted [%s] as the gang tag", GangInfo[gangid][Tag]);
SendClientMessage(playerid, GangInfo[playerid][Color], strENG);
}
}
}
if(dialogid == DIALOG_GANGCOLOUR)
{
new gangid = PlayerInfo[playerid][GangID];
if(response)
{
new GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(dini_Exists(GangFile))
{
switch(listitem)
{
case 0: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_ROSSO);
case 1: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_FUCSIA);
case 2: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_BLU);
case 3: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_CELESTE);
case 4: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_VERDE);
case 5: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_VERDEACQUA);
case 6: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_GIALLO);
case 7: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_ARANCIONE);
case 8: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_MARRONE);
case 9: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_ROSA);
case 10: if(dini_Exists(GangFile)) dini_IntSet(GangFile,"Color", GCOLOR_SALMONE);
}
}
GangInfo[gangid][Color] = dini_Int(GangFile,"Color");
SendClientMessage(playerid, GangInfo[gangid][Color], "You've setted the gang's color");
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && PlayerInfo[p][GangID] == gangid)
{
SetPlayerColor(p, GangInfo[gangid][Color]);
}
}
if(IsPlayerInAnyDynamicArea(playerid))
{
new zoneid = GetPlayerNumberDynamicAreas(playerid);
Invaders[gangid][zoneid] ++;
if(Invaders[gangid][zoneid] == MembersForConq)
{
for(new l = 0; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == gangid)
{
SendClientMessage(l, GangInfo[gangid][Color], "You are conquiring the zone");
}
}
GangZoneFlashForAll(ZoneInfo[zoneid][GZID], GangInfo[gangid][Color]);
if(ZoneInfo[zoneid][OfGangID] != -1)
{
GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq, false, "ii", zoneid, gangid);
}
else
{
GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq/2, false, "ii", zoneid, gangid);
}
for(new l; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == ZoneInfo[zoneid][OfGangID] && PlayerInfo[playerid][GangID] != ZoneInfo[zoneid][OfGangID] && PlayerInfo[l][GangID] != -1)
{
SendClientMessage(l, GangInfo[ZoneInfo[zoneid][OfGangID]][Color], "Your zone is under attack!");
}
}
}
}
}
else
{
if(GangInfo[gangid][Color] == -1)
{
new GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
if(dini_Exists(GangFile))
{
dini_Remove(GangFile);
}
SendClientMessage(playerid, COLOR_ROSSO, "In order to create a gang also need a color! The gang has been deleted.");
PlayerInfo[playerid][GangID] = -1;
}
}
}
if(dialogid == DIALOG_GANGINVITE)
{
if(response)
{
new strENG[255], pName[MAX_PLAYER_NAME], Invite, NameInvite[MAX_PLAYER_NAME];
Invite = strval(inputtext);
PlayerInfo[Invite][InvitedByGang] = PlayerInfo[playerid][GangID];
GetPlayerName(playerid, pName, sizeof(pName));
GetPlayerName(Invite, NameInvite, sizeof(NameInvite));
format(strENG, sizeof(strENG), "You've invited {FFFF00}%s {00FF00}(ID:{FFFF00}%d{00FF00}) to join your gang", NameInvite, Invite);
SendClientMessage(playerid, COLOR_VERDE, strENG);
format(strENG, sizeof(strENG), "%s (ID:%d) ti ha invitato ad entrare nella gang {FFFF00}'%s'{00FF00}. Use /gang join to accept", pName, playerid, GangInfo[PlayerInfo[playerid][GangID]][GangName]);
SendClientMessage(Invite, COLOR_VERDE, strENG);
}
}
if(dialogid == DIALOG_GANGKICK)
{
if(response)
{
new gangid = PlayerInfo[playerid][GangID];
if(IsNumeric(inputtext))
{
new PlayerToKick = strval(inputtext);
if(!IsPlayerConnected(PlayerToKick)) return SendClientMessage(playerid, COLOR_ROSSO, "The player with this ID isn't connected!");
if(PlayerInfo[PlayerToKick][GangID] != PlayerInfo[playerid][GangID]) return SendClientMessage(playerid, COLOR_ROSSO, "The player with this ID isn't in your gang!");
if(PlayerToKick == playerid) return SendClientMessage(playerid, COLOR_ROSSO, "You can't kick yourself!");
new strENG[255], pName[MAX_PLAYER_NAME], PlayerToKickName[MAX_PLAYER_NAME], GangFile[255], SlotFile[255], slotid = CheckGangPlayerSlot(gangid, PlayerToKick);
GetPlayerName(playerid, pName, sizeof(pName));
GetPlayerName(PlayerToKick, PlayerToKickName, sizeof(PlayerToKickName));
format(strENG, sizeof(strENG), "%s (ID:%d) {00FF00}have kicked you from gang {FFFF00}'%s'", pName, playerid, GangInfo[PlayerInfo[PlayerToKick][GangID]][GangName]);
SendClientMessage(PlayerToKick, COLOR_GIALLO, strENG);
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
format(SlotFile, sizeof(SlotFile), "Member_%d", slotid);
GangInfo[gangid][Members] --;
PlayerInfo[PlayerToKick][GangID] = -1;
dini_IntSet(GangFile, "Members", GangInfo[gangid][Members]);
dini_Set(GangFile, SlotFile, "");
MemberInfo[gangid][slotid][Name] = dini_Get(GangFile, SlotFile);
format(strENG, sizeof(strENG), "%s (ID:%d) {00FF00}was kicked from your gang", PlayerToKickName, PlayerToKick);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && PlayerInfo[i][GangID] == PlayerInfo[playerid][GangID]) SendClientMessage(i, COLOR_GIALLO, strENG);
}
format(strENG, sizeof(strENG), "You've kicked {FFFF00}%s (ID:%d) {00FF00}from your gang", PlayerToKickName, PlayerToKick);
SendClientMessage(playerid, COLOR_VERDE, strENG);
}
else
{
if(!IsPlayerNameInGang(inputtext, gangid)) return SendClientMessage(playerid, COLOR_ROSSO, "This player is not in your gang");
new slotid = CheckGangPlayerNameSlot(gangid, inputtext);
new strENG[255], pName[MAX_PLAYER_NAME], GangFile[255], SlotFile[255];
GetPlayerName(playerid, pName, sizeof(pName));
new PlayerToKick = IsPlayerConnectedWithName(inputtext);
if(PlayerToKick != -1)
{
format(strENG, sizeof(strENG), "%s (ID:%d) {00FF00}have kicked you from the gang {FFFF00}'%s'", pName, playerid, GangInfo[gangid][GangName]);
SendClientMessage(PlayerToKick, COLOR_GIALLO, strENG);
}
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
GangInfo[gangid][Members] --;
PlayerInfo[PlayerToKick][GangID] = -1;
dini_IntSet(GangFile, "Members", GangInfo[gangid][Members]);
dini_Set(GangFile, SlotFile, "");
MemberInfo[gangid][slotid][Name] = dini_Get(GangFile, SlotFile);
format(strENG, sizeof(strENG), "%s (ID: Offline) {00FF00}was kicked from your gang", inputtext);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && PlayerInfo[i][GangID] == PlayerInfo[playerid][GangID]) SendClientMessage(i, COLOR_GIALLO, strENG);
}
format(strENG, sizeof(strENG), "You've kicked {FFFF00}%s (ID: Offline) {00FF00}from your gang", inputtext);
SendClientMessage(playerid, COLOR_VERDE, strENG);
}
}
}
if(dialogid == DIALOG_GANGPICKUP)
{
if(response)
{
if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_ROSSO, "The ID of the zone must contain only numbers!");
new zonaid, Float: Pos[3];
zonaid = strval(inputtext);
new ZoneFile[255];
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, zonaid);
if(!dini_Exists(ZoneFile)) return SendClientMessage(playerid, COLOR_ROSSO, "Zone ID doesn't exists");
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
dini_FloatSet(ZoneFile, "PickX", Pos[0]);
dini_FloatSet(ZoneFile, "PickY", Pos[1]);
dini_FloatSet(ZoneFile, "PickZ", Pos[2]);
ZoneInfo[zonaid][PickX] = dini_Float(ZoneFile, "PickX");
ZoneInfo[zonaid][PickY] = dini_Float(ZoneFile, "PickY");
ZoneInfo[zonaid][PickZ] = dini_Float(ZoneFile, "PickZ");
DestroyPickup(ZoneInfo[zonaid][PickUp]);
ZoneInfo[zonaid][PickUp] = CreatePickup(1274, 1, ZoneInfo[zonaid][PickX], ZoneInfo[zonaid][PickY], ZoneInfo[zonaid][PickZ]);
Delete3DTextLabel(ZoneInfo[zonaid][Label]);
new txt[50];
format(txt, sizeof(txt), "Money\n%d$", ZoneInfo[zonaid][PickUpCash]);
ZoneInfo[zonaid][Label] = Create3DTextLabel(txt, COLOR_VERDE, ZoneInfo[zonaid][PickX], ZoneInfo[zonaid][PickY], ZoneInfo[zonaid][PickZ]+0.5, 10, 0, 0);
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p) && IsPlayerAdmin(p)) GangZoneStopFlashForPlayer(p, ZoneInfo[zonaid][GZID]);
}
}
}
//gang fine
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
public OnPlayerEnterDynamicArea(playerid, areaid)
{
//gang inizio
new string[255];
new zoneid = areaid;
new gangid = PlayerInfo[playerid][GangID];
if(gangid != -1 && gangid != ZoneInfo[zoneid][OfGangID] && GetPlayerVirtualWorld(playerid) == 0) Invaders[gangid][zoneid] ++;
format(string, sizeof(string), "[JOIN]ID zone: %d | Invaders: %d | OfGangID: %d | Your Gang ID: %d", zoneid, Invaders[gangid][zoneid], ZoneInfo[zoneid][OfGangID], gangid);
if(IsPlayerAdmin(playerid)) SendClientMessage(playerid, COLOR_VERDE, string);
if(Invaders[gangid][zoneid] == MembersForConq)
{
if(ZoneInfo[zoneid][OfGangID] != gangid)
{
for(new l = 0; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == gangid)
{
SendClientMessage(l, GangInfo[gangid][Color], "You are conquiring the zone");
}
}
GangZoneFlashForAll(ZoneInfo[zoneid][GZID], GangInfo[gangid][Color]);
if(ZoneInfo[zoneid][OfGangID] != -1) GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq, false, "ii", zoneid, gangid);
else GangTimer[gangid][zoneid] = SetTimerEx("ConquistaGZ", TimeForConq/2, false, "ii", zoneid, gangid);
for(new l; l < MAX_PLAYERS; l++)
{
if(IsPlayerConnected(l) && PlayerInfo[l][GangID] == ZoneInfo[zoneid][OfGangID] && PlayerInfo[playerid][GangID] != ZoneInfo[zoneid][OfGangID] && PlayerInfo[l][GangID] != -1)
{
SendClientMessage(l, GangInfo[ZoneInfo[zoneid][OfGangID]][Color], "A your zone is under attack by another Gang");
}
}
}
}
if(ZoneInfo[zoneid][OfGangID] == gangid && PlayerInfo[playerid][GangOwner] == true) SetPlayerMapIcon(playerid, GANG_CASH_ICON_ID, ZoneInfo[zoneid][PickX], ZoneInfo[zoneid][PickY], ZoneInfo[zoneid][PickZ], 52, 0, MAPICON_LOCAL);
if(ZoneInfo[zoneid][OfGangID] != -1)
{
format(string, sizeof(string), "%s", GangInfo[ZoneInfo[zoneid][OfGangID]][GangName]);
GameTextForPlayer(playerid, string, 1000, 1);
}
//gang fine
return 1;
}
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
//gang inizio
new string[255];
new zoneid = areaid;
new gangid = PlayerInfo[playerid][GangID];
if(gangid != ZoneInfo[zoneid][OfGangID] && gangid != -1 && GetPlayerVirtualWorld(playerid) == 0) Invaders[gangid][zoneid] --; //---- Togliere un invasor
if(Invaders[gangid][zoneid] < MembersForConq)
{
KillTimer(GangTimer[gangid][zoneid]);
GangZoneStopFlashForAll(ZoneInfo[zoneid][GZID]);
}
if(ZoneInfo[zoneid][OfGangID] == gangid && PlayerInfo[playerid][GangOwner] == true) RemovePlayerMapIcon(playerid, GANG_CASH_ICON_ID);
format(string, sizeof(string), "[LEAVE]ID zone: %d | Invaders: %d | OfGangID: %d | Gang ID: %d", zoneid, Invaders[gangid][zoneid], ZoneInfo[zoneid][OfGangID], gangid);
if(IsPlayerAdmin(playerid)) SendClientMessage(playerid, COLOR_VERDE, string);
//gang fine
return 1;
}
forward ConquistaGZ(zoneid, gangid);
public ConquistaGZ(zoneid, gangid)
{
new file[100];
format(file, sizeof(file), GangZoneFile, zoneid);
dini_IntSet(file, "OfGangID", gangid);
GangZoneStopFlashForAll(ZoneInfo[zoneid][GZID]);
ZoneInfo[zoneid][OfGangID] = gangid;
ZoneInfo[zoneid][Color] = GangInfo[gangid][Color];
new gPlate[8];
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++)
{
DestroyVehicle(GangVehicle[zoneid][gvehicleid][VehID]);
if(GangInfo[gangid][VehModel] >= 400 && GangInfo[gangid][VehModel] <= 609 && GangVehicle[zoneid][gvehicleid][PosX] != 0 && GangVehicle[zoneid][gvehicleid][PosY] != 0 && GangVehicle[zoneid][gvehicleid][PosZ] != 0)
{
new vehiclemodel = GangInfo[gangid][VehModel], col1 = GangInfo[gangid][VehCol1], col2 = GangInfo[gangid][VehCol2];
GangVehicle[zoneid][gvehicleid][VehID] = CreateVehicle(vehiclemodel, GangVehicle[zoneid][gvehicleid][PosX], GangVehicle[zoneid][gvehicleid][PosY], GangVehicle[zoneid][gvehicleid][PosZ], GangVehicle[zoneid][gvehicleid][Angle], col1, col2, 1800000);
format(gPlate, sizeof(gPlate), "[%s]-%d", GangInfo[gangid][Tag], gvehicleid);
SetVehicleNumberPlate(GangVehicle[zoneid][gvehicleid][VehID], gPlate);
}
}
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && PlayerInfo[i][GangID] == gangid) GivePlayerMoney(i, MoneyAfterConq);
GangZoneShowForAll(ZoneInfo[zoneid][GZID], ZoneInfo[zoneid][Color]);
new GangFile[255];
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
dini_IntSet(GangFile, "TotConqZ", GangInfo[gangid][TotConqZ]++);
GangInfo[gangid][TotConqZ] = dini_Int(GangFile, "TotConqZ");
return 1;
}
forward AddCashInPickUp();
public AddCashInPickUp()
{
new ZoneFile[255];
for(new zoneid = 1; zoneid < MAX_ZONES; zoneid++)
{
format(ZoneFile, sizeof(ZoneFile), GangZoneFile, zoneid);
if(dini_Exists(ZoneFile))
{
ZoneInfo[zoneid][PickUpCash] = ZoneInfo[zoneid][PickUpCash] + AddCash;
dini_IntSet(ZoneFile, "Cash", ZoneInfo[zoneid][PickUpCash]);
new txt[50];
format(txt, sizeof(txt), "Money\n%d$", ZoneInfo[zoneid][PickUpCash]);
Update3DTextLabelText(ZoneInfo[zoneid][Label], COLOR_VERDE, txt);
new StrENG[255];
format(StrENG, sizeof(StrENG), "Your zone (ID:%d) reached %d$ of proceeds! The zone is marked with a White Flash", zoneid, ZoneInfo[zoneid][PickUpCash]);
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid) && ZoneInfo[zoneid][PickUpCash] >= 25000 && PlayerInfo[playerid][GangID] == ZoneInfo[zoneid][OfGangID] && PlayerInfo[playerid][GangOwner] == true)
{
GangZoneFlashForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_BIANCO);
SendClientMessage(playerid, COLOR_GIALLO, StrENG);
}
}
//avviso mancanza del pick up cash della zona
if(ZoneInfo[zoneid][PickX] == 0 && ZoneInfo[zoneid][PickY] == 0 && ZoneInfo[zoneid][PickZ] == 0)
{
format(StrENG, sizeof(StrENG), "[ADMIN WARN]Pickup Cash missing! ID Zone: %d | Zone marked with a Black Flash", zoneid);
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid) && IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, COLOR_GIALLO, StrENG);
GangZoneFlashForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_NERO);
}
}
}
//avviso mancanza veicoli gang
for(new gvehicleid; gvehicleid < MAX_GVEHICLES; gvehicleid++)
{
if(GangVehicle[zoneid][gvehicleid][PosX] == 0 && GangVehicle[zoneid][gvehicleid][PosY] == 0 && GangVehicle[zoneid][gvehicleid][PosZ] == 0)
{
format(StrENG, sizeof(StrENG), "[WARN ADMIN]Gang vehicle doesn't exists! ID Zone: %d | ID Vehicle: %d | Zone marked with a Black Flash", zoneid, gvehicleid);
for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
{
if(IsPlayerConnected(playerid) && IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, COLOR_GIALLO, StrENG);
GangZoneFlashForPlayer(playerid, ZoneInfo[zoneid][GZID], GCOLOR_NERO);
}
}
}
}
}
}
return 1;
}
forward CheckGangPayDayTime();
public CheckGangPayDayTime()
{
new GangFile[255], UserBank[255];
new Hour, Minute, Second;
gettime(Hour, Minute, Second);
if(Hour == GangPayDay && Minute == 0)
{
for(new gangid; gangid < MAX_GANGS; gangid++)
{
new PercentageRemains;
format(GangFile, sizeof(GangFile), GangIDFile, gangid);
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(MemberInfo[gangid][slotid][Name]) > 1)
{
format(UserBank, sizeof(UserBank), UserBankFile, MemberInfo[gangid][slotid][Name]);
dini_IntSet(UserBankFile, "Deposita", GangInfo[gangid][Bank] / 100 * MemberInfo[gangid][slotid][Percentage]);
PercentageRemains = 100 - MemberInfo[gangid][slotid][Percentage];
new playerid = IsPlayerConnectedWithName(MemberInfo[gangid][slotid][Name]);
if(playerid != -1)
{
new strENG[128];
format(strENG, sizeof(strENG), "You earned $%d from your gang work", GangInfo[gangid][Bank] / 100 * MemberInfo[gangid][slotid][Percentage]);
SendClientMessage(playerid, COLOR_VERDE, strENG);
}
}
}
format(UserBank, sizeof(UserBank), UserBankFile, GangInfo[gangid][Owner]);
dini_IntSet(UserBankFile, "Deposita", GangInfo[gangid][Bank] / 100 * PercentageRemains);
new playerid = IsPlayerConnectedWithName(GangInfo[gangid][Owner]);
if(playerid != -1)
{
new strENG[128];
format(strENG, sizeof(strENG), "You earned $%d from your gang work", GangInfo[gangid][Bank] / 100 * PercentageRemains);
SendClientMessage(playerid, COLOR_VERDE, strENG);
}
dini_IntSet(GangFile, "Bank", 0);
}
}
return 1;
}
stock CheckFreeGangSeat(gangid)
{
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(MemberInfo[gangid][slotid][Name]) == 0) return slotid;
}
return -1;
}
stock CheckGangPlayerSlot(gangid, playerid)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(pName) == strlen(MemberInfo[gangid][slotid][Name]) && strcmp(pName, MemberInfo[gangid][slotid][Name], false, MAX_PLAYER_NAME) == 0) return slotid;
}
return -1;
}
stock CheckGangPlayerNameSlot(gangid, PlayerName[])
{
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(PlayerName) == strlen(MemberInfo[gangid][slotid][Name]) && strcmp(PlayerName, MemberInfo[gangid][slotid][Name], false, MAX_PLAYER_NAME) == 0) return slotid;
}
return -1;
}
stock IsPlayerNameInGang(PlayerName[], gangid)
{
for(new slotid; slotid < MAX_MEMBERS; slotid++)
{
if(strlen(PlayerName) == strlen(MemberInfo[gangid][slotid][Name]) && strcmp(PlayerName, MemberInfo[gangid][slotid][Name], false, MAX_PLAYER_NAME) == 0) return true;
}
return false;
}
stock IsPlayerConnectedWithName(PlayerName[])
{
new pName[MAX_PLAYER_NAME];
for(new playerid; playerid < MAX_PLAYERS; playerid ++)
{
GetPlayerName(playerid, pName, sizeof(pName));
if(strlen(PlayerName) == strlen(pName) && strcmp(PlayerName, pName, false, MAX_PLAYER_NAME) == 0) return playerid;
}
return -1;
}
stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if (string[i] > '9' || string[i] < '0') return 0;
}
return 1;
}