PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zivilistenscript wirft Fehler beim Start


Wolkenbeisser
13.07.2016, 14:20
Hallo zusammen

Ich verwende nun schon ziemlich lange das COS-Script von BangaBob (https://forums.bistudio.com/topic/165747-civilian-occupation-system-cos/).

Nun bekomme ich die Fehlermeldung im Anhang, wenn ich das Script auf Tanoa einsetzen will (auf Stratis/Altis klappt das problemlos... oder kam das Problem mit Apex?).

Die Meldung bezieht sich auf das Script cosCore.sqf (eines von mehreren Scripts in einem Folder voller Scripts), welche wie folgt aussieht:

if (!isServer) exitWith {};
private ["_groupCount","_localGrpCount","_grp","_rdCount","_n","_r","_tempUnit","_tempVeh"];
_mkr= (_this select 0);

// Get trigger status
_trigID=format["trig%1", _mkr];
_isActive=server getvariable _trigID;

// Get stored town variables
_popVar=format["population%1", _mkr];
_information=server getvariable _popVar;
_civilians=(_information select 0);
_vehicles=(_information select 1);
_parked=(_information select 2);
_roadPosArray=(_information select 3);


IF (debugCOS)
then {
COSGlobalSideChat=[_civilians,_vehicles,_parked, _mkr];publicvariable "COSGlobalSideChat";
player groupChat (format ["Town:%4 .Civilians:%1 .Vehicles:%2 .Parked:%3",_civilians,_vehicles,_parked, _mkr]);//for singleplayer
};

_showRoads=false;
IF (_showRoads)
then {
{
_txt=format["roadMkr%1",_x];
_debugMkr=createMarker [_txt,getpos _x];
_debugMkr setMarkerShape "ICON";
_debugMkr setMarkerType "hd_dot";
}foreach _roadPosArray;
};


_glbGrps=server getvariable "cosGrpCount";
_townGrp=createGroup DefaultSide;
_localGrps=1;

waituntil {!populating_COS};
populating_COS=true;
_glbGrps=server getvariable "cosGrpCount";


//SPAWN CIVILIANS NOW
_civilianArray=[];
_vehicleArray=[];
_PatrolVehArray=[];
_ParkedArray=[];

_roadPosArray=_roadPosArray call BIS_fnc_arrayShuffle;
_UnitList=COScivPool call BIS_fnc_arrayShuffle;
_vehList=COSmotPool call BIS_fnc_arrayShuffle;
_countVehPool=count _vehList;
_countPool=count _UnitList;
_v=0;
_n=0;
_rdCount=0;

// SPAWN PEDESTRIANS
for "_i" from 1 to _civilians do {
if (!(server getvariable _trigID)) exitwith {_isActive=false;};

if (_i >= _countPool)
then {
if (_n >= _countPool) then {_n=0;};
_tempUnit=_UnitList select _n;
_n=_n+1;
};
if (_i < _countPool)
then {
_tempUnit=_UnitList select _i;
};

_tempPos=_roadPosArray select _rdCount;
_rdCount=_rdCount+1;

if (COSmaxGrps < (_glbGrps+_localGrps+1))
then {
_grp=_townGrp;
}else{
_grp=createGroup DefaultSide;
_localGrps=_localGrps+1;
};

_unit = _grp createUnit [_tempUnit, _tempPos, [], 0, "NONE"];
_civilianArray set [count _civilianArray,_grp];

null =[_unit] execVM "cos\addScript_Unit.sqf";

IF (debugCOS) then {
_txt=format["INF%1,MKR%2",_i,_mkr];
_debugMkr=createMarker [_txt,getpos _unit];
_debugMkr setMarkerShape "ICON";
_debugMkr setMarkerType "hd_dot";
_debugMkr setMarkerText "Civ Spawn";
};
};

// SPAWN VEHICLES
for "_i" from 1 to _vehicles do {

if (!(server getvariable _trigID)) exitwith {_isActive=false;};

if (_i >= _countVehPool)
then {
if (_v >= _countVehPool) then {_v=0;};
_tempVeh=_vehList select _v;
_v=_v+1;
};
if (_i < _countVehPool)
then {
_tempVeh=_vehList select _i;
};

if (_i >= _countPool)
then {
if (_n >= _countPool) then {_n=0;};
_tempUnit=_UnitList select _n;
_n=_n+1;
};
if (_i < _countPool)
then {
_tempUnit=_UnitList select _i;
};

_tempPos=_roadPosArray select _rdCount;
_rdCount=_rdCount+1;
_roadConnectedTo = roadsConnectedTo _tempPos;
_connectedRoad = _roadConnectedTo select 0;
_direction = [_tempPos, _connectedRoad] call BIS_fnc_DirTo;

if (COSmaxGrps < (_glbGrps+_localGrps+1))
then {
_grp=_townGrp;
}else{
_grp=createGroup DefaultSide;
_localGrps=_localGrps+1;
};

_veh = createVehicle [_tempVeh, _tempPos, [], 0, "NONE"];
_unit = _grp createUnit [_tempUnit, getpos _veh, [], 0, "CAN_COLLIDE"];
_veh setdir _direction;

_unit assignAsDriver _veh;
_unit moveInDriver _veh;

_vehPack=[_veh,_unit,_grp];
_PatrolVehArray set [count _PatrolVehArray,_grp];
_vehicleArray set [count _vehicleArray,_vehPack];


null =[_veh] execVM "cos\addScript_Vehicle.sqf";
null =[_unit] execVM "cos\addScript_Unit.sqf";

IF (debugCOS) then {
_txt=format["veh%1,mkr%2",_i,_mkr];
_debugMkr=createMarker [_txt,getpos _unit];
_debugMkr setMarkerShape "ICON";
_debugMkr setMarkerType "hd_dot";
_debugMkr setMarkerText "VEH Spawn";
};
};


// SPAWN PARKED VEHICLES
for "_i" from 1 to _parked do {

if (!(server getvariable _trigID)) exitwith {_isActive=false;};

if (_i >= _countVehPool)
then {
if (_v >= _countVehPool) then {_v=0;};
_tempVeh=_vehList select _v;
_v=_v+1;
};
if (_i < _countVehPool)
then {
_tempVeh=_vehList select _i;
};

_tempPos=_roadPosArray select _rdCount;
_rdCount=_rdCount+1;
_roadConnectedTo = roadsConnectedTo _tempPos;
_connectedRoad = _roadConnectedTo select 0;
_direction = [_tempPos, _connectedRoad] call BIS_fnc_DirTo;

_veh = createVehicle [_tempVeh, _tempPos, [], 0, "NONE"];
_veh setdir _direction;
_veh setPos [(getPos _veh select 0)-6, getPos _veh select 1, getPos _veh select 2];

_ParkedArray set [count _ParkedArray,_veh];


null =[_veh] execVM "cos\addScript_Vehicle.sqf";

IF (debugCOS) then {
_txt=format["Park%1,mkr%2",_i,_mkr];
_debugMkr=createMarker [_txt,getpos _veh];
_debugMkr setMarkerShape "ICON";
_debugMkr setMarkerType "hd_dot";
_debugMkr setMarkerText "Park Spawn";
};
};


// Apply Patrol script to all units
null =[_civilianArray,_PatrolVehArray,_roadPosArray] execVM "cos\CosPatrol.sqf";

if (debugCOS) then {player sidechat (format ["Roads used:%1. Roads Stored %2",_rdCount,count _roadPosArray])};

// Count groups
_glbGrps=server getvariable "cosGrpCount";
_glbGrps=_glbGrps+_localGrps;
server setvariable ["cosGrpCount",_glbGrps];
populating_COS=false;

// Show town label if town still active
if (showTownLabel and (server getvariable _trigID))
then {

COSTownLabel=[(_civilians+_vehicles),_mkr];PUBLICVARIABLE "COSTownLabel";
_population=format ["Population: %1",_civilians+_vehicles];
0=[markerText _mkr,_population] spawn BIS_fnc_infoText;// FOR USE IN SINGLEPLAYER
};


// Check every second until trigger is deactivated
while {_isActive} do
{
_isActive=server getvariable _trigID;
if (!_isActive) exitwith {};
sleep 1;
};

// If another town is populating wait until it has finished before deleting population
waituntil {!populating_COS};

// Delete all pedestrians
_counter=0;
{
_grp=_x;
_counter=_counter+1;
if (debugCOS) then { deletemarker (format["INF%1,MKR%2",_counter,_mkr]);};
{ deleteVehicle _x } forEach units _grp;
deleteGroup _grp;
}foreach _civilianArray;


// Delete all vehicles and crew
_counter=0;
{
_veh=_x select 0;
_unit=_x select 1;
_grp=_x select 2;
_counter=_counter+1;
if (debugCOS) then {deletemarker (format["veh%1,mkr%2",_counter,_mkr]);};


// CHECK VEHICLE IS NOT TAKEN BY PLAYER
if ({isPlayer _veh} count (crew _veh) == 0)
then {};

}foreach _vehicleArray;

// Delete all parked vehicles
_counter=0;
{
_counter=_counter+1;
if (debugCOS) then {deletemarker (format["Park%1,mkr%2",_counter,_mkr]);};

// CHECK VEHICLE IS NOT TAKEN BY PLAYER
if ({isPlayer _x} count (crew _x) == 0)
then {

};
}foreach _ParkedArray;

deletegroup _townGrp;

// Update global groups
_glbGrps=server getvariable "cosGrpCount";
_glbGrps=_glbGrps-_localGrps;
server setvariable ["cosGrpCount",_glbGrps];


Leider bin ich nicht wirklich gut in Sachen Script, weshalb ich mit der Fehlermeldung nicht viel anfangen kann. Weiss jemand, was hier evtl. nicht stimmt, bzw. was man anpassen müsste, damit das Script auch auf Tanoa fehlerlos läuft?

P.S: Ich wollte zuerst mal hier im deutschen Forum schreiben, bevor ich mich ins englische (und somit direkt an BangaBob) wage.

Jetzt schon vielen Dank für eure Unterstützung.

Sarogahtyp
14.07.2016, 09:08
Das script is mir zu fett um es mal eben schnell zu debuggen, aber versuch mal das

_direction = [_tempPos, _connectedRoad] call BIS_fnc_DirTo;

hiermit zu ersetzen:

if(!isNil "_connectedRoad") then
{_direction = [_tempPos, _connectedRoad] call BIS_fnc_DirTo}
else
{_direction = 0;};

P.S. BongaBob wirst du nicht errei hen, der ist inaktiv. Soll dich aber n8cht davon abhalten im release thread nachzufragen... vielleicht weiß dort jemand mehr...

Wolkenbeisser
27.07.2016, 11:10
Ich habe festgestellt, dass sich das Skript - je nach Ort auf Tanoa, wo die Spielerfigur steht - anders verhält.

Starte ich die Missionsvorschau beispielsweise auf der Airbase Tuvanaka (oder wie die heisst, dort im Nordwesten), kommt keine Fehlermeldung :komisch:.

Ich muss hier noch ein wenig weiter herumprobieren und auch die mögliche Lösung von Sarogahtyp mit einbeziehen.

Kann also noch eine Weile dauern, bis ich hier mehr weiss....

Drunken Officer
27.07.2016, 11:25
Ich werde mal meine Version auf Tanoa testen und die bescheid geben. Es ist an BangaBob seiner Version angelehnt. Ich arbeite allerdings ohne Trigger

Wolkenbeisser
27.07.2016, 16:12
Ich werde mal meine Version auf Tanoa testen und die bescheid geben. Es ist an BangaBob seiner Version angelehnt. Ich arbeite allerdings ohne Trigger

Danke, DO :daumen:

Drunken Officer
27.07.2016, 17:12
Ich lasse mir die Marker auszählen. Ich komme auf 60. Bei 49 z.B. gibt es Probleme. Ich muss noch die anderen Sorgenkinder finden. Auf ALTIS hat da Script 1a funktioniert. Das kann man aber mit manuellen Markern kompensieren

http://www2.pic-upload.de/thumb/31316489/arma32016-07-2717-10-39-57.jpg (http://www.pic-upload.de/view-31316489/arma32016-07-2717-10-39-57.jpg.html)

Problem erkannt- Schaut man sich mal das hier an, weiß man, warum das Script teilweise spinnt:
Genau wie BangaBob sein Script hat auch meines einen Suchraduis beginnt. Irgendwo muss man ja anfangen, und ein Startparament festlegen. Wenn dann nix drin ist, kann es Probleme geben.
Hier dieser Marker liegt einfach zwischen den Inseln und es wird kein Haus erkannt.

http://www2.pic-upload.de/img/31316603/arma32016-07-2717-28-07-78.jpg (http://www.pic-upload.de/view-31316603/arma32016-07-2717-28-07-78.jpg.html)

Laß dir mal bei Banga seinem Script die Marker anzeigen und haue die Problemfälle aus dem Array raus. Dann sollte es hinhauen.

Wolkenbeisser
15.08.2016, 10:40
Bis jetzt habe ich das (Marker anzeigen lassen und die "faulen" ausmisten) noch nicht ausprobiert, weil die Fehlermeldungen plötzlich nicht mehr auftauchen.

Ich vermute, es kommt darauf an, wo auf der Map die Logik platziert wird. Je nach Ort, wo man diese Logik hinschiebt kommen Fehlermeldungen (oder eben keine). Ich vermute mal, die Marker werden je nach Standort der Logik anders platziert...?

Wie auch immer. Im Moment scheint's zu klappen. Ich denke ich nehme mir die Sache erst wieder vor, wenn ich wieder auf Probleme stosse.

Wolkenbeisser
22.08.2016, 15:10
Ich habe mich hier wohl zu früh gefreut :(. Wenn der Spieler sich (z.B. in einem Flugzeug) über die Insel bewegt, tauchen die Fehlermeldungen wieder auf. Sobald ich also dazu komme, werde ich versuchen, diejenigen Marker, welche im Wasser liegen auszuschliessen.....

Drunken Officer
22.08.2016, 21:33
Jo, lasse dir die MArker anzeigen und lösche die aus der Liste.

Wolkenbeisser
23.08.2016, 12:49
Ups, hab's mir noch halb gedacht: Wie man die Marker anzeigt habe ich zwar herausgefunden, aber...



das sind grüne Ovale, deren Zentrum man nicht genau ermitteln kann
die Marker haben keine Namen. Ich weiss also nicht, wie ich sie mir für den Ausschluss merken kann
Ich finde keinen Array, aus dem ich sie löschen könnte


Ich befürchte meine (ziemlich rudimentären) Scriptkenntnisse reichen dafür nicht aus. :(

Wie soll ich bei dieser Aufgabe vorgehen? Wäre froh, wenn mir das jemand beschreiben könnte. Vielen Dank.

Drunken Officer
24.08.2016, 23:38
ich schaue mir am WE mal das COS an. Welche Karte? Tanoa?

Wolkenbeisser
25.08.2016, 08:07
Ja, Tanoa. Auf Altis funktioniert es fehlerfrei.

Danke, DO :daumen:

Drunken Officer
28.08.2016, 20:13
Ich war am WE bei dieser Hitze ( 37°C im Schatten ! ) einfach zu faul...

Wolkenbeisser
29.08.2016, 08:09
@DO: Easy :)

Ich hatte sowieso auch keine Zeit am WE.