Diff
checker
Texte
Texte
Images
Documents
Excel
Dossiers
Legal
Enterprise
Application de bureau
Prix
Se connecter
Télécharger Diffchecker Desktop
Comparer le texte
Trouver la différence entre deux fichiers texte
Outils
Historique
Éditeur live
Cacher identiques
Sans retour à la ligne
Vue
Divisé
Unifié
Niveau de précision
Intelligent
Mot
Caractère
Coloration syntaxique
Choisir la syntaxe
Ignorer
Transformer le texte
Aller au premier écart
Modifier l'entrée
Diffchecker Desktop
La façon la plus sécurisée d'utiliser Diffchecker. Obtenez l'application Diffchecker Desktop : vos diffs ne quittent jamais votre ordinateur !
Obtenir Desktop
Untitled diff
Créé
il y a 11 ans
Le diff n'expire jamais
Effacer
Exporter
Partager
Expliquer
53 suppressions
Lignes
Total
Supprimé
Caractères
Total
Supprimé
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
330 lignes
Copier tout
9 ajouts
Lignes
Total
Ajouté
Caractères
Total
Ajouté
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
290 lignes
Copier tout
// ******************************************************************************************
// ******************************************************************************************
// * 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;
Copier
Copié
Copier
Copié
{ _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;
Copier
Copié
Copier
Copié
{
_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];
};
};
Copier
Copié
Copier
Copié
if (isServer) then
if (isServer) then
{
{
Copier
Copié
Copier
Copié
_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];
Copier
Copié
Copier
Copié
}
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;
};
};
Copier
Copié
Copier
Copié
_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";
Copier
Copié
Copier
Copié
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);
};
};
Copier
Copié
Copier
Copié
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;
Copier
Copié
Copier
Copié
_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);
};
};
Copier
Copié
Copier
Copié
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];
};
};
};
};
};
};
};
};
};
};
};
};
Différences enregistrées
Texte d'origine
Ouvrir un fichier
// ****************************************************************************************** // * 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]; }; }; }; }; }; };
Texte modifié
Ouvrir un fichier
// ****************************************************************************************** // * 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]; }; }; }; }; }; };
Trouver la différence