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

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

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

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

Покупка 3 скинов и смена их дома(By Tumba)

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

Tumba

Специалист
Видео системы:
Писал эту систему для своего мода.Решил поделиться с вами.
Моя система не будет ориентирована конкретно под какой то мод.Пишу все объясняя, самим придется немного подумать.
Итак, начнем.
Для начала нам нужно добиться сохранения идов скинов.Для этого в enum с переменными аккаунта(в разных модах он имеет разные имена, но в основном enum pInfo добавим три новые переменные.Это будет выглядить примерно так.
PHP:
enum pInfo
{
  тут ваши переменные,
  тут ваши переменные,
  тут ваши переменные,
  skin1,
  skin2,
  skin3
};
skin1,skin2 и skin3 это у нас будут иды скинов 1, 2 и 3 соответственно.
Ну, надеюсь добавили?Идем дальше.
Теперь нам надо обеспечить сохранение и загрузку этих трех переменных.
Как я уже говорил моды бывают разные и я рассмотрю самый распространенный случай.
Сначала создадим загрузку этих 3 переменных.
Ищим паблик OnPlayerLogin ну если он у вас имеет другое название, вам придется поискать.
Ищим в нем примерно вот такой текст:
PHP:
        iniGetInt(File,"UpgradePoints",PlayerInfo[playerid][gPupgrade]);
        iniGetInt(File,"ConnectTime",PlayerInfo[playerid][pConnectTime]);
        iniGetInt(File,"Registered",PlayerInfo[playerid][pReg]);
        iniGetInt(File,"Sex",PlayerInfo[playerid][pSex]);
        iniGetInt(File,"Age",PlayerInfo[playerid][pAge]);
        iniGetInt(File,"Origin",PlayerInfo[playerid][pOrigin]);
        iniGetInt(File,"CK",PlayerInfo[playerid][pCK]);
        iniGetInt(File,"Vig",PlayerInfo[playerid][pVig]);
        iniGetInt(File,"Muted",PlayerInfo[playerid][pMuted]);
        iniGetInt(File,"Respect",PlayerInfo[playerid][pExp]);
        iniGetInt(File,"Money",PlayerInfo[playerid][pCash]);
        iniGetInt(File,"Bank",PlayerInfo[playerid][pAccount]);
        iniGetInt(File,"Crimes",PlayerInfo[playerid][pCrimes]);
        iniGetInt(File,"Kills",PlayerInfo[playerid][pKills]);
        iniGetInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
И продолжите его следующими записями.
PHP:
        iniGetInt(File,"Skin1",PlayerInfo[playerid][skin1]);
        iniGetInt(File,"Skin2",PlayerInfo[playerid][skin2]);
        iniGetInt(File,"Skin3",PlayerInfo[playerid][skin3]);
В моем случае это будет выглядить так:
PHP:
        iniGetInt(File,"UpgradePoints",PlayerInfo[playerid][gPupgrade]);
        iniGetInt(File,"ConnectTime",PlayerInfo[playerid][pConnectTime]);
        iniGetInt(File,"Registered",PlayerInfo[playerid][pReg]);
        iniGetInt(File,"Sex",PlayerInfo[playerid][pSex]);
        iniGetInt(File,"Age",PlayerInfo[playerid][pAge]);
        iniGetInt(File,"Origin",PlayerInfo[playerid][pOrigin]);
        iniGetInt(File,"CK",PlayerInfo[playerid][pCK]);
        iniGetInt(File,"Vig",PlayerInfo[playerid][pVig]);
        iniGetInt(File,"Muted",PlayerInfo[playerid][pMuted]);
        iniGetInt(File,"Respect",PlayerInfo[playerid][pExp]);
        iniGetInt(File,"Money",PlayerInfo[playerid][pCash]);
        iniGetInt(File,"Bank",PlayerInfo[playerid][pAccount]);
        iniGetInt(File,"Crimes",PlayerInfo[playerid][pCrimes]);
        iniGetInt(File,"Kills",PlayerInfo[playerid][pKills]);
        iniGetInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
        iniGetInt(File,"Skin1",PlayerInfo[playerid][skin1]);
        iniGetInt(File,"Skin2",PlayerInfo[playerid][skin2]);
        iniGetInt(File,"Skin3",PlayerInfo[playerid][skin3]);
Ну теперь перейдем к сохранению этих самых переменных.В основном паблик сохранения игрока имеет название OnPlayerUpdate, так что ищим его.Дальше находим в нем примерно вот такие строчки:
PHP:
        iniSetInt(File,"CK",PlayerInfo[playerid][pCK]);
        iniSetInt(File,"Vig",PlayerInfo[playerid][pVig]);
        iniSetInt(File,"Muted",PlayerInfo[playerid][pMuted]);
        iniSetInt(File,"Respect",PlayerInfo[playerid][pExp]);
И снижу продолжаем этот код следующими записями:
PHP:
        iniSetInt(File,"Skin1",PlayerInfo[playerid][skin1]);
        iniSetInt(File,"Skin2",PlayerInfo[playerid][skin2]);
        iniSetInt(File,"Skin3",PlayerInfo[playerid][skin3]);
В моем случае это будет выглядить так:
PHP:
        iniSetInt(File,"CK",PlayerInfo[playerid][pCK]);
        iniSetInt(File,"Vig",PlayerInfo[playerid][pVig]);
        iniSetInt(File,"Muted",PlayerInfo[playerid][pMuted]);
        iniSetInt(File,"Respect",PlayerInfo[playerid][pExp]);
        iniSetInt(File,"Skin1",PlayerInfo[playerid][skin1]);
        iniSetInt(File,"Skin2",PlayerInfo[playerid][skin2]);
        iniSetInt(File,"Skin3",PlayerInfo[playerid][skin3]);
Так, загрузку и сохранение переменных мы обеспечили.
Теперь нам нужно сделать так, чтобы эти три переменные к чему то присваивались, верно?
Вам придется найти код покупки одежды.Ищите тот текст, который вам пишется после покупки одежды.И там вставляйте следующее:
PHP:
                      if(PlayerInfo[playerid][skin1] == 0)//Если скин 1 равен 0
                      {
                    PlayerInfo[playerid][skin1] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас
                    SendClientMessage(playerid, COLOR_RED , "Вы можете еще сделать две покупки");
	    		  }
	    		  else if(PlayerInfo[playerid][skin2] == 0)//Если скин 2 равен 0
	    		  {
                    PlayerInfo[playerid][skin2] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас
                    SendClientMessage(playerid, COLOR_RED , "Вы можете еще сделать одну покупку");
	    		  }
	    		  else if(PlayerInfo[playerid][skin3] == 0)//Если скин 3 равен 0
	    		  {
                    PlayerInfo[playerid][skin3] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас
                      }
Ну если у вас вас возникнут вопросы по этому пункту, пишите мне в скайп kirill_kill2.
Ну теперь мы обеспечили присвоение этим трем переменным.Сделаем команду вызова диалога со сменой одежды.В паблик OnPlayerComandText
PHP:
if(strcmp(cmd,"/odejda",true) == 0)
 {
      ShowPlayerDialog(playerid,534,DIALOG_STYLE_LIST,"Сменить одежду","Одежда №1\Одежда №2\Одежда    №3","ОК","Отмена");
   return 1;
}
Также вы можете здесь добавить проверку, например если игрок находится дома, иначе нельзя.
Ну теперь нам надо обозначить действия для этого диалога.Ищим паблик OnPlayerDialogResponse и добавляем туда:
PHP:
case 534:
{
		   if(response)
		   {
			 switch(listitem)
			 {
				case 0://Если игрок жмет на первый пункт в списке
				{
                  if(PlayerInfo[playerid][skin1] == 0) return SendClientMessage(playerid, COLOR_GREY, "У вас нет одежды под номером 1");//Если у игрока переменная skin1 равна 0, то ясный перец, у него нет этой одежды)))
                  SetPVarInt(playerid, "PlayerSkin", 1);//эту переменную мы присвоили специально для следующего диалога
				  ShowPlayerDialog(playerid,535,DIALOG_STYLE_LIST,"Опции","Одеть\nСнять\nВыбросить","ОК","Отмена");
  				}
				case 1://Если игрок жмет на второй пункт в списке
				{
                  if(PlayerInfo[playerid][skin2] == 0) return SendClientMessage(playerid, COLOR_GREY, "У вас нет одежды под номером 2");//Если у игрока переменная skin2 равна 0, то ясный перец, у него нет этой одежды)))
                  SetPVarInt(playerid, "PlayerSkin", 2);//эту переменную мы присвоили специально для следующего диалога
				  ShowPlayerDialog(playerid,535,DIALOG_STYLE_LIST,"Опции","Одеть\nСнять\nВыбросить","ОК","Отмена");
  				}
				case 2://Если игрок жмет на третий в списке
				{
                  if(PlayerInfo[playerid][skin3] == 0) return SendClientMessage(playerid, COLOR_GREY, "У вас нет одежды под номером 3");//Если у игрока переменная skin3 равна 0, то ясный перец, у него нет этой одежды)))
                  SetPVarInt(playerid, "PlayerSkin", 3);//эту переменную мы присвоили специально для следующего диалога
				 ShowPlayerDialog(playerid,535,DIALOG_STYLE_LIST,"Опции","Одеть\nСнять\nВыбросить","ОК","Отмена");
				}
			 }
		   }
		   else
		   {
		   }
}
Теперь после этого добавляем второй диалог:
PHP:
case 535:
{
		   if(response)
		   {
			 switch(listitem)
			 {
				case 0://если игрок выбирает пункт одеть
				{
                  if(GetPVarInt(playerid,"PlayerSkin") == 1)//Я же говорил она нам пригодится.То есть мы делаем проверку, какой скин он выбрал в прошлом диалоге
				  {
		            if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin1]) return SendClientMessage(playerid, COLOR_RED, "Эта одежда уже одета на вас!");
				    PlayerInfo[playerid][pModel] = PlayerInfo[playerid][skin1];
				    SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
				    SendClientMessage(playerid, COLOR_GREY, "Вы переоделись в одежду под номером 1");
				    SetPVarInt(playerid,"PlayerSkin",0);
  				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 2)//Я же говорил она нам пригодится.То есть мы делаем проверку, какой скин он выбрал в прошлом диалоге
				  {
                    if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin2]) return SendClientMessage(playerid, COLOR_RED, "Эта одежда уже одета на вас!");
                    PlayerInfo[playerid][pModel] = PlayerInfo[playerid][skin2];
				    SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
				    SendClientMessage(playerid, COLOR_GREY, "Вы переоделись в одежду под номером 2");
				    SetPVarInt(playerid,"PlayerSkin",0);
				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 3)//Я же говорил она нам пригодится.То есть мы делаем проверку, какой скин он выбрал в прошлом диалоге
				  {
                    if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin3]) return SendClientMessage(playerid, COLOR_RED, "Эта одежда уже одета на вас!");
                    PlayerInfo[playerid][pModel] = PlayerInfo[playerid][skin3];
				    SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
				    SendClientMessage(playerid, COLOR_GREY, "Вы переоделись в одежду под номером 3");
                    SetPVarInt(playerid,"PlayerSkin",0);
				  }
				}
				case 1://если игрок выбирает пункт снять
				{
                  if(GetPVarInt(playerid,"PlayerSkin") == 1)
				  {
		            if(GetPlayerSkin(playerid) != PlayerInfo[playerid][skin1]) return SendClientMessage(playerid, COLOR_RED, "На вас не одета одежда по номером 1");//Если скин игрока не равняется переменной skin1, то оповещаем игрока
		            if(PlayerInfo[playerid][pSex] == 1) PlayerInfo[playerid][pModel] = 252;//если он мужик то скин 252
		            else PlayerInfo[playerid][pModel] = 140;// иначе скин 140
		            SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
		            SendClientMessage(playerid, COLOR_GREY, "Вы сняли с себя одежду");
				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 2)
				  {
		            if(GetPlayerSkin(playerid) != PlayerInfo[playerid][skin2]) return SendClientMessage(playerid, COLOR_RED, "На вас не одета одежда по номером 2");//Если скин игрока не равняется переменной skin2, то оповещаем игрока
		            if(PlayerInfo[playerid][pSex] == 1) PlayerInfo[playerid][pModel] = 252;//если он мужик то скин 252
		            else PlayerInfo[playerid][pModel] = 140;// иначе скин 140
		            SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
		            SendClientMessage(playerid, COLOR_GREY, "Вы сняли с себя одежду");
				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 3)
				  {
		            if(GetPlayerSkin(playerid) != PlayerInfo[playerid][skin3]) return SendClientMessage(playerid, COLOR_RED, "На вас не одета одежда по номером 3");//Если скин игрока не равняется переменной skin3, то оповещаем игрока
		            if(PlayerInfo[playerid][pSex] == 1) PlayerInfo[playerid][pModel] = 252;//если он мужик то скин 252
		            else PlayerInfo[playerid][pModel] = 140;// иначе скин 140
		            SetPlayerSkin(playerid,PlayerInfo[playerid][pModel]);
		            SendClientMessage(playerid, COLOR_GREY, "Вы сняли с себя одежду");
				  }
				  SetPVarInt(playerid,"PlayerSkin",0);
  				}
  				case 2://если игрок выбирает пункт выкинуть
  				{
                  if(GetPVarInt(playerid,"PlayerSkin") == 1)
				  {
		            if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin1]) return SendClientMessage(playerid, COLOR_RED, "Сначала снемите эту одежду");
		            PlayerInfo[playerid][skin1] = 0;//обнуляем переменную
		            SendClientMessage(playerid, COLOR_GREY, "Вы выкинули одежду номер 1");
				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 2)
				  {
		            if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin2]) return SendClientMessage(playerid, COLOR_RED, "Сначала снемите эту одежду");
		            PlayerInfo[playerid][skin2] = 0;//обнуляем переменную
		            SendClientMessage(playerid, COLOR_GREY, "Вы выкинули одежду номер 2");
				  }
				  else if(GetPVarInt(playerid,"PlayerSkin") == 3)
				  {
		            if(GetPlayerSkin(playerid) == PlayerInfo[playerid][skin3]) return SendClientMessage(playerid, COLOR_RED, "Сначала снемите эту одежду");
		            PlayerInfo[playerid][skin3] = 0;//обнуляем переменную
		            SendClientMessage(playerid, COLOR_GREY, "Вы выкинули одежду номер 3");
				  }
				  SetPVarInt(playerid,"PlayerSkin",0);
  				}
			 }
		   }
		   else
		   {
		   }
}
Для мода на основе РЛС
Так и быть объясню как это делать для рлс.В начале делаем все как написано в первом посту.Потом начиная от:
PHP:
 if(PlayerInfo[playerid][skin1] == 0)//Если скин 1 равен 0 
                      { 
                    PlayerInfo[playerid][skin1] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас 
                    SendClientMessage(playerid, COLOR_RED , "Вы можете еще сделать две покупки"); 
                  } 
                  else if(PlayerInfo[playerid][skin2] == 0)//Если скин 2 равен 0 
                  { 
                    PlayerInfo[playerid][skin2] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас 
                    SendClientMessage(playerid, COLOR_RED , "Вы можете еще сделать одну покупку"); 
                  } 
                  else if(PlayerInfo[playerid][skin3] == 0)//Если скин 3 равен 0 
                  { 
                    PlayerInfo[playerid][skin3] = PlayerInfo[playerid][pModel];//То присваиваем ему значение иду скина, который сейчас одет на нас 
                      }
Ищим:
PHP:
else if(Current == skinshopmagaz[0])
Нашли?Хорошо, и там дальше ищим:
PHP:
	CharPrice[playerid] = 0;
					PlayerInfo[playerid][pCash]-=CharPrice[playerid];
					SetPlayerPos(playerid ,209.4333,-7.9053,1001.2109);
					TogglePlayerControllable(playerid,1);
					SetPlayerVirtualWorld(playerid,0);
					PlayerInfo[playerid][pChar] = ChosenSkin[playerid];
					SetCameraBehindPlayer(playerid);
					SelectCharPlace[playerid] = 0;
					SelectCharID[playerid] = 0;
					SelectChar[playerid] = 0;
					SetPlayerSkin(playerid, PlayerInfo[playerid][pChar]);
Вот как раз сюда это и нужно было вставить.Точно также вставите для женской раздевалки, она немного ниже.
Ах, да и для мода рлс везде в моем мануале
PHP:
PlayerInfo[playerid][pModel]
заменяете на
PHP:
 PlayerInfo[playerid][pChar]
Еще раз повторяю система не ориентирована конкретно под какой то мод.Если будут проблемы с переменными, или еще какие-нибудь пишите, помогу.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу