shape1
shape2
shape3
shape4
shape7
shape8

Помогите с личным транспортом игрока


Статус
Закрыто для дальнейших ответов.

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
Как сделать чтобы при выходе игрока из игры, его личный транспорт пропадал, а при заходе появлялся?

 

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
В OnPlayerDisconnect добавьте цикл с перебором транспорта, где проверяйте, является ли игрок владельцем какого-либо из них. Если является, DestroyVehicle (функция) в помощь.

new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
for(new i = 0; i < MAX_VEHICLES; i++) if(strcmp(CarInfo[cOwner], sendername, false)) DestroyVehicle(i);

:D83DDC46:  CarInfo[cOwner] - переменная владельца транспорта. При необходимости на свою меняйте. По поводу загрузки, скажите сначала система транспорта каким способом работает (mxINI или MySQL). 

 
Последнее редактирование модератором:

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
У меня есть в базе данных https://prnt.sc/ejx7kx есть две ячейки под транспорт, но владелец записиваеться в папке scriptfiles в файл OwnableCars.cfg
Пример купленого транспорта

477|-1991.000000|257.000000|35.000000|267.000000|-1986.411621|132.338729|27.365131|1.015597|-1|-1|Andriy2002|1|700000|0|0|0|0|0|0|0|0|Andriy2002|0|0|0|0|0|0|0|0|-1
@Elrmrnt-Kritik
Код:
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : warning 219: local variable "sendername" shadows a variable at a preceding level
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3824) : error 017: undefined symbol "CarInfo"
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3824) : warning 215: expression has no effect
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3824) : error 001: expected token: ";", but found "]"
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3824) : error 029: invalid expression, assumed zero
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3824) : fatal error 107: too many error messages on one line
Дополнение к сообщению:
@Elrmrnt-Kritik, Вот ошибки

Код:
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3822) : warning 219: local variable "sendername" shadows a variable at a preceding level
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3824) : error 017: undefined symbol "CarInfo"
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3824) : warning 215: expression has no effect
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3824) : error 001: expected token: ";", but found "]"
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3824) : error 029: invalid expression, assumed zero
D:\Games\Новая папка\Serv\United\gamemodes\united.pwn(3824) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
 
 
Последнее редактирование модератором:

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
Последнее редактирование модератором:

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
@Elrmrnt-Kritik, new sendername удалил, переменные сменил, но есть ошибки...
 

D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3821) : error 076: syntax error in the expression, or invalid function call
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3821) : error 072: "sizeof" operator is invalid on "function" symbols
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : error 028: invalid subscript (not an array or too many subscripts): "ocInfo"
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : warning 215: expression has no effect
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : error 001: expected token: ";", but found "]"
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : error 029: invalid expression, assumed zero
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


6 Errors.
 
Вот код
 

Код:
GetPlayerName(playerid, sendername, sizeof(sendername));
for(new i = 0; i < MAX_VEHICLES; i++) if(strcmp(ocInfo[i][ocOwner], sendername, false)) DestroyVehicle(i); 
 

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
@Andriy2002, как объявлена переменная sendername? Покажите new ocInfo.

 
Последнее редактирование модератором:

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
@Elrmrnt-Kritik,new ocInfo нету, есть только enum ocInfo
 

Код:
enum ocInfo
{
        ocId,
Float:ocSTCar_x,
Float:ocSTCar_y,
Float:ocSTCar_z,
Float:ocSTCar_a,
Float:ocPARKCar_x,
Float:ocPARKCar_y,
Float:ocPARKCar_z,
Float:ocPARKCar_a,
        ocColor1,
        ocColor2,
        ocOwner[64],
        ocLock,
        ocCost,
        //×àñòè òþíèíãà
        ocSpoiler,
        ocHood,
        ocSideskirt,
        ocNitro,
        ocLamps,
        ocExhaust,
        ocWheels,
        ocRoof,
        ocNumber[64],
        ocHydraulics,
        ocBullbar,
        ocRearBullbars,
        ocFrontSign,
        ocFrontBullbars,
        ocFrontBumper,
        ocRearBumper,
        ocVents,
        ocPaintJob,
        ocKey
};
new OwnableCar[100][ocInfo]; 
 
Последнее редактирование модератором:

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
@Andriy2002, вот это

ocInfo[ocOwner] 
Замените на это:

OwnableCar[ocOwner], 
И в цикле 

for(new i = 0; i < MAX_VEHICLES; i++)

MAX_VEHICLES замените на 100.

 

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
Ошибки
 

D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3821) : error 076: syntax error in the expression, or invalid function call
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3821) : error 072: "sizeof" operator is invalid on "function" symbols
D:\Games\Íîâàÿ ïàïêà\Serv\United\gamemodes\united.pwn(3822) : error 076: syntax error in the expression, or invalid function call
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


3 Errors.


Код
 

Код:
GetPlayerName(playerid, sendername, sizeof(sendername));
	for(new i = 0; i < 100; i++) if(strcmp(OwnableCar[i][ocOwner], sendername, false)) DestroyVehicle(i);
 

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
@Elrmrnt-Kritik, У меня нет переменной sendername, если она должна выглядеть вот так "new sendername;" то ёё у меня нету

 

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
@Andriy2002, пойдем по-другому. Заменяйте данный Вами код на этот:

Код:
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
for(new i = 0; i < 100; i++) if(strcmp(OwnableCar[i][ocOwner], name, false)) DestroyVehicle(i);
 

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
@Elrmrnt-Kritik, Скомпилировалось без ошибок, пойду тестить на сервере

Дополнение к сообщению:

Вроде бы все хорошо, но когда вышел, то пропали и те авто что и были на продаже. Они храняться все в одном файле, те что купленые, и те что стоят на авторынке

 
Последнее редактирование модератором:

Smerti

Вернулся в crmp
Пользователь
07.06.2014
109
40
0
Че за велик с циклами изобрели? зачем использовать их когда человек отключается.

Так и будут удалятся машины от 0 до 100, тут не нужен цикл. 

Покажу пример кода, стройте его под себя.

Код:
        if(PlayerInfo[playerid][pCarKey] != 0)
	{
        new vehicleids = PlayerInfo[playerid][pVehKey];
        Delete3DTextLabel(nomer[vehicleids]);
	DestroyVehicle(PlayerInfo[playerid][pVehKey]);
	}
 
Последнее редактирование модератором:

Andriy2002

Новичок
Пользователь
10.03.2017
0
0
0
Че за велик с циклами изобрели? зачем использовать их когда человек отключается.

Так и будут удалятся машины от 0 до 100, тут не нужен цикл.

Покажу пример кода, стройте его под себя.

Код:
        if(PlayerInfo[playerid][pCarKey] != 0)
	{
        new vehicleids = PlayerInfo[playerid][pVehKey];
        Delete3DTextLabel(nomer[vehicleids]);
	DestroyVehicle(PlayerInfo[playerid][pVehKey]);
	}
Етот код нужно разместить в OnPlayerDisconnect и подстроить под себя?
 

Smerti

Вернулся в crmp
Пользователь
07.06.2014
109
40
0
да, даже вот так тебе подойдет более, под себя делай. 

if(PlayerInfo[playerid][pCarKey] != 0)
{
DestroyVehicle(PlayerInfo[playerid][pVehKey]);
}


или для ленивых вообще просто 

Код:
DestroyVehicle(PlayerInfo[playerid][pVehKey]);
 
Последнее редактирование модератором:

noname_idk

Гуру
Пользователь
19.07.2015
4 046
7
787
0
Скриптер
@Smerti, я делал с расчетом под то, что у игрока может быть несколько т/с... 

 

Smerti

Вернулся в crmp
Пользователь
07.06.2014
109
40
0
@Elrmrnt-Kritik,

А не легче использовать как я показал пример? с использованием ключа или ид машины из аккаунта вынимать, так же если на несколько как ты говоришь используется в любом случае pVeh1,pVeh2.

Это я привел примерно и так же по этому принципу делать.

А цикл перебор всех машин и как у него вышло просто удалились эти 100 машин.

И тем более когда машины в файле хранятся это такая гадость , там может быть слет машин и они уйдут на -1 ид или +1 и просто будет очень плохо

 
Последнее редактирование модератором:

Basis

chto tut doljno bit`!?
Пользователь
24.06.2014
824
1
271
0
25
@Smerti,Способ Elrmrnt-Kritik рабочий и не будет удалять 100 машин.
Автору темы если нужно сделать под одну машину то тут вообще не нужны отдельные массивы хранения,я бы всё сделал по принципу сохранения у игрока в данных

cCarID,
cModel,
Float:cPos[4],
cColor[2],
и прочая дребедень

при коннекте игрока проверяем cModel

if(Player[playerid][cModel] != 0)
{
Player[playerid][pCarID] = AddStaticVehicleEx(Player[playerid][cModel],Player[playerid][cPos][0],Player[playerid][cPos][1],Player[playerid][cPos][2],Player[playerid][cPos][3],Player[playerid][cColor][0],Player[playerid][cColor][1],время спавна);
так же номера если нужно
}

и при дисконнекте

if(Player[playerid][cModel] != 0)
{
DestroyVehicle(Player[playerid][cCarID]);
удаление номеров сохранение к примеру координат и т.п.
}
и всё,больше ничего не надо(вроде бы ничего не забыл)

 
Статус
Закрыто для дальнейших ответов.