Question

Баг с командой /changeskin. Можно сменить только на 1 скин и больше не как.

Сама команда:

 

Спойлер

CMD:changeskin(playerid, params[])
{
    if(StartRabWork(playerid) && !GetPVarInt(playerid,"StartRabWork")) return SendClientMessage(playerid,COLOR_WHITE,""cError"Вы не начали рабочий день!");
    switch(PlayerInfo[playerid][pMember])
    {
    case 1,15,16,17: if(PlayerInfo[playerid][pRank] < 14) return SendClientMessage(playerid,COLOR_WHITE,""cError"Вам не доступна данная команда");
    case 2,4,5,10,7: if(PlayerInfo[playerid][pRank] < 9) return SendClientMessage(playerid,COLOR_WHITE, ""cError"Вам недоступна данная команда");
    case 3,11,13,14,9,8: if(PlayerInfo[playerid][pRank] < 9) return SendClientMessage(playerid,COLOR_WHITE,""cError"Вам не доступна данная команда");
    case 6: if(PlayerInfo[playerid][pRank] < 5) return SendClientMessage(playerid,COLOR_WHITE,""cError"Вам не доступна данная команда");
    case 12: if(PlayerInfo[playerid][pRank] < 12) return SendClientMessage(playerid,COLOR_WHITE,""cError"Вам не доступна данная команда");
    default: return SendClientMessage(playerid,COLOR_WHITE,""cError"Вам не доступна данная команда");
    }
    if(sscanf(params,"d",params[0])) return SendClientMessage(playerid, COLOR_WHITE, ""good"Используйте /changeskin [id]");
    if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_WHITE, ""cError"Игрок оффлайн!");
    if(PlayerInfo[playerid][pMember] != PlayerInfo[params[0]][pMember]) return SendClientMessage(playerid, COLOR_WHITE, ""cError"Данный игрок не в вашей фракции!");
    new fractionid = PlayerInfo[playerid][pMember]-1;
    new mes[256];
    for(new i;i<20;i++)
    {
        new skinid = ChangeSkin[fractionid];
        if(!skinid) break;
        if(!i) format(mes,sizeof(mes),"Скин %d [%d]",i+1,skinid);
        else format(mes,sizeof(mes),"%s\nСкин %d [%d]",mes,i+1,skinid);
    }
    SetPVarInt(playerid,"actinplayerid",params[0]);
    SetPVarInt(params[0], "pOfferFractionid", PlayerInfo[params[0]][pMember]);
    ShowPlayerDialog(playerid,1145,2,PlayerInfo[params[0]][pNames],mes,"Принять","");
    return 1;
}

 

 

Edited by odosenok

Заметка от Cawfee , создано

3.2. Код больше 10 строк брать еще и под спойлер. Как это сделать рассказано в разделе "FAQ"

Устное предупреждение.

Share this post


Link to post

10 answers to this question

  • 0

@Banana Могли-бы вы лучше сформулировать вашу проблему. И возьмите код под цитату.!

Share this post


Link to post
  • 0
1 минуту назад, Nekit_Krut18 сказал:

@Banana Могли-бы вы лучше сформулировать вашу проблему. И возьмите код под цитату.!

Лидер/Зам - могут сменить скин только на 1 а в меню смены их много.

Лидер допустим хочет сменить скин игроку на 102 и там есть 101,102 и тот что выше в меню на нёго меняет а вот на 102 уже не сменит.

Share this post


Link to post
  • 0
46 минут назад, Nekit_Krut18 сказал:

@Banana Могли-бы вы лучше сформулировать вашу проблему. И возьмите код под цитату.!

Всё окей? Если надо ещё скинуть что то скину.

Заметка от Cawfee , создано

3.6. Запрещено поднимать (апать) свою тему чаще, чем 1 раз в 24 часа. 

Устное предупреждение.

Share this post


Link to post
  • 0

Покажите case 1145 (воспользуйтесь поиском по коду (CTRL + F), либо найдите вручную в функции OnDialogResponse).

Код под спойлер и в тему.

Share this post


Link to post
  • 0

@20th century  Тут вроде норм, тк скин выдается для гос орг, а для к примеру балласам, неа. Ну скин меняется (видно по поведению персонажа), но остаётся стандартный все время. Хотя в массиве их 4, и в диалог выводятся тоже 4.

 

Спойлер

case 1145:
		{
			if(!response) return DeletePVar(playerid, "actinplayerid");
			new actplayerid = GetPVarInt(playerid,"actinplayerid");
			new fractionid = GetPVarInt(actplayerid, "pOfferFractionid");
			if(PlayerInfo[playerid][pMember] != fractionid) return SendClientMessage(playerid,CGRAY,""cError"#002");
			new skinid = ChangeSkin[fractionid-1][listitem];
			PlayerInfo[actplayerid][pModel] = skinid;
			SetPlayerSkin(actplayerid,PlayerInfo[actplayerid][pModel]);
			UpdatePlayerData(actplayerid,"pModel",PlayerInfo[actplayerid][pModel]);
			SendClientMessagef(actplayerid, CINFO, "Лидер/Заместитель %s сменил вам фракционный скин!",PlayerInfo[playerid][pNames]);
			DeletePVar(actplayerid, "pOfferFractionid");
			DeletePVar(playerid, "actinplayerid");
			return 1;
		}

 

 

Share this post


Link to post
  • 0

В чем проблема? Код вроде не че?

Share this post


Link to post
  • 0

"..скин меняется, видно по поведению персонажа.."
По какому поведению?
В итоге проблема в чем: работает только первая строка в диалоге, или смена не работает еще и для банд?

Share this post


Link to post
  • 0
7 часов назад, 20th century сказал:

"..скин меняется, видно по поведению персонажа.."
По какому поведению?
В итоге проблема в чем: работает только первая строка в диалоге, или смена не работает еще и для банд?

Смотри у госс-ников скин меняется а у банд нет. Тип пишет лидер сменил вам скин и не фига

Share this post


Link to post
  • 0

@Banana , возможно ИД скинов для банд не прописаны, проверь.

 

Share this post


Link to post
  • 0
20 часов назад, Rich_Hen сказал:

@Banana , возможно ИД скинов для банд не прописаны, проверь.

 

Я же сказал выше, что есть массив из 4 скинов, и в диалоге они отображаются.

Edited by Nekit_Krut18
Причина: Подправил.

Share this post


Link to post
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Antoxa39
      By Antoxa39
      Дратути) Я хочу поделится с новичками одной штучкой,с помощью которой можно сделать спидометр.
       
      Объявляем глобальные переменные.
      new Text:speedtest; В public OnPlayerConnect добавляем следующее.
      speedtest = TextDrawCreate(506.599884, 394.742156, "500 KM/H");// создаем текстдрав при подключении игрока (он не будет отображатся) В конце мода создаем новую функцию.
      forward getsp(playerid); public getsp(playerid) {     new Float:cord[3];     GetVehicleVelocity(GetPlayerVehicleID(playerid),cord[0], cord[1], cord[2]);     new Float:veloc = floatsqroot(floatpower(floatabs(cord[0]), 2.0) + floatpower(floatabs(cord[1]), 2.0) + floatpower(floatabs(cord[2]), 2.0)) * 181.3;     new str[25];     format(str,sizeof(str),"KM/H %d",floatround(veloc));     TextDrawSetString(speedtest,str);     return 1; } Переходим в OnPlayerStateChange и добавляем следующее.
      if(newstate == PLAYER_STATE_DRIVER) {     TextDrawShowForPlayer(playerid,speedtest);     SetTimerEx("getsp", 1, true, "%f", playerid); } if(newstate == PLAYER_STATE_ONFOOT) {     TextDrawHideForPlayer(playerid,speedtest); } ВСЁ!) Мы создали спидометр. Удачи вам в скриптинге!)
    • R0m4ik
      By R0m4ik
      Всем привет, возникла маленькая проблема я хочу сделать команду /fakecmd(написать команду от другого игрока)
      У меня уже есть исходник данный команды осталось знать.
      На что надо заменить это?
      zcmd_OnPlayerCommandText(targetid, params);