PDA

Просмотр полной версии : [Вопрос] По поводу заводки двигателя



BadPawn
08.02.2016, 10:19
Всем привет. Столкнулся с проблемой, такого характера:

рестарт серва > сажусь в машину > нажимаю завести [ Имя_Фамилия заглушил двигатель, НО НЕ ЗАВЕДЕН ЖЕ ] > затем нажимаю второй раз [ Имя_Фамилия завел двигатель ]. После первого косяка, все исправно работает, что это может быть?

Косяк вначале, не могу понять в чем дело.


CMD:engine(playerid)
{
if(IsPlayerInAnyVehicle(playerid) == 0)
return true;

new
vehicleid = GetPlayerVehicleID(playerid),
engine,
lights,
alarm,
doors,
bonnet,
boot,
objective;

GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
if(!engine)
engine_car{vehicleid} = true,
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
else
engine_car{vehicleid} = false,
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);

static const engine_msg[] = "* %s %s двигатель.";
new engine_str[sizeof(engine_msg) + MAX_PLAYER_NAME - 2];
format(engine_str, sizeof(engine_str), engine_msg, pInfo[playerid][pName], engine_car{vehicleid} ? ("завёл") : ("заглушил"));
ProxDetectorEx(15.0, playerid, engine_str, 0xC2A2DAAA);

return true;
}

OnVehicleSpawn

public OnVehicleSpawn(vehicleid)
{
SetVehicleParamsEx(vehicleid, false, false, false, false, false, false, false);//уже и так сделал, не помогает
engine_car{vehicleid} = false;
lights_car{vehicleid} = false;
return true;
}

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

http://s018.radikal.ru/i526/1602/9e/14b90b8cca6b.png

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

На словах если, то изначально двигатель заведенный, ноооо как исправить это дело?)

Daniel_Cortez
08.02.2016, 10:26
http://wiki.sa-mp.com/wiki/ManualVehicleEngineAndLights
Просто сделайте так, как показано в примере.

BadPawn
08.02.2016, 10:37
ManualVehicleEngineAndLights();

Имеется такое. ((((

[ForD]
08.02.2016, 10:44
Переменные обнуляйте,ну или как у вас там,крч,при включении/выключении сервера присваивайте значение выключенного двигателя,думаю мысля понятна.

BadPawn
08.02.2016, 10:45
Понятна, друже, Ноооооооооо в коде все есть) выше выложил

[ForD]
08.02.2016, 10:49
Понятна, друже, Ноооооооооо в коде все есть) выше выложил

Мля,ты бы знал как не удобно расписывать на конченых клавах в компах...
Крч,у тебя явно имеется проверка перед выводом сообщения на то включен или выключен двигатель,значение включенного или выключенного двигателя записано в переменно,так.. после перезагрузки в переменной скорее всего записано положительное значение,т.е. двигатель заведен(а на самом деле нет...) по этому 1 раз и портачит,а далее переменная перезаписывается и больше ффризов нет,думаю теперь донес? (Нда,реально код пропустил,заторможен чутка,но по сути должно быть так как я и предполагаю)

Daniel_Cortez
08.02.2016, 10:50
ManualVehicleEngineAndLights();

Имеется такое. ((((
Тогда наверняка обрывается выполнение кода в OnGameModeInit из-за какой-то ошибки и ManualVehicleEngineAndLights не вызывается.
Подключайте crashdetect и тащите сюда логи.

vovandolg
08.02.2016, 10:51
Ты код не весь выложил врунишка:bye:))
Может не столь важно, но ты не показал как объявил переменные..

[ForD]
08.02.2016, 10:51
Тогда наверняка обрывается выполнение кода в OnGameModeInit из-за какой-то ошибки и ManualVehicleEngineAndLights не вызывается.
Подключайте crashdetect и тащите сюда логи.

В моем сообщении выше слово "компах" выделено ссылкой? А то у меня ссылку показывает -_-

vovandolg
08.02.2016, 10:56
Почему нельзя проверку делать на переменную:


if(!engine)
engine_car{vehicleid}
//вот так ниже пример
if(engine_car{vehicleid} == false)
else if(engine_car{vehicleid} == true)

У меня такая же система дыркать, а потом прогазовать только у меня проверка переменных..

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

[ForD]
08.02.2016, 10:58
Почему нельзя проверку делать на переменную:


if(!engine)
engine_car{vehicleid}
//вот так ниже пример
if(engine_car{vehicleid} == false)
else if(engine_car{vehicleid} == true)

У меня такая же система дыркать, а потом прогазовать только у меня проверка переменных..

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

в командах true and false кривовато насколько замечал работают

BadPawn
08.02.2016, 11:03
не думал, что важный момент:

new bool:engine_car[MAX_VEHICLES char],
bool:lights_car[MAX_VEHICLES char];

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

попробую boolean ликвидировать. [проверка :)]

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


Тогда наверняка обрывается выполнение кода в OnGameModeInit из-за какой-то ошибки и ManualVehicleEngineAndLights не вызывается.
Подключайте crashdetect и тащите сюда логи.


[18:02:09] [debug] Run time error 4: "Array index out of bounds"
[18:02:09] [debug] Accessing element at index 100 past array upper bound 4
[18:02:09] [debug] AMX backtrace:
[18:02:09] [debug] #0 0000a6cc in public Itter_OnGameModeInit () from new.amx
[18:02:09] [debug] #1 native CallLocalFunction () from samp-server.exe
[18:02:09] [debug] #2 0000618c in public dc_cmd_OnGameModeInit () from new.amx
[18:02:09] [debug] #3 00005e70 in public SSCANF_OnGameModeInit () from new.amx
[18:02:09] [debug] #4 000001fc in public OnGameModeInit () from new.amx

что-то его беспокоит.

vovandolg
08.02.2016, 11:04
Accessing element at index 100 past array upper bound 4
Выход за пределлллы)

BadPawn
08.02.2016, 11:09
при компиляции вот еще это:

Header size: 5100 bytes
Code size: 139340 bytes
Data size: 96208 bytes
Stack/heap size: 16384 bytes; estimated max. usage=747 cells (2988 bytes)
Total requirements: 257032 bytes

vovandolg
08.02.2016, 11:11
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
if(Engine[car] == false)
{
SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
Engine[car] = true;
SendMes(playerid, COLOR_GREY, "Завеласть с первого раза йопта");
}
else if(Engine[car] == true)
{
SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
Engine[car] = false;
SendMes(playerid, COLOR_GREY, "Вырубилась с первого раза");
}

Но у вас char поэтому под себя переписать слегка и всё.

BadPawn
08.02.2016, 11:16
#2 00006f18 in public dc_cmd_OnGameModeInit () at D:\SERVER\SERVERMYSQL\pawno\include\foreach.inc:595


public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)//595
{
if(pInfo[playerid][pAdmin] < 1) return true;
SetPlayerPos(playerid, fX, fY, fZ);
return true;
}

#3 00006b70 in public SSCANF_OnGameModeInit () at D:\SERVER\SERVERMYSQL\pawno\include\dc_cmd.inc:97


enum//dialog's
{
//Регистрация
d_ave,
d_floor,
d_year,
d_month,
d_day,//97 строчка
d_reg,
//Авторизация
d_log,
//player menu
d_playermenu,
d_playerstatistic,
d_playerstats,
d_playermenuoptions,
d_playermenuoptionssetpassold,
d_playermenuoptionssetpassnew
}

#4 0000023c in public OnGameModeInit () at D:\SERVER\SERVERMYSQL\pawno\include\sscanf2.inc:171


new const
VehicleNames[][] =
{
"Landstalker", "Bravura", "Buffalo", "Linerunner", "Pereniel",
"Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch",
"Manana", "Infernus", "Voodoo", "Pony", "Mule",
"Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto",
"Taxi", "Washington", "Bobcat", "Mr Whoopee", "BF Injection",
"Hunter", "Premier", "Enforcer", "Securicar", "Banshee",
"Predator", "Bus", "Rhino", "Barracks", "Hotknife",
"Trailer", "Previon", "Coach", "Cabbie", "Stallion",
"Rumpo", "RC Bandit", "Romero", "Packer", "Monster",
"Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram",
"Trailer", "Turismo", "Speeder", "Reefer", "Tropic",
"Flatbed", "Yankee", "Caddy", "Solair", "Berkley RC Van",//171 строчка
"Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron",
"RC Raider", "Glendale", "Oceanic", "Sanchez", "Sparrow",
"Patriot", "Quad", "Coastguard", "Dinghy", "Hermes",
"Sabre", "Rustler", "ZR350", "Walton", "Regina",
"Comet", "BMX", "Burrito", "Camper", "Marquis",
"Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
"FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring",
"Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson",
"Mesa", "RC Goblin", "Hotring A", "Hotring B", "Bloodring Banger",
"Rancher", "Super GT", "Elegant", "Journey", "Bike",
"Mountain Bike", "Beagle", "Cropdust", "Stunt", "Tanker",
"RoadTrain", "Nebula", "Majestic", "Buccaneer", "Shamal",
"Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck",
"Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard",
"Forklift", "Tractor", "Combine", "Feltzer", "Remington",
"Slamvan", "Blade", "Freight", "Streak", "Vortex",
"Vincent", "Bullet", "Clover", "Sadler", "Firetruck",
"Hustler", "Intruder", "Primo", "Cargobob", "Tampa",
"Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
"Windsor", "Monster A", "Monster B", "Uranus", "Jester",
"Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger",
"Flash", "Tahoma", "Savanna", "Bandito", "Freight",
"Trailer", "Kart", "Mower", "Duneride", "Sweeper",
"Broadway", "Tornado", "AT-400", "DFT-30", "Huntley",
"Stafford", "BF-400", "Newsvan", "Tug", "Trailer A",
"Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
"Trailer B", "Trailer C", "Andromada", "Dodo", "RC Cam",
"Launch", "Police Car (LSPD)", "Police Car (SFPD)", "Police Car (LVPD)",
"Police Ranger", "Picador", "S.W.A.T.", "Alpha", "Phoenix",
"Glendale", "Sadler", "L Trailer A", "L Trailer B", "Stair Trailer",
"Boxville", "Farm Plow", "Utility Trailer"
};

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

если выход за пределы, странно почему компилятор молчит.

vovandolg
08.02.2016, 11:23
Что недавно добавлял в public OnGameModeInit найди и кинь сюда)
Если не ошибаюсь там ошибка:crazy:

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



если выход за пределы, странно почему компилятор молчит.

А что он должен писать?)) Это уже логи говорят, а не компилятор.

BadPawn
08.02.2016, 11:24
public OnGameModeInit()
{
mysql_connBD = mysql_connect(MySQL_HOST,MySQL_USER,MySQL_DB,MySQL_PASSWORD);
////////////////////////////////////////////////////////////////////////////
SetGameModeText(""NAMEMOD"");
////////////////////////////////////////////////////////////////////////////
DisableInteriorEnterExits(); //стандартные пикапы
EnableStuntBonusForAll(0); //выключены бонусы за трюки
ManualVehicleEngineAndLights(); // отключаем автоматическую заводку двигателя
////////////////////////////////////////////////////////////////////////////
SetTimer("SecondTime", 1000, 1);
SetTimer("UpdateTime", 1000*60, 1);
/////////////////////////////////////////загрузки
LoadPickupWorld();
Load3DText();
LoadVehFraction();

new bla[5];

new fffuuuu = 0;

fffuuuu = 100;
bla[fffuuuu] = 100;


return bla[fffuuuu];
}

вот оно. по-моему все хорошо)

vovandolg
08.02.2016, 11:25
new bla[5];

new fffuuuu = 0;

fffuuuu = 100;
bla[fffuuuu] = 100;


return bla[fffuuuu];
Вот и косяк)

BadPawn
08.02.2016, 11:26
этого не было. я добавил, что бы крашдетект показывал)

vovandolg
08.02.2016, 11:26
public OnGameModeInit()
{
return 1;
}
Из покон веков он выглядит так и не меняется) Помогите ему, отойду кое куда..

BadPawn
08.02.2016, 11:29
т.е. все хорошо, нужно только вкурить с переменными, может в них дело.

vovandolg
08.02.2016, 12:10
Я дал уже пример как я завожу у себя движок) у меня нету не каких багов...

[ForD]
08.02.2016, 12:40
попробую boolean ликвидировать. [проверка :)]

Зачем вы пишете "bool:"?? Думаете это что то меняет?

BadPawn
08.02.2016, 12:48
;69159']Зачем вы пишете "bool:"?? Думаете это что то меняет?

используется значение только 0 и 1 (false and true) поэтому bool: и пишу

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

vovandolg, спасибо огромное.

прикинь, вся проблема в:

if(engine_car{vehicleid} == false)
engine_car{vehicleid} = true,
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
else
engine_car{vehicleid} = false,
SetVehicleParamsEx(vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);

нужно было проверку ставить на созданную переменную, у меня же проверка была на стандартную engine. я в шоке.

спасибо.

Закройте пж.

[ForD]
08.02.2016, 13:00
используется значение только 0 и 1 (false and true) поэтому bool: и пишу

А если вы не будете писать bool: значение 0 and 1(false and true) использоваться по вашему не будет?
Впрочем какая разница,просто на всякий случай,если вы думаете что bool: будет занимать меньше памяти чем простая переменная без объявления,то это заблуждение.

BadPawn
08.02.2016, 13:02
;69162']А если вы не будете писать bool: значение 0 and 1(false and true) использоваться по вашему не будет?
Впрочем какая разница,просто на всякий случай,если вы думаете что bool: будет занимать меньше памяти чем простая переменная без объявления,то это заблуждение.

не в памяти дело) это для меня удобство, когда вижу true and false, поудачнее код воспринимаю)

[ForD]
08.02.2016, 13:23
не в памяти дело) это для меня удобство, когда вижу true and false, поудачнее код воспринимаю)

Если вы думаете что true and false можно записать только в bool: то вы ошибаетесь,true = 1,false=0 ,слова true/false можно записать в любую переменную,разницы не будет


new lol = true // lol = 1
new bool:lol = true // lol = 1
new Float:lol = true // lol = 1.0 (т.к. переменная типа float)

Да и даже в строку можно,но там с помощью формата или там функция valstr или как-то так

ziggi
08.02.2016, 15:59
Суть в том, что GetVehicleParamsEx может возвращать -1 (VEHICLE_PARAMS_UNSET), а !(-1) возвращает true. Не выдумывайте свои значения (1/0, true/false), когда есть заранее определённые константы.

Проверку нужно изменить так:


if (engine == VEHICLE_PARAMS_OFF)

BadPawn
09.02.2016, 07:22
;69164']Если вы думаете что true and false можно записать только в bool: то вы ошибаетесь,true = 1,false=0 ,слова true/false можно записать в любую переменную,разницы не будет


new lol = true // lol = 1
new bool:lol = true // lol = 1
new Float:lol = true // lol = 1.0 (т.к. переменная типа float)

Да и даже в строку можно,но там с помощью формата или там функция valstr или как-то так


warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch
Таков исход, если сделать созданную переменную без boolean, т.е. engine_car[MAX_VEHICLES char]
Это доказывает совершенно обратное.



Суть в том, что GetVehicleParamsEx может возвращать -1 (VEHICLE_PARAMS_UNSET), а !(-1) возвращает true. Не выдумывайте свои значения (1/0, true/false), когда есть заранее определённые константы.

Проверку нужно изменить так:


if (engine == VEHICLE_PARAMS_OFF)

Работает абсолютно так же, сравнивая с моей проблемой в первом посте.

[ForD]
09.02.2016, 08:38
warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch
Таков исход, если сделать созданную переменную без boolean, т.е. engine_car[MAX_VEHICLES char]
Это доказывает совершенно обратное.



Работает абсолютно так же, сравнивая с моей проблемой в первом посте.

http://ihost.pro-pawn.ru/image.php?di=LHK9
Хз почему у тят ам 3 ошибки,да и мне пофигу как-то..
Единственная проблема с float,приходится делать хитрость

new Float:lol_float;
lol_float = float(true);

BadPawn
09.02.2016, 09:38
;69236']
http://ihost.pro-pawn.ru/image.php?di=LHK9
Хз почему у тят ам 3 ошибки,да и мне пофигу как-то..
Единственная проблема с float,приходится делать хитрость

new Float:lol_float;
lol_float = float(true);

меня удивляют такие личности. так какого ты здесь?)
приветствую только откровенную помощь. плевать тебе, плевать и мне, взаимно постоянно.

[ForD]
09.02.2016, 12:11
меня удивляют такие личности. так какого ты здесь?)
приветствую только откровенную помощь. плевать тебе, плевать и мне, взаимно постоянно.

Это вот счас к чему было?Какая помощь? Я показал примеры,а пофигу мне на ошибки ваши,просто видимо что то сделали не так,далее я даже пример предоставил для того чтоб поняли как это работает,и вот такие личности меня удивляют.

BadPawn
09.02.2016, 13:42
;69248']Это вот счас к чему было?Какая помощь? Я показал примеры,а пофигу мне на ошибки ваши,просто видимо что то сделали не так,далее я даже пример предоставил для того чтоб поняли как это работает,и вот такие личности меня удивляют.

Окей.

1 вариант, по твоему примеру:
http://s020.radikal.ru/i709/1602/de/7daf32daa70a.gif
2 вариант по моему примеру:
http://s018.radikal.ru/i503/1602/bb/e0d246ab2c07.gif

Что тут не так?

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

сугубо лично,
в 1 варианте без -

:bool

во 2 варианте с -

:bool

ничего лишнего. все на глазах. жду.

vovandolg
09.02.2016, 14:05
bool по умолчанию false, можно не объявлять значение если оно не true.