Skocz do zawartości
Zaloguj się, aby obserwować  
GieNkoV

Przydatne Komendy

Polecane posty

Sebastian    0

Co do tego, co dodał [m=STALKER14] dodaje ogólny wzór na robienie interakcji pod ACE. Wklejane do init.sqf.

 

Interakcja zew.

_action = ["nazwa_menu", "Twoja nazwa menu", "", {}, {true}] call ace_interact_menu_fnc_createAction;
{[_x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject;} forEach allUnits;

_action1 = ["nazwa_opcji", "Twoja nazwa opcji", "", {hint "Coś tam"}, {true}] call ace_interact_menu_fnc_createAction;
{[_x, 0, ["ACE_MainActions", "nazwa_menu"], _action1] call ace_interact_menu_fnc_addActionToObject;} forEach allUnits;

Interakcja wew. na bazie co wyżej:

_action = ["nazwa_menu", "Twoja nazwa", "", {}, {true}] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions"], _action] call ace_interact_menu_fnc_addActionToObject;

_action1 = ["nazwa_opcji", "Opcja", "", {hint "Coś tam."}, {true}] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", "nazwa_menu"], _action1] call ace_interact_menu_fnc_addActionToObject;

Teoretycznie można robić podopcje(dzieci) w nieskończoność.

 

 

Zmienna {_x} forEach allUnits; powoduje, że interakcja nie jest przypisana konkretnie pod kogoś, tylko do wszystkich. Przy interakcji wew. można zamienić w/w na player i usunąć {} for each allunits.

 

 

@edit: W związku z powyższym stworzyłem skrypt zewnętrzny. Skrypt zabójstwa osoby, do której sie podchodzi. Dodałem dźwięk wbijania noża, który wydobywa sie z zabijającego. Niestety nie potrafie zrobić tak, żeby dźwięk był od zabijanego, dlatego jeśli ktoś ma pomysł, to prosze edytować post pode mną.

_action = ["nazwa_menu", "Akcje", "", {}, {true}] call ace_interact_menu_fnc_createAction;{
[ _x, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject;} forEach allUnits;

_action1 = ["option_name", "Zabij nożem", "", {this setDamage 1; [player, "Choking"] call CBA_fnc_globalSay3d;}, {true}] call ace_interact_menu_fnc_createAction;
{[ _x, 0, ["ACE_MainActions", "nazwa_menu"], _action1] call ace_interact_menu_fnc_addActionToObject;} forEach allUnits
Edytowano przez Sebastian
  • Upvote 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
GieNkoV    601

Usunięcie pojazdu/ów wraz z załogą przy osiągnięciu pkt. naw.

 

Przydatne, gdy przykładowo tworzymy misję gdzie docieramy na miejsce samolotem sterowanym przez AI. Pojazd oraz jego załoga zostaną usunięci z gry zaraz po osiągnięciu punktu nawigacyjnego. Zwiększymy tym samym wydajność naszej misji.

 

Do pola aktywacji punktu nawigacyjnego dopisujemy:

{deleteVehicle vehicle _x} forEach thislist;
{deleteVehicle _x} forEach thislist;
deleteGroup (group this);

Jeżeli w grupie AI jest tylko jeden pojazd, możemy skorzystać z krótszej wersji kodu, powyższa jest bardziej uniwersalna:

deleteVehicle (vehicle this);
{deleteVehicle _x} forEach thislist;
deleteGroup (group this);

Lektura dla zainteresowanych, w szczególności powinna zainteresować część o this i thislist w waypointach:

https://community.bistudio.com/wiki/2D_Editor:_Waypoints#On_Act.28ivation.29

Edytowano przez GieNkoV

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Przezbrajanie ze skrzynki jednym kliknięciem!

Dodajemy skrzynkę, w tym przypadku nadaje jej zmienną : stl

W polu inicjowania wklejamy: action1 = stl addAction ["Dozbroić TL","armtl.sqf"];

Skrypt armtl.sqf:

removeAllWeapons s17;
removeAllItems s17;
removeAllAssigneditems s17;
removeUniform s17;
removeVest s17;
removeHeadgear s17;
removeGoggles s17;
removeBackpackGlobal s17;

s17 forceAddUniform "TRYK_U_B_ODTAN";
for "_i" from 1 to 2 do {s17 addItemToUniform "ACE_morphine";};
for "_i" from 1 to 2 do {s17 addItemToUniform "ACE_elasticBandage";};
for "_i" from 1 to 2 do {s17 addItemToUniform "ACE_fieldDressing";};
for "_i" from 1 to 2 do {s17 addItemToUniform "ACE_packingBandage";};
s17 addItemToUniform "ACE_MapTools";
s17 addItemToUniform "ACE_CableTie";
for "_i" from 1 to 2 do {s17 addItemToUniform "ACE_quikclot";};
s17 addItemToUniform "ACE_tourniquet";
s17 addItemToUniform "ACE_EarPlugs";
s17 addItemToUniform "ACE_IR_Strobe_Item";
s17 addItemToUniform "ACE_DefusalKit";
s17 addItemToUniform "ACE_SpraypaintGreen";
s17 addVest "TAC_EI_RRV25_RG";
for "_i" from 1 to 3 do {s17 addItemToVest "rhs_mag_30Rnd_556x45_Mk262_Stanag";};
for "_i" from 1 to 3 do {s17 addItemToVest "rhsusf_mag_17Rnd_9x19_FMJ";};
for "_i" from 1 to 2 do {s17 addItemToVest "rhs_mag_30Rnd_556x45_M855A1_Stanag_Tracer_Red";};
s17 addItemToVest "MiniGrenade";
for "_i" from 1 to 2 do {s17 addItemToVest "SmokeShell";};
s17 addItemToVest "rhs_mag_30Rnd_556x45_Mk318_Stanag";
s17 addBackpackGlobal "TAC_MTAP_RG2";
s17 addItemToBackpack "NVGoggles_INDEP";
for "_i" from 1 to 2 do {s17 addItemToBackpack "MiniGrenade";};
s17 addItemToBackpack "SmokeShell";
for "_i" from 1 to 2 do {s17 addItemToBackpack "Chemlight_green";};
for "_i" from 1 to 2 do {s17 addItemToBackpack "ACE_Chemlight_HiYellow";};
s17 addHeadgear "rhsusf_bowman_cap";
s17 addGoggles "PBW_shemagh_gruen";

s17 addWeapon "rhs_weap_m4a1_carryhandle_grip3";
s17 addPrimaryWeaponItem "rhsusf_acc_SF3P556";
s17 addPrimaryWeaponItem "rhsusf_acc_anpeq15_bk";
s17 addPrimaryWeaponItem "RH_compm4s";
s17 addPrimaryWeaponItem "rhsusf_acc_grip3";
s17 addWeapon "rhsusf_weap_glock17g4";
s17 addWeapon "ACE_MX2A";

s17 linkItem "ItemMap";
s17 linkItem "ItemCompass";
s17 linkItem "ItemWatch";
s17 linkItem "ItemRadioAcreFlagged";

stl removeAction action1;

s17 to w tym przypadku nazwa zmiennej gracza, którego będziemy docelowo przezbrajać.

To tylko przykładowy loadout.

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Dodawanie latarek jednostkom spawnowanym z DACa.

W pliku dac_config_events.sqf

	case 2:
	{
		_Events_Unit_S =	[
								["{_x addPrimaryWeaponItem ""rhs_acc_2dpZenit""} forEach (units _group); {_x enableGunLights ""forceOn""} forEach (units _group);"], 
								[],
								[],
								[],
								[],
								[],
								[]
							];
		_Events_Unit_V = 	[
								[],
								[],
								[],
								[],
								[],
								[],
								[]
							];
		_Events_Unit_T = 	[
								[],
								[],
								[],
								[]
							];
		_Events_Unit_A = 	[
								[],
								[],
								[],
								[]
							];
		_Events_Unit_C = 	[
								[],
								[],
								[],
								[],
								[],
								[]
							];
		_Events_Unit_H = 	[
								[],
								[],
								[],
								[]
							];
		_Events_Vehicle =	[
								[],
								[],
								[]
							];
	};

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Rizzet    151

Jak łatwo usunąć obiekty (budynki, drzewa itp.) z mapy na określonym obszarze?

1. Stawiamy marker obszarowy, nazywamy go (pole "nazwa zmiennej/variable name") moj_testowy_marker1

Jeżeli chcemy dokładnie określić obszar markera w widoku 3d możemy skorzystać ze sztuczki:

  a) Stawiamy wyzwalacz, klikamy 5 żeby użyć widgetu obszarowego. Wyzwalacze widać w trybie 3d więc możemy łatwo ocenić jego obszar

  b) Przechodzimy w tryb 2d i stawiamy marker obszarowy.

  c) Ponownie używamy widgetu obszarowego żeby dostosować obszar markera

  d) Kasujemy wyzwalacz

 

