Alexs_Reflesh
Умник
Здравствуйте уважаемые пользователи форума Pawno-Info!
В мануалах много раз я видел как пользователи выкладывали диалоги "Домашнего счёта", но толку от диалогов не было, поясняю почему:1.Всё правильно было сделано, оплата была максимум на неделю(в диалоге), но можно было вызывать этот диалог бесконечно и оплачивать не на неделю, а на сколько хочешь...
2.При зарплате(PayDay) с домашнего счёта снимались деньги только у тех, кто в данный момент онлайн!
Я переделал эту систему для себя, но решил выложить, может кому-нибудь из вас пригодиться.
Объясняю минус систем, которые были раньше.Возьмём к примеру игрока, он зашёл на сервер играет, купил дом всё хорошо, но со временем он покидает ваш сервер, а счёт он оплатил не на один год(он вызывал диалог оплаты и там выберал много раз "Оплатить на неделю").
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
В нашем случае оплата возможна максимум на две недели, больше игрок не оплатит!
+моих доработок:
1.Переделанный диалог оплаты домашнего счёта;
2.Плата снимается со всех игроков в не зависимости онлайн игрок или нет!
3.Всё понятно настроенно(система переведена на часы)
4.Если вы не были в игре и ваш дом продался можно зайти в банк и забрать деньги!
5.Если человек покинул сервер на всегда, максимум через две недели дом будет свободен!
Приступим:+моих доработок:
1.Переделанный диалог оплаты домашнего счёта;
2.Плата снимается со всех игроков в не зависимости онлайн игрок или нет!
3.Всё понятно настроенно(система переведена на часы)
4.Если вы не были в игре и ваш дом продался можно зайти в банк и забрать деньги!
5.Если человек покинул сервер на всегда, максимум через две недели дом будет свободен!
1.Начнём с диалогов оплаты, ищем в моде
PHP:
case 9521:
PHP:
case 9521:{
if(response){
new bouse = PlayerInfo[playerid][pPhousekey];
for(new h = 0; h < sizeof(HouseInfo); h++){
if(listitem == 0){
if(70 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 70 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 70;
HouseInfo[bouse][hTakings] += 1;
format(string, sizeof(string), "Вы оплатили домашний счёт на один час, электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
if(listitem == 1){
if(300 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 300 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 300;
HouseInfo[bouse][hTakings] += 5;
format(string, sizeof(string), "Вы оплатили домашний счёт на 5 часов, электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
if(listitem == 2){
if(1500 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 1500 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 1500;
HouseInfo[bouse][hTakings] += 24;
format(string, sizeof(string), "Вы оплатили домашний счёт на сутки(24 часа), электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
if(listitem == 3){
if(4000 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 4000 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 4000;
HouseInfo[bouse][hTakings] += 72;
format(string, sizeof(string), "Вы оплатили домашний счёт на трое суток(72 часа), электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
if(listitem == 4){
if(11000 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 11000 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 11000;
HouseInfo[bouse][hTakings] += 168;
format(string, sizeof(string), "Вы оплатили домашний счёт на неделю(168 часа), электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
if(listitem == 5){
if(22000 > PlayerInfo[playerid][pCash]){
SendClientMessage(playerid, COLOR_GREY, "Для пополнения счёта необходимо 22000 вирт наличными");
ShowPlayerDialog(playerid, 10010, DIALOG_STYLE_MSGBOX, "Банкомат", "На вашем счету недостаточно денег", "Назад", "");
return true;}
else{
PlayerInfo[playerid][pCash] -= 22000;
HouseInfo[bouse][hTakings] += 336;
format(string, sizeof(string), "Вы оплатили домашний счёт на две недели(336 часов), электричество оплачено всего на %d час(ов)", HouseInfo[bouse][hTakings]);
SendClientMessage(playerid, 0x6495EDFF, string);
return true;}
}
}
}
else
{
return true;
}
}
PHP:
case 8900:
PHP:
case 2:
PHP:
case 3:
PHP:
case 2:{
new house = PlayerInfo[playerid][pPhousekey];
if(HouseInfo[house][hTakings] >= 336)return SendClientMessage(playerid, COLOR_REDD, "Оплата возможна только на две недели!!!");
if(PlayerInfo[playerid][pPhousekey] == 255) return SendClientMessage(playerid, COLOR_GREY, "Вы не имеете недвижимость");
ShowPlayerDialog(playerid, 9521, DIALOG_STYLE_LIST, "Банкомат"," - На Час(70 вирт)\n - На 5 часов(300 вирт)\n - На Сутки(1500 вирт)\n - На 3 суток(4000 вирт)\n - На неделю(11000 вирт)\n - На 2 недели(21000 вирт)","Перевести", "Выход");
return true;}
PHP:
else if(strcmp(cmd, "/hmenu", true) == 0 || strcmp(cmd, "/hm", true) == 0){
new bouse = PlayerInfo[playerid][pPhousekey];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
if (bouse != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0){
if (PlayerToPoint(10, playerid,HouseInfo[bouse][hExitx], HouseInfo[bouse][hExity], HouseInfo[bouse][hExitz])){
format(string, sizeof(string), "- Открыть / Закрыть квартиру\n- Продать квартиру\n- Электричество оплачено на: %d час(а/ов)\n- Аптечек в доме[%d]", HouseInfo[bouse][hTakings], HouseInfo[bouse][hHel]);
ShowPlayerDialog(playerid, 5300, DIALOG_STYLE_LIST, "Информация о доме", string, "Выбрать", "Отмена");
return true;}
else{
SendClientMessage(playerid, COLOR_GREY, "Вы не у себя в квартире!");
return true;}
}
else{
SendClientMessage(playerid, COLOR_GREY, "Вы не владелец квартиры!");
return true;}
}
PHP:
case 5300:
PHP:
case 5300:{//Диалог команды /hmenu
new house = PlayerInfo[playerid][pPhousekey];
if(response){
if(listitem == 0){
if(HouseInfo[house][hLock] == 1){
HouseInfo[house][hLock] = 0;
GameTextForPlayer(playerid, "~g~Unlocked", 5000, 6);
return true;}
if(HouseInfo[house][hLock] == 0){
HouseInfo[house][hLock] = 1;
GameTextForPlayer(playerid, "~r~Locked", 5000, 6);
return true;}
}
else if(listitem == 1){
ShowPlayerDialog(playerid,5032,DIALOG_STYLE_MSGBOX,"Продажа имущества","Внимание! Вы собираетесь продать Квартиру\n\nПродать Квартиру?","Да","Нет");}
}
else{
return true;}
}
PHP:
case 5032:
PHP:
case 5032:{//Диалог продажи дома
new sendername[MAX_PLAYER_NAME];
new house = PlayerInfo[playerid][pPhousekey];
if(response){
for(new h = 0; h < sizeof(HouseInfo); h++){
HouseInfo[house][hHel] = 0;
HouseInfo[house][hLock] = 1;
HouseInfo[house][hOwned] = 0;
HouseInfo[house][hVec] = 0;
HouseInfo[house][hVcol1] = -1;
HouseInfo[house][hVcol2] = -1;
DestroyVehicle(caridhouse[playerid]);
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[house][hOwner], "The State", 0, strlen("The State"), 255);
PlayerInfo[playerid][pCash] += HouseInfo[house][hValue];
format(string, sizeof(string), "Дом продан за %d вирт", HouseInfo[house][hValue]);
SendClientMessage(playerid, COLOR_WHITE, string);
format(string, sizeof(string), "Наличные: %d", PlayerInfo[playerid][pCash]);
SendClientMessage(playerid, COLOR_WHITE, string);
PlayerInfo[playerid][pPhousekey] = 255;
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid,HouseInfo[house][hEntrancex],HouseInfo[house][hEntrancey],HouseInfo[house][hEntrancez]);
PlayerInfo[playerid][pInt] = 0;
BuyHouse();
OnPropUpdate();
OnPlayerUpdateAc(playerid);
return true;}
}
else{
return true;}
}
Теперь перейдём к снятию со счётов ВСЕХ игроков оплаты!
1.Ищем public PayDay
В нём должна быть система, она начинается со строчки
PHP:
if(HouseInfo[house][hTakings] <= 0)
2.В начало public Payday после скобки добовляем
PHP:
new house = PlayerInfo[i][pPhousekey];
PHP:
for(new h = 0; h < sizeof(HouseInfo); h++)
PHP:
for(new h = 0; h < sizeof(HouseInfo); h++){//со всех домов снимает плату за 1 час!)
HouseInfo[h][hTakings] -= 1;
if(HouseInfo[h][hTakings] <= 0 && HouseInfo[h][hOwned] == 1){//если у дома счёт равен 0 и имеется хозяин то дом продаётся!
new housecash = HouseInfo[h][hValue];
format(string, sizeof(string), "%s.ini",HouseInfo[h][hOwner]);
new File = ini_openFile(string);
ini_setInteger(File,"House",255);
ini_setInteger(File,"Housecash",housecash);
ini_setInteger(File,"Text",1);
ini_closeFile(File);
HouseInfo[h][hHel] = 0;
HouseInfo[h][hLock] = 1;
HouseInfo[h][hOwned] = 0;
strmid(HouseInfo[h][hOwner], "The State", 0, strlen("The State"), 255);
BuyHouse();}
}
PHP:
if(PlayerInfo[i][pPhousekey] != 255){
format(string, sizeof(string), "- Со счёта списано плата за электричество за один час");
SendClientMessage(i, COLOR_NEWS, string);}
if(HouseInfo[house][hTakings] <= 0){//если игрок ONLINE и при зарплате у него счёт равен 0, то дом продаётся
PlayerInfo[i][pCash] +=HouseInfo[house][hValue];
HouseInfo[house][hHel] = 0;
HouseInfo[house][hLock] = 1;
HouseInfo[house][hOwned] = 0;
HouseInfo[house][hVec] = 0;
PlayerInfo[i][pText] = 1;
HouseInfo[house][hVcol1] = -1;
HouseInfo[house][hVcol2] = -1;
GetPlayerName(i, sendername, sizeof(sendername));
strmid(HouseInfo[house][hOwner], "The State", 0, strlen("The State"), 255)
SendClientMessage(i, COLOR_NEWS, "- Вы были выселены. Деньги за дом вы можете получить в банке!");
HouseInfo[house][hTakings] = 0;
PlayerInfo[i][pPhousekey] = 255;
SetPlayerInterior(i,0);
SetPlayerVirtualWorld(i, 0);
SetPlayerPos(i,HouseInfo[house][hEntrancex],HouseInfo[house][hEntrancey],HouseInfo[house][hEntrancez]);
PlayerInfo[i][pInt] = 0;}
}
Ищим в моде
PHP:
HouseInfo[h][hTakings] =
Ну вот и всё!Жду + и коментарии:bm:
Если будут ошибки пишите!Ошибки возможно во многих мода RLS, т.к. системы разные, помогу всё настроить и переделать!
Эта система 100% подойдёт для мода Samp-Rp http://pawno-info.ru/threads/120281-Samp-Role-Play-version-8-0-new (не реклама!)
Те кто не любит RLS просьба не набивать посты!
Скрины:
http://image.pawno-info.ru/images/dtFjX.png
http://image.pawno-info.ru/images/aMKvt.png
http://image.pawno-info.ru/images/MANV1.png
http://image.pawno-info.ru/images/DyvTs.png
http://image.pawno-info.ru/images/yRKs.png
http://image.pawno-info.ru/images/HoPvm.png
http://image.pawno-info.ru/images/IC5V3.png
http://image.pawno-info.ru/images/dOpJo.png
http://image.pawno-info.ru/images/aMKvt.png
http://image.pawno-info.ru/images/MANV1.png
http://image.pawno-info.ru/images/DyvTs.png
http://image.pawno-info.ru/images/yRKs.png
http://image.pawno-info.ru/images/HoPvm.png
http://image.pawno-info.ru/images/IC5V3.png
http://image.pawno-info.ru/images/dOpJo.png
Последнее редактирование модератором:
