Добро пожаловать на Pawno-Info.Ru - Портал о программировании №1

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям и ответы на все интересующие Вас вопросы. После регистрации Вы сможете создавать темы, публиковать ответы, влиять на репутацию пользователей форума, обмениваться личными сообщениями и многое другое. Это быстро и совершенно бесплатно, так чего же Вы ждете?
Доступ к архиву

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

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

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

Маппинг для сервера

Если вы хотите обновить Ваш сервер новыми доработками - то зайдите в наш раздел. Большой выбор готовых решений от наших пользователей

Моды для сервера

Огромный выбор различных модификаций для Вашего сервера. Пролистайте эти темы! Возможно именно там Вы найдете то, что искали уже давно.

Модификации SA

Хотите разнообразить свою игру в San Andreas? Смелее в наш раздел. Отличный сборник готовых решений. Играйте с удовольствием

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

S-WORLD

Начинающий
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Лучшие ответы
0
Репутация
13
Возраст
33
Адрес
г.Шатура
Видел в вопросах, люди спрашивали как систему кредитов через диалог создать в моде 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
Лучшие ответы
0
Репутация
53
Возраст
27
воо чет новенькое! щяс проверю если робит дам Спасибку! А так молотов за темку!
 

Niko Vincente

Эксперт
Пользователь
Регистрация
10 Дек 2011
Сообщения
1,089
Лучшие ответы
0
Репутация
373
Возраст
24
Адрес
NINO | 52 | RUS
Dior,в тему потом напиши,тоже интересно.. =]
 

Skinni

Изучающий
Пользователь
Регистрация
11 Сен 2011
Сообщения
592
Лучшие ответы
0
Репутация
279
Возраст
29
Адрес
Оренбург
Хорошая работа и описано хорошо. "+" залуженный
 

S-WORLD

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

Dior_Sergelik

Изучающий
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Лучшие ответы
0
Репутация
53
Возраст
27
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
Лучшие ответы
0
Репутация
13
Возраст
33
Адрес
г.Шатура
Я обновил тему, там поймёте почему, думаю позже проверю, сам не проверял, писал тут напрямую
 

kyller

Эксперт
Пользователь
Регистрация
5 Ноя 2011
Сообщения
1,665
Лучшие ответы
0
Репутация
398
Адрес
Pawno-Info.ru
Работает. Молодец.
 

S-WORLD

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

Dior_Sergelik

Изучающий
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Лучшие ответы
0
Репутация
53
Возраст
27
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
Лучшие ответы
0
Репутация
13
Возраст
33
Адрес
г.Шатура
В диалоге везде где i пиши playerid
 

S-WORLD

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

Dior_Sergelik

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

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

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

S-WORLD

Начинающий
Пользователь
Регистрация
12 Ноя 2011
Сообщения
46
Лучшие ответы
0
Репутация
13
Возраст
33
Адрес
г.Шатура
Я вот сейчас тему обновил недавно, минут 5 назад и сам лично убедился теперь, что полностью система работает))

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

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

Dior_Sergelik

Изучающий
Пользователь
Регистрация
5 Мар 2012
Сообщения
409
Лучшие ответы
0
Репутация
53
Возраст
27
Извени я тебя уже наверное достал но вот все вродебы вставил тока вот 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
Лучшие ответы
0
Репутация
13
Возраст
33
Адрес
г.Шатура
Кинь строчки эти в скайп, я добавился, ну или сюда, куда удобнее тебе
 

Murder

Изучающий
Пользователь
Регистрация
14 Янв 2012
Сообщения
280
Лучшие ответы
0
Репутация
226
Адрес
Екатеринбург
"Скрок кредита" измени на Срок)
 

Dior_Sergelik

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

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

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

Sportik

Изучающий
Пользователь
Регистрация
20 Дек 2011
Сообщения
118
Лучшие ответы
0
Репутация
24
Адрес
Россия, Казань
Спасибо, работает. "+" заслужил.
 
Статус
В этой теме нельзя размещать новые ответы.
shape1
shape2
shape3
shape4
shape7
shape8
Сверху Снизу