2. Wklejamy do init.sqf:

 

_markername="moj_testowy_marker1";
_terrainobjects=nearestTerrainObjects [(getMarkerPos _markername),[],(getmarkersize _markername)select 0];
{hideObjectGlobal _x} foreach _terrainobjects;

Jeżeli chcemy usunąć obiekty w kilku obszarach, wykonujemy powyższy kod dla kolejnych nazw markerów (np. moj_testowy_marker2, moj_testowy_marker3 itd.).

Nazwa markera nie ma znaczenia, ale musi się pokrywać z tą w init.sqf!

 


 

Zamykanie drzwi/bram (próba otwarcia skończy się lekkim drgnięciem drzwi)

Postaw obiekt Logika Gry. W jego init skopiuj:

((nearestobjects [this, ["Land_Net_Fence_Gate_F"], 5]) select 0) setVariable ['bis_disabled_Door_1',1,true];

Gdzie: 

"Land_Net_Fence_Gate_F" - class name obiektu, w którym chcemy zamknąć drzwi (może być np. budynek, brama)

[......1,true]; - oznacza, że zamknięte (stan "true") zostaną drzwi na pozycji 1. Jeżeli budynek ma wiele drzwi, musimy każde z nich zamykać osobno.

 

 


 

Włączanie/wyłączanie świateł na określonym obszarze

Analogicznie do poprzedniego rozwiązania, zadziała w obszarze określonym markerem (w tym przypadku o nazwie "marker_lights"). Z racji tego, że najczęściej będziemy chcieli przełączać je w trakcie trwania misji, stworzymy plik lights.sqf i wywołamy jego zawartość po spełnieniu warunków wyzwalacza.

 

Zawartość lights.sqf (zawieramy w folderze misji):

_types = ["Lamps_Base_F", "PowerLines_base_F","Land_PowerPoleWooden_L_F"]; //tutaj umieszczamy classname'y obiektów na ktore chcemy oddzialywac
_onoff = _this select 0;

for [{_i=0},{_i < (count _types)},{_i=_i+1}] do
{
_lamps = getMarkerPos "marker_lights" nearObjects [_types select _i, 500];
sleep 1;
{_x setDamage _onoff} forEach _lamps;
};

Aby wyłączyć światło,  polu "on activaction" wyzwalacza umieszczamy:

0 = [0.95] execVM "lights.sqf";

Analogicznie, jeżeli chcemy włączyć światło, wpisujemy zamiast tego:

0 = [0] execVM "lights.sqf";

 


 

Babel - dodawanie własnych języków

Prezentowane rozwiązanie tworzy trzy języki: Angielski, Rosyjski i Arabski. Przydziela je odpowiednio: BLUFORowi, OPFORowi oraz INDFORowi+cywilom.

W init.sqf umieszczamy: 

f_available_languages = [
["en", "English"], 
["ru", "Russian"], //gdzie "ru"-ID jezyka, "Russian"-wyswietlana nazwa jezyka 
["ar", "Arabic"]
];
{
    _x call acre_api_fnc_babelAddLanguageType;
} forEach f_available_languages;
 
[] spawn {
    if (!hasInterface) exitWith {};
    if (player != player) then {waitUntil {player == player};};
    if (!alive player) then {waitUntil {alive player};};
 
    _languagesPlayerSpeaks = player getVariable ["f_languages", []];
 
    switch (playerside) do {
    case west: {
            if (_languagesPlayerSpeaks isEqualTo []) then {_languagesPlayerSpeaks = ["en"];};
        };
    case east: {
            if (_languagesPlayerSpeaks isEqualTo []) then {_languagesPlayerSpeaks = ["ru"];};
        };
    case independent: {
            if (_languagesPlayerSpeaks isEqualTo []) then {_languagesPlayerSpeaks = ["ar"];};
        };
    case civilian: {
            if (_languagesPlayerSpeaks isEqualTo []) then {_languagesPlayerSpeaks = ["ar"];};
        };
    };
    _languagesPlayerSpeaks call acre_api_fnc_babelSetSpokenLanguages;
};

Co w przypadku, gdy chcemy, aby jakaś konkretna postać znała kilka języków? W polu init jednostki w edytorze umieszczamy:

this setVariable ["f_languages",["en", "ar"]];

gdzie "en","ar" to kolejne ID zdefiniowanych przez nas języków

  • Upvote 3

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Golas    64

Klasy lamp A3 Vanilla i CUP

 

_types = ["Lamps_Base_F", "PowerLines_base_F","Land_LampAirport_F","Land_LampDecor_F","Land_LampHalogen_F","Land_LampHarbour_F","Land_LampShabby_F","Land_LampSolar_F","Land_LampStadium_F","Land_LampStreet_F","Land_LampStreet_small_F"];

 

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Rutek    718

Nieplecakowy sterowalny spadochron dla graczy i pojazdów (lokalnie).

Unosimy dany obiekt na pewną wysokość i w inicie wpisujemy:

[objNull, this] call BIS_fnc_curatorobjectedited;

Parametry:

0: OBJECT - moduł kuratora - (objNull - nieistniejący obiekt)

1: OBJECT - nazwa obiektu - (this - jeżeli wpisujemy bezpośrednio w inicie danego obiektu, który ma zaczynać na spadochronie lub zdefiniowana wcześniej nazwa danego pojazdu/postaci)

 

Info+:

https://community.bistudio.com/wiki/BIS_fnc_curatorObjectEdited

https://community.bistudio.com/wiki/objNull

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Alienzo    776

A da się dodać "niesterowalny" spadochron w ten sam sposób? Ja używałem tego w Fallschrimjager:

 

Spoiler

chute = "Steerable_Parachute_F" createVehicle [0,0,0]; chute setPos [getPos this select 0, getPos this select 1, 200]; this moveIndriver chute;

 

Gdzie zamiast tego: "Steerable_Parachute_F" Wpisując to: "Nonsteerable_Parachute_F" otrzymywałem spadocrhon nie sterowalny.

 

Ciekawostka: W IFA3Lite wszystkie spadochrony są przemodelowane na "okrągłe" białe pieczarki z okresu ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Jak zdobyć classname obiektu postawionego przez twórcę mapy?

Musimy mieć uruchomioną konsolę deweloperską po wejściu do gry. Do niej właśnie wpisujemy: 

hint str(typeOf cursortarget); copyToClipboard str(typeOf cursortarget);

