PDA

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



Unknown
12.09.2014, 20:50
возможно ли реализовать такс.
вот команда

if(strcmp(cmd, "/asellhouse", true) == 0)
{
GetPlayerName(playerid, playername, sizeof(playername));
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return error(playerid, "/asellhouse [id дома]");
new house = strval(tmp);
if (PlayerInfo[playerid][pAdmin] <= 5) return error(playerid, "Недостаточно прав для использования команды.");
DestroyVehicle(HouseVehicle[house]);
HouseInfo[house][hHel] = 0;
HouseInfo[house][hArm] = 0;
HouseInfo[house][hHealthx] = 0;
HouseInfo[house][hHealthy] = 0;
HouseInfo[house][hHealthz] = 0;
HouseInfo[house][hArmourx] = 0;
HouseInfo[house][hArmoury] = 0;
HouseInfo[house][hArmourz] = 0;
HouseInfo[house][hLock] = 0;
HouseInfo[house][hOwned] = 0;
strmid(HouseInfo[house][hOwner], "-", 0, strlen("-"), 255);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
UpdateHouse(house);
format(string, sizeof(string), "~w~COЂCЏ‹EммOCЏ’ ЊPOѓAмA", HouseInfo[house][hValue]);
GameTextForPlayer(playerid, string, 10000, 3);
return true;
}
Что если админ продаёт определённый дом через эту команду, то у игрока в файле он менялся на house=1000 т.е нету дома.

Это надо делать открытия файла и перезаписывать house= ... ??

Skyline
12.09.2014, 21:55
Нет, не обязательно.
Ты задал значение дому, а у игрока все само сделается.

Unknown
12.09.2014, 21:56
если бы все само сделалось, я бы не писал. Дом та продан, но в аккаунте он у него куплен и только если он пропишет /sellhouse тогда только продаст

underwoker
12.09.2014, 23:16
если бы все само сделалось, я бы не писал. Дом та продан, но в аккаунте он у него куплен и только если он пропишет /sellhouse тогда только продаст
Да, берешь имя владельца дома из переменной hOwner
Делаешь открытие файла, с ником взятым из переменной.
Устанавливаешь значение в 1000, закрываешь файл.

DeimoS
13.09.2014, 01:16
Гораздо проще при входе на сервер проверять наличие дома у игрока и далее проверять, продан ли этот дом или нет. Если продан - правим ещё не закрытый файл игрока.

underwoker
13.09.2014, 18:45
Гораздо проще при входе на сервер проверять наличие дома у игрока и далее проверять, продан ли этот дом или нет. Если продан - правим ещё не закрытый файл игрока.
Эм, а если домов будет продано более 1? Не будет ли кашки?

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

Нельзя редактировать сообщение, админы это исправят когда-нибудь?
Имею ввиду продумайте, какие баги могут быть, учитывая мою идею и вашу.

DeimoS
13.09.2014, 20:07
Эм, а если домов будет продано более 1? Не будет ли кашки?

Эмм, что? Мы продаём дом командой. Команда обнуляет все данные о доме, в том числе и хозяина. Зачем нам ещё и открывать аккаунт хозяина, если можно при входе сверить данные, записанные в массиве HouseInfo, с текущими данными и если дом был продан (в массиве, хранящем ник хозяина, записан какой-то другой ник/прочерк) - обнуляем переменную ключа у игрока и сообщаем о продаже. И уже в аккаунт всё сохранится при выходе. Какие баги могут быть?

underwoker
13.09.2014, 21:36
Эмм, что? Мы продаём дом командой. Команда обнуляет все данные о доме, в том числе и хозяина. Зачем нам ещё и открывать аккаунт хозяина, если можно при входе сверить данные, записанные в массиве HouseInfo, с текущими данными и если дом был продан (в массиве, хранящем ник хозяина, записан какой-то другой ник/прочерк) - обнуляем переменную ключа у игрока и сообщаем о продаже. И уже в аккаунт всё сохранится при выходе. Какие баги могут быть?
Не правильно понял просто. Да, так будет лучше.

Unknown
14.09.2014, 02:10
а примерный код можно увидеть ?)

DeimoS
14.09.2014, 09:27
Эм...

if(переменная с ID ключа != то число, которое указывает на отсутствие дома)
{
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name, MAX_PLAYER_NAME);
if(strcmp(HouseInfo[переменная с ID ключа][hOwner], player_name))
{
переменная с ID ключа = то число, которое указывает на отсутствие дома;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
}

wAx
14.09.2014, 10:06
Эм...

if(переменная с ID ключа != то число, которое указывает на отсутствие дома)
{
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name, MAX_PLAYER_NAME);
if(strcmp(HouseInfo[переменная с ID ключа][hOwner], player_name))
{
переменная с ID ключа = то число, которое указывает на отсутствие дома;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
}

Да даже не обязательно проверять через переменную владельца дома, достаточно проверить параметр hOwned, почти во всех системах есть этот параметр.


if(HouseInfo[переменная с ID ключ][hOwned] != 1)
{
переменная с ID ключа = то число, которое указывает на отсутствие дома;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}

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

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

Unknown
14.09.2014, 10:48
Да даже не обязательно проверять через переменную владельца дома, достаточно проверить параметр hOwned, почти во всех системах есть этот параметр.


if(HouseInfo[переменная с ID ключ][hOwned] != 1)
{
переменная с ID ключа = то число, которое указывает на отсутствие дома;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}

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

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

вот об этом я вчера и задумался) вот и думаю все таки наверное лучше сделать открытия файла и изменить phousekey

DeimoS
14.09.2014, 12:45
Но в твоем варианте, блин, тоже есть погрешности) Что будем делать, если проданный админом дом, вдруг сразу купит другой игрок?

В твоём варианте - да. В моём варианте проверяется ник владельца с ником игрока. Я дал рабочий вариант, который не требует доработки условий.


вот об этом я вчера и задумался) вот и думаю все таки наверное лучше сделать открытия файла и изменить phousekey

Мыслите проще. Зачем делать лишние действия? Достаточно обнулить данные в массиве и добавить мою проверку. Всё. Далее мод всё сделает сам, основываясь на уже загруженных из файлов данных.

Unknown
14.09.2014, 13:32
public OnPlayerConnect(playerid)
{

if(PlayerInfo[playerid][pPhousekey] != 1000)
{
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name, sizeof(player_name));
if(strcmp(HouseInfo[PlayerInfo[playerid][pPhousekey] != 1000][hOwner], player_name))
{
PlayerInfo[playerid][pPhousekey] = 1000;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
}

просто зажоишь на серв, выдаёт это сообщение и все)

DeimoS
14.09.2014, 13:41
if(strcmp(HouseInfo[PlayerInfo[playerid][pPhousekey] != 1000][hOwner], player_name))
Эмм, что?

Unknown
14.09.2014, 14:41
тьфу ты.. вот

if(PlayerInfo[playerid][pPhousekey] != 1000)
{
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name, sizeof(player_name));
if(strcmp(HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], player_name))
{
PlayerInfo[playerid][pPhousekey] = 1000;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
}

DeimoS
14.09.2014, 14:45
if(PlayerInfo[playerid][pPhousekey] != 1000)
{
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name, sizeof(player_name));
printf("\npPhousekey - %d", PlayerInfo[playerid][pPhousekey]);
printf("player_name - %s", player_name);
printf("hOwner - %s", HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner]);
if(strcmp(HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], player_name))
{
PlayerInfo[playerid][pPhousekey] = 1000;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
}
И после логи сюда

Unknown
14.09.2014, 15:04
разобрался) p/s на примере с прдажей бизнесов/сбизнесов так же ?)

DeimoS
14.09.2014, 15:08
разобрался) p/s на примере с прдажей бизнесов/сбизнесов так же ?)

Именно. Точно так же и обнуление аккаунтов можно сделать. Нужно будет лишь новую строку в аккаунт добавить и потом проверять её значение