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

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

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
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 диалога с этой функцией

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

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
воо чет новенькое! щяс проверю если робит дам Спасибку! А так молотов за темку!
 

Niko Vincente

Специалист
Пользователь
Регистрация
10 Дек 2011
Сообщения
1,089
Реакции
373
Dior,в тему потом напиши,тоже интересно.. =]
 

Skinni

Специалист
Пользователь
Регистрация
11 Сен 2011
Сообщения
592
Реакции
279
Хорошая работа и описано хорошо. "+" залуженный
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
Парни, обновите страницу, я немного обновил урок, доработал, просто там с выплатой были проблемы.:df:
 

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
Dior,в тему потом напиши,тоже интересно.. =]
Ок я напишу щяс вот вписываю!

---------- Post added at 19:24 ---------- Previous post was at 19:22 ----------

Парни, обновите страницу, я немного обновил урок, доработал, просто там с выплатой были проблемы.:df:
а что именно какой шаг обновил? Шаг 6?
и как вот эти ерроры исправить?
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(3293) : warning 209: function "Money" should return a value
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5323) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5329) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5335) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5338) : error 002: only a single statement (or expression) can follow each "case"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5385) : error 014: invalid statement; not in switch
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5385) : warning 215: expression has no effect
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5385) : error 001: expected token: ";", but found ":"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5385) : error 029: invalid expression, assumed zero
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5385) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


8 Errors.
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
Я обновил тему, там поймёте почему, думаю позже проверю, сам не проверял, писал тут напрямую
 

kyller

Профессионал
Пользователь
Регистрация
5 Ноя 2011
Сообщения
1,665
Реакции
398
Работает. Молодец.
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
PHP:
if(!NoNalog(i))
					{
  					format(string, sizeof(string), "*** Налог государству: -100 вирт");
					SendClientMessage(i, COLOR_LIGHTRED, string);
    				PlayerInfo[i][pBank] -= 100;
    				}
Вот такое найди и сразу после } вставляй 6 шаг
 

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
PHP:
if(!NoNalog(i))
					{
  					format(string, sizeof(string), "*** Налог государству: -100 вирт");
					SendClientMessage(i, COLOR_LIGHTRED, string);
    				PlayerInfo[i][pBank] -= 100;
    				}
Вот такое найди и сразу после } вставляй 6 шаг
всеровно выдает это:
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(3293) : warning 209: function "Money" should return a value
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5324) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5330) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5336) : error 017: undefined symbol "i"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5339) : error 002: only a single statement (or expression) can follow each "case"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5386) : error 014: invalid statement; not in switch
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5386) : warning 215: expression has no effect
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5386) : error 001: expected token: ";", but found ":"
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5386) : error 029: invalid expression, assumed zero
D:\Users\Дима и Саша\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(5386) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


8 Errors.


---------- Post added at 19:36 ---------- Previous post was at 19:34 ----------

я короче попробовал создать new i; и уменя выдает 5 ерроров! что делать?

---------- Post added at 19:37 ---------- Previous post was at 19:36 ----------

я короче попробовал создать new i; и уменя выдает 5 ерроров! что делать?
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
В диалоге везде где i пиши playerid
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
Уже можешь не париться, я тему обновил, обнови страницу и вставь диалог, который сейчас стоит (номер диалога на свой поменять не забудь):df:
 

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
S-WORLD слушай го в скапй так проше будет а то тут всю тему зафлудим:)

---------- Post added at 19:57 ---------- Previous post was at 19:56 ----------

прсото там какаята проблема с диалогом обсудим исправим!го вот мой скайп:daniyer7777
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
Я вот сейчас тему обновил недавно, минут 5 назад и сам лично убедился теперь, что полностью система работает))

---------- Post added at 19:05 ---------- Previous post was at 19:02 ----------

Обновлено, проверено, полностью работоспособна система, те, кто первые её ставили просто замените диалог на тот, что сейчас и всё будет работать (косяки были мои совсем не отрицаю)
 

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
Извени я тебя уже наверное достал но вот все вродебы вставил тока вот 2 варнинга как я понел warning 215: expression has no effect - выражение не имеет эффекта;
D:\Users\Äèìà è Ñàøà\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(26153) : warning 215: expression has no effect
D:\Users\Äèìà è Ñàøà\Desktop\Rezone-rp v7.7\gamemodes\Dimba.pwn(26154) : warning 215: expression has no effect
в чем может быть проблема?
 

S-WORLD

Интересующийся
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Реакции
13
Кинь строчки эти в скайп, я добавился, ну или сюда, куда удобнее тебе
 

Murder

Участник форума
Пользователь
Регистрация
14 Янв 2012
Сообщения
280
Реакции
225
"Скрок кредита" измени на Срок)
 

Dior_Sergelik

Участник форума
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Реакции
53
S-WORLD молоток! И тему красава офрмил и понятно! и Идейку кульную реалезовал!
Все баги исправлены и проверено.Система работает норм!

---------- Post added at 21:17 ---------- Previous post was at 21:01 ----------

Niko Vincente можешь смело вписывать себе все проверено! и ставить + S-WORLD
 

Sportik

Участник форума
Пользователь
Регистрация
20 Дек 2011
Сообщения
118
Реакции
24
Спасибо, работает. "+" заслужил.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи онлайн

Реклама

Сверху