PDA

Просмотр полной версии : [Вопрос] Не прибавляет EXP



Skyline
23.12.2014, 02:47
Всем здравствуйте, неизвестно из-за чего появилась такая проблема. Некоторым игрокам когда дается Exp, он не прибавляется. Причина неизвестна. Помогите если знаете, очень нужно.


public PayDay()
{
new string[128];
new account,interest;
new workpay;
new rent = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pLevel] >= 0)
{
if(MoneyMessage[i]==1)
{
SendClientMessage(i, COLOR_GREY, "Вы были не в состоянии оплатить свой долг, отправляйтесь в тюрьму.");
GameTextForPlayer(i, "~r~Busted!", 2000, 1);
SetPlayerInterior(i, 6);
SetPlayerPos(i, 264.6288,77.5742,1001.0391);
PlayerInfo[i][pJailed] = 1;
ResetPlayerWeapons(i);
PlayerInfo[i][pWanted] = 0;
PlayerInfo[i][pJailTime] = 240;
format(string, sizeof(string), "Ты был(а) посажен(а) в тюрьму на %d секунд. Выплата: Невозможна.", PlayerInfo[i][pJailTime]);
SendClientMessage(i, COLOR_LIGHTBLUE, string);
}
new playername2[MAX_PLAYER_NAME];
GetPlayerName(i, playername2, sizeof(playername2));
account = PlayerInfo[i][pAccount];
new key = PlayerInfo[i][pPhousekey];
if(key != 255)
{
rent = HouseInfo[key][hRent];
if(strcmp(playername2, HouseInfo[key][hOwner], true) == 0)
{
rent = 0;
}
else if(rent > GetPlayerMoney(i))
{
PlayerInfo[i][pPhousekey] = 255;
SendClientMessage(i, COLOR_WHITE, "Вы не можете оплатить арендную плату, потому Вы выселены.");
rent = 0;
}
HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+rent;
}
if(IsAMember(i))
{
if(PlayerInfo[i][pLeader] == 0) continue;
for(new b = 0; b < sizeof(BizzInfo); b++)
{
if(BizzInfo[b][bMafia] == PlayerInfo[i][pLeader]) PlayerInfo[i][pMoney] += 5000;
}
}
new tmpintrate;
if (key != 255 && strcmp(playername2, HouseInfo[key][hOwner], true) == 0)
{
if(PlayerInfo[i][pDonateRank] > 0) { tmpintrate = intrate+4; }
else { tmpintrate = intrate+2; }
}
else
{
if(PlayerInfo[i][pDonateRank] > 0) { tmpintrate = 3; }
else { tmpintrate = 1; }
}
if(PlayerInfo[i][pPayDay] >= 4)
{
new checks = PlayerInfo[i][pPayCheck];
new ebill = (PlayerInfo[i][pAccount]/1000000)*(PlayerInfo[i][pLevel]);
ConsumingMoney[i] = 1;
GivePlayerMoney(i, checks);
if(PlayerInfo[i][pAccount] > 0)
{
PlayerInfo[i][pAccount] -= ebill;
SBizzInfo[4][sbTill] += 10000;
}
else
{
ebill = 0;
}
PlayerInfo[i][pAccount] += workpay;
PlayerInfo[i][pAccount] -= Tax;
interest = (PlayerInfo[i][pAccount]/1000)*(tmpintrate);
PlayerInfo[i][pConnectTime] += 1;
PlayerPlayMusic(i);
PlayerInfo[i][pAccount] = account+interest;
SendClientMessage(i, COLOR_GREEN, "|__ З А Р П Л А Т А__|");
format(string, sizeof(string), "{FFDEAD}•-Зарплата: $%d",checks);
SendClientMessage(i, COLOR_GRAD0, string);
if(PlayerInfo[i][pPhousekey] != 255 || PlayerInfo[i][pPbiskey] != 255) {
format(string, sizeof(string), "{FFDEAD}•-Электричество: $%d", ebill);
SendClientMessage(i, COLOR_GRAD0, string); }
format(string, sizeof(string), "{FFDEAD}•-Баланс: $%d, Полученный интерес: $%d, Новый баланс: $%d, Банковский процент: 0.%d", account, interest, PlayerInfo[i][pAccount], tmpintrate);
SendClientMessage(i, COLOR_GRAD0, string);
SendClientMessage(i, COLOR_GREEN, "|_____________________|");
format(string, sizeof(string), "{FFDEAD}•-Налог: $%d",Tax);
SendClientMessage(i, COLOR_GRAD0, string);
PlayerInfo[i][pPayCheck] = 0;
PlayerInfo[i][pHourgame] += 1;
PlayerInfo[i][pDonateMoney] += 1;
PlayerInfo[i][pExp] += 1;
if(PlayerInfo[i][pDonateRank] > 0)
{
PlayerInfo[i][pPayDayHad] += 1;
if(PlayerInfo[i][pPayDayHad] >= 5)
{
PlayerInfo[i][pExp]++;
PlayerInfo[i][pPayDayHad] = 0;
}
}
}
else
{
SendClientMessage(i, COLOR_WHITE, "AscarY: Ты не получил(а) зарплату т.к. мало играл.");
}
}
}
}
SaveAccounts();
Checkprop();
SaveObshak();
return true;
}