Po najechaniu naszą bronią lub czymkolwiek co właśnie trzymamy na pożądany obiekt klikamy Local Exec w konsoli. Classname wyświetli nam się w formie wskazówki oraz zapisze w clipboardzie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Rutek    718

Obrazek podczas gry (np. w intro):

 

description.ext (można zdefiniować kilka obrazków)

class RscTitles
{
	titles[]={};

	class nazwa_intro // nazwa do której odwołamy się wywołując obrazek
	{
		idd=-1;
		movingEnable=0;
		duration=4; // długość wyświetlania
		fadein=1.5; // długość pojawiania się
		fadeout=1.5; // długość wygasania
		name="intro";
		controls[]={"title1"};

		class title1
		{
			type=0;
			idc=-1;
			size=1;
			colorBackground[]={0,0,0,0};
			colorText[]={1,1,1,1};
			font = "PuristaMedium";
			text="obrazek.paa"; // ścieżka dostępu do obrazka w formacie paa, obrazek musi być w proporcjach 1:1 lub 1:2 (np. 2048x2048, 1024x512)
			style = 48 + 0x800;
			sizeEx=1;
			x=0;
			y=0;
			w=1;
			h=1;
		};
	};
};

Wywołanie obrazka

titleRsc ["nazwa_intro","PLAIN"]; 

przykładowo - intro.sqf

if ([] call BIS_fnc_didJIP) exitWith {}; // nie dla JIP
waituntil {!isnull player};
titleCut ["","BLACK IN", 6000]; // czarny ekran
sleep 4; // jednym gra załaduje się szybciej innym wolniej, obrazek nie będzie czekał, aż ekran ładowania przejdzie do gry, należy zwrócić na to uwagę.
titleRsc ["nazwa_intro","PLAIN"]; // wywołanie obrazka
sleep 10; // czeka 10s (sekund), obrazek wyświetla się 1.5s + trwa 4s + wygasa 1.5s = 7s + 3s zapasu = 10s trzeba dostosować metodą prób i błędów
	"dynamicBlur" ppEffectEnable true; //rozmydlenie obrazu
	"dynamicBlur" ppEffectAdjust [6];
	"dynamicBlur" ppEffectCommit 0;
	"dynamicBlur" ppEffectAdjust [0.0];
	"dynamicBlur" ppEffectCommit 5;
titleCut ["", "BLACK IN", 2]; // wyłączenie czarnego ekranu

Przykładowy plik:

Intro_test.VR.pbo

  • Upvote 4

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

SKRYPT NA ZRZUT SPADOCHRONOWY POJAZDÓW LUB ŁADUNKU
 


Skrypt został opracowany przez HallyG, ja tylko leciutko go poprawiłem.

 


Ciało pliku ParaDrop.sqf
 

Spoiler

/*
	Author: HallyG
	Spawns a supply drop of desired object.

	Arguments(s):
	0: Supply Drop Object (classname) to spawn - <STRING>
	1: Supply Drop Centre - <MARKER, OBJECT, LOCATION, GROUP, TASK, POSITION>
	2: Supply Drop Height - <SCALAR>
	3: Supply Drop attachTo Position - <ARRAY>

	Return Value:
	<OBJECT>
	
	Example:
	[
		"CargoNet_01_box_F",
		position player,
		100,
		[0,0,-1.2],
		WEST
	] call FUNCTIONNAME
__________________________________________________________________*/
FUNCTIONNAME = {
params [
	["_object", "CargoNet_01_box_F", [""]],
	["_centre", [0, 0, 0], ["", objNull, taskNull, locationNull, [], grpNull], [3]],
	["_height", 100, [0]],
	["_attachTo", [0, 0, -1.2], [[]], [3]]
];

_centre = _centre call {
	if (_this isEqualType objNull) exitWith {getPosASL _this};
	if (_this isEqualType grpNull) exitWith {getPosASL (leader _this)};
	if (_this isEqualType "") exitWith {getMarkerPos _this};
	if (_this isEqualType locationNull) exitWith {locationPosition _this};
	if (_this isEqualType taskNull) exitWith {taskDestination  _this};
	if (_this isEqualType []) exitWith {_this};
	[0, 0, 0]
};

if (!(isClass (configfile >> "cfgVehicles" >> _object)) || _centre isEqualTo [0, 0, 0]) exitWith {
	objNull
};

if (isServer) then {

private _obj = createVehicle [_object, _centre vectorAdd [0, 0, _height], [], 0, "NONE"];
private _para = createVehicle ["B_parachute_02_F", [0,0,0], [], 0, "FLY"];


_para setDir getDir _obj;
_para setPos getPos _obj;
_obj lock false;
_obj attachTo [_para, _attachTo];

[_obj, _para] spawn {
	params ["_obj","_para"];
		
	waitUntil {
		sleep 0.01;
		((position _obj) select 2) < 2 
		|| 
		isNull _para 
		|| 
		(count (lineIntersectsWith [getPosASL _obj, (getPosASL _obj) vectorAdd [0, 0, -0.5], _obj, _para])) > 0
	};
		
	_para disableCollisionWith _obj;
	_obj setVectorUp [0,0,1];
	_obj setVelocity [0,0,0];
	detach _obj;
		
	if (!isNull _para) then {deleteVehicle _para};
};
};
};

 

Do pliku init.sqf dodajemy linijkę: execVM "ParaDrop.sqf";


JAK UŻYĆ SKRYPTU?

Najłatwiejszym sposobem, który przyszedł mi do głowy było ustawienie kilku obszarowych wyzwalaczy. Na środku każdego ustawiłem niewidzialny helipad i odpowiednio nazwałem (np. helipad1)

WARUNEK AKTYWACJI WYZWALACZA:

{ (_x isKindOf "Air") } count thisList > 0 //trigger jest aktywowany jedynie przez obiekty latające

PRZY AKTYWACJI:

[ 
  "UK3CB_BAF_LandRover_WMIK_HMG_Green_A", //classname pojazdu lub ładunku
  position helipad1, //pozycja nad która się dany ładunek pojawi, w tym przypadku nasz niewidzialny helipad
  160, //wysokość nad miejscem spawnu
  [0,0,0], //pozycja ładunku, korzysta z attachto, nie trzeba ruszać
  WEST
 ] call PARADROP

[usunąć komentarze przy wstawianiu do wyzwalacza]

Później ustawiłem 2 samoloty - C-130. Wyznaczyłem im waypointy przez strefy.

EFEKT:
 


Myślę, że za niedługo pojawi się misja SASem z użyciem tego skryptu.
WAŻNE! Spadochrony są czułe na wiatr!
 

Spoiler

large.107410_screenshots_20170525204021_

 

Edytowano przez canadian
UPDATE skryptu, tweak co do globalności
  • Upvote 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

OTWIERANIE I ZAMYKANIE HANGARÓW Z CUPA

 

Tworzymy marker o nazwie "marker_doors". Ustawiamy go nad naszym hangarem. Optymalny jego rozmiar to A: 30, B: 20.

Do init.sqf wklejamy:

0 = [getmarkerpos "marker_doors", this, 90] spawn {  
 sleep 0.1;  
 {  
  _x animate ["Door1", 0];  
  _x animate ["Door2", 0];  
  _x animate ["Door3", 0];  
  _x animate ["Door4", 0]; 
  _x animate ["Door5", 0]; 
  _x animate ["Door6", 0]; 
  _x animate ["Door7", 0]; 
 } foreach ((_this select 0) nearObjects (_this select 1))  
}

Lub jeśli chcemy go zamknąć:

0 = [getmarkerpos "marker_doors", this, 90] spawn {  
 sleep 0.1;  
 {  
  _x animate ["Door1", 1];  
  _x animate ["Door2", 1];  
  _x animate ["Door3", 1];  
  _x animate ["Door4", 1]; 
  _x animate ["Door5", 1]; 
  _x animate ["Door6", 1]; 
  _x animate ["Door7", 1]; 
 } foreach ((_this select 0) nearObjects (_this select 1))  
}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Alienzo    776

http://www.armaholic.com/page.php?id=31719

 

Przydatna misja testowa do sprawdzania kontrowersyjnej czasem wytrzymałości pojazdów. Obecnie wyjeżdżam i wracam na jeden dzień, po czym zaczynam urlop, także może ktoś z MC:AT albo z regimentu mógłby potestować pojazdy i wyrzutnie w naszej paczce z pomocą tej misji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Rutek    718

Pasek/Nakładka AAN World News

 

Dobre do przygotowania materiałów fabularnych pod misję.

Poniżej przykład + dodatkowe materiały:

Spoiler

 

 

Całość wyjaśniona poniżej:

http://www.kylania.com/ex/?p=79

https://community.bistudio.com/wiki/BIS_fnc_AAN

 

Jak użyć?

W konsoli deweloperskiej wklejamy i zmieniamy tekst:

0 = [parseText "AAN live in Takistan", parseText "Weather coming up hot and steamy - Takistan shelled again from border area"] spawn BIS_fnc_AAN;

lub

title = parsetext "<t size='2.3'>Rabbits Overrun Zargabad</t><br />Thousands of rabbits are terrorizing local women in the Takisani town of Zargabad."; 
scroll = parsetext "Military Units across Takistan report dance outbursts are on the rise - A-10s have been spotted flying upside down more often than not - Missing M16 Rifles found!"; 
nul = [title,scroll] spawn BIS_fnc_AAN;

 

  • Upvote 3

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Rizzet    151

Dodawanie drugiego plecaka spadochroniarzom przy wykorzystaniu BackpackOnChest

(Współpracuje ze sprzętem dodawanym z 3DENu, EqKreatora i UnitGeara. Poniżej podaję dwa sposoby.)

 

ZAMIERZENIE:

Wybranym przez nas sposobem dodajemy skoczkowi wyposażenie. Jako plecak ma założony spadochron. Docelowo po skoku ma mieć przy sobie plecak ze sprzętem specjalistycznym.

Na potrzeby prezentacji przyjmujemy, że plecak Assault Backpack (multicam) będzie zawierał:

-2x magazynek 5,56x45 30szt.

-2x magazynek 9x19 17szt.

-2x narzędzia nawigacyjne

-2x ładunek M112

-3x zestaw do szycia

-1x nożyce do drutu

-2x worek z krwią 500ml

 


 

SPOSÓB 1 (z wykorzystaniem modułu):

 

1. Klikamy F5, stawiamy moduł BackpackOnChest --> Add Chestpack. Wchodzimy w jego właściwości.

 

2. W polu Chestpack classname wpisujemy classname plecaka, który założymy na drugi slot:

B_AssaultPack_mcamo \\ zauważ, że nie występuje tu cudzysłów

 

3. W polu Chestpack items wpisujemy kolejno classname'y obiektów, które chcemy dodać do plecaka, oddzielone od siebie przecinkiem według szablonu:

"classname_przedmiotu1""classname_przedmiotu2""classname_przedmiotu3"  dla przedmiotów, które chcemy dodać tylko pojedynczo

lub

["classname_przedmiotu1", ilość1], ["classname_przedmiotu2", ilość2], ["classname_przedmiotu3", ilość3]  dla przedmiotów, które chcemy dodać kilka razy

Warto zauważyć, że zapis:

["classname_przedmiotu", 1] jest równoważny "classname_przedmiotu"

 

Zatem w naszym przypadku pole uzupełnimy następująco:

 

["rhs_mag_30Rnd_556x45_Mk318_Stanag",2], ["rhsusf_mag_17Rnd_9x19_JHP",2], ["DemoCharge_Remote_Mag",2], ["ACE_bloodIV_500",2], ["ACE_surgicalKit",3], ["ACE_MapTools",2], "ACE_wirecutter"

4. Zostają nam jeszcze dwa pola, kolejno:

 

  • Chestpack magazines - wypełniamy je tylko w przypadku, jeśli chcemy dodawać niepełne magazynki do plecaka. Robimy to według szablonu:

["classname_magazynka1", ilośćamunicji1], ["classname_magazynka2", ilośćamunicji2], ["classname_magazynka3", ilośćamunicji3] 

Ponieważ nie chcieliśmy tego robić, pole Chestpack magazines pozostawiamy puste.

 

  • Additional code - pozwala nam na wykonanie żądanego kodu z użyciem plecaka, np. oteksturowanie go. Do plecaka odwołujemy się przy użyciu _this

 

Ponieważ nie chcieliśmy tego robić, pole Additional code pozostawiamy puste.

 

Uwaga! Musimy pamiętać, o określeniu, kto otrzyma w ten sposób zdefiniowane przez nas plecaki. W polu Apply to wybieramy rządaną metodę i synchronizujemy z odpowiednim obiektem (jednostką, wyzwalaczem itd).

 


 

SPOSÓB 2 (skryptowo):

 

Korzystając z wewnętrznych funkcji addonu dodajemy odpowiedni fragment kodu w polu inicjalizacji każdej z jednostek. Jeżeli np. korzystaliśmy z EqKreatora, umieszczamy go PO funkcji dodającej wyposażenie.

 

[this,"B_AssaultPack_mcamo"] call zade_boc_fnc_addChestpack;
[this,"rhs_mag_30Rnd_556x45_Mk318_Stanag",2] call zade_boc_fnc_addItemToChestpack; \\ Dodaje do plecaka przedmiot o żądanym classname w ilości podanej w ostatnim argumencie (tutaj 2)
[this,"rhsusf_mag_17Rnd_9x19_JHP",2] call zade_boc_fnc_addItemToChestpack; \\ Reszta jak wyżej
[this,"DemoCharge_Remote_Mag",2] call zade_boc_fnc_addItemToChestpack;
[this,"ACE_bloodIV_500",2] call zade_boc_fnc_addItemToChestpack;
[this,"ACE_surgicalKit",3] call zade_boc_fnc_addItemToChestpack;
[this,"ACE_wirecutter"] call zade_boc_fnc_addItemToChestpack;
[this,"ACE_MapTools",2] call zade_boc_fnc_addItemToChestpack;

 

Będziemy tutaj korzystać z trzech wewnętrznych funkcji addonu:

 

  • Nazwa: zade_boc_fnc_addChestpack

[this,"B_AssaultPack_mcamo"] call zade_boc_fnc_addChestpack;

Działanie: Dodaje jednostce plecak o żądanym classname

Parametry:

this - dla kogo wywołuj się funkcja (tutaj: this="na tej jednostce, do której należy pole init")

"B_AssaultPack_mcamo" - classname plecaka

 

  • zade_boc_fnc_addMagToChestpack

[this,"rhs_mag_30Rnd_556x45_Mk318_Stanag",16] call zade_boc_fnc_addMagToChestpack;

Działanie: Dodaje do plecaka magazynek o żądanym classname

Parametry:

this - dla kogo wywołuj się funkcja (tutaj: this="na tej jednostce, do której należy pole init")

"rhs_mag_30Rnd_556x45_Mk318_Stanag" - classname przedmiotu

16 - ile sztuk amunicji ma zawierać magazynek (wpisujemy wartości całkowite większe od 0)

Jeżeli parametr 3. przekroczy max. pojemność magazynka, dodaje się jako pełny magazynek.

 

  • Nazwa: zade_boc_fnc_addItemToChestpack

[this,"rhs_mag_30Rnd_556x45_Mk318_Stanag",2] call zade_boc_fnc_addItemToChestpack;

Działanie: Dodaje do plecaka przedmiot o żądanym classname

Parametry:

this - dla kogo wywołuj się funkcja (tutaj: this="na tej jednostce, do której należy pole init")

"rhs_mag_30Rnd_556x45_Mk318_Stanag" - classname przedmiotu

- ile razy przedmiot ma się dodać (wpisujemy wartości całkowite większe od 0)

 

Podsumowując, chcąc dodać PEŁNE magazynki korzystamy z addItemToChestpack, chcąc dodać NIEPEŁNE magazynki używamy addMagToChestpack.

 

UWAGA! Korzystając z tego sposobu musimy pamiętać o tym, żeby przed skokiem zamienić ze sobą dwa razy miejscami plecaki (spadochron->plecak, plecak->spadochron) korzystając z akcji pod ACE. W przeciwnym wypadku po wyrzuceniu spadochronu na ziemi oraz włożeniu plecaka na plecy jego kopia nadal będzie widoczna, zwisając nam na wysokości kolan.

 


 

Dla chętnych dodatkowo dokumentacja funkcjonalności addonu: -KLIK-

Edytowano przez Rizzet
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Alienzo    776

Wymuszanie wybranej twarzy gracza podczas misji na serwerze.

 

Aby wymusić konkretną wybraną przez twarz musimy znać jej classname.

Np: 

"LIB_WhiteHead_10_Camo"

 

Do initu jednostki gracza dodajemy wpis:

 

 

Spoiler

if (isServer) then {[this, "LIB_WhiteHead_10_Camo"] remoteExec ["setFace", 0,this]};

 

Po tym zabiegu bez względu na to jaką gracz wybrał twarz w edycji profilu, na naszej misji pojawi się w tej wybranej przez MM. Koniec z murzynami w Wermachcie!

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

TWORZENIE WRAKÓW POJAZDÓW

 

Sama metoda do Army 3 (bez addonów) została opracowana przez http://killzonekid.com/

Tworzymy plik make_wreck.sqs

Ciało:

// "make_wreck.sqs"

_this setDamage 1
_this setDamage 0
_this setDamage 1
~1
_this enableSimulation false

Wywołujemy go (np. w inicie):

car exec "make_wreck.sqs";

//car to zmienna naszego pojazdu

Dodatkowo do naszego pojazdu, w polu init wklejamy:

car setVariable ["ace_cookoff_enable", false, true];
car setVariable ["ace_cookoff_enableAmmoCookoff", false, true];


Źródło: http://killzonekid.com/arma-scripting-tutorials-how-to-make-a-wreck/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Jak zrobić, żeby pojazd był klasyfikowany jako pojazd z amunicją do przezbrajania?
 

Do initu pojazdu:

 

this setVariable ["ace_rearm_isSupplyVehicle", true]

 

UWAGA!

Nie wszystkie pojazdy posiadają config pod taki manewr! Tj. nie każdy zadziała.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

CAS poprzez kliknięcie na mape

 

Wywołanie skryptu:

_nul = []execVM "CAS.sqf";

 

Ciało skryptu:

(format ["Wskaż na mapie punkt uderzenia CAS (LPM)"]) remoteExec ["systemChat", 0, false]; //komunikat, który wyświetli się po zainicjowaniu skryptu

["mk_omsca", "onMapSingleClick", {

_mrkr = createMarker ["cas_target", _pos]; //marker startowy dla CASu
_mrkr setMarkerAlpha 0; //alpha markera tworzonego na mapie, można pokazać po zmianie parametru na 1
_mrkr setMarkerShape "ICON";
_mrkr setMarkerColor "Default";
_mrkr setMarkerSize [1, 1];
_mrkr setMarkerType "KIA";
_mrkr setMarkerText "CAS TARGET";

_center = createCenter sideLogic;    
_group = createGroup _center;         
_cas = _group createUnit ["ModuleCAS_F",_pos , [], 0, ""];   
_cas setVariable ["vehicle","RHS_A10",true]; //classname pojazdu, w tym wypadku A-10
_cas setVariable ["type", 2,true];
}] call BIS_fnc_addStackedEventHandler;

 

przepraszam..

Edytowano przez canadian

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Alienzo    776

A zrobisz tak żeby ten CAS to był wrogi samolot, który zaatakuje jak się wejdzie w dane miejsce? ( Jestem wrogiem graczy :D )

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Do tego polecam skrypt Alliasa:

 

Ciało air_unit_east.sqf:

// by ALIAS
// null= [_poz,_grp,_tgt] execVM "AL_aerialbattle\air_unit_east.sqf";
// null= ["ruavi",east,"marker_22"] execVM "AL_aerialbattle\air_unit_east.sqf";

// _poz to pozycja startowa
// _grp to przynależność do strony
// _tgt to miejsce docelowe

private ["_tgtz","_poz","_pos","_grp","_tgt","_type_vik","_aer1","_veh1","_grp1"];

if (!isServer) exitwith {};

_poz = _this select 0;
_grp = _this select 1;
_tgtz = _this select 2;

air_battle = true;
publicVariable "air_battle";

_pos = getMarkerPos _poz;
_tgt = getMarkerPos _tgtz;

while {air_battle} do {

//hint "nou avion EST";

_type_vik = ["rhs_l159_CDF_CAP"] call BIS_fnc_selectRandom; // classname pojazdu
_aer1 = [[_pos select 0,_pos select 1,400], 190, _type_vik, _grp] call BIS_fnc_spawnVehicle; // tutaj możemy ustawić wysokość 
_veh1 = _aer1 select 0;
_veh1 flyInHeight 400; // docelowa wysokość lotu
//_veh1 removeMagazinesTurret ["12Rnd_PG_missiles",[-1]]; // usuwanie amunicji, np. rakiet
_veh1Crew = _aer1 select 1;
_grp1 = _aer1 select 2;

while {{alive _x} count units _grp1 > 0} do {
	{_x doMove _tgt} forEach units _grp1;
	_grp1 setBehaviour "AWARE";
	_grp1 setCombatMode "RED";
	_grp1 setSpeedMode "NORMAL";
	sleep 60;
};

while {(canMove _veh1) and (alive _veh1)} do {sleep 300};
sleep 60;
{ deleteVehicle _x } forEach units _grp1; deleteGroup _grp1; deleteVehicle _veh1;
sleep 1;
};

 

Wywołanie pojazdu z lasu:

null= ["ruavi",east,"marker_22"] execVM "air_unit_east.sqf";

 

Edytowano przez canadian

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
canadian    134

Rysowanie strzałek na mapie
 


Nowa funkcja wprowadzona wraz z Orange DLC.

 

/*
	Author: 
		Killzone_Kid

	Description:
		Draws a static arrow (outline or color filled) on map

	Parameters:
		0: ARRAY - Arrow start in format [x,y] or [x,y,z]
		1: ARRAY - Arrow end in format [x,y] or [x,y,z]
		2 (Optional): ARRAY - Arrow line or fill color in format [r,g,b,a]. Default: [1,1,1,1]
		3 (Optional): ARRAY - Arrow geometry detail in format:
			0 (Optional): NUMBER - Arrow thickness in meters. Default: 10
			1 (Optional): NUMBER - Arrow head length compared to the total length of the arrow. Default: 1/3
			2 (Optional): NUMBER - Arrow head width compared to the arrow thickness. Default: 2
		4 (Optional): BOOLEAN - TRUE to draw color filled arrow, FALSE to draw outline. Default: true
		5 (Optional): CONTROL - Map control. Default: control 51 of the main map display 12
		
		or
		
		ARRAY in format [idd, idc, ehId] - when arrow removal is wanted

	Returns:
		ARRAY - Arror removal information or [] on removal operation
		
	NOTE: The order in which arrows are drawn on map is reversed, arrow added last will be drawn under the arrow added first
*/

disableSerialization;

if (_this isEqualTypeParams [0,0,0]) exitWith 
{
	//--- removal wanted
	findDisplay (_this select 0) displayCtrl (_this select 1) ctrlRemoveEventHandler ["Draw", (_this select 2)];
	[]		
};

params 
[
	["_from", [0,0,0], [[]], [2,3]], 
	["_to", [0,0,0], [[]], [2,3]], 
	["_color", [1,1,1,1], [[]], [4]], 
	["_pars", []], 
	["_fill", true, [true]],
	["_map", findDisplay 12 displayCtrl 51, [controlNull]]
];

private ["_dir", "_pp", "_p1", "_p2", "_p3", "_p4", "_p5", "_p6"];

_dir = _from getDir _to;
_pars params [["_width", 10, [0]], ["_headLCoef", 1/3, [0]], ["_headWCoef", 2, [0]]];

// sanitise params
if (_width <= 0 || _headWCoef <= 0 || _headLCoef <= 0) exitWith 
{
	["The arrow with given geometry %1 could not be drawn", _pars] call BIS_fnc_error;
	[]
};

_pp = _to getPos [-(_from distance2D _to) * (_headLCoef min 1), _dir];
_p1 = _pp getPos [_width * _headWCoef / 2, _dir - 90];
_p2 = _pp getPos [_width * _headWCoef / 2, _dir + 90];

[
	ctrlIDD ctrlParent _map,
	ctrlIDC _map,
	_map ctrlAddEventHandler ["Draw", format 
	[
		"_this select 0 %1 [%2, %3%4", 
		["drawPolygon", "drawTriangle"] select _fill,
		call
		{
			if (_headLCoef < 1) exitWith
			{
				_p3 = _pp getPos [_width / 2, _dir - 90];
				_p4 = _pp getPos [_width / 2, _dir + 90];
				_p5 = _from getPos [_width / 2, _dir - 90];
				_p6 = _from getPos [_width / 2, _dir + 90];
				
				if (_fill) exitWith {[_to, _p1, _p2, _p3, _p5, _p6, _p6, _p4, _p3]};

				[_to, _p1, _p3, _p5, _p6, _p4, _p2]
			};
			
			[_to, _p1, _p2]
		},
		_color,
		["]", ",""#(rgb,1,1,1)color(1,1,1,1)""]"] select _fill
	]]
]

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chcesz dodać odpowiedź ? Zaloguj się lub zarejestruj nowe konto.

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to bardzo łatwy proces!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×