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

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

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

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

Вторые деньги

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

LenD

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

И так,для начала сделаем переменную отвечающую за наши деньги:
PHP:
new Cash[MAX_PLAYERS];
Далее сделаем stock,в котором будут находится наши функции.
В конец мода ставим:
PHP:
stock GivePlayerCash(playerid, value)//где value - сумма(кол-во) валюты
{
    Cash[playerid] += value;
    return Cash[playerid];
}
stock SetPlayerCash(playerid, value)
{
    Cash[playerid] = value;
    return Cash[playerid];
}
stock ResetPlayerCash(playerid)
{
    Cash[playerid] = 0;
    return Cash[playerid];
}
stock GetPlayerCash(playerid)
{
    return Cash[playerid];
}
Вот и всё! Вы сделали новые деньги.
В итоге на финише у нас получаются следующие функции:
PHP:
GivePlayerCash(playerid, value)//дать (или отнять) валюту
SetPlayerCash(playerid, value)//"установить" валюту
ResetPlayerCash(playerid)//обнулить валюту
//где value - сумма(кол-во) валюты
Функция GetPlayerCash(playerid) проверяет количество денег у игрока.Её можно использовать для проверок или сохранения.

Эти функции - изменённые PlayerMoney.Так что проблем с созданием команд не возникнет.
Cash можно заменить на что угодно (Gold,Ruble и т.д.)

Примеры использования​
~Но некоторые спросят - как же использовать их?
-Да очень просто!
Например создадим команду,которая будет давать деньги:
PHP:
if(strcmp(cmdtext, "/givecash", true) == 0) {
GivePlayerCash(playerid, 1000); }
Или например команда,которая будет считать деньги на счету игрока:
PHP:
if(strcmp(cmdtext,"/mycash",true) == 0) {
new string[50];
format(string,sizeof(string),"У вас на счету %d монет.", Cash[playerid]);
SendClientMessage(playerid,COLOR_WHITE,string); }
~Хочу напомнить что Cash[playerid] эта переменная Cash которую мы указали в самом начале.

upd(13.11.11) : ~Ещё один вариант использования валюты - это обмен её на основную валюту.
Но что бы не заниматься порнографией и создавать разделы в диалоге напободе - "Обменять 10 монет на 1000$" и .т.д. мы сделаем проще.
Создадим команду для обмена и диалоговое окно в окошком для ввода:
PHP:
if(strcmp(cmdtext, "/obmen", true) == 0) {
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Обмен валюты","Введите сумму монет для обмена.", "Ок", "Отмена"); }
//Где 1 - ID диалога,если используется замените на свой.
Далее в OnDialogResponse ставим саму функцию:
PHP:
if(dialogid == 1 && response)//Где 1 - ID диалога,замените,если поменяли его в команде.
 {
   if(GetPlayerCash(playerid) < strval(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "У Вас нету столько монет!");
   new giveoutput =  strval(inputtext)*500, cashout = strval(inputtext), string[80];//*500 - число на которое умножится сумма которую ввели в окошке
   GivePlayerMoney(playerid, strval(inputtext)*500);//Даем деньги умноженные по форме "введенное число*500"
   GivePlayerCash(playerid, -strval(inputtext));//отнимаем введенную сумму
   format(string, sizeof(string), "Вы обменяли %d монет на  $%d .", cashout, giveoutput);//Вывод сообщения с информацией.
   SendClientMessage(playerid,COLOR_WHITE,string);
 }
//if(GetPlayerCash(playerid) < strval(inputtext)) - проверка,есть ли у Вас то количество монет,которое вы ввели
Вот и вроде бы всё!
*500 - число на которое умножится сумма которую ввели в окошке.
Если мыслить проще и объективней - это цена обмена одной монетки. Разумеется цену можно подогнать под себя.
Поясняю: Если у вас стоит *500,и вы ввели сумму для обмена - 10, то будет 10*500 = 5000. Эту сумму вы получите баксами ($).
Согласитесь,что это лучше чем индийские разделы в диалоге

Вывод суммы текстдравом​

(За основу спасибо SDraw`у)
Теперь выведем сумму на экран.Добавим форвард и переменную для текста:
PHP:
forward GoldShow();//Для создания паблика обновления
new Text:GoldDraw[MAX_PLAYERS];
Далее в OnModeGameUnit добавим таймер:
PHP:
SetTimer("GoldShow",1000,true);// где 1000 - 1 секунда
На примере показана 1 секунда,можно ставить и меньше,но нагрузка на сервер возрастёт.
1 секунда - время обновления текстдрава с деньгами.Проще говоря 1 раз в секунду.
true означает,что после отсчета 1-ой секунды таймер запустится заново.

Теперь сделаем сам текстдрав. Добавим в OnPlayerConnect:
PHP:
GoldDraw[playerid] = TextDrawCreate(500,99,"_______");//500,99 - координаты размещения текстдрава.
    TextDrawAlignment(GoldDraw[playerid],0);
    TextDrawFont(GoldDraw[playerid],3);
    TextDrawLetterSize(GoldDraw[playerid],0.55,2.0);//0.55,2.0 - размеры текстдрава
    TextDrawColor(GoldDraw[playerid],0xFFA500AA);//цвет текстдрава - оражневый
    TextDrawSetOutline(GoldDraw[playerid],2);
    TextDrawSetShadow(GoldDraw[playerid],1);
И сделаем что бы текст драв убирался при дисконнекте. В OnPlayerDisconnect:
PHP:
 TextDrawDestroy(GoldDraw[playerid]);
Теперь сделаем,что-бы текстдрав появлялся при спавне. Добавим в OnPlayerSpawn:
PHP:
TextDrawShowForPlayer(playerid,GoldDraw[playerid]);
И скрывался при смерти(вроде). В OnPlayerDeath:
PHP:
TextDrawHideForPlayer(playerid,GoldDraw[playerid]);
И наконец паблик обновления:
PHP:
public GoldShow()
{
   for(new i = 0; i < MAX_PLAYERS; i++)
   {
      if(IsPlayerConnected(i))
      {
         new str[32];
         if(Cash[i] >= 0) format(str,sizeof(str),"$%08d",Cash[i]); //Cash[i] - переменная Cash указанная в самом начале
         if(Cash[i] < 0) format(str,sizeof(str),"$-07d",Cash[i] * -1 );  
         TextDrawSetString(GoldDraw[i],str);
      }
   }
   return 1;
}
Вот и всё! Выглядеть это будет вот так:

Разумеется можно переделать,поставить другой цвет,или переместить!


Вот!Всё очень просто,при наличии желания,фантазии и прямых рук вы сможете сделать многое.
Для справки: ~Сделано на основе античита на деньги.

Автор: ~SPIRIT
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу