Приветствую, Уважаемые форумчане. Лазил в пучине своего жесткого диска и наткнулся на мод Fortune RP. Нашел там интересную команду /donate с основной "донат-валютой" Рубликами. Итак... Начнём!
Автор мода: CRAZy_Str (Artur_Freeman)
1. В enum pInfo добавляем переменную рублей: pRub,
2. В public OnPlayerConnect(playerid) ко всем похожим добавляем: PlayerInfo[playerid][pRub] = 0;
3. В public OnPlayerCommandText(playerid, cmdtext[]) добавляем, а если есть заменяем команду /donate и добавляем /giverubles (выдать рубли) if(strcmp(cmd, "/donate", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pRub] == 0) return SendClientMessage(playerid,COLOR_RED,"На вашем счету недостаточно средств для Доната");
new lvlexp[70];
new level = PlayerInfo[playerid][pRub];
format(lvlexp,70,"Меню доната у вас %d руб.",level);
SPD(playerid, 1444, 2, lvlexp, "Снять предупреждения\t | 15р\nОбменять рубли на вирты\nСменить номер автомобиля\t | 2p\nКупить мотоцикл\nСменить цвет автомобиля\t | 3 руб.\nУволиться из фракции\t\t | 1p", "»", "X");
}
else
{
SendClientMessage(playerid,COLOR_BLUE,"Вы не авторизированы");
}
return true;
}
//==========Выдать рубли========
if(strcmp(cmd, "/giverubles", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] > 6)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "» Введите: /giverubles [ид] [сумма]");
new playa;
new money;
playa = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
money = strval(tmp);
if (PlayerInfo[playerid][pAdmin] >= 6)
{
if(IsPlayerConnected(playa))
{
if(playa != INVALID_PLAYER_ID)
{
format(string, sizeof(string), "- %d рублей переведены на счёт игроку", money);
SendClientMessage(playerid, COLOR_WHITE, string);
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "Администратор %s[%d] перевел %d донат-очков на счёт игроку %s[%d]",sendername,playerid,money,giveplayer,playa); // Показываем всем админам, для крыс-админов
ABroadCast(COLOR_WHITE, string,1);
format(string, sizeof(string), "]=====================[ЧЕК]=====================[\nВам зачислено: \t\t\t %d рублей\nТекущий баланс: \t\t\t %d рублей\nЗачислил администратор: \t\t %s[%d]\nИспользуйте /donate для использования рублей\n]=====================[ЧЕК]=====================[", money,PlayerInfo[playa][pRub],sendername,playerid);
ShowPlayerDialog(playa,11222,DIALOG_STYLE_MSGBOX,"Чек пополнения рублей",string,"Ясно","Понятно"); // чек
//
}
}
}
}
return true;
}
P.S. Можете добавить проверку на доступ админа для /giverubles. Для этого:
После: tmp = strtok(cmdtext, idx);
money = strval(tmp);
if (PlayerInfo[playerid][pAdmin] >= 6)
Ставим это:if (dostup[playerid] <= 0) return ShowPlayerDialog(playerid,2934,DIALOG_STYLE_PASSWORD,"Доступ администратора","Введите пароль от административной панели","Ок","Отмена");
P.S.S Цены можете подправить, но не забудьте и в "кейсах"
4. Ко всем case'aм добавляем: case 1444:
{
if(response)
{
switch(listitem)
{
case 0:
{
if(PlayerInfo[playerid][pWarns] < 0) return SendClientMessage(playerid,COLOR_BLUE,"У вас нет предупреждений");
if(PlayerInfo[playerid][pRub] < 15) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для снятия предупреждений");
PlayerInfo[playerid][pWarns] = 0;
PlayerInfo[playerid][pRub] -= 15;
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Предупреждения сняты");
}
case 1: SPD(playerid,1666,1,"Информация по обмену",
"Информация\n\n\
25руб. = 200.000 вирт\n\
50руб. = 400.000 вирт\n\
100руб. = 1.000.000 вирт\n\
300руб. = 5.000.000 вирт\n\
750руб. = 15.000.000 вирт\n\
1000руб. = 25.000.000 вирт\n\
2000руб. = 50.000.000 вирт","Далее","Отменить");
case 2: SPD(playerid,8002,1,"Смена автомобильного номера","Введите номер автомобиля","Ок","Отмена");
case 3: SPD(playerid,1777,2,"Покупка мотоцикла","1. PCJ-600\t | 9 руб.\n2. Freeway\t | 12 руб.\n3. Sanchez\t | 10 руб.\n4. Quad\t\t | 8 руб.\n5. FCR-900\t | 11 руб.\n6. NRG-500\t | 15 руб.\n7. BF-400\t | 7 руб.\n8. Wayfarer\t | 13 руб.","Ok","Отмена");
case 4: SPD(playerid,2222,2,"Выберите цвет","Красный \nГолубой \nЖелтый \nЗеленый \nСерый \nОранжевый \nЧерный \nБелый", "ОК", "Отмена");
case 5: SPD(playerid,1555,0,"Увольнение из фракции","Вы действительно хотите уволиться из фракции?","Да","Нет");
}
}
else
{
return true;
}
}
case 1777:
{
if(response)
{
switch(listitem)
{
case 0:
{
if(PlayerInfo[playerid][pRub] < 9) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 9, PlayerInfo[playerid][pCar] = 461, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой PCJ-600");
}
case 1:
{
if(PlayerInfo[playerid][pRub] < 12) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 12, PlayerInfo[playerid][pCar] = 463, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой Freeway");
}
case 2:
{
if(PlayerInfo[playerid][pRub] < 10) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 10, PlayerInfo[playerid][pCar] = 468, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой Sanchez");
}
case 3:
{
if(PlayerInfo[playerid][pRub] < 8) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого Квадроцикла");
PlayerInfo[playerid][pRub] -= 8, PlayerInfo[playerid][pCar] = 471, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой Quad");
}
case 4:
{
if(PlayerInfo[playerid][pRub] < 11) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 11, PlayerInfo[playerid][pCar] = 521, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой FCR-900");
}
case 5:
{
if(PlayerInfo[playerid][pRub] < 15) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 15, PlayerInfo[playerid][pCar] = 522, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой NRG-500");
}
case 6:
{
if(PlayerInfo[playerid][pRub] < 7) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 7, PlayerInfo[playerid][pCar] = 581, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой BF-400");
}
case 7:
{
if(PlayerInfo[playerid][pRub] < 13) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для покупки этого мотоцикла");
PlayerInfo[playerid][pRub] -= 13, PlayerInfo[playerid][pCar] = 586, SendClientMessage(playerid,COLOR_LIGHTBLUE,"Поздравляем вас с покупкой BF-400");
}
}
}
else
{
return true;
}
}
case 1555:
{
if(response)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pMember] == 0) return SendClientMessage(playerid, COLOR_GREY, "Вы не состоите в организации");
if(PlayerInfo[playerid][pRub] < 1) return SendClientMessage(playerid,COLOR_GRAD1,"У вас недостаточно рублей для увольнения"); // Если он не донат 3 lvl выводим сообщение
PlayerInfo[playerid][pMember] = 0;
PlayerInfo[playerid][pRank] = 0;
PlayerInfo[playerid][pLeader] = 0;
PlayerInfo[playerid][pJob] = 0;
PlayerInfo[playerid][pRub] -= 1;
SetPlayerArmourAC(playerid,0);
SpawnPlayer(playerid);
Delgun(playerid);
SendClientMessage(playerid, COLOR_BLUE, "Вы были уволены по собственному желанию!");
}//not connected
}
return true;
}
case 1666:
{
if(response)
{
if(!strcmp(inputtext,"25",true))
{
if(PlayerInfo[playerid][pRub] < 25) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 200000, PlayerInfo[playerid][pRub] -= 25;
}
else if(!strcmp(inputtext,"50",true))
{
if(PlayerInfo[playerid][pRub] < 50) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 400000, PlayerInfo[playerid][pRub] -= 50;
}
else if(!strcmp(inputtext,"100",true))
{
if(PlayerInfo[playerid][pRub] < 100) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 1000000, PlayerInfo[playerid][pRub] -= 100;
}
else if(!strcmp(inputtext,"300",true))
{
if(PlayerInfo[playerid][pRub] < 300) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 5000000, PlayerInfo[playerid][pRub] -= 300;
}
else if(!strcmp(inputtext,"750",true))
{
if(PlayerInfo[playerid][pRub] < 750) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 15000000, PlayerInfo[playerid][pRub] -= 750;
}
else if(!strcmp(inputtext,"1000",true))
{
if(PlayerInfo[playerid][pRub] < 1000) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 25000000, PlayerInfo[playerid][pRub] -= 1000;
}
else if(!strcmp(inputtext,"2000",true))
{
if(PlayerInfo[playerid][pRub] < 2000) return SendClientMessage(playerid,COLOR_RED,"У вас недостаточно рублей");
PlayerInfo[playerid][pCash] += 50000000, PlayerInfo[playerid][pRub] -= 2000;
}
SendClientMessage(playerid,COLOR_YELLOW,"Поздравляем вас с обменом рублей");
}
return true;
}
case 8002:
{
if(response)
{
if(PlayerInfo[playerid][pRub] < 2) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для смены номера");
if(!strlen(inputtext)) return SPD(playerid,8002,1,"Смена номера","Введите номера авто в окошко","Готово","Отмена");
if(strlen(inputtext) > 10) return SPD(playerid,8002,1,"Смена номера","Cлишком длинный номер!\nВведите номера авто в окошко","Готово","Отмена");
new Float:x,Float:y,Float:z,Float:ang;
SetVehicleNumberPlate(GetPlayerVehicleID(playerid), inputtext);
GetVehiclePos(GetPlayerVehicleID(playerid),x,y,z);
GetVehicleZAngle(GetPlayerVehicleID(playerid),ang);
SetVehicleToRespawn(GetPlayerVehicleID(playerid));
SetVehiclePos(GetPlayerVehicleID(playerid),x,y,z);
PutPlayerInVehicle(playerid,GetPlayerVehicleID(playerid),0);
SetVehicleZAngle(GetPlayerVehicleID(playerid),ang);
PlayerInfo[playerid][pRub] -= 2;
SendClientMessage(playerid,COLOR_LIGHTBLUE,"Вы сменили номер автомобиля");
}
}
case 2222:
{
if(response)
{
if(PlayerInfo[playerid][pRub] < 3) return SendClientMessage(playerid,COLOR_BLUE,"У вас недостаточно рублей для смены цвета");
switch(listitem)
{
case 0: Cvet[playerid] = 3, ChangeVehicleColor(vehicleid, 3, 3), PlayerInfo[playerid][pCvet] = 3;
case 1: Cvet[playerid] = 79, ChangeVehicleColor(vehicleid, 79, 79), PlayerInfo[playerid][pCvet] = 79;
case 2: Cvet[playerid] = 65, ChangeVehicleColor(vehicleid, 65, 65), PlayerInfo[playerid][pCvet] = 65;
case 3: Cvet[playerid] = 86, ChangeVehicleColor(vehicleid, 86, 86), PlayerInfo[playerid][pCvet] = 86;
case 4: Cvet[playerid] = 9, ChangeVehicleColor(vehicleid, 9, 9), PlayerInfo[playerid][pCvet] = 9;
case 5: Cvet[playerid] = 6, ChangeVehicleColor(vehicleid, 6, 6), PlayerInfo[playerid][pCvet] = 6;
case 6: Cvet[playerid] = 0, ChangeVehicleColor(vehicleid, 0, 0), PlayerInfo[playerid][pCvet] = 0;
case 7: Cvet[playerid] = 1, ChangeVehicleColor(vehicleid, 1, 1), PlayerInfo[playerid][pCvet] = 1;
}
PlayerInfo[playerid][pRub] -= 3;
PlayerInfo[playerid][pCvet] = Cvet[playerid];
PlayerPlaySound(playerid,1134,0.0,0.0,0.0);
SPD(playerid, 2222, 2, "Выбор цвета", "Красный \nГолубой \nЖелтый \nЗеленый \nСерый \nОранжевый \nЧерный \nБелый", "ОК", "Назад");
}
else
{
return true;
}
}
UPDATE! /giverubles теперь показывает игроку диалог-чек. Думаю так будет красивей