Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
Untitled diff
作成日
11 年前
差分は期限切れになりません
クリア
エクスポート
共有
説明
53 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
330 行
すべてコピー
9 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
290 行
すべてコピー
// ******************************************************************************************
// ******************************************************************************************
// * This project is licensed under the GNU Affero GPL v3. Copyright © 2014 A3Wasteland.com *
// * This project is licensed under the GNU Affero GPL v3. Copyright © 2014 A3Wasteland.com *
// ******************************************************************************************
// ******************************************************************************************
// @file Version: 1.0
// @file Version: 1.0
// @file Name: setupStoreNPC.sqf
// @file Name: setupStoreNPC.sqf
// @file Author: AgentRev
// @file Author: AgentRev
// @file Created: 12/10/2013 12:36
// @file Created: 12/10/2013 12:36
// @file Args:
// @file Args:
#define STORE_ACTION_CONDITION "(player distance _target < 3)"
#define STORE_ACTION_CONDITION "(player distance _target < 3)"
#define SELL_CRATE_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {R3F_LOG_joueur_deplace_objet isKindOf 'ReammoBox_F'})"
#define SELL_CRATE_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {R3F_LOG_joueur_deplace_objet isKindOf 'ReammoBox_F'})"
#define SELL_CONTENTS_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {{R3F_LOG_joueur_deplace_objet isKindOf _x} count ['ReammoBox_F','AllVehicles'] > 0})"
#define SELL_CONTENTS_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {{R3F_LOG_joueur_deplace_objet isKindOf _x} count ['ReammoBox_F','AllVehicles'] > 0})"
#define SELL_VEH_CONTENTS_CONDITION "{!isNull objectFromNetId (player getVariable ['lastVehicleRidden', ''])}"
#define SELL_VEH_CONTENTS_CONDITION "{!isNull objectFromNetId (player getVariable ['lastVehicleRidden', ''])}"
#define SELL_BIN_CONDITION "(cursorTarget == _target)"
#define SELL_BIN_CONDITION "(cursorTarget == _target)"
private ["_npc", "_npcName", "_startsWith", "_building"];
private ["_npc", "_npcName", "_startsWith", "_building"];
_npc = _this select 0;
_npc = _this select 0;
コピー
コピー済み
コピー
コピー済み
{ _npc disableAI _x } forEach ["MOVE","FSM","TARGET","AUTOTARGET"];
_npcName = vehicleVarName _npc;
_npcName = vehicleVarName _npc;
_npc setName [_npcName,"",""];
_npc setName [_npcName,"",""];
_npc allowDamage false;
_npc allowDamage false;
コピー
コピー済み
コピー
コピー済み
{
_npc
disableAI _x } forEach ["MOVE","FSM","TARGET","AUTOTARGET"];
_npc
enableSimulation false;
if (hasInterface) then
if (hasInterface) then
{
{
_startsWith =
_startsWith =
{
{
private ["_needle", "_testArr"];
private ["_needle", "_testArr"];
_needle = _this select 0;
_needle = _this select 0;
_testArr = toArray (_this select 1);
_testArr = toArray (_this select 1);
_testArr resize count toArray _needle;
_testArr resize count toArray _needle;
(toString _testArr == _needle)
(toString _testArr == _needle)
};
};
switch (true) do
switch (true) do
{
{
case (["GenStore", _npcName] call _startsWith):
case (["GenStore", _npcName] call _startsWith):
{
{
_npc addAction ["<img image='client\icons\store.paa'/> Open General Store", "client\systems\generalStore\loadGenStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
_npc addAction ["<img image='client\icons\store.paa'/> Open General Store", "client\systems\generalStore\loadGenStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
};
};
case (["GunStore", _npcName] call _startsWith):
case (["GunStore", _npcName] call _startsWith):
{
{
_npc addAction ["<img image='client\icons\store.paa'/> Open Gun Store", "client\systems\gunStore\loadgunStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
_npc addAction ["<img image='client\icons\store.paa'/> Open Gun Store", "client\systems\gunStore\loadgunStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
};
};
case (["VehStore", _npcName] call _startsWith):
case (["VehStore", _npcName] call _startsWith):
{
{
_npc addAction ["<img image='client\icons\store.paa'/> Open Vehicle Store", "client\systems\vehicleStore\loadVehicleStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
_npc addAction ["<img image='client\icons\store.paa'/> Open Vehicle Store", "client\systems\vehicleStore\loadVehicleStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION];
};
};
};
};
_npc addAction ["<img image='client\icons\money.paa'/> Sell crate", "client\systems\selling\sellCrateItems.sqf", [false, false, true], 0.99, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CRATE_CONDITION];
_npc addAction ["<img image='client\icons\money.paa'/> Sell crate", "client\systems\selling\sellCrateItems.sqf", [false, false, true], 0.99, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CRATE_CONDITION];
_npc addAction ["<img image='client\icons\money.paa'/> Sell contents", "client\systems\selling\sellCrateItems.sqf", [], 0.98, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CONTENTS_CONDITION];
_npc addAction ["<img image='client\icons\money.paa'/> Sell contents", "client\systems\selling\sellCrateItems.sqf", [], 0.98, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CONTENTS_CONDITION];
_npc addAction ["<img image='client\icons\money.paa'/> Sell last vehicle contents", "client\systems\selling\sellVehicleItems.sqf", [], 0.97, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_VEH_CONTENTS_CONDITION];
_npc addAction ["<img image='client\icons\money.paa'/> Sell last vehicle contents", "client\systems\selling\sellVehicleItems.sqf", [], 0.97, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_VEH_CONTENTS_CONDITION];
};
};
コピー
コピー済み
コピー
コピー済み
if (isServer) then
if (isServer) then
{
{
コピー
コピー済み
コピー
コピー済み
_building = nearestBuilding _npc;
_npc setVariable ["storeNPC_nearestBuilding", netId _building, true];
_facesCfg = configFile >> "CfgFaces" >> "Man_A3";
_facesCfg = configFile >> "CfgFaces" >> "Man_A3";
_faces = [];
_faces = [];
for "_i" from 0 to (count _facesCfg - 1) do
for "_i" from 0 to (count _facesCfg - 1) do
{
{
_faceCfg = _facesCfg select _i;
_faceCfg = _facesCfg select _i;
_faceTex = toArray getText (_faceCfg >> "texture");
_faceTex = toArray getText (_faceCfg >> "texture");
_faceTex resize 1;
_faceTex resize 1;
_faceTex = toString _faceTex;
_faceTex = toString _faceTex;
if (_faceTex == "\") then
if (_faceTex == "\") then
{
{
_faces pushBack configName _faceCfg;
_faces pushBack configName _faceCfg;
};
};
};
};
_face = _faces call BIS_fnc_selectRandom;
_face = _faces call BIS_fnc_selectRandom;
_npc setFace _face;
_npc setFace _face;
_npc setVariable ["storeNPC_face", _face, true];
_npc setVariable ["storeNPC_face", _face, true];
コピー
コピー済み
コピー
コピー済み
}
else
{
private "_nearestBuilding";
waitUntil
{
sleep 0.1;
_nearestBuilding = _npc getVariable "storeNPC_nearestBuilding";
!isNil "_nearestBuilding"
};
_building = objectFromNetId _nearestBuilding;
};
if (isNil "_building" || {isNull _building}) then
{
_building = nearestBuilding _npc;
};
};
コピー
コピー済み
コピー
コピー済み
_building allowDamage true;
for "_i" from 1 to 99 do { _building setHit ["glass_" + str _i, 1] }; // pre-break the windows so people can shoot thru them
_building allowDamage false; // disable building damage
if (isServer) then
if (isServer) then
{
{
removeAllWeapons _npc;
removeAllWeapons _npc;
waitUntil {!isNil "storeConfigDone"};
waitUntil {!isNil "storeConfigDone"};
{
{
if (_x select 0 == _npcName) exitWith
if (_x select 0 == _npcName) exitWith
{
{
private "_frontOffset";
private "_frontOffset";
//collect our arguments
//collect our arguments
_npcPos = _x select 1;
_npcPos = _x select 1;
_deskDirMod = _x select 2;
_deskDirMod = _x select 2;
if (typeName _deskDirMod == "ARRAY" && {count _deskDirMod > 0}) then
if (typeName _deskDirMod == "ARRAY" && {count _deskDirMod > 0}) then
{
{
if (count _deskDirMod > 1) then
if (count _deskDirMod > 1) then
{
{
_frontOffset = _deskDirMod select 1;
_frontOffset = _deskDirMod select 1;
};
};
_deskDirMod = _deskDirMod select 0;
_deskDirMod = _deskDirMod select 0;
};
};
_storeOwnerAppearance = [];
_storeOwnerAppearance = [];
{
{
if (_x select 0 == _npcName) exitWith
if (_x select 0 == _npcName) exitWith
{
{
_storeOwnerAppearance = _x select 1;
_storeOwnerAppearance = _x select 1;
};
};
} forEach (call storeOwnerConfigAppearance);
} forEach (call storeOwnerConfigAppearance);
{
{
_type = _x select 0;
_type = _x select 0;
_classname = _x select 1;
_classname = _x select 1;
switch (toLower _type) do
switch (toLower _type) do
{
{
case "weapon":
case "weapon":
{
{
if (_classname != "") then
if (_classname != "") then
{
{
diag_log format ["Applying %1 as weapon for %2", _classname, _npcName];
diag_log format ["Applying %1 as weapon for %2", _classname, _npcName];
_npc addWeapon _classname;
_npc addWeapon _classname;
};
};
};
};
case "uniform":
case "uniform":
{
{
if (_classname != "") then
if (_classname != "") then
{
{
diag_log format ["Applying %1 as uniform for %2", _classname, _npcName];
diag_log format ["Applying %1 as uniform for %2", _classname, _npcName];
//_npc addUniform _classname;
//_npc addUniform _classname;
_npc forceAddUniform _classname;
_npc forceAddUniform _classname;
};
};
};
};
case "switchMove":
case "switchMove":
{
{
if (_classname != "") then
if (_classname != "") then
{
{
diag_log format ["Applying %1 as switchMove for %2", _classname, _npcName];
diag_log format ["Applying %1 as switchMove for %2", _classname, _npcName];
_npc switchMove _classname;
_npc switchMove _classname;
};
};
};
};
};
};
} forEach _storeOwnerAppearance;
} forEach _storeOwnerAppearance;
_pDir = getDir _npc;
_pDir = getDir _npc;
private "_bPos";
private "_bPos";
コピー
コピー済み
コピー
コピー済み
switch (toUpper typeName _npcPos) do
_bPos = getPosATL
_npc
;
{
case "SCALAR":
{
_bPos = _building buildingPos _npcPos;
};
case "ARRAY":
{
_bPos = _npcPos;
};
};
_bPos = _building buildingPos
_npc
Pos
;
if (!isNil "_frontOffset") then
if (!isNil "_frontOffset") then
{
{
_bPos = _bPos vectorAdd ([[0, _frontOffset, 0], -_pDir] call BIS_fnc_rotateVector2D);
_bPos = _bPos vectorAdd ([[0, _frontOffset, 0], -_pDir] call BIS_fnc_rotateVector2D);
};
};
コピー
コピー済み
コピー
コピー済み
if (_bPos isEqualTo [0,0,0]) then
{
_bPos = getPosATL _npc;
}
else
{
_npc setPosATL _bPos;
};
_desk = [_npc, _bPos, _pDir, _deskDirMod] call compile preprocessFileLineNumbers "server\functions\createStoreFurniture.sqf";
_desk = [_npc, _bPos, _pDir, _deskDirMod] call compile preprocessFileLineNumbers "server\functions\createStoreFurniture.sqf";
_npc setVariable ["storeNPC_cashDesk", netId _desk, true];
_npc setVariable ["storeNPC_cashDesk", netId _desk, true];
sleep 1;
sleep 1;
_bbNPC = boundingBoxReal _npc;
_bbNPC = boundingBoxReal _npc;
_bbDesk = boundingBoxReal _desk;
_bbDesk = boundingBoxReal _desk;
_bcNPC = boundingCenter _npc;
_bcNPC = boundingCenter _npc;
_bcDesk = boundingCenter _desk;
_bcDesk = boundingCenter _desk;
コピー
コピー済み
コピー
コピー済み
_npcHeightRel = (_desk worldToModel (getPosA
T
L _npc)) select 2;
_npcHeightRel = (_desk worldToModel (getPosA
S
L _npc)) select 2;
// must be done twice for the direction to set properly
// must be done twice for the direction to set properly
for "_i" from 1 to 2 do
for "_i" from 1 to 2 do
{
{
_npc attachTo
_npc attachTo
[
[
_desk,
_desk,
[
[
0,
0,
((_bcNPC select 1) - (_bcDesk select 1)) +
((_bcNPC select 1) - (_bcDesk select 1)) +
((_bbNPC select 1 select 1) - (_bcNPC select 1)) -
((_bbNPC select 1 select 1) - (_bcNPC select 1)) -
((_bbDesk select 1 select 1) - (_bcDesk select 1)) + 0.1,
((_bbDesk select 1 select 1) - (_bcDesk select 1)) + 0.1,
_npcHeightRel
_npcHeightRel
]
]
];
];
_npc setDir 180;
_npc setDir 180;
};
};
detach _npc;
detach _npc;
sleep 1;
sleep 1;
_npc enableSimulation false;
_npc enableSimulation false;
_desk enableSimulationGlobal false;
_desk enableSimulationGlobal false;
};
};
} forEach (call storeOwnerConfig);
} forEach (call storeOwnerConfig);
};
};
コピー
コピー済み
コピー
コピー済み
if (isServer) then
if (isServer) then
{
{
_npc setVariable ["storeNPC_setupComplete", true, true];
_npc setVariable ["storeNPC_setupComplete", true, true];
};
};
// Add sell box in front of counter
// Add sell box in front of counter
if (hasInterface) then
if (hasInterface) then
{
{
waitUntil {sleep 1; _npc getVariable ["storeNPC_setupComplete", false]};
waitUntil {sleep 1; _npc getVariable ["storeNPC_setupComplete", false]};
_desk = objectFromNetId (_npc getVariable ["storeNPC_cashDesk", ""]);
_desk = objectFromNetId (_npc getVariable ["storeNPC_cashDesk", ""]);
_face = _npc getVariable ["storeNPC_face", ""];
_face = _npc getVariable ["storeNPC_face", ""];
if (_face != "") then
if (_face != "") then
{
{
_npc setFace _face;
_npc setFace _face;
};
};
if (!isNull _desk) then
if (!isNull _desk) then
{
{
_desk spawn
_desk spawn
{
{
_desk = _this;
_desk = _this;
_createSellBox =
_createSellBox =
{
{
_deskOffset = (getPosASL _desk) vectorAdd ([[-0.05,-0.6,0], -(getDir _desk)] call BIS_fnc_rotateVector2D);
_deskOffset = (getPosASL _desk) vectorAdd ([[-0.05,-0.6,0], -(getDir _desk)] call BIS_fnc_rotateVector2D);
_sellBox = "Box_IND_Ammo_F" createVehicleLocal ASLtoATL _deskOffset;
_sellBox = "Box_IND_Ammo_F" createVehicleLocal ASLtoATL _deskOffset;
_sellBox allowDamage false;
_sellBox allowDamage false;
_sellBox setVariable ["R3F_LOG_disabled", true];
_sellBox setVariable ["R3F_LOG_disabled", true];
_sellBox setVariable ["A3W_storeSellBox", true];
_sellBox setVariable ["A3W_storeSellBox", true];
_sellBox setObjectTexture [0, ""]; // remove side marking
_sellBox setObjectTexture [0, ""]; // remove side marking
clearBackpackCargo _sellBox;
clearBackpackCargo _sellBox;
clearMagazineCargo _sellBox;
clearMagazineCargo _sellBox;
clearWeaponCargo _sellBox;
clearWeaponCargo _sellBox;
clearItemCargo _sellBox;
clearItemCargo _sellBox;
// must be done twice for the position to set properly
// must be done twice for the position to set properly
for "_i" from 1 to 2 do
for "_i" from 1 to 2 do
{
{
_sellBox setVelocity [0,0,0];
_sellBox setVelocity [0,0,0];
_sellBox setVectorDirAndUp [[vectorDir _desk, -90] call BIS_fnc_rotateVector2D, [0,0,1]];
_sellBox setVectorDirAndUp [[vectorDir _desk, -90] call BIS_fnc_rotateVector2D, [0,0,1]];
_sellBox setPosASL _deskOffset;
_sellBox setPosASL _deskOffset;
_boxPos = getPos _sellBox;
_boxPos = getPos _sellBox;
if (_boxPos select 2 > 0) then
if (_boxPos select 2 > 0) then
{
{
_boxPosASL = getPosASL _sellBox;
_boxPosASL = getPosASL _sellBox;
_boxPosASL set [2, (_boxPosASL select 2) - (_boxPos select 2)];
_boxPosASL set [2, (_boxPosASL select 2) - (_boxPos select 2)];
_sellBox setPosASL _boxPosASL;
_sellBox setPosASL _boxPosASL;
};
};
};
};
_sellBox addAction ["<img image='client\icons\money.paa'/> Sell bin contents", "client\systems\selling\sellCrateItems.sqf", [true], 1, false, false, "", STORE_ACTION_CONDITION + " && " + SELL_BIN_CONDITION];
_sellBox addAction ["<img image='client\icons\money.paa'/> Sell bin contents", "client\systems\selling\sellCrateItems.sqf", [true], 1, false, false, "", STORE_ACTION_CONDITION + " && " + SELL_BIN_CONDITION];
_boxPos = getPosATL _sellBox;
_boxPos = getPosATL _sellBox;
_boxVecDir = vectorDir _sellBox;
_boxVecDir = vectorDir _sellBox;
_boxVecUp = vectorUp _sellBox;
_boxVecUp = vectorUp _sellBox;
};
};
private ["_sellBox", "_boxPos", "_boxVecDir", "_boxVecUp"];
private ["_sellBox", "_boxPos", "_boxVecDir", "_boxVecUp"];
call _createSellBox;
call _createSellBox;
while {true} do
while {true} do
{
{
sleep 5;
sleep 5;
if (!alive _sellBox) then
if (!alive _sellBox) then
{
{
deleteVehicle _sellBox;
deleteVehicle _sellBox;
call _createSellBox;
call _createSellBox;
}
}
else
else
{
{
if ((getPosATL _sellBox) vectorDistance _boxPos > 0.1 ||
if ((getPosATL _sellBox) vectorDistance _boxPos > 0.1 ||
{(vectorDir _sellBox) vectorDistance _boxVecDir > 0.1} ||
{(vectorDir _sellBox) vectorDistance _boxVecDir > 0.1} ||
{(vectorUp _sellBox) vectorDistance _boxVecUp > 0.1}) then
{(vectorUp _sellBox) vectorDistance _boxVecUp > 0.1}) then
{
{
_sellBox setPosATL _boxPos;
_sellBox setPosATL _boxPos;
_sellBox setVectorDirAndUp [_boxVecDir, _boxVecUp];
_sellBox setVectorDirAndUp [_boxVecDir, _boxVecUp];
};
};
};
};
};
};
};
};
};
};
};
};
保存された差分
原文
ファイルを開く
// ****************************************************************************************** // * This project is licensed under the GNU Affero GPL v3. Copyright © 2014 A3Wasteland.com * // ****************************************************************************************** // @file Version: 1.0 // @file Name: setupStoreNPC.sqf // @file Author: AgentRev // @file Created: 12/10/2013 12:36 // @file Args: #define STORE_ACTION_CONDITION "(player distance _target < 3)" #define SELL_CRATE_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {R3F_LOG_joueur_deplace_objet isKindOf 'ReammoBox_F'})" #define SELL_CONTENTS_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {{R3F_LOG_joueur_deplace_objet isKindOf _x} count ['ReammoBox_F','AllVehicles'] > 0})" #define SELL_VEH_CONTENTS_CONDITION "{!isNull objectFromNetId (player getVariable ['lastVehicleRidden', ''])}" #define SELL_BIN_CONDITION "(cursorTarget == _target)" private ["_npc", "_npcName", "_startsWith", "_building"]; _npc = _this select 0; _npcName = vehicleVarName _npc; _npc setName [_npcName,"",""]; _npc allowDamage false; { _npc disableAI _x } forEach ["MOVE","FSM","TARGET","AUTOTARGET"]; if (hasInterface) then { _startsWith = { private ["_needle", "_testArr"]; _needle = _this select 0; _testArr = toArray (_this select 1); _testArr resize count toArray _needle; (toString _testArr == _needle) }; switch (true) do { case (["GenStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open General Store", "client\systems\generalStore\loadGenStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; case (["GunStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open Gun Store", "client\systems\gunStore\loadgunStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; case (["VehStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open Vehicle Store", "client\systems\vehicleStore\loadVehicleStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; }; _npc addAction ["<img image='client\icons\money.paa'/> Sell crate", "client\systems\selling\sellCrateItems.sqf", [false, false, true], 0.99, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CRATE_CONDITION]; _npc addAction ["<img image='client\icons\money.paa'/> Sell contents", "client\systems\selling\sellCrateItems.sqf", [], 0.98, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CONTENTS_CONDITION]; _npc addAction ["<img image='client\icons\money.paa'/> Sell last vehicle contents", "client\systems\selling\sellVehicleItems.sqf", [], 0.97, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_VEH_CONTENTS_CONDITION]; }; if (isServer) then { _building = nearestBuilding _npc; _npc setVariable ["storeNPC_nearestBuilding", netId _building, true]; _facesCfg = configFile >> "CfgFaces" >> "Man_A3"; _faces = []; for "_i" from 0 to (count _facesCfg - 1) do { _faceCfg = _facesCfg select _i; _faceTex = toArray getText (_faceCfg >> "texture"); _faceTex resize 1; _faceTex = toString _faceTex; if (_faceTex == "\") then { _faces pushBack configName _faceCfg; }; }; _face = _faces call BIS_fnc_selectRandom; _npc setFace _face; _npc setVariable ["storeNPC_face", _face, true]; } else { private "_nearestBuilding"; waitUntil { sleep 0.1; _nearestBuilding = _npc getVariable "storeNPC_nearestBuilding"; !isNil "_nearestBuilding" }; _building = objectFromNetId _nearestBuilding; }; if (isNil "_building" || {isNull _building}) then { _building = nearestBuilding _npc; }; _building allowDamage true; for "_i" from 1 to 99 do { _building setHit ["glass_" + str _i, 1] }; // pre-break the windows so people can shoot thru them _building allowDamage false; // disable building damage if (isServer) then { removeAllWeapons _npc; waitUntil {!isNil "storeConfigDone"}; { if (_x select 0 == _npcName) exitWith { private "_frontOffset"; //collect our arguments _npcPos = _x select 1; _deskDirMod = _x select 2; if (typeName _deskDirMod == "ARRAY" && {count _deskDirMod > 0}) then { if (count _deskDirMod > 1) then { _frontOffset = _deskDirMod select 1; }; _deskDirMod = _deskDirMod select 0; }; _storeOwnerAppearance = []; { if (_x select 0 == _npcName) exitWith { _storeOwnerAppearance = _x select 1; }; } forEach (call storeOwnerConfigAppearance); { _type = _x select 0; _classname = _x select 1; switch (toLower _type) do { case "weapon": { if (_classname != "") then { diag_log format ["Applying %1 as weapon for %2", _classname, _npcName]; _npc addWeapon _classname; }; }; case "uniform": { if (_classname != "") then { diag_log format ["Applying %1 as uniform for %2", _classname, _npcName]; //_npc addUniform _classname; _npc forceAddUniform _classname; }; }; case "switchMove": { if (_classname != "") then { diag_log format ["Applying %1 as switchMove for %2", _classname, _npcName]; _npc switchMove _classname; }; }; }; } forEach _storeOwnerAppearance; _pDir = getDir _npc; private "_bPos"; switch (toUpper typeName _npcPos) do { case "SCALAR": { _bPos = _building buildingPos _npcPos; }; case "ARRAY": { _bPos = _npcPos; }; }; _bPos = _building buildingPos _npcPos; if (!isNil "_frontOffset") then { _bPos = _bPos vectorAdd ([[0, _frontOffset, 0], -_pDir] call BIS_fnc_rotateVector2D); }; if (_bPos isEqualTo [0,0,0]) then { _bPos = getPosATL _npc; } else { _npc setPosATL _bPos; }; _desk = [_npc, _bPos, _pDir, _deskDirMod] call compile preprocessFileLineNumbers "server\functions\createStoreFurniture.sqf"; _npc setVariable ["storeNPC_cashDesk", netId _desk, true]; sleep 1; _bbNPC = boundingBoxReal _npc; _bbDesk = boundingBoxReal _desk; _bcNPC = boundingCenter _npc; _bcDesk = boundingCenter _desk; _npcHeightRel = (_desk worldToModel (getPosATL _npc)) select 2; // must be done twice for the direction to set properly for "_i" from 1 to 2 do { _npc attachTo [ _desk, [ 0, ((_bcNPC select 1) - (_bcDesk select 1)) + ((_bbNPC select 1 select 1) - (_bcNPC select 1)) - ((_bbDesk select 1 select 1) - (_bcDesk select 1)) + 0.1, _npcHeightRel ] ]; _npc setDir 180; }; detach _npc; sleep 1; _npc enableSimulation false; _desk enableSimulationGlobal false; }; } forEach (call storeOwnerConfig); }; if (isServer) then { _npc setVariable ["storeNPC_setupComplete", true, true]; }; // Add sell box in front of counter if (hasInterface) then { waitUntil {sleep 1; _npc getVariable ["storeNPC_setupComplete", false]}; _desk = objectFromNetId (_npc getVariable ["storeNPC_cashDesk", ""]); _face = _npc getVariable ["storeNPC_face", ""]; if (_face != "") then { _npc setFace _face; }; if (!isNull _desk) then { _desk spawn { _desk = _this; _createSellBox = { _deskOffset = (getPosASL _desk) vectorAdd ([[-0.05,-0.6,0], -(getDir _desk)] call BIS_fnc_rotateVector2D); _sellBox = "Box_IND_Ammo_F" createVehicleLocal ASLtoATL _deskOffset; _sellBox allowDamage false; _sellBox setVariable ["R3F_LOG_disabled", true]; _sellBox setVariable ["A3W_storeSellBox", true]; _sellBox setObjectTexture [0, ""]; // remove side marking clearBackpackCargo _sellBox; clearMagazineCargo _sellBox; clearWeaponCargo _sellBox; clearItemCargo _sellBox; // must be done twice for the position to set properly for "_i" from 1 to 2 do { _sellBox setVelocity [0,0,0]; _sellBox setVectorDirAndUp [[vectorDir _desk, -90] call BIS_fnc_rotateVector2D, [0,0,1]]; _sellBox setPosASL _deskOffset; _boxPos = getPos _sellBox; if (_boxPos select 2 > 0) then { _boxPosASL = getPosASL _sellBox; _boxPosASL set [2, (_boxPosASL select 2) - (_boxPos select 2)]; _sellBox setPosASL _boxPosASL; }; }; _sellBox addAction ["<img image='client\icons\money.paa'/> Sell bin contents", "client\systems\selling\sellCrateItems.sqf", [true], 1, false, false, "", STORE_ACTION_CONDITION + " && " + SELL_BIN_CONDITION]; _boxPos = getPosATL _sellBox; _boxVecDir = vectorDir _sellBox; _boxVecUp = vectorUp _sellBox; }; private ["_sellBox", "_boxPos", "_boxVecDir", "_boxVecUp"]; call _createSellBox; while {true} do { sleep 5; if (!alive _sellBox) then { deleteVehicle _sellBox; call _createSellBox; } else { if ((getPosATL _sellBox) vectorDistance _boxPos > 0.1 || {(vectorDir _sellBox) vectorDistance _boxVecDir > 0.1} || {(vectorUp _sellBox) vectorDistance _boxVecUp > 0.1}) then { _sellBox setPosATL _boxPos; _sellBox setVectorDirAndUp [_boxVecDir, _boxVecUp]; }; }; }; }; }; };
変更されたテキスト
ファイルを開く
// ****************************************************************************************** // * This project is licensed under the GNU Affero GPL v3. Copyright © 2014 A3Wasteland.com * // ****************************************************************************************** // @file Version: 1.0 // @file Name: setupStoreNPC.sqf // @file Author: AgentRev // @file Created: 12/10/2013 12:36 // @file Args: #define STORE_ACTION_CONDITION "(player distance _target < 3)" #define SELL_CRATE_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {R3F_LOG_joueur_deplace_objet isKindOf 'ReammoBox_F'})" #define SELL_CONTENTS_CONDITION "(!isNil 'R3F_LOG_joueur_deplace_objet' && {{R3F_LOG_joueur_deplace_objet isKindOf _x} count ['ReammoBox_F','AllVehicles'] > 0})" #define SELL_VEH_CONTENTS_CONDITION "{!isNull objectFromNetId (player getVariable ['lastVehicleRidden', ''])}" #define SELL_BIN_CONDITION "(cursorTarget == _target)" private ["_npc", "_npcName", "_startsWith", "_building"]; _npc = _this select 0; { _npc disableAI _x } forEach ["MOVE","FSM","TARGET","AUTOTARGET"]; _npcName = vehicleVarName _npc; _npc setName [_npcName,"",""]; _npc allowDamage false; _npc enableSimulation false; if (hasInterface) then { _startsWith = { private ["_needle", "_testArr"]; _needle = _this select 0; _testArr = toArray (_this select 1); _testArr resize count toArray _needle; (toString _testArr == _needle) }; switch (true) do { case (["GenStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open General Store", "client\systems\generalStore\loadGenStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; case (["GunStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open Gun Store", "client\systems\gunStore\loadgunStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; case (["VehStore", _npcName] call _startsWith): { _npc addAction ["<img image='client\icons\store.paa'/> Open Vehicle Store", "client\systems\vehicleStore\loadVehicleStore.sqf", [], 1, true, true, "", STORE_ACTION_CONDITION]; }; }; _npc addAction ["<img image='client\icons\money.paa'/> Sell crate", "client\systems\selling\sellCrateItems.sqf", [false, false, true], 0.99, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CRATE_CONDITION]; _npc addAction ["<img image='client\icons\money.paa'/> Sell contents", "client\systems\selling\sellCrateItems.sqf", [], 0.98, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_CONTENTS_CONDITION]; _npc addAction ["<img image='client\icons\money.paa'/> Sell last vehicle contents", "client\systems\selling\sellVehicleItems.sqf", [], 0.97, false, true, "", STORE_ACTION_CONDITION + " && " + SELL_VEH_CONTENTS_CONDITION]; }; if (isServer) then { _facesCfg = configFile >> "CfgFaces" >> "Man_A3"; _faces = []; for "_i" from 0 to (count _facesCfg - 1) do { _faceCfg = _facesCfg select _i; _faceTex = toArray getText (_faceCfg >> "texture"); _faceTex resize 1; _faceTex = toString _faceTex; if (_faceTex == "\") then { _faces pushBack configName _faceCfg; }; }; _face = _faces call BIS_fnc_selectRandom; _npc setFace _face; _npc setVariable ["storeNPC_face", _face, true]; }; if (isServer) then { removeAllWeapons _npc; waitUntil {!isNil "storeConfigDone"}; { if (_x select 0 == _npcName) exitWith { private "_frontOffset"; //collect our arguments _npcPos = _x select 1; _deskDirMod = _x select 2; if (typeName _deskDirMod == "ARRAY" && {count _deskDirMod > 0}) then { if (count _deskDirMod > 1) then { _frontOffset = _deskDirMod select 1; }; _deskDirMod = _deskDirMod select 0; }; _storeOwnerAppearance = []; { if (_x select 0 == _npcName) exitWith { _storeOwnerAppearance = _x select 1; }; } forEach (call storeOwnerConfigAppearance); { _type = _x select 0; _classname = _x select 1; switch (toLower _type) do { case "weapon": { if (_classname != "") then { diag_log format ["Applying %1 as weapon for %2", _classname, _npcName]; _npc addWeapon _classname; }; }; case "uniform": { if (_classname != "") then { diag_log format ["Applying %1 as uniform for %2", _classname, _npcName]; //_npc addUniform _classname; _npc forceAddUniform _classname; }; }; case "switchMove": { if (_classname != "") then { diag_log format ["Applying %1 as switchMove for %2", _classname, _npcName]; _npc switchMove _classname; }; }; }; } forEach _storeOwnerAppearance; _pDir = getDir _npc; private "_bPos"; _bPos = getPosATL _npc; if (!isNil "_frontOffset") then { _bPos = _bPos vectorAdd ([[0, _frontOffset, 0], -_pDir] call BIS_fnc_rotateVector2D); }; _desk = [_npc, _bPos, _pDir, _deskDirMod] call compile preprocessFileLineNumbers "server\functions\createStoreFurniture.sqf"; _npc setVariable ["storeNPC_cashDesk", netId _desk, true]; sleep 1; _bbNPC = boundingBoxReal _npc; _bbDesk = boundingBoxReal _desk; _bcNPC = boundingCenter _npc; _bcDesk = boundingCenter _desk; _npcHeightRel = (_desk worldToModel (getPosASL _npc)) select 2; // must be done twice for the direction to set properly for "_i" from 1 to 2 do { _npc attachTo [ _desk, [ 0, ((_bcNPC select 1) - (_bcDesk select 1)) + ((_bbNPC select 1 select 1) - (_bcNPC select 1)) - ((_bbDesk select 1 select 1) - (_bcDesk select 1)) + 0.1, _npcHeightRel ] ]; _npc setDir 180; }; detach _npc; sleep 1; _npc enableSimulation false; _desk enableSimulationGlobal false; }; } forEach (call storeOwnerConfig); }; if (isServer) then { _npc setVariable ["storeNPC_setupComplete", true, true]; }; // Add sell box in front of counter if (hasInterface) then { waitUntil {sleep 1; _npc getVariable ["storeNPC_setupComplete", false]}; _desk = objectFromNetId (_npc getVariable ["storeNPC_cashDesk", ""]); _face = _npc getVariable ["storeNPC_face", ""]; if (_face != "") then { _npc setFace _face; }; if (!isNull _desk) then { _desk spawn { _desk = _this; _createSellBox = { _deskOffset = (getPosASL _desk) vectorAdd ([[-0.05,-0.6,0], -(getDir _desk)] call BIS_fnc_rotateVector2D); _sellBox = "Box_IND_Ammo_F" createVehicleLocal ASLtoATL _deskOffset; _sellBox allowDamage false; _sellBox setVariable ["R3F_LOG_disabled", true]; _sellBox setVariable ["A3W_storeSellBox", true]; _sellBox setObjectTexture [0, ""]; // remove side marking clearBackpackCargo _sellBox; clearMagazineCargo _sellBox; clearWeaponCargo _sellBox; clearItemCargo _sellBox; // must be done twice for the position to set properly for "_i" from 1 to 2 do { _sellBox setVelocity [0,0,0]; _sellBox setVectorDirAndUp [[vectorDir _desk, -90] call BIS_fnc_rotateVector2D, [0,0,1]]; _sellBox setPosASL _deskOffset; _boxPos = getPos _sellBox; if (_boxPos select 2 > 0) then { _boxPosASL = getPosASL _sellBox; _boxPosASL set [2, (_boxPosASL select 2) - (_boxPos select 2)]; _sellBox setPosASL _boxPosASL; }; }; _sellBox addAction ["<img image='client\icons\money.paa'/> Sell bin contents", "client\systems\selling\sellCrateItems.sqf", [true], 1, false, false, "", STORE_ACTION_CONDITION + " && " + SELL_BIN_CONDITION]; _boxPos = getPosATL _sellBox; _boxVecDir = vectorDir _sellBox; _boxVecUp = vectorUp _sellBox; }; private ["_sellBox", "_boxPos", "_boxVecDir", "_boxVecUp"]; call _createSellBox; while {true} do { sleep 5; if (!alive _sellBox) then { deleteVehicle _sellBox; call _createSellBox; } else { if ((getPosATL _sellBox) vectorDistance _boxPos > 0.1 || {(vectorDir _sellBox) vectorDistance _boxVecDir > 0.1} || {(vectorUp _sellBox) vectorDistance _boxVecUp > 0.1}) then { _sellBox setPosATL _boxPos; _sellBox setVectorDirAndUp [_boxVecDir, _boxVecUp]; }; }; }; }; }; };
違いを見つける