Visa ämne
Anrop » ArmA 3 » Editing
 Skriv ut ämne
[Löst] Söker scripthjälp
Har försökt googlat runt en del, men det är svårt att hitta folk som har liknande problem. Hur som helst:

Kort och enkel förklaring av vad jag försöker uppnå:

Jag vill skapa en marker på varenda spelare på kartan, som bara ett lag (Blufor) ska se, som sen antingen uppdateras till spelarnas nya position ca 10 sekunder senare, alternativt tas bort för att ge plats åt helt nya markers på spelarnas nuvarande position.

Ännu mer kort och gott: Jag vill göra en marker som följer en spelare, fast för alla spelare på kartan, och sen ha möjligheten att uppdatera dessa markers med jämna intervall.

Den kod som jag varit och nosat på innefattar, eller borde innefatta, dessa element:

• En slags if-sats för att kolla så att det bara påverkar blufor (De som ska se markers).
• CreateMarkerLocal och dess varianter för att definera hur markern ska se ut.
• En ForEach funktion som rekurserar funktionen tills alla spelare fått varsin marker på kartan.
• Något kommando som inkluderar alla spelare som är med på banan. (Har försökt med countSide, men förstår mig inte riktigt på den).

Har problem med att strukturera upp en korrekt kod som ordnar detta, och letar efter hjälp helt enkelt :)

Såhär ser det jag knaprat på hittils ut:
Kod Källa  

_i = 0;
heatSigVar = [];

func_heatsig =
{
for "_i" from 0 to (>>>Något som tar reda på hur många spelare som är med på kartan<<<) do {
   _current = >>variabel som håller reda på antalet spelare<< select _i;
   _position = position _current;

   _n = format["signature_%1", _current];
   _m = createMarkerLocal [_n, _position];
   _m setMarkerType "mil_dot";
   _m setMarkerText _n;
   _m setMarkerColor 'colorBlack';
   heatSigVar set [(count heatSigVar), _m];
   };
};

call func_heatsig;




{deleteMarkerLocal _x} forEach heatSigVar;


Edit #1:

Hittade 'Allunits' som jag hade missat.

Alltså, {} forEach allUnits;
Redigerat av Echo den 2014-01-13 21:12
Jag skulle nog testat något i stil med:

Kod Källa  


if (!isDedicated) then
{
   {_x setMarkerAlphaLocal 0} forEach ["mark1","mark2","mark3","mark4"];
   waitUntil {!isNull player};
   switch (side player) do
   {
      case WEST:
      {
         {_x setMarkerAlphaLocal 1} forEach ["mark1","mark2"];
      };
      case EAST:
      {
         {_x setMarkerAlphaLocal 1} forEach ["mark3","mark4"];
      };
   };
};



Har för mig att så var det i ett annat mission jag hade där markers var lite olika beroende på vilken sida man var. Vad den gör är att den gör markern osynlig men sen synlig beroende på vilken sida du tillhör. Klistra på markers på objects får man göra med annan kod, den där funkar "nog" på just vad man får se för vilken side som det berör... Im guessing ;)

Citera

Echo skrev:
Hittade 'Allunits' som jag hade missat.

Alltså, {} forEach allUnits;



Har inte läst igenom hela ditt inlägg än eller så men fyi
playableUnits är nog vad du vill använda då allUnits inkluderar all AI som ev. finns på uppdraget också.

http://community.bistudio.com/wiki/pl...yableUnits

Du kan utöka det med att verkligen kolla om det sitter en spelare i enheten också eller om det bara är en ai kontrollerad enhet som är playable t.ex. om man har AI påslaget på uppdraget

Man kan kanske använda den här funktionen för det:
http://community.bistudio.com/wiki/ge...tPlayerUID

bara en tanke, får återkomma när jag har orkat läsa igenom resten och fundera ut ett svar Pfft
The enemy cannot predict your actions if you have no idea what you're doing.
Är jättenära på att ha fixat koden. Uppdaterar det här inlägget om en stund när allt är som det ska.

Edit:

Här är den färdigställda koden:

Kod Källa  

_array = playableUnits;
heatSignatureVar = [];

for [{_i=0}, {_i < count _array}, {_i=_i+1}] do
{
   _current = _array select _i;
   _position = position _current;

   _n = format["signature_%1",_current];
   _m = createMarker [_n, _position];
   _m setMarkerType "mil_dot";
   _m setMarkerColor "ColorOrange";
   heatSignatureVar set [(count heatSignatureVar), _m];
};


Koden sätter ut en orange plupp på kartan för alla spelare på kartan.

Sedan:

Kod Källa  

{deleteMarker _x} forEach heatSignatureVar;


För att ta bort alla markers från kartan.

Det här innefattar inte delen där bara ett lag ser markers, men vet hur man fixar det, så det är i princip klart.

Känns fan skönt att ha tacklat det där problemet. Tog några timmar samt en del läsning i den officiella dokumentationen, men väldigt belönande när man fixat det :D
Redigerat av Echo den 2014-01-13 20:57