Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

GangZone с захватом как на samp-rp

Статус
В этой теме нельзя размещать новые ответы.

PI

The world on the edge of reality
PHP:
new AttackPlayer[MAX_PLAYERS];
new GroveGangZ = 0; 
new AztecGangZ = 0; 
new RifaGangZ = 0; 
new VagosGangZ = 0; 
new BallasGangZ = 0; 
new BaikerGangZ = 0; 
new gangColors[MAX_PLAYERS];
#define ZonesCount 100 //ето скоко зон будет читаться с ганг зон 
enum GangZonesEnum
{
    Float:zX1,
    Float:zY1,
    Float:zX2,
    Float:zY2,
    gangID
};
new zoneInfo[ZonesCount][GangZonesEnum];
new zonesID[ZonesCount];
new LastTimer[ZonesCount];
forward IsAGangZ(playerid);
forward InitGangZones();
new Text:TextdrawDrugT[MAX_PLAYERS];
new AttackTimer[MAX_PLAYERS];
forward SaveGangZones();
forward IsInsideGangZone(playerid, zoneID);
forward CheckConnectedPlayer(playerid);
forward CaptureCheckTimer(num, zoneID, attackGang, defeatGang);
forward StartCaptureGangZone(playerid, killerid);
forward CommandCaptureGangZone(playerid);
в pInfo

pGangMoney,

Добавляем команду

PHP:
        if(strcmp(cmd, "/attack", true) == 0)
    {
        if(!IsAGangZ(playerid)) return SendClientMessage(playerid,COLOR_GRAD1,"Вы не в банде");
        CommandCaptureGangZone(playerid);
        //SendClientMessage(playerid,COLOR_GRAD1,"Команда отключена. Убивайте игроков на их зоне, чтобы захватить.");
        return 1;
    }
Добовляем паблик верх!

PHP:
public IsAGangZ(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new leader = PlayerInfo[playerid][pLeader];
        new member = PlayerInfo[playerid][pMember];
        if(member==12 || member==13 || member==14 || member==15 || member==17)//смените фраки на свои
        {
            return 1;
        }
        if(leader==12 || leader==13 || leader==14 || leader==15 || leader==17)
        {
            return 1;
        }
    }
    return 0;
}
Добавляем в паблик public SyncUp()

PHP:
for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsAGangZ(i) && gPlayerLogged[i] == 1)
        {
            if(PlayerInfo[i][pLeader]==12||PlayerInfo[i][pMember]==12) { PlayerInfo[i][pGangMoney] += GroveGangZ; }
            else if(PlayerInfo[i][pLeader]==13||PlayerInfo[i][pMember]==13) { PlayerInfo[i][pGangMoney] += BallasGangZ; }
            else if(PlayerInfo[i][pLeader]==14||PlayerInfo[i][pMember]==14) { PlayerInfo[i][pGangMoney] += VagosGangZ; }
            else if(PlayerInfo[i][pLeader]==15||PlayerInfo[i][pMember]==15) { PlayerInfo[i][pGangMoney] += AztecGangZ; }
            else if(PlayerInfo[i][pLeader]==17||PlayerInfo[i][pMember]==17) { PlayerInfo[i][pGangMoney] += RifaGangZ; }
        }
    }
создаем паблики в конец мода!

PHP:
public InitGangZones() 
{
    //заполняем только нужные ИД
    gangColors[255] = 0xC0C0C0AA;
    gangColors[12] = 0x1DDE12AA;
    gangColors[13] = 0xA2359EAA;
    gangColors[14] = 0xFFFF09AA;
    gangColors[15] = 0x2CDCD3AA;
    gangColors[17] = 0x472DDBAA;

    new splittedInfo[5][256];//5 - количество параметров, 256 - длина строки
    new strFromFile[256];
    new strToPrint[256];
    new File:zonesFile = fopen("gangzones.cfg", io_read);
    if (zonesFile)
    {
        for(new idx=0;idx<ZonesCount;idx++)
        {
            fread(zonesFile, strFromFile);
            split(strFromFile, splittedInfo, ',');
            //заполняем массив
            zoneInfo[idx][zX1] = floatstr(splittedInfo[0]);
            zoneInfo[idx][zY1] = floatstr(splittedInfo[1]);
            zoneInfo[idx][zX2] = floatstr(splittedInfo[2]);
            zoneInfo[idx][zY2] = floatstr(splittedInfo[3]);
            zoneInfo[idx][gangID] = strval(splittedInfo[4]);
            if(zoneInfo[idx][gangID] == 12) { GroveGangZ+=1; }
            else if(zoneInfo[idx][gangID] == 13) { BallasGangZ+=1; }
            else if(zoneInfo[idx][gangID] == 14) { VagosGangZ+=1; }
            else if(zoneInfo[idx][gangID] == 15) { AztecGangZ+=1; }
            else if(zoneInfo[idx][gangID] == 17) { RifaGangZ+=1; }
            //создаём зону
            new tmpZone = GangZoneCreate(zoneInfo[idx][zX1], zoneInfo[idx][zY1], zoneInfo[idx][zX2], zoneInfo[idx][zY2]);
            GangZoneHideForAll(tmpZone);
            zonesID[tmpZone] = idx;
            format(strToPrint, 256, "%f,%f,%f,%f,%d\n",zoneInfo[idx][zX1], zoneInfo[idx][zY1], zoneInfo[idx][zX2], zoneInfo[idx][zY2], zoneInfo[idx][gangID]);
            printf(strToPrint);
        }
        fclose(zonesFile);
    }
}

public SaveGangZones()
{
    new StrToFile[256];
    new File:zonesFile = fopen("gangzones.cfg", io_write);
    if (zonesFile)
    {
        for(new i=0;i<ZonesCount;i++)
        {
            format(StrToFile, sizeof(StrToFile), "%f,%f,%f,%f,%d\n",zoneInfo[i][zX1], zoneInfo[i][zY1], zoneInfo[i][zX2], zoneInfo[i][zY2], zoneInfo[i][gangID]);
            fwrite(zonesFile, StrToFile);
        }
        fclose(zonesFile);
    }
}

public IsInsideGangZone(playerid, zoneID)
{
    new Float:pX, Float:pY, Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    new tmpZone = zonesID[zoneID];

    if(pX >= zoneInfo[tmpZone][zX1] && pY >= zoneInfo[tmpZone][zY1] && pX <= zoneInfo[tmpZone][zX2] && pY <= zoneInfo[tmpZone][zY2])
    {
        return true;
    }
    return false;
}

public CheckConnectedPlayer(playerid)//положить в онплэер логин.
{
    if(IsAGangZ(playerid))
    {
        for(new i=0;i<ZonesCount;i++)
        {
            new tmpID = zoneInfo[zonesID[i]][gangID];
            GangZoneShowForPlayer(playerid, i, gangColors[tmpID]);
        }
    }
}

public CaptureCheckTimer(num, zoneID, attackGang, defeatGang)
{
    KillTimer(LastTimer[zoneID]);
    new stillCapturing = 0;
    new Float:pHP;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
        if(IsPlayerConnected(i) && (PlayerInfo[i][pMember] == attackGang || PlayerInfo[i][pLeader] == attackGang))
        {
            GetPlayerHealth(i, pHP);
            if(pHP > 0.0 && IsInsideGangZone(i, zoneID))
            {
                stillCapturing = 1;
            }
        }
    }

    if(stillCapturing)
    {
        if(num < 300)
        {
            LastTimer[zoneID] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", num+1, zoneID, attackGang, defeatGang);
        }
        else
        {
            new tmpZone = zonesID[zoneID];
            zoneInfo[tmpZone][gangID] = attackGang;

            for(new i=0;i<MAX_PLAYERS;i++)
            {
                if(IsPlayerConnected(i) && IsAGangZ(i))
                {
                    GangZoneStopFlashForPlayer(i, zoneID);
                    GangZoneHideForPlayer(i, zoneID);
                    GangZoneShowForPlayer(i, zoneID, gangColors[attackGang]);
                    AttackTimer[i] = 0;
                    TextDrawHideForPlayer(i,TextdrawDrugT[i]);
                }
            }
        }
    }
    else
    {
        for(new i=0;i<MAX_PLAYERS;i++)
        {
            if(IsPlayerConnected(i) && IsAGangZ(i))
            {
                GangZoneStopFlashForPlayer(i, zoneID);
                AttackTimer[i] = 0;
                TextDrawHideForPlayer(i,TextdrawDrugT[i]);
    
            }
        }
    }
    return 1;
}

public StartCaptureGangZone(playerid, killerid)
{
    new battleZone = -1;
    for(new i=0;i<ZonesCount;i++)
    {
        if(IsInsideGangZone(playerid, i) && IsInsideGangZone(killerid, i))
        {
            battleZone = i;
            break;
        }
    }

    new tmpZone = zonesID[battleZone];
    if(battleZone != -1 && zoneInfo[tmpZone][gangID] == PlayerInfo[playerid][pMember])
    {
        if(IsAGangZ(playerid))
        {
            if(IsAGangZ(killerid))
            {
                if (PlayerInfo[killerid][pMember] != PlayerInfo[playerid][pMember])
                {
                    for(new i=0;i<MAX_PLAYERS;i++)
                    {
                        if(IsPlayerConnected(i) && IsAGangZ(i))
                        {
TextDrawShowForPlayer(AttackPlayer[killerid],TextdrawDrugT[killerid]);
                            AttackTimer[killerid] = 300;
                            if(PlayerInfo[killerid][pMember] > 0) {
                            GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[killerid][pMember]]); }
                            else if(PlayerInfo[killerid][pLeader] > 0) {
                            GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[killerid][pLeader]]); }
                        }
                    }
                    if(PlayerInfo[killerid][pLeader] == 0 && PlayerInfo[playerid][pLeader] == 0) {
                    LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[killerid][pMember], PlayerInfo[playerid][pMember]); }
                    else if(PlayerInfo[killerid][pMember] == 0 && PlayerInfo[killerid][pMember] == 0) {
                    LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[killerid][pLeader], PlayerInfo[playerid][pLeader]); }
                    else if(PlayerInfo[killerid][pLeader] == 0 && PlayerInfo[playerid][pLeader] != 0) {
                    LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[killerid][pMember], PlayerInfo[playerid][pLeader]); }
                    else if(PlayerInfo[killerid][pMember] == 0 && PlayerInfo[playerid][pMember] != 0) {
                    LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[killerid][pLeader], PlayerInfo[playerid][pMember]); }
                }
            }
        }
    }
}


public CommandCaptureGangZone(playerid) 
{
    new battleZone = -1;
    for(new i=0;i<ZonesCount;i++)
    {
        if(IsInsideGangZone(playerid, i))
        {
            battleZone = i;
            break;
        }
    }
    if(battleZone != -1)
    {
        if(IsAGangZ(playerid))
        {
            new tmpZone = zonesID[battleZone];
            if(zoneInfo[tmpZone][gangID] == 255)
            {
                for(new i=0;i<MAX_PLAYERS;i++)
                {
                    if(IsAGangZ(i))
                    {
                        if(PlayerInfo[i][pMember] > 0) {
                        GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[playerid][pMember]]); }
                        else if(PlayerInfo[i][pLeader] > 0) {
                        GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[playerid][pLeader]]); }
                    }
                }
                TextDrawShowForPlayer(playerid,TextdrawDrugT[playerid]);
                AttackTimer[playerid] = 300;
                if(PlayerInfo[playerid][pLeader] == 0) {
                LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[playerid][pMember], 255); }
                else if(PlayerInfo[playerid][pMember] == 0) {
                LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[playerid][pLeader], 255); }
            }
            else
            {
                for(new i=0;i<MAX_PLAYERS;i++)
                {
                    if(IsAGangZ(i))
                    {
                        if(PlayerInfo[i][pMember] > 0) {
                        GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[playerid][pMember]]); }
                        else if(PlayerInfo[i][pLeader] > 0) {
                        GangZoneFlashForPlayer(i, battleZone, gangColors[PlayerInfo[playerid][pLeader]]); }
                    }
                }
                if(PlayerInfo[playerid][pLeader] == 0) {
                LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[playerid][pMember], zoneInfo[tmpZone][gangID]); }
                else if(PlayerInfo[playerid][pMember] == 0) {
                LastTimer[battleZone] = SetTimerEx("CaptureCheckTimer", 1000, 0, "iiii", 0, battleZone, PlayerInfo[playerid][pLeader], zoneInfo[tmpZone][gangID]); }
            }
        }
    }
}
далее добовляем ето в паблик GameModeInitExitFunc
SaveGangZones();
В паблик OnGameModeInit
Добавить ето InitGangZones();
В OnPlayerLogin
Добавить ето CheckConnectedPlayer(playerid);
В команду "/invite"
Добавить CheckConnectedPlayer(para1);
"/makeleader"
Добавить CheckConnectedPlayer(para1);
В паблик OnPlayerDeath
Добавить StartCaptureGangZone(playerid, killerid);
В паблик OnPlayerDeath
AttackTimer[playerid] = 0;
В паблик CustomPickups
Добавить


PHP:
if(AttackTimer[i] > 0)
    {
        AttackTimer[i]--;
        format(string, sizeof(string), "Attack: %d sec", AttackTimer[i]);
        TextDrawSetString(Text:TextdrawDrugT[i], string);
    }
В паблик OnGameModeInit
PHP:
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    TextdrawDrugT[i] = TextDrawCreate(489.000000, 160.000000, "--");
    TextDrawBackgroundColor(TextdrawDrugT[i], 255);
    TextDrawFont(TextdrawDrugT[i], 1);
    TextDrawLetterSize(TextdrawDrugT[i], 0.559999, 1.700000);
    TextDrawColor(TextdrawDrugT[i], -1);
    TextDrawSetOutline(TextdrawDrugT[i], 1);
    TextDrawSetProportional(TextdrawDrugT[i], 1);
    TextDrawSetShadow(TextdrawDrugT[i], 1);
      }
Это в скрипт файлс:
Автор Misha
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу