PDA

Просмотр полной версии : [FS] Converter: Movie scene



m1n1vv
04.03.2016, 18:23
Привет. Этот скрипт может записать координаты всех авто в радиусе, а так же конвертировать их в MTA. Целью было сохранение сцен на сервере и доработка в MTA, ну или в SA-MP Map Construction.


CMD:pawn(playerid, params[])
{
if(sscanf(params, !"d", params[0])) return SendClientMessage(playerid, 0xb93232AA, !"[Подсказка]: /pawn [радиус]");
new string[100], info[47], mc;
new File:file = fopen(!"cms_pawn.txt", io_append);
for(new i = 1; i <= MAX_VEHICLES; i++)
{
if(GetVehicleModel(i))
{
new Float: x, Float: z, Float: y, Float: a;
GetVehiclePos(i, x, y, z);
GetVehicleZAngle(i, a);
if(IsPlayerInRangeOfPoint(playerid, params[0], x, y, z))
{
format(string, sizeof string, "CreateVehicle(%d, %f, %f, %f, %f, -1, -1, 60);\r\n", GetVehicleModel(i), x, y, z, a);
fwrite(file, string);
mc = i;
}
}
}
format(info, sizeof info, "Готово. В радиусе %d сохранено %d авто", params[0], mc);
SendClientMessage(playerid, 0x99FF00AA, info);
format(string,sizeof(string),"\r\n");
fwrite(file, string);
fclose(file);
return 1;
}

CMD:mta(playerid, params[])
{
if(sscanf(params, !"d", params[0])) return SendClientMessage(playerid, 0xb93232AA, !"[Подсказка]: /mta [радиус]");
new string[300], info[47], mc;
new File:file = fopen(!"cms_mta.txt", io_append);
for(new i = 1; i <= MAX_VEHICLES; i++)
{
if(GetVehicleModel(i))
{
new Float: x, Float: z, Float: y, Float: a;
GetVehiclePos(i, x, y, z);
GetVehicleZAngle(i, a);
if(IsPlayerInRangeOfPoint(playerid, params[0], x, y, z))
{
format(string,sizeof(string),"<vehicle id=\"vehicle (%i)\" paintjob=\"3\" interior=\"0\" alpha=\"255\" model=\"%d\" plate=\"VV4Z WIK\" dimension=\"0\" posX=\"%f\" posY=\"%f\" posZ=\"%f\" rotX=\"0\" rotY=\"0\" rotZ=\"%f\" color=\"0,0,0,0,0,0,0,0,0,0,0,0\"></vehicle>\r\n", i, GetVehicleModel(i), x, y, z, a);
fwrite(file, string);
mc = i;
}
}
}
format(info, sizeof info, "Готово. В радиусе %d сохранено %d авто", params[0], mc);
SendClientMessage(playerid, 0x99FF00AA, info);
format(string,sizeof(string),"\r\n");
fwrite(file, string);
fclose(file);
return 1;
}

Автор: m1n1vv

BadPawn
04.03.2016, 20:52
Лень считать символы? Или же не знаешь как? Тогда тебе к DC.[click] (http://pro-pawn.ru/showthread.php?13388-Подсчёт-размера-форматируемой-строки)

$continue$
04.03.2016, 21:26
А что будет если в директории не окажется *.txt файла?
(Я то знаю, что будет, хочу узнать знаете ли Вы?)

P.S: Код не торт.

m1n1vv
04.03.2016, 21:37
Лень считать символы? Или же не знаешь как? Тогда тебе к DC.[click] (http://pro-pawn.ru/showthread.php?13388-Подсчёт-размера-форматируемой-строки)

Вот и подсчитай )

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


А что будет если в директории не окажется *.txt файла?
(Я то знаю, что будет, хочу узнать знаете ли Вы?)

P.S: Код не торт.

Файл автоматически создается

Desulaid
04.03.2016, 21:44
Я ничего не скажу и оставлю этот намек тут: http://pro-pawn.ru/showthread.php?12821

VVWVV
04.03.2016, 22:16
Я ничего не скажу и оставлю этот намек тут: http://pro-pawn.ru/showthread.php?12821

Более быстрее команда:

CMD:pawn(playerid, params[])
{
static const
fmt_str[] = "CreateVehicle(%d, %f, %f, %f, %f, -1, -1, 60);\r\n";

new Float:range;
if (sscanf(params, !"d", range))
return SendClientMessage(
playerid, -1, !"Используйте /pawn [радиус действия]"
);
range = float(_:range);

new buffer[sizeof fmt_str + (-2 + 3) + ( (-2 + 6) * 4)],
Float:x, Float:y, Float:z, Float:angle, vehicle_model, File:hFile;

#if defined foreach && defined Vehicle@YSII_Ag
// Вы также можете использовать библиотеку DC.
// http://pro-pawn.ru/showthread.php?13061
foreach (new i: Vehicle)
#elseif defined GetVehiclePoolSize
for (new i = GetVehiclePoolSize(); --i != 0;)
#else
// Если версия ниже 0.3.7
for (new i = 0; ++i != MAX_VEHICLES;)
#endif
{
if ((vehicle_model = GetVehicleModel(i)) == 0)
continue;
GetVehiclePos(i, x, y, z);
if (IsPlayerInRangeOfPoint(playerid, range, x, y, z) == 0)
continue;
GetVehicleZAngle(i, angle);
hFile = fopen(!"cms_pawn.txt", io_append);
format(
buffer, sizeof buffer, fmt_str,
vehicle_model, x, y, z, angle
);
fwrite(hFile, buffer);
}
fclose(hFile);
SendClientMessage(playerid, 0xAA0000FF, !"Готово!");
return 1;
}

$continue$
04.03.2016, 22:23
Из принципа не стал переделывать команду. Ибо, чему он тогда научится?

code

P.S:


new Float:range;
if (sscanf(params, !"d", range))

VVWVV
04.03.2016, 22:31
Из принципа не стал переделывать команду. Ибо, чему он тогда научится?

Пусть учится на примере. Впрочем, я оставил для него вторую команду, которую он, надеюсь, с радостью оптимизирует.

m1n1vv
04.03.2016, 23:55
Пусть учится на примере. Впрочем, я оставил для него вторую команду, которую он, надеюсь, с радостью оптимизирует.

Хороший вариант. Я вообще делал код, чтобы взять координаты авто из grandlarc, да и только. :grin:

m1n1vv
05.03.2016, 00:42
Сейчас проверил. Твой код выключает сервер )

$continue$
05.03.2016, 01:02
Я с файлами не на "ты" в Pawn, но попробуй:


CMD:pawn(playerid, params[])
{
static const
fmt_str[] = "CreateVehicle(%d, %f, %f, %f, %f, -1, -1, 60);\r\n";

new Float:range;
if (sscanf(params, !"d", range))
return SendClientMessage(
playerid, -1, !"Используйте /pawn [радиус действия]"
);
range = float(_:range);

new buffer[sizeof fmt_str + (-2 + 3) + ( (-2 + 6) * 4)],
Float:x, Float:y, Float:z, Float:angle, vehicle_model, File:hFile;

#if defined foreach && defined Vehicle@YSII_Ag
// Вы также можете использовать библиотеку DC.
// http://pro-pawn.ru/showthread.php?13061
foreach (new i: Vehicle)
#elseif defined GetVehiclePoolSize
for (new i = GetVehiclePoolSize(); --i != 0;)
#else
// Если версия ниже 0.3.7
for (new i = 0; ++i != MAX_VEHICLES;)
#endif
{
if ((vehicle_model = GetVehicleModel(i)) == 0)
continue;
GetVehiclePos(i, x, y, z);
if (IsPlayerInRangeOfPoint(playerid, range, x, y, z) == 0)
continue;
GetVehicleZAngle(i, angle);
hFile = fopen(!"cms_pawn.txt", io_append);
if(hFile == File: 0)
{
print("Файл не найден!");
break;
}
format(
buffer, sizeof buffer, fmt_str,
vehicle_model, x, y, z, angle
);
fwrite(hFile, buffer);
}
fclose(hFile);
SendClientMessage(playerid, 0xAA0000FF, !"Готово!");
return 1;
}


Сейчас проверил. Твой код выключает сервер )

m1n1vv
05.03.2016, 01:04
Я с файлами не на "ты" в Pawn, но попробуй:


CMD:pawn(playerid, params[])
{
static const
fmt_str[] = "CreateVehicle(%d, %f, %f, %f, %f, -1, -1, 60);\r\n";

new Float:range;
if (sscanf(params, !"d", range))
return SendClientMessage(
playerid, -1, !"Используйте /pawn [радиус действия]"
);
range = float(_:range);

new buffer[sizeof fmt_str + (-2 + 3) + ( (-2 + 6) * 4)],
Float:x, Float:y, Float:z, Float:angle, vehicle_model, File:hFile;

#if defined foreach && defined Vehicle@YSII_Ag
// Вы также можете использовать библиотеку DC.
// http://pro-pawn.ru/showthread.php?13061
foreach (new i: Vehicle)
#elseif defined GetVehiclePoolSize
for (new i = GetVehiclePoolSize(); --i != 0;)
#else
// Если версия ниже 0.3.7
for (new i = 0; ++i != MAX_VEHICLES;)
#endif
{
if ((vehicle_model = GetVehicleModel(i)) == 0)
continue;
GetVehiclePos(i, x, y, z);
if (IsPlayerInRangeOfPoint(playerid, range, x, y, z) == 0)
continue;
GetVehicleZAngle(i, angle);
hFile = fopen(!"cms_pawn.txt", io_append);
if(hFile == File: 0)
{
print("Файл не найден!");
break;
}
format(
buffer, sizeof buffer, fmt_str,
vehicle_model, x, y, z, angle
);
fwrite(hFile, buffer);
}
fclose(hFile);
SendClientMessage(playerid, 0xAA0000FF, !"Готово!");
return 1;
}

Так же

[23:03:56] [debug] Server crashed while executing sfcr.amx
[23:03:56] [debug] AMX backtrace:
[23:03:56] [debug] #0 native fclose () from samp-server.exe
[23:03:56] [debug] #1 000191bc in public cmd_pawn (playerid=0, params[]=@000a65e0 "100") at \gamemodes\sfcr.pwn:838
[23:03:56] [debug] #2 native DC_CMD () from dc_cmd.DLL
[23:03:56] [debug] #3 000000f4 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000a65b8 "/pawn 100") at \pawno\include\dc_cmd.inc:62

838:

fclose(hFile);

VVWVV
05.03.2016, 08:31
Так же

[23:03:56] [debug] Server crashed while executing sfcr.amx
[23:03:56] [debug] AMX backtrace:
[23:03:56] [debug] #0 native fclose () from samp-server.exe
[23:03:56] [debug] #1 000191bc in public cmd_pawn (playerid=0, params[]=@000a65e0 "100") at \gamemodes\sfcr.pwn:838
[23:03:56] [debug] #2 native DC_CMD () from dc_cmd.DLL
[23:03:56] [debug] #3 000000f4 in public OnPlayerCommandText (playerid=0, cmdtext[]=@000a65b8 "/pawn 100") at \pawno\include\dc_cmd.inc:62

838:

fclose(hFile);


CMD:pawn(playerid, params[])
{
static const
fmt_str[] = "CreateVehicle(%d, %.06f, %.06f, %.06f, %.06f, -1, -1, 60);\r\n";

new Float:range;
if (sscanf(params, !"d", range))
return SendClientMessage(
playerid, -1, !"Используйте /pawn [радиус действия]"
);
range = float(_:range);

new buffer[sizeof fmt_str + (-2 + 3) + ( (-7 + (6 + 4)) * 4) + 3],
Float:x, Float:y, Float:z, Float:angle, vehicle_model, File:hFile;

if (_:(hFile = fopen(!"cms_pawn.txt", io_write)) == 0)
return print(!"File is not found");
#if defined foreach && defined Vehicle@YSII_Ag
// Вы также можете использовать библиотеку DC.
// http://pro-pawn.ru/showthread.php?13061
foreach (new i: Vehicle)
#elseif defined GetVehiclePoolSize
for (new i = GetVehiclePoolSize(); --i != 0;)
#else
// Если версия ниже 0.3.7
for (new i = 0; ++i != MAX_VEHICLES;)
#endif
{
if ((vehicle_model = GetVehicleModel(i)) == 0)
continue;
GetVehiclePos(i, x, y, z);
if (IsPlayerInRangeOfPoint(playerid, range, x, y, z) == 0)
continue;
GetVehicleZAngle(i, angle);
format(
buffer, sizeof buffer, fmt_str,
vehicle_model, x, y, z, angle
);
fwrite(hFile, buffer);
}
fclose(hFile);
SendClientMessage(playerid, 0xAA0000FF, !"Готово!");
return 1;
}

vovandolg
05.03.2016, 15:26
"В ралиусе"

m1n1vv
13.03.2016, 09:15
Я смешал свой и VVWVV код, и он стал еще быстрее


Header size: 948 bytes
Code size: 29252 bytes
Data size: 10124 bytes
Stack/heap size: 16384 bytes; estimated max. usage=100 cells (400 bytes)
Total requirements: 56708 bytes


Header size: 932 bytes
Code size: 29056 bytes
Data size: 10088 bytes
Stack/heap size: 16384 bytes; estimated max. usage=99 cells (396 bytes)
Total requirements: 56460 bytes

VVWVV
13.03.2016, 12:43
Я смешал свой и VVWVV код, и он стал еще быстрее


Header size: 948 bytes
Code size: 29252 bytes
Data size: 10124 bytes
Stack/heap size: 16384 bytes; estimated max. usage=100 cells (400 bytes)
Total requirements: 56708 bytes


Header size: 932 bytes
Code size: 29056 bytes
Data size: 10088 bytes
Stack/heap size: 16384 bytes; estimated max. usage=99 cells (396 bytes)
Total requirements: 56460 bytes

Просто оставлю это здесь. Сравнение производительности кода на Pawn (профилирование) (http://pro-pawn.ru/showthread.php?12585)