PDA

Просмотр полной версии : [Вопрос] sellcar



19GameR98
03.01.2017, 16:56
Добрый день. Нужна ваша помощь, с командной sellcar,
машину игроку продаю, деньги передаются, а авто нет, помогите пожалуйста

CMD:sellcar(playerid, params[])
{
if(GetPlayerHouse(playerid) == 0) return SendClientMessage(playerid, COLOR_GREY, "Вы не владеете домом!");
else if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны находится в транспорте");
else if(GetPlayerVehicleID(playerid) != PI[playerid][PlayerCarID]) return SendClientMessage(playerid, COLOR_GREY, "Вы должны находиться в вашем личном транспорте!");
else if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 462) return SendClientMessage(playerid, COLOR_GREY, "Вы не можете продать мопед!");
else if(sscanf(params, "ui", params[0], params[1])) return ShowPlayerDialog(playerid, D_JOB+22, 0, "Продать транспорт", "{ffffff}Вы хотите продать свой транспорт?\n\n{F04245}Внимание! Вам вернут только половину стоимости транспорта!\n\n!!! Для продажи авто игроку, введите /sellcar [id] [цена] !!!", "Да", "Нет");
else if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
else if(PlayerLogged[params[0]] == false) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotAuthorized);
else if(params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, "Вы не можете продать транспорт себе!");
else if(GetPlayerHouse(params[0]) == 0) return SendClientMessage(playerid, COLOR_GREY, "У игрока нет дома");
else if(!IsPlayerInVehicle(params[0], GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_GREY, "Игрок должен находиться с вами в транспорте!");
else if(params[1] < 1 || params[1] > 5000000) return SendClientMessage(playerid, COLOR_GREY, "Стоимость от 1 до 5000000$!");
SetPVarInt(params[0], "CarPlayer", playerid);
SetPVarInt(params[0], "CarPrice", params[1]);
SetPVarInt(params[0], "KeyCar", 1);
new string[135];
format(string, sizeof(string), "{FFFF00}%s [ID: %i] предложил вам продать свой транспорт\n\n\t\t{ffffff}[Модель: %s, Стоимость: %i]\n\n{FFFF00}Вы согласны?",GetName(playerid),playerid,VehicleNames[GetVehicleModel(PI[playerid][PlayerCarID])-400], params[1]);
ShowPlayerDialog(params[0], D_JOB+25, 0, "Купить транспорт", string, "Да", "Нет");
SendMes(playerid,-1,"Вы предложили продать свой транспорт %s, ожидайте подтверждения игрока!", GetName(params[0]) );
return 1;
}

case D_JOB+25:
{
new targetid = GetPVarInt(playerid, "CarPlayer"), price = GetPVarInt(playerid, "CarPrice");
if(response)
{
if(GetMoney(playerid) < price)
{
SendClientMessage(playerid, COLOR_LGREY, "У вас не хватает денег");
SendMes(targetid, COLOR_LIGHTBLUE, "У %s недостаточно средств для покупки вашего транспорта", GetName(playerid));
DeletePVar(playerid, "CarPrice");
DeletePVar(playerid, "CarPlayer");
DeletePVar(playerid, "KeyCar");
return 1;
}
PI[playerid][cModel] = PI[targetid][cModel];
PI[playerid][cClass] = PI[targetid][cClass];
PI[playerid][cFuel] = PI[targetid][cFuel];
PI[playerid][cColor][0] = PI[targetid][cColor][0];
PI[playerid][cColor][1] = PI[targetid][cColor][1];
PI[playerid][cCost] = PI[targetid][cCost];
PI[playerid][cVehcom] = PI[targetid][cVehcom];
sscanf(PI[targetid][cVehcom], "p<,>a<i>[14]",PI[targetid][cVehcoms]);
PI[playerid][cPaintjob] = PI[targetid][cPaintjob];
PI[playerid][cModel] = 0;
PI[playerid][cClass] = 0;
PI[playerid][cFuel] = 150;
PI[playerid][cColor][0] = 0;
PI[playerid][cColor][1] = 0;
PI[playerid][cCost] = 0;
format(PI[playerid][cVehcom],64,"0,0,0,0,0,0,0,0,0,0,0,0,0,0");
sscanf(PI[playerid][cVehcom], "p<,>a<i>[14]",PI[playerid][cVehcoms]);
PI[playerid][cPaintjob] = 3;
DestroyVehicle(GetPVarInt(playerid, "PlayerCar"));
LoadMyCar(playerid);
DestroyVehicle(GetPVarInt(targetid, "PlayerCar"));
LoadMyCar(targetid);
SendClientMessage(targetid, -1, "Поздравляем с продажей транспортного средства");
SendClientMessage(playerid, -1, "Поздравляем с приобретением транспортного средства");
PI[playerid][pRegVehicle] = PI[targetid][pRegVehicle] = 0;
MysqlUpdatePlayerInt(playerid, "veh_reg", PI[playerid][pRegVehicle]);
strmid(PI[playerid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(playerid, "veh_number", PI[playerid][pNumberVehicle]);
MysqlUpdatePlayerInt(targetid, "veh_reg", PI[targetid][pRegVehicle]);
strmid(PI[targetid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(targetid, "veh_number", PI[targetid][pNumberVehicle]);
SaveAccount(playerid);
SaveAccount(targetid);
TransferMoney(playerid, -1, price);
TransferMoney(1, targetid, price);
new string[128];
format(string, sizeof(string), "Игрок %s купил транспорт %s[%i] за %d$ у игрока %s", GetName(playerid), VehicleNames[GetVehicleModel(PI[targetid][PlayerCarID])-400], GetPlayerVehicleID(targetid), price, GetName(targetid));
SendLog("BuyCar", string);
format(string, sizeof(string), "Игрок %s продал транспорт %s[%i] за %d$ игроку %s", GetName(targetid), VehicleNames[GetVehicleModel(PI[targetid][PlayerCarID])-400], GetPlayerVehicleID(targetid), price, GetName(playerid));
SendLog("SellCar", string);
}
else SendMes(targetid, COLOR_LIGHTBLUE, "%s отклонил предложение о продаже транспорта", GetName(playerid));
DeletePVar(playerid, "CarPrice");
DeletePVar(playerid, "CarPlayer");
DeletePVar(playerid, "KeyCar");
}

case D_JOB+22:
{
if(!response) return 1;
if(GetPlayerHouse(playerid))
{
PI[playerid][cModel] = 0;
PI[playerid][cLock] = 1;
PI[playerid][cColor][0] = 0;
PI[playerid][cColor][1] = 0;
PI[playerid][cClass] = 0;
PI[playerid][cFuel] = 150;
PI[playerid][cPaintjob] = 3;
PI[playerid][cVehcoms][0] = 0;
PI[playerid][cVehcoms][1] = 0;
PI[playerid][cVehcoms][2] = 0;
PI[playerid][cVehcoms][3] = 0;
PI[playerid][cVehcoms][4] = 0;
PI[playerid][cVehcoms][5] = 0;
PI[playerid][cVehcoms][6] = 0;
PI[playerid][cVehcoms][7] = 0;
PI[playerid][cVehcoms][8] = 0;
PI[playerid][cVehcoms][9] = 0;
PI[playerid][cVehcoms][10] = 0;
PI[playerid][cVehcoms][11] = 0;
PI[playerid][cVehcoms][12] = 0;
PI[playerid][cVehcoms][13] = 0;
format(PI[playerid][cVehcom], 64, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
PI[playerid][cVehcoms][0],PI[playerid][cVehcoms][1],PI[playerid][cVehcoms][2],
PI[playerid][cVehcoms][3],PI[playerid][cVehcoms][4],PI[playerid][cVehcoms][5],
PI[playerid][cVehcoms][6],PI[playerid][cVehcoms][7],PI[playerid][cVehcoms][8],
PI[playerid][cVehcoms][9],PI[playerid][cVehcoms][10],PI[playerid][cVehcoms][11],
PI[playerid][cVehcoms][12],PI[playerid][cVehcoms][13]);
new string[128];
format(string, sizeof(string), "Вы продали ваше транспортное средство за %d$", PI[playerid][cCost] / 2);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
TransferMoney(-1,playerid,PI[playerid][cCost] / 2);
PI[playerid][pRegVehicle] = 0;
MysqlUpdatePlayerInt(playerid, "veh_reg", PI[playerid][pRegVehicle]);
strmid(PI[playerid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(playerid, "veh_number", PI[playerid][pNumberVehicle]);
format(string, sizeof(string), "Игрок %s продал транспорт %s[%i] за %d$", GetName(playerid), VehicleNames[GetVehicleModel(PI[playerid][PlayerCarID])-400], GetPlayerVehicleID(playerid), PI[playerid][cCost] / 2);
SendLog("SellCar", string);
if(GetPVarInt(playerid,"PlayerCar") > 0)
{
DestroyVehicle(GetPVarInt(playerid,"PlayerCar"));
DeletePVar(playerid,"PlayerCar");
}
PI[playerid][cCost] = 0;
LoadMyCar(playerid);
}
}

qwezert
03.01.2017, 17:59
Везде этот SendMes и одинаково ужасный код... Это что новый тренд на моды как в свое время РЛС все ставили?
По проблеме - я конечно не понимаю как у тебя устроенно сохранение автомобилей и как оно происходит, но судя по коду - машина не передается вообще или после перезахода все нормально?

PI[playerid][pRegVehicle] = PI[targetid][pRegVehicle] = 0;
MysqlUpdatePlayerInt(playerid, "veh_reg", PI[playerid][pRegVehicle]);
strmid(PI[playerid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(playerid, "veh_number", PI[playerid][pNumberVehicle]);
MysqlUpdatePlayerInt(targetid, "veh_reg", PI[targetid][pRegVehicle]);
strmid(PI[targetid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(targetid, "veh_number", PI[targetid][pNumberVehicle]);
Подозреваю что проблема где то в этом участке кода, но пока понять я его не могу....

19GameR98
03.01.2017, 18:36
Везде этот SendMes и одинаково ужасный код... Это что новый тренд на моды как в свое время РЛС все ставили?
По проблеме - я конечно не понимаю как у тебя устроенно сохранение автомобилей и как оно происходит, но судя по коду - машина не передается вообще или после перезахода все нормально?

PI[playerid][pRegVehicle] = PI[targetid][pRegVehicle] = 0;
MysqlUpdatePlayerInt(playerid, "veh_reg", PI[playerid][pRegVehicle]);
strmid(PI[playerid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(playerid, "veh_number", PI[playerid][pNumberVehicle]);
MysqlUpdatePlayerInt(targetid, "veh_reg", PI[targetid][pRegVehicle]);
strmid(PI[targetid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(targetid, "veh_number", PI[targetid][pNumberVehicle]);
Подозреваю что проблема где то в этом участке кода, но пока понять я его не могу....


MysqlUpdatePlayerInt(targetid, "veh_reg", PI[targetid][pRegVehicle]);
strmid(PI[targetid][pNumberVehicle], "None", 0, strlen("None"), 20);
MysqlUpdatePlayerStr(targetid, "veh_number", PI[targetid][pNumberVehicle]);
тут два раза, это случайно поставил,

машина вообще не передается(

получается, я произвожу продажу между собой и игроком, деньги у него забирают, а машина просто респавниться в гараже у продавца,

- - - Добавлено - - -

есть команда обмен автомобилем, она работает исправно, могу скинуть код, чтобы посмотрели

qwezert
03.01.2017, 19:46
Скинь пожалуйста, будет понятнее что и куда

19GameR98
03.01.2017, 20:00
Скинь пожалуйста, будет понятнее что и куда
я разобрался, тут нужно было везде заменить playerid на targetid

PI[playerid][cModel] = 0;
PI[playerid][cClass] = 0;
PI[playerid][cFuel] = 150;
PI[playerid][cColor][0] = 0;
PI[playerid][cColor][1] = 0;
PI[playerid][cCost] = 0;
format(PI[playerid][cVehcom],64,"0,0,0,0,0,0,0,0,0,0,0,0,0,0");
sscanf(PI[playerid][cVehcom], "p<,>a<i>[14]",PI[playerid][cVehcoms]);
PI[playerid][cPaintjob] = 3;

но появился маленький баг, машина передается, но у продавца, чтобы она пропала, нужно перезайти в игру как исправить ?)) буду очень благодарен

qwezert
04.01.2017, 00:23
Функцией DestroyVehicle удаляй машину продавца и будет тебе счастье)

19GameR98
04.01.2017, 01:17
всё спасибо) с меня +, дал)