Просмотр полной версии : [Вопрос] /asellhouse
возможно ли реализовать такс.
вот команда
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= ... ??
Нет, не обязательно.
Ты задал значение дому, а у игрока все само сделается.
если бы все само сделалось, я бы не писал. Дом та продан, но в аккаунте он у него куплен и только если он пропишет /sellhouse тогда только продаст
underwoker
12.09.2014, 23:16
если бы все само сделалось, я бы не писал. Дом та продан, но в аккаунте он у него куплен и только если он пропишет /sellhouse тогда только продаст
Да, берешь имя владельца дома из переменной hOwner
Делаешь открытие файла, с ником взятым из переменной.
Устанавливаешь значение в 1000, закрываешь файл.
Гораздо проще при входе на сервер проверять наличие дома у игрока и далее проверять, продан ли этот дом или нет. Если продан - правим ещё не закрытый файл игрока.
underwoker
13.09.2014, 18:45
Гораздо проще при входе на сервер проверять наличие дома у игрока и далее проверять, продан ли этот дом или нет. Если продан - правим ещё не закрытый файл игрока.
Эм, а если домов будет продано более 1? Не будет ли кашки?
- - - Добавлено - - -
Нельзя редактировать сообщение, админы это исправят когда-нибудь?
Имею ввиду продумайте, какие баги могут быть, учитывая мою идею и вашу.
Эм, а если домов будет продано более 1? Не будет ли кашки?
Эмм, что? Мы продаём дом командой. Команда обнуляет все данные о доме, в том числе и хозяина. Зачем нам ещё и открывать аккаунт хозяина, если можно при входе сверить данные, записанные в массиве HouseInfo, с текущими данными и если дом был продан (в массиве, хранящем ник хозяина, записан какой-то другой ник/прочерк) - обнуляем переменную ключа у игрока и сообщаем о продаже. И уже в аккаунт всё сохранится при выходе. Какие баги могут быть?
underwoker
13.09.2014, 21:36
Эмм, что? Мы продаём дом командой. Команда обнуляет все данные о доме, в том числе и хозяина. Зачем нам ещё и открывать аккаунт хозяина, если можно при входе сверить данные, записанные в массиве HouseInfo, с текущими данными и если дом был продан (в массиве, хранящем ник хозяина, записан какой-то другой ник/прочерк) - обнуляем переменную ключа у игрока и сообщаем о продаже. И уже в аккаунт всё сохранится при выходе. Какие баги могут быть?
Не правильно понял просто. Да, так будет лучше.
а примерный код можно увидеть ?)
Эм...
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, "Ваш дом был продан администрацией сервера");
}
}
Эм...
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, "Ваш дом был продан администрацией сервера");
}
- - - Добавлено - - -
Но в твоем варианте, блин, тоже есть погрешности) Что будем делать, если проданный админом дом, вдруг сразу купит другой игрок?
Да даже не обязательно проверять через переменную владельца дома, достаточно проверить параметр hOwned, почти во всех системах есть этот параметр.
if(HouseInfo[переменная с ID ключ][hOwned] != 1)
{
переменная с ID ключа = то число, которое указывает на отсутствие дома;
SendClientMessage(playerid, -1, "Ваш дом был продан администрацией сервера");
}
- - - Добавлено - - -
Но в твоем варианте, блин, тоже есть погрешности) Что будем делать, если проданный админом дом, вдруг сразу купит другой игрок?
вот об этом я вчера и задумался) вот и думаю все таки наверное лучше сделать открытия файла и изменить phousekey
Но в твоем варианте, блин, тоже есть погрешности) Что будем делать, если проданный админом дом, вдруг сразу купит другой игрок?
В твоём варианте - да. В моём варианте проверяется ник владельца с ником игрока. Я дал рабочий вариант, который не требует доработки условий.
вот об этом я вчера и задумался) вот и думаю все таки наверное лучше сделать открытия файла и изменить phousekey
Мыслите проще. Зачем делать лишние действия? Достаточно обнулить данные в массиве и добавить мою проверку. Всё. Далее мод всё сделает сам, основываясь на уже загруженных из файлов данных.
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, "Ваш дом был продан администрацией сервера");
}
}
просто зажоишь на серв, выдаёт это сообщение и все)
if(strcmp(HouseInfo[PlayerInfo[playerid][pPhousekey] != 1000][hOwner], player_name))
Эмм, что?
тьфу ты.. вот
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, "Ваш дом был продан администрацией сервера");
}
}
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, "Ваш дом был продан администрацией сервера");
}
}
И после логи сюда
разобрался) p/s на примере с прдажей бизнесов/сбизнесов так же ?)
разобрался) p/s на примере с прдажей бизнесов/сбизнесов так же ?)
Именно. Точно так же и обнуление аккаунтов можно сделать. Нужно будет лишь новую строку в аккаунт добавить и потом проверять её значение
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot