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

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

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

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

[Урок]Создание системы кредитов для мода RLS (через запись в файл)

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

S-WORLD

Начинающий
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Лучшие ответы
0
Репутация
13
Видел в вопросах, люди спрашивали как систему кредитов через диалог создать в моде RLS, вот решил урок написать.Автор урока я, понимаю что многие до такого уже давно додумались, но всё же, автор урока я, ошибок быть по сути не должно, если вы всё правильно сделаете, как тут описано.
Урок писал напрямую в браузере, но функции взяты именно из RLS по этому ни к каким другим модам данная система в готовом состоянии не подойдёт, если только переделывать на этой основе.

Поясню сразу, всё что выделенно жирным обязательно к сведениям, так что ошибки могут быть только от вашей невнимательности!

В общем:
1 шаг

В pInfo после последней переменной вставляем:
PHP:
pCredit,pCreditSrok
Само собой, у последней переменной, после которой вставили ставим , (для невнимательных)

2 шаг


Дальше в public OnPlayerLogin(playerid,password[]) вставляем следующее:
PHP:
ini_getInteger(File,"Кредит",PlayerInfo[playerid][pCredit]);
ini_getInteger(File,"Срок кредита",PlayerInfo[playerid][pCreditSrok]);
- данная функция проверяет значение переменной pCreditпри логине и наличие кредита

3 шаг

После похожая ситуация, но уже не с чтением файла (ini_getInteger), а с записью в файл (ini_setInteger).
Вставляем в public OnPlayerRegister(playerid, password[]) следующее:
PHP:
ini_setInteger(File,"Кредит",PlayerInfo[playerid][pCredit]);
ini_setInteger(File,"Срок кредита",PlayerInfo[playerid][pCreditSrok]);
- Данная функция записывает значение переменной pCredit и pCreditSrokпри регистрации (устанавливает на 0, это понятно, вы ведь ещё кредит не брали).

4 шаг

Идём в public OnPlayerUpdateRL(playerid) и вставляем:
PHP:
ini_setInteger(File,"Кредит",PlayerInfo[playerid][pCredit]);
ini_setInteger(File,"Срок кредита",PlayerInfo[playerid][pCreditSrok]);
- Данная функция обновляет значение переменной pCreditпри выдаче кредита (если взяли кредит устанавливает на 1, 2 и т.д, в зависимости от того, какую вы функцию привяжете) и добавляет проверку на наличие кредита.


С переменной в файле и проверку мы сделали, можно двигаться дальше, пол работы выполнено.

5 шаг

