Visa ämne
Anrop » ArmA 3 » Editing
 Skriv ut ämne
skript problem
Kod Källa  

//de engineers som ska vara restrikterade
_Engineers = [EngineerBuilder1,EngineerBuilder2];

//för att det endast ska köras på servern.
if (isServer) then {

   {
      //koll om vilka engineers som finns eller ej
      if (!isNull _x) then {
      
         //koden för att lägga in området från start
         _x addCuratorEditingArea [1,position BuilderTruck,100];
         
         //action för att flytta området
         Buildertruck addAction ["Build",{_x addCuratorEditingArea [1,position BuilderTruck,100]}];
      };
   } forEach _Engineers;
};


problemet jag har är att jag får två actions på bilen, och själva actionen inte funkar, någon som har någon lösning till detta?
Du ska inte lägga till addAction för varje ingenjör utan bara en gång på objektet. Om du vill begränsa vilka som kan använda den får du lägga det som en condition. Scriptet ska du passa som en sträng. Se nedan,

Kod Källa  

//de engineers som ska vara restrikterade
_Engineers = [EngineerBuilder1,EngineerBuilder2];

{
  if (!isNull _x) then {
    //koden för att lägga in området från start
    _x addCuratorEditingArea [1,position BuilderTruck,100];
  };
} forEach _Engineers;
 
//action för att flytta området
_title = "Build";
_action = "{_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]}"; // Kan även vara sökväg till en scriptfil
_args = nil;
_priority = 1.5;
_showWindow = true;
_hideOnUse = true;
_shortcut = "";
_condition = "_this in _Engineers";
Buildertruck addAction [_title, _action, _args, _priority, _showWindow, _hideOnUse, _shortcut, _condition];


BI docs, https://community.bistudio.com/wiki/a.../addAction
Redigerat av Dahlgren den 2015-04-12 15:24
addAction ska väl aldrig köras på servern? (förutsatt att servern inte ska vara en spelare)
addAction körs på de spelarnas datorer som ska ha action:en.
CAUTION: I'm a screamer and I'm using Voice-Activated!
tack Zip för snabbt svar, verkar inte riktigt funka dock, hittar ingen action på bilen och saknar area:t från första början.

men upplägget ser jättebra ut, så jag antar om jag vill bygga vidare på det för att komma åt "available" så är det bara bygga vidare tills dess?

also, problemet är att jag använder mig av https://community.bistudio.com/wiki/a...ditingArea vilket inte är gubben utan zeusmodulen som är länkat till gubben.

så gubbarna heter builder1, builder2, medans deras zeusmoduler heter EngineerBuilder1,EngineerBuilder2

och tanken med hela scriptet är att jag vill ha det så modulärt som det bara går ^^ så om jag vill ha fler engineers ska det va "enkelt" att lägga till dessa
Redigerat av Imcrazy den 2015-04-12 14:57
Det är som Chris säger, du måste köra addAction på alla klienter så den ska ligga utanför isServer checken. Uppdaterat min kod.
jo, precis, flyttade ut den här enligt följande:
Kod Källa  


//de engineers som ska vara restrikterade
_Engineers = [EngineerBuilder1,EngineerBuilder2];
_Builder = [Builder1,Builder2];

//för att det endast ska köras på servern.
if (isServer) then {

   {
      //koll om vilka engineers som finns eller ej
      if (!isNull _x) then {
     
         //koden för att lägga in området från start
         _x addCuratorEditingArea [1,position BuilderTruck,100];

      };
   } forEach _Engineers;
};

 //action för att flytta området

   _title = "Build";
   _action = "{_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]};" // Kan även vara sökväg till en scriptfil
   _args = nil;
   _priority = 1.5;
   _showWindow = true;
   _hideOnUse = true;
   _shortcut = "";
   _condition = "_this in _Builder";
   Buildertruck addAction [_title, _action, _args, _priority, _showWindow, _hideOnUse, _shortcut, _condition];


men får fortfarande ingen action på bilen dock xD
Du blandar stort och litet T i BuilderTruck
ty ^^ får det här felmeddelandet nu dock xD

Kod Källa  

15:57:14 Error in expression 
_args = nil;
_priority = 1.5;
_showWindo>
15:57:14   Error position: <_args = nil;
_priority = 1.5;
_showWindo>
15:57:14   Error Missing ;
15:57:14 File mpmissions\Coop_Logistics_Support.Altis\EngineerBuilderScript.sqf, line 23
Kod Källa  

_action = "{_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]};" // Kan även vara sökväg till en scriptfil


saknas ett semikolon i slutet,

Kod Källa  

_action = "{_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]};"; // Kan även vara sökväg till en scriptfil

Jag rekommenderar att du gör en if(player in _Builder) then {addAction}; (OBS, jag skrev på mobilen så fel kan ha slutligt in.)
Så slipper du ha en condition.
CAUTION: I'm a screamer and I'm using Voice-Activated!
sweet, ty ^^ får inget felmeddelande nu iaf :D, men syns ingen addaction än dock xD

har dubbelkollat namnet på fordonet å allt sånt också xD

Kod Källa  

//de engineers som ska vara restrikterade
_Engineers = [EngineerBuilder1,EngineerBuilder2];
_Builder = [Builder1,Builder2];

//för att det endast ska köras på servern.
if (isServer) then {

   {
      //koll om vilka engineers som finns eller ej
      if (!isNull _x) then {
     
         //koden för att lägga in området från start
         _x addCuratorEditingArea [1,position BuilderTruck,100];

      };
   } forEach _Engineers;
};

 //action för att flytta området

   _title = "Build";
   _action = "{_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]}"; // Kan även vara sökväg till en scriptfil
   _args = nil;
   _priority = 1.5;
   _showWindow = true;
   _hideOnUse = true;
   _shortcut = "";
   _condition ="_this in _Builder";
   BuilderTruck addAction [_title, _action, _args, _priority, _showWindow, _hideOnUse, _shortcut, _condition];
_action ska nog vara kod eller text, inte båda samtidigt. Ta bort " i början och slutet så att det endast är kod.
CAUTION: I'm a screamer and I'm using Voice-Activated!
testat båda varianterna nu xD ingen av dem funkar xD
Action ska vara en text med ett filnamn eller en text med skript kod som kommer evalueras när det exekveras. I TKOH kan man även ge ett block med kod, inte säker på om det är med i Arma 3 eller ej men det fungerar inte i andra Arma spel. Enklast är att hålla sig till text.

addCuratorEditingArea ska köras på ett curator objekt och inte en vanligt vehicle objekt vilket _this innehåller. Om din ena array innehåller dina vanliga vehicle objekt och den andra dina curator objekt i samma ordning kan du använda find för att få ut indexet på ditt vanliga vehicle och sen applicera det på din curator array för att få ut rätt curator objekt.
med tanke på att jag e helt bakom flötet då det gäller kod, hur gör jag detta?, och jo builder1 e samma snubbe som curator engineerbuilder1
Redigerat av Imcrazy den 2015-04-12 19:05

Citera

ZiP skrev:

Action ska vara en text med ett filnamn eller en text med skript kod som kommer evalueras när det exekveras. I TKOH kan man även ge ett block med kod, inte säker på om det är med i Arma 3 eller ej men det fungerar inte i andra Arma spel. Enklast är att hålla sig till text.

addCuratorEditingArea ska köras på ett curator objekt och inte en vanligt vehicle objekt vilket _this innehåller. Om din ena array innehåller dina vanliga vehicle objekt och den andra dina curator objekt i samma ordning kan du använda find för att få ut indexet på ditt vanliga vehicle och sen applicera det på din curator array för att få ut rätt curator objekt.
Kod Källa  

_x addAction [format["Unflip Target %1", _i], {[_this select 0, "fnc_unflipTarget", false] call BIS_fnc_MP;}, nil, -1, true, true, "", "0 == {alive _x} count crew _target && _this distance _target < 3"];

Så har jag skrivit i mitt Steal the Vehicles-uppdrag, så {} fungerar i Arma 3.
CAUTION: I'm a screamer and I'm using Voice-Activated!
Imcrazy: vad får du för felmeddelande nu då?
CAUTION: I'm a screamer and I'm using Voice-Activated!
Det e det som e det roliga, får inget felmeddelande alls, men har ingen action på bilen heller xD

Zeusmodulen: EngineerBuilder1, har owner Builder1, som då gubben heter
zeusmodulen: EngineerBuilder2 har owner Builder2
bilen som ska va byggbil heter: BuilderTruck
Startbyggområdet e centrerat på bilen för båda engineers.

så största problemet är att just actionen inte finns, och om jag gjorde som innan så fanns den men fungerade inte ( om inte båda engineers finns, detta enbart testat i editorn)

och det jag är nyfiken på är hur jag behöver koda för att få det som zip nämner att funka:

Citera

addCuratorEditingArea ska köras på ett curator objekt och inte en vanligt vehicle objekt vilket _this innehåller. Om din ena array innehåller dina vanliga vehicle objekt och den andra dina curator objekt i samma ordning kan du använda find för att få ut indexet på ditt vanliga vehicle och sen applicera det på din curator array för att få ut rätt curator objekt.


och det här är då nuvarande koden:
Kod Källa  

//de engineers som ska vara restrikterade
_Engineers = [EngineerBuilder1,EngineerBuilder2];
_Builder = [Builder1,Builder2];

//för att det endast ska köras på servern.
if (isServer) then {

   {
      //koll om vilka engineers som finns eller ej
      if (!isNull _x) then {
     
         //koden för att lägga in området från start
         _x addCuratorEditingArea [1,position BuilderTruck,100];

      };
   } forEach _Engineers;
};

 //action för att flytta området

   _title = "Build";
   _action = "_this select 1 addCuratorEditingArea [1,position BuilderTruck,100]"; // Kan även vara sökväg till en scriptfil
   _args = nil;
   _priority = 1.5;
   _showWindow = true;
   _hideOnUse = true;
   _shortcut = "";
   _condition ="_this in _Builder";
   BuilderTruck addAction [_title, _action, _args, _priority, _showWindow, _hideOnUse, _shortcut, _condition];
Note: Bara läst början.
Om den inte får någon action så är det två saker som har hänt.
1) objektet har inte fått sin action hos klienten. Detta spontant tror jag inte är problemet efter att ha sett din kod. I så fall har du bara döpt objektet fel.
2) condition inträffar aldrig, alltså att du har skrivit den fel. Du har skrivit _Builder, "_" gör att den blir en lokal variabel och alltså förmodligen osynlig i din condition. Jag tycker dock att detta borde ge ett felmeddelande, men döp om _Builder till Builder i hela koden så ska det nog gå.
Sen tycker jag fortfarande som jag skrev tidigare att du ska skippa condition och lägga addAction i en if-sats istället där du skriver if(player in _Builder). Notera då att du inte behöver ta bort "_" ifrån _Builder.
CAUTION: I'm a screamer and I'm using Voice-Activated!
Chris: sweeeeeet jo, att ta bort "_" från builder fixade problemet med att inte se action:en

jo problemet jag tidigare haft är ju dock om bara en builder/engineer finns så crashar scriptet, därför jag behöver ha !isNull Checken. i raden "lägga till området i början delen av koden", samma problem verkar inte hända med condition

däremot gör inte actionen något, så antar att detta har med vad zip va inne på, att jag på något sätt måste se om det är Builder1, så ska EngineerBuilder1 användas till actionen, och om Builder2 två är den som använder actionen så ska det vara EngineerBuilder2? (sedan hoppas jag att utifrån att båda engineerbuilders har samma id på editing area:t att om builder1 flyttar sitt, så flyttas även builder2:s och vise versa xD ) men tack så mycket hittills iaf ^^ grymt kul att koden är ett steg närmre att vara färdig Grin