Edited by vlad333000, 05 February 2017 - 15:35.
#561 OFFLINE
Posted 05 February 2017 - 15:34
#562 OFFLINE
Posted 05 February 2017 - 15:40
Ну это файл у меня и сделан в виде аддона в папке Arma и подключен. Выглядит так: @arma3server\Addons\server.pbo и в init вызывается call compile preprocessFile. Разве нельзя его ни как определить. Или хоть примерно как это делается...
#563 OFFLINE
Posted 05 February 2017 - 15:46
Ну или, на пример, как сделать так, чтобы моя миссия запускалась только с моим UID.
Типа, if adminsUID = "758...." = (true) то миссия запускается, а если false, то был бы, к примеру, BIS_fnc_endMission
#565 OFFLINE
Posted 05 February 2017 - 16:49
Хмм! Подковал..НУ просто должны же быть хоть какие-то авторские права. Если я, к примеру, потратил кучу времени на русификацию и модификацию миссии, обидно будет выставлять ее публично, чтобы каждый ее запускал потом и все будут играть на его серваке, а на твой не будут заходить и будешь ты в одинокого играть...У меня просто так было, и поэтому я хочу такую ситуацию взять под контроль.
К примеру, делается же как-то серверная и клиентская части миссии. Но это сложновато...Поэтому хотя бы так.
Ну а хотя бы UID сервера можно как-то поставить, чтоб если с другого UID сервера не запускалась?
#567 OFFLINE
Posted 05 February 2017 - 17:28
Это я и так понимаю. Просто я не умею писать скрыпты с нуля. Я научился только читать их и понимать о чем идет речь и что от чего зависит...Я пишу скрипты на примере других похожих, и тем самым могу дополнить их чем-нибудь. Или могу соединить несколько скриптов в один. Нужен просто примерный экземпляр скрипта...
Ну и на этом спасибо...Буду думать дальше.
#568 OFFLINE
Posted 05 February 2017 - 18:08
Ну это файл у меня и сделан в виде аддона в папке Arma и подключен. Выглядит так: @arma3server\Addons\server.pbo и в init вызывается call compile preprocessFile. Разве нельзя его ни как определить. Или хоть примерно как это делается...
В конфигурационном файле любого аддона должен присутствовать класс
class CfgPatches { class VWE_Aftermath { author="$STR_VWE"; name="Arma 3 VWE - Aftermath"; url="http://www.arma3.com"; units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {}; }; };
Из чего следует, можно произвести проверку на наличие нужного подключенного аддона
if (isClass(configfile >> "CfgPatches" >> "VWE_Aftermath")) then { // аддон подключен } else { // аддон не подключен };
Далее вызов не существующей функции, скрипта или обращение к несуществующей переменной вызывает ошибку, это так же можно использовать в качестве условия для проверки.
_code = ""; try //begin of try-catch block { //block, that can throw exception //пытаемся получить содержимое файла _code = preprocessFileLineNumbers "myFunction.sqf"; //если файл существует исполняется строка кода следующая ниже, //отсутствие файла принимается как ошибка и управление передаётся в блок кода //следующий за оператором catch call compile _code; } catch { //block, that process an exception. Exception is described in _exception variable // блок кода исполняемый при отсутствии требуемого файла с кодом };
Следует иметь ввиду нюанс, эта конструкция операторов работает не совсем так, как в других скриптовых и не скриптовых языках программирования, как всегда, это работает по чешски). Следует обратить внимание на комментарий в описании к команде.
Edited by SteelRat, 05 February 2017 - 18:17.
#569 OFFLINE
Posted 05 February 2017 - 20:56
Большое спасибо!!! Очень полезная подсказка...
У меня еще вопрос. А будет ли работать эта команд. Сам от балды написал. На данный момент нет возможности проверить на другом UID.
Если вместо AdminUID = _a ставлю AdminUID = _b, то срабатывает.
#570 OFFLINE
Posted 06 February 2017 - 01:40
Ну это файл у меня и сделан в виде аддона в папке Arma и подключен. Выглядит так: @arma3server\Addons\server.pbo и в init вызывается call compile preprocessFile. Разве нельзя его ни как определить. Или хоть примерно как это делается...
В конфигурационном файле любого аддона должен присутствовать класс
class CfgPatches { class VWE_Aftermath { author="$STR_VWE"; name="Arma 3 VWE - Aftermath"; url="http://www.arma3.com"; units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {}; }; };Из чего следует, можно произвести проверку на наличие нужного подключенного аддона
if (isClass(configfile >> "CfgPatches" >> "VWE_Aftermath")) then { // аддон подключен } else { // аддон не подключен };Далее вызов не существующей функции, скрипта или обращение к несуществующей переменной вызывает ошибку, это так же можно использовать в качестве условия для проверки.
_code = ""; try //begin of try-catch block { //block, that can throw exception //пытаемся получить содержимое файла _code = preprocessFileLineNumbers "myFunction.sqf"; //если файл существует исполняется строка кода следующая ниже, //отсутствие файла принимается как ошибка и управление передаётся в блок кода //следующий за оператором catch call compile _code; } catch { //block, that process an exception. Exception is described in _exception variable // блок кода исполняемый при отсутствии требуемого файла с кодом };Следует иметь ввиду нюанс, эта конструкция операторов работает не совсем так, как в других скриптовых и не скриптовых языках программирования, как всегда, это работает по чешски). Следует обратить внимание на комментарий в описании к команде.
Что-то не срабатывает у меня. Попытался проверить на примере проверки правильности функции:
Может что не так сделал...(_function2 - это намерено ошибка, чтобы выполнялся код в блоке catch
#571 OFFLINE
Posted 06 February 2017 - 03:53
private ["_function"];
_function = {
_var = _var + 1;
};
_var = 10;
try
{
_code = _function2;
call _code;
}
catch
{
titleText ["ПРИВЕТ", "BLACK OUT", 3];
sleep 5;
"LOSER" call BIS_fnc_endMission;
};
А здесь нет ошибки, поэтому код в блоке catch не выполнится.
#572 OFFLINE
Posted 06 February 2017 - 04:19
private ["_function"];
_function = {
_var = _var + 1;
};
_var = 10;
try
{
_code = _function2;
call _code;
}
catch
{
titleText ["ПРИВЕТ", "BLACK OUT", 3];
sleep 5;
"LOSER" call BIS_fnc_endMission;
};А здесь нет ошибки, поэтому код в блоке catch не выполнится.
А как так то нет ошибки. code у меня равно функции 2, а в начале просто функция...Ну или тогда как вообще сделать ошибку чтобы catch выполнился.!?
#573 OFFLINE
Posted 06 February 2017 - 04:29
А как так то нет ошибки. code у меня равно функции 2, а в начале просто функция...
Виноват, ошибка есть.
Ну или тогда как вообще сделать ошибку чтобы catch выполнился.!?
Например, с помощью
.#574 OFFLINE
Posted 06 February 2017 - 06:27
Вопрос такой!
К примеру есть некий скрипт funcs и он до конца не загрузился. Как написать команду так, что если эта переменная не загрузилась, то выполнить какое-либо действие. типа как-то так:
if (funcs не запустился) then
{
выполнить какое-либо действие
};
#575 OFFLINE
Posted 06 February 2017 - 07:04
//func //content; true //end; //; _st=true if call func then{_st=false}; if _st then{ //no; }
или
if isnil |любая переменная по созданию которой можете определить| then{ //нет; }else{ //да; }
или
if(missionnamespace getvariable[ '|переменная|' , |что вернётся если её нет| ]isequalto |что вернётся если её нет|)then{ //нет; }else{};
или
if(missionnamespace getvariable[ '|переменная|' , |что вернётся если её нет| ]isequalto |что бы она значила|)then{ //да; }else{};
Edited by Ilias, 06 February 2017 - 07:21.
#576 OFFLINE
Posted 06 February 2017 - 07:35
//func //content; true //end; //; _st=true if call func then{_st=false}; if _st then{ //no; }или
if isnil |любая переменная по созданию которой можете определить| then{ //нет; }else{ //да; }или
if(missionnamespace getvariable[ '|переменная|' , |что вернётся если её нет| ]isequalto |что вернётся если её нет|)then{ //нет; }else{};или
if(missionnamespace getvariable[ '|переменная|' , |что вернётся если её нет| ]isequalto |что бы она значила|)then{ //да; }else{};
Ого! Как-то сложновато и не совсем понятно...
А попроще никак нельзя
Я рассчитывал на что-то вроде if (true) exitWith{}; - т.е если запустился, то все ок .дальше все работает.
if (false) exitWith {"LOSER" call BIS_fnc_endMission} - если не запустился, то выход.
Ну просто с false я так понял команды нет, т.к.. она не срабатывает...
#577 OFFLINE
Posted 06 February 2017 - 07:40
как выглядит func (файл | func={}..) ?
и как выполняете (execvm | call compile preprocessfilelinenumbers | call | spawn) ?
(напишу прямо, под вашу ситуацию)
Edited by Ilias, 06 February 2017 - 07:51.
#578 OFFLINE
Posted 06 February 2017 - 07:49
В принципе, могу объяснить по точнее...
У меня идет файл funcs, там как бы много много всего в виде compile preprocessfile...и тд. И в конце serverInitDone = true, publicveriable "serverInitDone";
А в другом файле initplayerlocal прописано waitUntil {(!isNil "serverInitDone")};
Так вот, если funcs не прогрузился (т.к. я вписал код в нем, чтобы он завис на середине), то waitUntil {(!isNil "serverInitDone")}; - не исполняется, не пишет, что server init complite и в самой миссии все пусто, просто ходишь туда сюда и все, никакие скрипты не срабатывают....
Вот мне и надо сделать так, чтобы serverinitdone не висел, а сделать выход....
По логике как-то так примерно:
If (serverinitdone не загрузился) then { call BIS_fnc_endMission};
#579 OFFLINE
Posted 06 February 2017 - 08:04
В принципе, могу объяснить по точнее...
У меня идет файл funcs, там как бы много много всего в виде compile preprocessfile...и тд. И в конце serverInitDone = true, publicveriable "serverInitDone";
А в другом файле initplayerlocal прописано waitUntil {(!isNil "serverInitDone")};
Так вот, если funcs не прогрузился (т.к. я вписал код в нем, чтобы он завис на середине), то waitUntil {(!isNil "serverInitDone")}; - не исполняется, не пишет, что server init complite и в самой миссии все пусто, просто ходишь туда сюда и все, никакие скрипты не срабатывают....
Вот мне и надо сделать так, чтобы serverinitdone не висел, а сделать выход....
По логике как-то так примерно:
If (serverinitdone не загрузился) then { call BIS_fnc_endMission};
(true = |да| ; false = |нет| ; )
каждый скрипт (, файл) выполняется одной строкой (по очереди выполняя (читая) команды),
waituntil{ |_| }; задерживает строку пока |_| не будет == true если хотите проверить true или false пишите
if |_| then{ |здесь что сделать если true| }else{ |если false| }
(будьте уверены что то что должно произойти перед проверкой (выполнение funcs) произойдёт до проверки)
для вашей ситуации:
файл funcs не выполняется сам по себе, найдите
call compile preprocessfilelinenumbers'..\funcs.sqf';
или
execvm'..\funcs.sqf';
дальше относительно того где это находится
(можете писать мне в скайп, буду отвечать без задержек если онлайн)
Edited by Ilias, 06 February 2017 - 08:11.
#580 OFFLINE
Posted 06 February 2017 - 08:19