Создаём диалог самого кредита:
Идём в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
PHP:
case 1111: // Тут номер диалога, который установите вы.    
{                  
 if(response)            
{                         
switch(listitem)                                  
 {                                    
case 0: // Первый слот в диалоге и функция к нему (в нашем случае это 300.000 кредит)
{                                     
PlayerInfo[playerid][pCreditSrok] = 30; //Устанавливает значение pCredit на 30 (30 часов платить)
PlayerInfo[playerid][pCredit] = 1; //Устанавливает значение pCredit на 1 (взяли кредит на 1 сумму)
PlayerInfo[playerid][pCash] += 300000; //Добавляет игроку деньги, можно перечислить на карту
SendClientMessage(playerid,COLOR_WHITE,"Вам выдали кредит на сумму 300.000."); // Это сообщение понятно
}                                     
case 1: // Второй слот в диалоге и функция к нему (в нашем случае это 1.000.000)
{                                    
PlayerInfo[playerid][pCredit] = 2; //Устанавливает значение pCredit на 2 (взяли кредит на 2 сумму)
PlayerInfo[playerid][pCreditSrok] = 40; //Устанавливает значение pCredit на 40 (40 часов платить)
PlayerInfo[playerid][pCash] += 1000000; //Добавляет игроку деньги, можно перечислить на карту
SendClientMessage(playerid,COLOR_WHITE,"Вам выдали кредит на сумму 1.000.000."); // Это сообщение понятно
}                                     
case 2: // Третий слот в диалоге и функция к нему (в нашем случае это 5.000.000)
{                                     
PlayerInfo[playerid][pCredit] = 3; //Устанавливает значение pCredit на 3 (взяли кредит на 3 сумму)
PlayerInfo[playerid][pCreditSrok] = 50; //Устанавливает значение pCredit на 50 (позже поймёте почему не 30, 40)
PlayerInfo[playerid][pCash] += 5000000; //Добавляет игроку деньги, можно перечислить на карту
SendClientMessage(playerid,COLOR_WHITE,"Вам выдали кредит на сумму 5.000.000."); // Это сообщение понятно
}
}
return 1;
}
}
Сами функции диалога созданы, теперь нам нужно вставить куда нибудь сам диалог (вставляем либо в команду, либо в диалог банка). Делается это очень просто:
PHP:
ShowPlayerDialog(playerid, 1111, DIALOG_STYLE_LIST, "Выберите сумму", "- 300.000 (по 3.000 каждый PayDay)  \n- 1.000.000 (по 5.000 каждый PayDay \n- 5.000.000 (по 10.000 каждый PayDay)", "Выбор", "Назад");
Вот мы сделали 3 пункта в диалоге и функции на них, само собой вместо 1111 вы пишете номер вашего диалога (выборы кредите вы можете легко добавить, добавляем в самом диалоге новый case (в нашем случае это case 3:) и в ShowPlayerDialog(playerid, 1111 добавляем продолжение строчки, соответственно после \n (это для тех кто не знает перенос строчки).

6 шаг

Теперь наша задача создать выплату кредита (автоматическую).
Ищем в моде public PayDay() и где то после Клиент банка и тому подобное между скобками } и { (именно они должны стоять в таком положении, получается между зактрытой и открытой скобкой, а не наоборот) вставляем следующее:

PHP:
if(PlayerInfo[i][pCreditSrok] >= 0 && PlayerInfo[i][pCredit] == 1)    // Это выплата за кредит в 300.000
{
format(string, sizeof(string), "**** Выплата кредитов: -3000 вирт"); // Пишет сообщение при PayDay
SendClientMessage(i, COLOR_LIGHTRED, string);
PlayerInfo[i][pBank] -= 3000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[i][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[i][pCreditSrok] >= 0 && PlayerInfo[i][pCredit] == 2)    // Это выплата за кредит в 1.000.000
{
format(string, sizeof(string), "**** Выплата кредитов: -5000 вирт"); // Пишет сообщение при PayDay
SendClientMessage(i, COLOR_LIGHTRED, string);
PlayerInfo[i][pBank] -= 5000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[i][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[i][pCreditSrok] >= 0 && PlayerInfo[i][pCredit] == 3)    // Это выплата за кредит в 5.000.000
{                      
format(string, sizeof(string), "**** Выплата кредитов: -10000 вирт"); // Пишет сообщение при PayDay                    
SendClientMessage(i, COLOR_LIGHTRED, string);
PlayerInfo[i][pBank] -= 10000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[i][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[i][pCreditSrok] == 1 && PlayerInfo[i][pCredit] >= 0)    // Это последний срок
{
format(string, sizeof(string), "**** Вы выплатили кредит"); // Пишет сообщение при PayDay
SendClientMessage(i, COLOR_LIGHTRED, string);
PlayerInfo[i][pCredit] = 0; // Убирает наличие кредита
PlayerInfo[i][pCreditSrok] = 0; // Онулирует срок кредита
}
Вот и всё, что мы в итоге имеем с этого урока? Диалог с кредитом в 3 суммы, выплату денег и своевременную почасовую выплату долга (время, суммы и выплату вы можете ставить свою).

А теперь создаём диалог, в котором можно будет добровольно выплатить кредит.

PHP:
case 1111: // Тут номер диалога, который установите вы.    
{                   
if(response)            
{                        
if(PlayerInfo[playerid][pCreditSrok] >= 0 && PlayerInfo[playerid][pCredit] == 1)    // Это выплата за кредит в 300.000
{
format(string, sizeof(string), "Вы заплатили своевременно кредит: -3000 вирт"); // Пишет сообщение при PayDay
SendClientMessage(playerid, COLOR_LIGHTRED, string);
PlayerInfo[playerid][pBank] -= 3000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[playerid][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[playerid][pCreditSrok] >= 0 && PlayerInfo[playerid][pCredit] == 2)    // Это выплата за кредит в 1.000.000                    
{                      
format(string, sizeof(string), "Вы заплатили своевременно кредит: -5000 вирт"); // Пишет сообщение при PayDay
SendClientMessage(playerid, COLOR_LIGHTRED, string);
PlayerInfo[playerid][pBank] -= 5000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[playerid][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[playerid][pCreditSrok] >= 0 && PlayerInfo[playerid][pCredit] == 3)    // Это выплата за кредит в 5.000.000
{                      
format(string, sizeof(string), "Вы заплатили своевременно кредит: -10000 вирт"); // Пишет сообщение при PayDay                    
SendClientMessage(playerid, COLOR_LIGHTRED, string);
PlayerInfo[playerid][pBank] -= 10000; // Если хотите чтобы снимало с рук вместо pBank пишете pCash
PlayerInfo[playerid][pCreditSrok] -= 1; // Снимает по 1 значению каждый PayDay, пока не дойдёт до 0
}
if(PlayerInfo[playerid][pCreditSrok] == 1 && PlayerInfo[playerid][pCredit] >= 0)    // Это последний срок
{
format(string, sizeof(string), "**** Вы выплатили кредит"); // Пишет сообщение при PayDay
SendClientMessage(playerid, COLOR_LIGHTRED, string);
PlayerInfo[playerid][pCredit] = 0; // Убирает наличие кредита
PlayerInfo[playerid][pCreditSrok] = 0; // Онулирует срок кредита
}
if(PlayerInfo[playerid][pCreditSrok] == 0 && PlayerInfo[playerid][pCredit] == 0)    // Это последний срок
{
format(string, sizeof(string), "Кредит уже выплачен или вы его не брали."); // Пишет сообщение при PayDay
SendClientMessage(playerid, COLOR_WHITE, string);
}
else
{
return 1;
}
}
}
Так же как и с предыдущим мы создаём сам диалог, так как функция у нас уже готова:

PHP:
ShowPlayerDialog(playerid, 1111, DIALOG_STYLE_MSGBOX, "Выплата кредита", "Вы хотите заплатить\n своевременно?", "Да", "Нет");
- вместо 1111 id диалога с этой функцией

И так же можете это вставить в диалог банка или команду. Спасибо за внимание!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу