Перейти к содержанию
Авторизация  
Vadlmok

Продажа чего либо другому игроку

Рекомендуемые сообщения

Vadlmok

Здравствуйте пользователи форума CR-MP
У меня возник вопрос, как указать id другого игрока при продаже дома, биза.
Пример:
PlayerInfo[Вот тут что писать?][pBizzKey] = PlayerInfo[playerid][pBizzKey]
Это всё стоит в case 0:
Спасибо за ответы и варианты!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Это зависит от того, на чем планируете строить инициализацию процесса продажи - командой ли, диалогом ли, по клику в плеерлисте ли или еще каким-либо способом. На текущий момент - недостаточно данных.

Тем не менее, общий концепт какой может быть: игрок 1 (playerid) инициирует процесс продажи, указывая тем или иным образом ID второго игрока. Полученный таким образом ID второго игрока пишем в память, при этом важно, чтобы данные "кто кому продает" соотносились между собой. Можно для playerid создать ПВар с ID второго в качестве значения, можно объявить глобальный массив соответствия размерностью MAX_PLAYERS. Вариантов - масса.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Max_Eitzen

В команде продаже или же диалоге(где у Вас это все происходит) сохраняйте ид второго игрока.

SetPVarInt(playerid, "OTHERID", переменная id второго игрока);

А в начале диалога уже

new pl = GetPVarInt(playerid, "OTHERID");

И используйте PlayerInfo[pl][pBizzKey] =

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

Всё идет через диалоги

case 21:
        {
            new bid = PlayerInfo[playerid][pBizzKey];
            if(!response) return false;
            switch(listitem)
            {
                case 0:
                {
                    if(BussinesInfo[bid][bLock] == 0)
                    {
                        SCM(playerid, COLOR_GREY, "?? ??????? ??????? ????? ???????!");
                        BussinesInfo[bid][bLock] = 1;
                        return true;
                    }
                    if(BussinesInfo[bid][bLock] == 1)
                    {
                        SCM(playerid, COLOR_GREY, "?? ??????? ??????? ????? ???????!");
                        BussinesInfo[bid][bLock] = 0;
                        return true;
                    }
                }
                case 5:
                {
                    SPD(playerid, 24,DSI, "??????? ???????","??????? ?????:","?????","??????");
                }
            }
        }
        case 24:
        {
            if(response)
            {
                sellmoneybiz = strval(inputtext);
                SPD(playerid, 25, DSI,"??????? ???????","??????? ID ??????","?????","??????");
                SetPVarInt(playerid, "OTHERID", strval(inputtext));
            }
        }
        case 25:
        {
            if(strval(inputtext) > 0)
            {
                SCM(playerid, COLOR_GREY,"???????? ??????");
            }
            SPD(strval(inputtext), 26, DSM, "??????? ???????","?????? ?? ?? ?????? ???????","??","???");
        }
        case 26:
        {
            if(response)
            {
                new pl = GetPVarInt(playerid, "OTHERID");
                SCM(playerid, COLOR_GREY,"???????????! ?? ????????? ??????!");
                PlayerInfo[playerid][pBizzKey] = PlayerInfo[pl][pBizzKey];
                PlayerInfo[pl][pMoney] += sellmoneybiz;
                PlayerInfo[playerid][pMoney] -= sellmoneybiz;
                SavePlayer(playerid);
                SavePlayer(pl);
            }
            else
            {
                PlayerInfo[strval(inputtext)][pBizzKey] = PlayerInfo[strval(inputtext)][pBizzKey];
                PlayerInfo[playerid][pBizzKey] = 0;
                SavePlayer(playerid);
                SavePlayer(strval(inputtext));
                SCM(playerid, COLOR_RED, "?? ?????????? ?? ??????? ???????");
            }
        }

Не отнимаются деньги. По скрину видно код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Объясняю как можно проще.

Диалог 24 Вы показываете продавцу. Продавец вводит ID покупателя, и ID покупателя вносится в ПВар продавца.

Диалог 25 Вы показываете покупателю. Покупатель подтверждает покупку.

Диалог 26 Вы показываете покупателю и пытаетесь получить значение из ПВара покупателя (playerid в данном случае будет не продавец!), а следовало бы наоборот.

 

Менять в 24 кейсе порядок записи надо:

 

SetPVarInt(strval(inputtext), "OTHERID", playerid);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok
case 5:
				{
					SPD(playerid, 24,DSI, "Продажа бизнеса","Введите сумму:","Далее","Отмена");
					SetPVarInt(strval(inputtext), "MONEY", playerid);
				}


