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

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

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

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

Полная настройка системы домов(Samp-Rp)+команда /hmenu

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

Alexs_Reflesh

Умник
Здравствуйте уважаемые пользователи форума Pawno-Info!​
В мануалах много раз я видел как пользователи выкладывали диалоги "Домашнего счёта", но толку от диалогов не было, поясняю почему:
1.Всё правильно было сделано, оплата была максимум на неделю(в диалоге), но можно было вызывать этот диалог бесконечно и оплачивать не на неделю, а на сколько хочешь...
2.При зарплате(PayDay) с домашнего счёта снимались деньги только у тех, кто в данный момент онлайн!
Я переделал эту систему для себя, но решил выложить, может кому-нибудь из вас пригодиться.
Объясняю минус систем, которые были раньше.Возьмём к примеру игрока, он зашёл на сервер играет, купил дом всё хорошо, но со временем он покидает ваш сервер, а счёт он оплатил не на один год(он вызывал диалог оплаты и там выберал много раз "Оплатить на неделю").
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~​
В нашем случае оплата возможна максимум на две недели, больше игрок не оплатит!
+моих доработок:
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;}
}
Также нужен диалог продажи для команды /hmenu если у вас имеется в моде
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];
Далее ищим в Public PayDay такую строчку
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] =
Там у вас будет в покупке =100, 100 замените на 1(При покупке дома будет оплачен счёт на один час)
Ну вот и всё!Жду + и коментарии:bm:
Если будут ошибки пишите!Ошибки возможно во многих мода RLS, т.к. системы разные, помогу всё настроить и переделать!
Эта система 100% подойдёт для мода Samp-Rp http://pawno-info.ru/threads/120281-Samp-Role-Play-version-8-0-new (не реклама!)
Те кто не любит RLS просьба не набивать посты!
Скрины:
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу