Флуд во время PayDay (пример: 00:00)
#1

Всем привет.
В моде обнаружил проблему, каждый PayDay происходит флуд в чат игроку у которого есть бизнес, соответственно поэтому поднимается очень сильна нагрузка на оперативную память, но через секунд 10-20 после PayDay нормализуется.

Помогите решить флуд, код:
PHP код:
stock PayDay()
{
    for(new 
=0;i<sizeof(VladGzone);i++) VladGzone[i] = 0;
    for(new 
=0;i<sizeof(GZInfo);i++)
    {
        switch(
GZInfo[i][gFrakVlad])
        {
        case 
12VladGzone[0] +=1;
        case 
13VladGzone[1] +=1;
        case 
15VladGzone[2] +=1;
        case 
17VladGzone[3] +=1;
        case 
18VladGzone[4] +=1;
        }
    }
    for(new 
0sizeof(FrakCD); f++)
    {
        if(
FrakCD[f] > 0)
        {
            if(
FracVoina[f] != 1)
            {
                
FrakCD[f]--;
            }
        }
    }
    
/////////
    
PlayerForeach(i)
    {
        if(
PlayerInfo[i][pWanted] >= 1)
        {
            
WantedLevel[i] -= 1;
            
PlayerInfo[i][pWanted] -=1;
            
SetPlayerWantedLevel(iPlayerInfo[i][pWanted]);
        }
        new 
exp PlayerInfo[i][pExp];
        new 
nxtlevel PlayerInfo[i][pLevel]+1;
        new 
expamount nxtlevel*levelexp;
        if(
exp >= expamount)
        {
            
PlayerInfo[i][pLevel] += 1;
            
PlayerInfo[i][pExp] = 0;
            
SendClientMessage(iCOLOR_GREEN"Поздравляем! Ваш IC возраст был повышен. Удачной игры.");
        }
        if(
armmatbi 0armmatbi 0;
        else if(
armmatsf 0armmatsf 0;
        else if(
kazna 0kazna 0;
        else if(
lspdmatbi 0lspdmatbi 1000;
        else if(
sfpdmats 0sfpdmats 1000;
        else if(
lvpdmats 0lvpdmats 1000;
        else if(
fbimats 0fbimats 1000;
        else if(
yakuzamats 0yakuzamats 1000;
        else if(
rmmats 0rmmats 1000;
        else if(
lcnmats 0lcnmats 1000;
        else if(
rifamatbi 0rifamatbi 1000;
        else if(
ballasmatbi 0ballasmatbi 1000;
        else if(
groovmatbi 0groovmatbi 1000;
        else if(
vagosmatbi 0vagosmatbi 1000;
        else if(
aztekmatbi 0aztekmatbi 1000;
        new 
moneys 1+random(10000);
        new 
moneyse 1000+random(5000);
        switch(
PlayerInfo[i][pMember])
        {
        case 
1,10,21,25:{ PlayerInfo[i][pPayCheck] += 2000*PlayerInfo[i][pRank]+moneys; } // ЗП полиции, 2к умноженое на ранг + рандомные цифры
        
case 3,19:{ PlayerInfo[i][pPayCheck] += 1500*PlayerInfo[i][pRank]+moneys; } // Зп армии, 1.5к умноженое на ранг + рандомные цифры
        
case 2:{ PlayerInfo[i][pPayCheck] += 3000*PlayerInfo[i][pRank]+moneys; } // Зп ФБР, 3к умноженое на ранг + рандомные цифры
        
case 7,26:{ PlayerInfo[i][pPayCheck] += 4000*PlayerInfo[i][pRank]+moneys; } // Зп Мэрия, 4к умноженое на ранг + рандомные цифры
        
case 4,22,16:{ PlayerInfo[i][pPayCheck] += 4000*PlayerInfo[i][pRank]+moneys; } // Зп МинЗдрав, 4к умноженое на ранг + рандомные цифры
        
case 11:{ PlayerInfo[i][pPayCheck] += 1000*PlayerInfo[i][pRank]+moneys; } // Зп инструкторов, 1к умноженое на ранг + рандомные цифры
        
case 27:{ PlayerInfo[i][pPayCheck] += 10000*PlayerInfo[i][pRank]+moneyse; } // Зп Казино, 10к умноженое на ранг + рандомные цифры
        
}
        
PlayerInfo[i][pExp]++;
        new 
checks PlayerInfo[i][pPayCheck];
        if(
PlayerInfo[i][pDonateRank] >= 1SendClientMessage(i0xeac700aa,  "--------===[ VIP КЛИЕНТ БАНКА SA ]===-------");
        else 
SendClientMessage(iCOLOR_GRAD1"----------===[ КЛИЕНТ БАНКА SA ]===---------");
        if(
PlayerInfo[i][pDonateRank] >= 1)
        {
            
SendMes(i, -1"     Налог государству {c4f500}-%d $"nalog);
            
PlayerInfo[i][pBank] -= nalog;
            
kazna +=nalog;
            
SendMes(i, -1"     Услуги телефонии: {c4f500}-%d $",PlayerInfo[i][pMobile]);
            
SendMes(i, -1"     Зарплата: {c4f500}%d $"checks);
            
PlayerInfo[i][pBank] += checks;
            
SendMes(i, -1"     Ваш баланс: {c4f500}%d $"PlayerInfo[i][pBank]);
            
PlayerInfo[i][pZakonp] += 1;
            
PlayerInfo[i][pBank] += PlayerInfo[i][pMobile];
            
PlayerInfo[i][pMobile] = 0;
            
PlayerInfo[i][pVipRespect]++;
            if(
PlayerInfo[i][pVipRespect] == 3)
            {
                
PlayerInfo[i][pExp]++;
                
PlayerInfo[i][pVipRespect] = 0;
                
SendClientMessage(iCOLOR_LIGHTBLUE"Вы получили дополнительный Респект, за счет VIP Аккаунта.");
            }
            
kazna +=1000;
        }
        else
        {
            
SendMes(i,0xFF8C37AA," Счет за телефон: -%d вирт",PlayerInfo[i][pMobile]);
            
SendClientMessage(i, -1" ");
            
SendMes(i,-1," Зарплата: %d вирт"checks);
            
PlayerInfo[i][pBank] += checks;
            
SendMes(i,-1," Текущий баланс: %d вирт"PlayerInfo[i][pBank]);
            
PlayerInfo[i][pZakonp] += 1;
            
PlayerInfo[i][pBank] += PlayerInfo[i][pMobile];
            
PlayerInfo[i][pMobile] = 0;
            
kazna +=1000;
        }
        for(new 
0sizeof(BizzInfo); b++)
        {
            if(
BizzInfo[b][bOwned] == 0) continue;
            new 
idd GetPlayerID(BizzInfo[b][bOwner]);
            if(
BizzInfo[b][bMafia] !=0)
            {
                
BizzInfo[b][bTill] -= 500;
                if(
BizzInfo[b][bMafia] == 6MafiaBank[0][nYakuza] +=500;
                if(
BizzInfo[b][bMafia] == 14MafiaBank[0][nRm] +=500;
                if(
BizzInfo[b][bMafia] == 5MafiaBank[0][nLcn] +=500;
                
SendClientMessage(idd, -1"- Оплата за крышу: $500.");
            }
            
SendMes(idd, -1"- Плата за электричество бизнеса: $%d.",nalog*2);
            
BizzInfo[b][bTill]-=nalog*2kazna+=nalog*2BizzInfo[b][b2Till]=0;
            if(
BizzInfo[b][bTill]<=0) { SellBizzID(b); }
        }
        for(new 
0sizeof(SBizzInfo); s++)
        {
            if(
SBizzInfo[s][sOwned] == 0) continue;
            new 
idd GetPlayerID(SBizzInfo[s][sOwner]);
            
SendMes(idd, -1"- Плата за электричество на заправке: $%d.",nalog*2);
            
SBizzInfo[s][sTill]-=nalog*2kazna+=nalog*2;
            if(
SBizzInfo[s][sTill]<=0) { SellSBizzID(s); }
        }
        if(
PlayerInfo[i][pDonateRank] >= 1SendClientMessage(i0xeac700aa,"====================================");
        else 
SendClientMessage(i,COLOR_GRAD1,"===================================");
        if(
PlayerInfo[i][punWarns] == 1) { PlayerInfo[i][punWarnstime] += 1SendMes(i,COLOR_LIGHTRED,"- Автоматическое снятие предупреждения через %d часов"10 PlayerInfo[i][punWarnstime]); }
        if(
PlayerInfo[i][punWarns] == && PlayerInfo[i][punWarnstime] >=10)
        {
            
PlayerInfo[i][punWarnstime] = 0;
            
PlayerInfo[i][punWarns] = 0;
            
PlayerInfo[i][pWarns] -=1;
            
SendClientMessage(i,COLOR_LIGHTRED"- С Вас было снято одно предупреждение!");
        }
        
PlayerInfo[i][pPayCheck] = 0;
        
PlayerInfo[i][pPayDayHad] += 1;
    }
    
UpdateKazna();
    return 
true;

Строки которые флудят:
PHP код:
SendMes(idd, -1"- Плата за электричество на заправке: $%d.",nalog*2); 
и
PHP код:
SendMes(idd, -1"- Плата за электричество бизнеса: $%d.",nalog*2); 
Reply
#2

Секунды проверяйте тоже.
Reply
#3

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Секунды проверяйте тоже.
Извините, но сейчас не понял
Reply
#4

Он имеет ввиду, что при вызове PayDay() нужно проверять и секунды. Покажи как он у тебя вызывается
Reply
#5

PHP код:
    if((tmphour ghour) || (tmphour == && ghour == 23))
    {
        new 
string[64];
        
format(string,sizeof(string), "Сейчас времени %d:00 часов",tmphour);
        
ABroadCast(COLOR_LIGHTRED,string,6);
        
ghour tmphour;
        
PayDay();
        if(
realtimeSetWorldTime(tmphour);
    } 
А паблик в котором вызывается пейдей, вызывается раз в секунду.
Reply
#6

Возможно GetPlayerID() возвращает одно и то же.

С остальным вроде всё впорядке. Скинь данную функцию.
Reply
#7

Ну так, все логично же. Циклы for(new b = 0; b < sizeof(BizzInfo); b++) и for(new s = 0; s < sizeof(SBizzInfo); s++) находятся в цикле PlayerForeach(i), а должны быть вне его.
Reply
#8

Проблема тут

pawn Код:
PlayerForeach(i)
{
...
        for(new b = 0; b < sizeof(BizzInfo); b++)
        {
            if(BizzInfo[b][bOwned] == 0) continue;
            new idd = GetPlayerID(BizzInfo[b][bOwner]);
            if(BizzInfo[b][bMafia] !=0)
            {
                BizzInfo[b][bTill] -= 500;
                if(BizzInfo[b][bMafia] == 6) MafiaBank[0][nYakuza] +=500;
                if(BizzInfo[b][bMafia] == 14) MafiaBank[0][nRm] +=500;
                if(BizzInfo[b][bMafia] == 5) MafiaBank[0][nLcn] +=500;
                SendClientMessage(idd, -1, "- Оплата за крышу: $500.");
            }
            SendMes(idd, -1, "- Плата за электричество бизнеса: $%d.",nalog*2);
            BizzInfo[b][bTill]-=nalog*2; kazna+=nalog*2; BizzInfo[b][b2Till]=0;
            if(BizzInfo[b][bTill]<=0) { SellBizzID(b); }
        }


        for(new s = 0; s < sizeof(SBizzInfo); s++)
        {
            if(SBizzInfo[s][sOwned] == 0) continue;
            new idd = GetPlayerID(SBizzInfo[s][sOwner]);
            SendMes(idd, -1, "- Плата за электричество на заправке: $%d.",nalog*2);
            SBizzInfo[s][sTill]-=nalog*2; kazna+=nalog*2;
            if(SBizzInfo[s][sTill]<=0) { SellSBizzID(s); }
        }

...
}

P.s. Немного опоздал
Reply
#9

Quote:
Originally Posted by stabker
Посмотреть сообщение
Ну так, все логично же. Циклы for(new b = 0; b < sizeof(BizzInfo); b++) и for(new s = 0; s < sizeof(SBizzInfo); s++) находятся в цикле PlayerForeach(i), а должны быть вне его.
Спасибо stabker, извиняюсь! Сам не обратил внимания! Огромное спасибо всё же.
Reply
#10

Quote:
Originally Posted by stabker
Посмотреть сообщение
Ну так, все логично же. Циклы for(new b = 0; b < sizeof(BizzInfo); b++) и for(new s = 0; s < sizeof(SBizzInfo); s++) находятся в цикле PlayerForeach(i), а должны быть вне его.
А я не заметил
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)