new pl = GetPVarInt(playerid, "OTHERID");
			    //new id = GetPVarInt(playerid, "ID");
			    new money = GetPVarInt(playerid, "MONEY");
				SCM(playerid, COLOR_GREY,"???????????! ?? ????????? ??????!");
				PlayerInfo[playerid][pBizzKey] = PlayerInfo[pl][pBizzKey];
				PlayerInfo[pl][pMoney] += GetPVarInt(playerid, "MONEY");
				PlayerInfo[playerid][pMoney] -= money;
				PlayerInfo[pl][pBizzKey] = 0;
				printf("?????? - + %d", GetPVarInt(playerid, "MONEY"));
				SavePlayer(playerid);
				SavePlayer(pl);

Теперь не отнимаются и не даются деньги. Вывел в консоль через printf показывает 0. Не так прировнял сумму?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

А MONEY-то зачем было трогать? Теперь у Вас значение playerid пишется в ПВар игрока, чей ID равен значению суммы.

И по сто раз GetPVarInt дергать тоже не обязательно, Вы же переменную money объявили в кейсе.

 

Достаточно было:

new money = GetPVarInt(pl, "MONEY");
SCM(playerid, COLOR_GREY,"???????????! ?? ????????? ??????!");
PlayerInfo[playerid][pBizzKey] = PlayerInfo[pl][pBizzKey];
PlayerInfo[pl][pMoney] += money;
PlayerInfo[playerid][pMoney] -= money;
PlayerInfo[pl][pBizzKey] = 0;
printf("?????? - + %d", money);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

А то что кейсы разные, не имеет значение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

и нужно ли добавлять, что либо в кейсы с диалогов ввода денег

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Сядьте да распишите на листочке подробно, что должно происходить в каждом кейсе. Сами все поймете.

Естественно, 100%-работоспособное решение на основе огрызков Вашего кода я не предложу, но все нужные намеки уже дал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

Подскажите ещё немого, пожалуйста.
Что мне нужно вписать тут, чтобы получить деньги тут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

В пятый кейс - ничего. В двадцать шестом - я уже расписал верный вариант, но Вы зачем-то опять вместо pl в получении значения ПВара MONEY пихнули playerid. И незачем подчеркивать переменную money - в нее выше пишется значение ПВара.

 

А вообще, скриншоты вместо живого кода кидать - неуважение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

Извините, я не хоте проявлять не уважение к Вам, наоборот я подумал, что скрином будет лучше видно и понятно.
Я до сих пор не могу понять откуда будет браться значение MONEY в GetPVarInt(pl, "MONEY"); 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

Я ввожу в диалог где вводятся деньги например 1000, другой игрок соглашается и у него отнимается почему то только 6 единиц и мне приходит только 6, а должно было 1000. Что уже не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Vadlmok

case 21:
{
new bid = PlayerInfo[playerid][pBizzKey];
if(!response) return false;
switch(listitem)
{
case 0:
{
if(BussinesInfo[bid][bLock] == 0)
{
SCM(playerid, COLOR_GREY, "?? ??????? ??????? ????? ???????!");
BussinesInfo[bid][bLock] = 1;
return true;
}
if(BussinesInfo[bid][bLock] == 1)
{
SCM(playerid, COLOR_GREY, "?? ??????? ??????? ????? ???????!");
BussinesInfo[bid][bLock] = 0;
return true;
}
}
case 5:
{
SPD(playerid, 24,DSI, "??????? ???????","??????? ?????:","?????","??????");
SetPVarInt(playerid, "MONEYS", strval(inputtext));
}
}
}
case 24:
{
if(response)
{
SPD(playerid, 25, DSI,"??????? ???????","??????? ID ??????","?????","??????");
SetPVarInt(strval(inputtext), "OTHERID", playerid);
}
}
case 25:
{
if(strval(inputtext) > 0)
{
SCM(playerid, COLOR_GREY,"???????? ??????");
}
SPD(strval(inputtext), 26, DSM, "??????? ???????","?????? ?? ?? ?????? ???????","??","???");
}
case 26:
{
if(response)
{
new pl = GetPVarInt(playerid, "OTHERID");
new moneys = GetPVarInt(pl, "MONEYS");
SCM(playerid, COLOR_GREY,"???????????! ?? ????????? ??????!");
PlayerInfo[playerid][pBizzKey] = PlayerInfo[pl][pBizzKey];
PlayerInfo[pl][pMoney] += moneys;
PlayerInfo[playerid][pMoney] -= moneys;
PlayerInfo[pl][pBizzKey] = 0;
printf("?????? %d", moneys);
SavePlayer(playerid);
SavePlayer(pl);
}
else
{
PlayerInfo[playerid][pBizzKey] = 0;
SavePlayer(playerid);
SCM(playerid, COLOR_RED, "?? ?????????? ?? ??????? ???????");
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.