Bady
23.12.2014, 14:53
Убери данный код:

if(PlayerInfo[i][pDonateRank] > 0)
{
PlayerInfo[i][pPayDayHad] += 1;
if(PlayerInfo[i][pPayDayHad] >= 5)
{
PlayerInfo[i][pExp]++;
PlayerInfo[i][pPayDayHad] = 0;
}
}

iDiego
23.12.2014, 15:43
if(PlayerInfo[i][pDonateRank] > 0)
{
PlayerInfo[i][pPayDayHad] += 1;
if(PlayerInfo[i][pPayDayHad] >= 5)
{
PlayerInfo[i][pExp]++;
PlayerInfo[i][pPayDayHad] = 0;
}
}

Замени на:

if(PlayerInfo[i][pDonateRank] > 0)
{
PlayerInfo[i][pPayDayHad] += 1;
if(PlayerInfo[i][pPayDayHad] >= 5)
{
PlayerInfo[i][pExp] += 1;
PlayerInfo[i][pPayDayHad] = 0;
}
}

Отпишешься, как попробуешь.

$continue$
23.12.2014, 16:08
А если так?


if(PlayerInfo[i][pDonateRank] < 0 || PlayerInfo[i][pPayDayHad] < 5) continue;
PlayerInfo[i][pExp] += 1;
PlayerInfo[i][pPayDayHad] = 0;

iDiego
23.12.2014, 16:21
А если так?


if(PlayerInfo[i][pDonateRank] < 0 || PlayerInfo[i][pPayDayHad] < 5) continue;
PlayerInfo[i][pExp] += 1;
PlayerInfo[i][pPayDayHad] = 0;


смысл тот-же, но у тебя с оптимизацией ;d

Skyline
23.12.2014, 20:05
Убери данный код:

if(PlayerInfo[i][pDonateRank] > 0)
{
PlayerInfo[i][pPayDayHad] += 1;
if(PlayerInfo[i][pPayDayHad] >= 5)
{
PlayerInfo[i][pExp]++;
PlayerInfo[i][pPayDayHad] = 0;
}
}

Не работает.

iDiego
23.12.2014, 20:34
Не работает.

ты мой вариант пробывал?

Bady
23.12.2014, 21:45
Не работает.
Будет работать, дело в том что игрокам у которых есть вип статус им будет например доваться +2 exp за 1 час.
То есть вот у тебя уже к примеру 39/40 А тебе даётся 41/40 поэтому лвл не плюсуется так как нужно точное значение, убери данный код то что я написал и будет всё норм, только у играков у которых уже привышены exp надо через /setstat менять, автоматически они не поменяются

Skyline
23.12.2014, 22:05
Никакой из вариантов не работает. Мне не нужно чтобы давало 2 Exp и не плюсовался LvL автоматически.
Exp не дается во время PayDay вообще. В коде прописан, пробовал по разному и всеми методами что вы все писали - результат отрицателен.
Переписывать систему нет смысла, так как задействован весь тот же функционал.
Не знаю из-за чего такой анал карнавал. Устанавливал crashdetect - он тоже ничего не показал.

$continue$
23.12.2014, 22:56
И смотри где останавливаться код:


public PayDay()
{
new string[128];
new account,interest;
new workpay;
new rent = 0;
print("1");
for(new i = GetMaxPlayers()-1; i != -1; i--)
{
if(!IsPlayerConnected(i) || PlayerInfo[i][pLevel] < 0 || MoneyMessage[i] != 1) continue;
print("2");
SendClientMessage(i, COLOR_GREY, "Вы были не в состоянии оплатить свой долг, отправляйтесь в тюрьму.");
GameTextForPlayer(i, "~r~Busted!", 2000, 1);
SetPlayerInterior(i, 6);
SetPlayerPos(i, 264.6288,77.5742,1001.0391);
PlayerInfo[i][pJailed] = 1;
ResetPlayerWeapons(i);
PlayerInfo[i][pWanted] = 0;
PlayerInfo[i][pJailTime] = 240;
format(string, sizeof(string), "Ты был(а) посажен(а) в тюрьму на %d секунд. Выплата: Невозможна.", PlayerInfo[i][pJailTime]);
SendClientMessage(i, COLOR_LIGHTBLUE, string);
new name_player[MAX_PLAYER_NAME];
GetPlayerName(i, name_player, sizeof(name_player));
account = PlayerInfo[i][pAccount];
new key = PlayerInfo[i][pPhousekey];
print("2");
if(key != 255)
{
rent = HouseInfo[key][hRent];
if(strcmp(name_player, HouseInfo[key][hOwner], true) == 0)
{
rent = 0;
}
else if(rent > GetPlayerMoney(i))
{
PlayerInfo[i][pPhousekey] = 255;
SendClientMessage(i, COLOR_WHITE, "Вы не можете оплатить арендную плату, потому Вы выселены.");
rent = 0;
}
HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+rent;
}
print("3");
if(IsAMember(i))
{
if(PlayerInfo[i][pLeader] == 0) continue;
for(new b = 0; b < sizeof(BizzInfo); b++)
{
if(BizzInfo[b][bMafia] == PlayerInfo[i][pLeader]) PlayerInfo[i][pMoney] += 5000;
}
}
new tmpintrate;
print("4");
if (key != 255 && strcmp(name_player, HouseInfo[key][hOwner], true) == 0)
{
if(PlayerInfo[i][pDonateRank] > 0) tmpintrate = intrate+4;
else tmpintrate = intrate+2;
}
else
{
if(PlayerInfo[i][pDonateRank] > 0) tmpintrate = 3;
else tmpintrate = 1;
}
print("5");
if(PlayerInfo[i][pPayDay] >= 4)
{
new checks = PlayerInfo[i][pPayCheck];
new ebill = (PlayerInfo[i][pAccount]/1000000) * (PlayerInfo[i][pLevel]);
ConsumingMoney[i] = 1;
GivePlayerMoney(i, checks);
if(PlayerInfo[i][pAccount] > 0)
{
PlayerInfo[i][pAccount] -= ebill;
SBizzInfo[4][sbTill] += 10000;
}
else ebill = 0;
PlayerInfo[i][pAccount] += workpay;
PlayerInfo[i][pAccount] -= Tax;
interest = (PlayerInfo[i][pAccount]/1000)*(tmpintrate);
PlayerInfo[i][pConnectTime] += 1;
PlayerPlayMusic(i);
PlayerInfo[i][pAccount] = account+interest;
SendClientMessage(i, COLOR_GREEN, "|__ З А Р П Л А Т А__|");
format(string, sizeof(string), "{FFDEAD}•-Зарплата: $%d",checks);
SendClientMessage(i, COLOR_GRAD0, string);
if(PlayerInfo[i][pPhousekey] != 255 || PlayerInfo[i][pPbiskey] != 255)
{
format(string, sizeof(string), "{FFDEAD}•-Электричество: $%d", ebill);
SendClientMessage(i, COLOR_GRAD0, string);
}
format(string, sizeof(string), "{FFDEAD}•-Баланс: $%d, Полученный интерес: $%d, Новый баланс: $%d, Банковский процент: 0.%d", account, interest, PlayerInfo[i][pAccount], tmpintrate);
SendClientMessage(i, COLOR_GRAD0, string);
SendClientMessage(i, COLOR_GREEN, "|_____________________|");
format(string, sizeof(string), "{FFDEAD}•-Налог: $%d",Tax);
SendClientMessage(i, COLOR_GRAD0, string);
PlayerInfo[i][pPayCheck] = 0;
PlayerInfo[i][pHourgame] += 1;
PlayerInfo[i][pDonateMoney] += 1;
PlayerInfo[i][pExp] += 1;
if(PlayerInfo[i][pDonateRank] < 0 || PlayerInfo[i][pPayDayHad] < 5) continue;
PlayerInfo[i][pExp] += 1;
PlayerInfo[i][pPayDayHad] = 0;
}
else SendClientMessage(i, COLOR_WHITE, "AscarY: Ты не получил(а) зарплату т.к. мало играл.");
}
SaveAccounts();
Checkprop();
SaveObshak();
return true;
}

Skyline
24.12.2014, 13:12
После print("1"); Ничего не выводится.
Заменил цикл, возможно в нем проблема.

Skyline
24.12.2014, 17:03
Нет, ни помогло. Не знаю из-за чего. Помогите.

$continue$
24.12.2014, 19:59
Нет, ни помогло. Не знаю из-за чего. Помогите.

Апаешь тему часто, так точно не помогут.

По теме:


public PayDay()
{
new string[128];
new account,interest;
new workpay;
new rent = 0;
printf("IsPlayerConnected: %d || Левел: %d || MoneyMessage: %d", IsPlayerConnected(playerid), PlayerInfo[playerid][pLevel], MoneyMessage[playerid]);
print("1");
for(new i = GetMaxPlayers()-1; i != -1; i--)
{
if(!IsPlayerConnected(i) || PlayerInfo[i][pLevel] < 0 || MoneyMessage[i] != 1) continue;
print("2");
SendClientMessage(i, COLOR_GREY, "Вы были не в состоянии оплатить свой долг, отправляйтесь в тюрьму.");
GameTextForPlayer(i, "~r~Busted!", 2000, 1);
SetPlayerInterior(i, 6);
SetPlayerPos(i, 264.6288,77.5742,1001.0391);
PlayerInfo[i][pJailed] = 1;
ResetPlayerWeapons(i);
PlayerInfo[i][pWanted] = 0;
PlayerInfo[i][pJailTime] = 240;
format(string, sizeof(string), "Ты был(а) посажен(а) в тюрьму на %d секунд. Выплата: Невозможна.", PlayerInfo[i][pJailTime]);
SendClientMessage(i, COLOR_LIGHTBLUE, string);
new name_player[MAX_PLAYER_NAME];
GetPlayerName(i, name_player, sizeof(name_player));
account = PlayerInfo[i][pAccount];
new key = PlayerInfo[i][pPhousekey];
print("2");
if(key != 255)
{
rent = HouseInfo[key][hRent];
if(strcmp(name_player, HouseInfo[key][hOwner], true) == 0)
{
rent = 0;
}
else if(rent > GetPlayerMoney(i))
{
PlayerInfo[i][pPhousekey] = 255;
SendClientMessage(i, COLOR_WHITE, "Вы не можете оплатить арендную плату, потому Вы выселены.");
rent = 0;
}
HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+rent;
}
print("3");
if(IsAMember(i))
{
if(PlayerInfo[i][pLeader] == 0) continue;
for(new b = 0; b < sizeof(BizzInfo); b++)
{
if(BizzInfo[b][bMafia] == PlayerInfo[i][pLeader]) PlayerInfo[i][pMoney] += 5000;
}
}
new tmpintrate;
print("4");
if (key != 255 && strcmp(name_player, HouseInfo[key][hOwner], true) == 0)
{
if(PlayerInfo[i][pDonateRank] > 0) tmpintrate = intrate+4;
else tmpintrate = intrate+2;
}
else
{
if(PlayerInfo[i][pDonateRank] > 0) tmpintrate = 3;
else tmpintrate = 1;
}
print("5");
if(PlayerInfo[i][pPayDay] >= 4)
{
new checks = PlayerInfo[i][pPayCheck];
new ebill = (PlayerInfo[i][pAccount]/1000000) * (PlayerInfo[i][pLevel]);
ConsumingMoney[i] = 1;
GivePlayerMoney(i, checks);
if(PlayerInfo[i][pAccount] > 0)
{
PlayerInfo[i][pAccount] -= ebill;
SBizzInfo[4][sbTill] += 10000;
}
else ebill = 0;
PlayerInfo[i][pAccount] += workpay;
PlayerInfo[i][pAccount] -= Tax;
interest = (PlayerInfo[i][pAccount]/1000)*(tmpintrate);
PlayerInfo[i][pConnectTime] += 1;
PlayerPlayMusic(i);
PlayerInfo[i][pAccount] = account+interest;
SendClientMessage(i, COLOR_GREEN, "|__ З А Р П Л А Т А__|");
format(string, sizeof(string), "{FFDEAD}•-Зарплата: $%d",checks);
SendClientMessage(i, COLOR_GRAD0, string);
if(PlayerInfo[i][pPhousekey] != 255 || PlayerInfo[i][pPbiskey] != 255)
{
format(string, sizeof(string), "{FFDEAD}•-Электричество: $%d", ebill);
SendClientMessage(i, COLOR_GRAD0, string);
}
format(string, sizeof(string), "{FFDEAD}•-Баланс: $%d, Полученный интерес: $%d, Новый баланс: $%d, Банковский процент: 0.%d", account, interest, PlayerInfo[i][pAccount], tmpintrate);
SendClientMessage(i, COLOR_GRAD0, string);
SendClientMessage(i, COLOR_GREEN, "|_____________________|");
format(string, sizeof(string), "{FFDEAD}•-Налог: $%d",Tax);
SendClientMessage(i, COLOR_GRAD0, string);
PlayerInfo[i][pPayCheck] = 0;
PlayerInfo[i][pHourgame] += 1;
PlayerInfo[i][pDonateMoney] += 1;
PlayerInfo[i][pExp] += 1;
if(PlayerInfo[i][pDonateRank] < 0 || PlayerInfo[i][pPayDayHad] < 5) continue;
PlayerInfo[i][pExp] += 1;
PlayerInfo[i][pPayDayHad] = 0;
}
else SendClientMessage(i, COLOR_WHITE, "AscarY: Ты не получил(а) зарплату т.к. мало играл.");
}
SaveAccounts();
Checkprop();
SaveObshak();
return true;
}

И скидывай их скрином или сообщением целым, а не доставая из кода...