Make test assertions more idiomatic

What does this PR do?
This PR makes the assertions used in the test suite more idiomatic for Pytest.
Idiomatic assertions are rewritten by Pytest, making debugging much easier.
Namely, I did a first pass using codemod-unittest-to-pytest-asserts, followed by some ast-grep powered fixes, followed up with some manual fixes to make things neater still.
Sibling of https://github.com/huggingface/trl/pull/1301.
I don't have easy access to hardware suitable for running all tests locally (Apple Silicon 😄), but the tests I could run seem to pass, so here's hoping CI agrees!
Before submitting

[ ] This PR fixes a typo or improves the docs (you can dismiss the other checks if that's the case).
[x] Did you read the contributor guideline,
Pull Request section?
[ ] Was this discussed/approved via a Github issue or the forum? Please add a link
to it if that's the case.
[ ] Did you make sure to update the documentation with your changes? Here are the
documentation guidelines, and
here are tips on formatting docstrings.
[ ] Did you write any new necessary tests?

Who can review?
cc @muellerzr

We may change our mind in the future (and you're welcome to keep this PR open as a result) but for now that's where we're at here :)

as our mixture of some pytest and mostly unittest + our own features

TBH, the current tests are already mixing e.g. self.assertRaises and pytest.raises within the same file, so there's no way to run the tests without pytest anyway. (See e.g. test_state_checkpointing.py) 😅

is a better long-term approach we've found that maintains usability and longevity without the nuances and issues that pytest can provide long-term.

What nuances and issues have you found that Pytest provides long-term?
Anyway, I rebased this and backed out the last commit that made things more Pytesty, so now all this does is codemod unittest-specific assertions into native Pythonic assertions.

TBH, the current tests are already mixing e.g. self.assertRaises and pytest.raises within the same file, so there's no way to run the tests without pytest anyway. (See e.g. test_state_checkpointing.py) 😅

yes, hence why pytest is a dep in the testing requirements install.

@muellerzr

Edit: can you run make style; make quality however?

Rebased + done.

I don't understand the point. Pytest works smoothly with unittest, why change something that is already working?

@fxmarty We had some internal discussion to allow using more pytest features going forward. For some of these features, we need to get rid of unittest.TestCase, which requires removing self.assertFoo type calls. Going from self.assertFoo to assert is also more readable and we're still getting nice error messages.

@BenjaminBossan Thank you, which features would that be?


WIP: feat(mongoose): Add an option to Ref for more accurate JsonSchema ...

Add an option to Ref for more accurate JsonSchema based on Groups and populated Refs.
I would appreciate feedback on that 😅
Information

Type
Breaking change

Feature
No :pray:

Usage example
@Model()
export class User {
    @ObjectID('id')
    _id: string;

    @Required()
    email: string;
}

@Model()
export class Task {
    @Property()
    title?: string;

    @Ref(User, {populatedGroups: ["pop"]})
    createdBy: Ref<User>;
}

@Controller('/tasks')
export class TaskController {

    constructor(@Inject(Task) private TaskModel: MongooseModel<Task>)

    @Get('/')
    @(Returns(200, Array).Of(Task).Groups("pop"))
    async list(): Promise<Task[]> {
      const tasks = await this.TaskModel.find({}).populate<{createdBy: User}>('createdBy')
      return tasks;

      // resulting schema has property "createdBy" limited to $ref type
    }
}

Todos

[x] Tests
[ ] Coverage
[x] Example
[ ] Documentation

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 95.719%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
4229

Relevant Lines:
4237

💛  - Coveralls

Merged ;)

:tada: This PR is included in version 6.95.0 :tada:
The release is available on:

v6.95.0
GitHub release

Your semantic-release bot :package::rocket:


Upgrade the Azure.ResourceManager.DesktopVirtualization

https://github.com/Azure/azure-sdk-for-net/pull/35258

#35258

@ArthurMa1978 , do we have any updates on this?

Released


Binary package(s)

I would like to ask if you could release binary packages so that the user doesn't have the trouble of compiling it during pip install? I believe some other packages like numpy are doing this:
https://numpy.org/doc/stable/dev/releasing.html
Usecase: this packages is used in https://github.com/pyoscx/scenariogeneration which is then used by https://github.com/johschmitz/blender-driving-scenario-creator
Installing the Blender add-on becomes very complicated due to the compilation step. There is also the problematic case with slightly older Linux distributions which don't bring the Python 3.9 headers and then it gets even harder.

I guess this might be helpful:
https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/

Per my understanding, pip will always check to see if a wheel is on pypi for the target system, and only compiles the code during install if a wheel isn't available.  Right now I only have binaries for 64 bit windows on pypi, but I've done a bit of investigating and I should be able to build and release a binary compatible with manylinux on a reasonable timeframe.  Would that be sufficient for the needs of your project?  The package would still need to compile at install if there was a target system that wasn't included in manylinux or windows 64 bit.

Cool, I did not implement that exact same thing myself so far but I guess this should work. In fact numpy seems to also be using manylinux. I'll definitely report back about the results as soon as you release something. Furthermore, I suggest that you implement it using GitHub Actions. Then you just tag a new version whenever you are happy with it and it will be released automatically. No need for so much manual work on your local computer anymore 😊 I am only releasing to the Github release page this way but it should probably also work fine for PyPI as described in the links above.
See:
https://github.com/johschmitz/blender-driving-scenario-creator/blob/master/.github/workflows/release.yaml
In there I am using
https://github.com/anton-yurchenko/git-release
And I love that it also takes care of publishing my changelog alongside the assets to the release page. I hope that you can combine it with manylinux.
Btw I am also considering to directly use your lib now inside my tool to interactively calculate some road geometries. Let's see how that turns out. Also I was wondering if it would eventually make sense for your code to become a part of numpy or if it is too special or incompatible with the philosophy or something. In any case, whatever path you choose, keep up the great work!

@phillipd94 Let me know if I can support you with this issue. Would also love to have a video call and give you a little demo of how I am using your library if that is interesting for you.


Terraform modules private repositories

Describe the outcome you'd like
On my terraform code I need to fetch modules from private repo (Gitlab and CodeCommit)
Is your feature request related to a problem you are currently experiencing? If so, please describe.
I can't find any documentation or example on how to make this working with CodeCommit or Gitlab
Additional context
I found some discussion here #42 but still the documentation doesn't exist...

@ahmedfourti thank you for reaching out.
Please track this request in Issue 215


Loading failure with Asteroid Mining and Zirconium

https://mods.factorio.com/mod/bzzirconium/discussion/633d79d5e5fbca9a5bfe1602

Fixed


Update index.md

Added link to M64 relnotes.

Maybe land or close this?

I think we can close this one since the release notes page is now up to date.


Commit log not updated in command response

When I run a terminus site code commit, I don't always see that commit in the log that's output to the terminal.
$ terminus site code commit --env=dev --message='DRUPALOPS-301: Security update to Linkit 2.7' --site=casc1
Commit 1 changes? [y/n] y
Success: Successfully commited.
+---------------------+------------------+-----------------+------------------------------------------+----------------------------------------------------+
| Time                | Author           | Labels          | Hash                                     | Message                                            |
+---------------------+------------------+-----------------+------------------------------------------+----------------------------------------------------+
| 2014-11-19T22:54:23 | Pantheon         | test, live, dev | 2be521e0da49a4a73cbc80c3962bd592df95ac10 | Update to Drupal 7.34. More info: https://www.drup |
| 2014-10-15T18:58:41 | Pantheon         | test, live, dev | d24a179ed808316b4aec568575cb031ab69c0167 | Drupal version 7.32 - a security release that shou |

This makes it unclear that the commit has actually happened. In the past there have been dashboard issues with the stats not being up to date. I've seen the "No changes to commit" message while using drush/terminus v1, even when there were pending changes in SFTP mode.

The log for this site is still out of date:
$ terminus site code log --env=dev --site=casc1
+---------------------+-----------------+-----------------+------------------------------------------+----------------------------------------------------+
| Time                | Author          | Labels          | Hash                                     | Message                                            |
+---------------------+-----------------+-----------------+------------------------------------------+----------------------------------------------------+
| 2014-11-19T23:01:58 | Pantheon        | test, live, dev | 6e5f3497313ec98df6ef82553a15066901d4faf1 | Update to Drupal 7.34. More info: https://www.drup |
| 2014-10-15T18:58:57 | Pantheon        | test, live, dev | a49f8a1e4a8b24900a3adc2b15f75073b9156058 | Drupal version 7.32 - a security release that shou |

even though the dashboard shows the commit in place:

@cboyden-ucb Thanks for bringing this to our attention. Can you confirm that the commit itself was made through the dashboard and not terminus? I also did you try running the terminus command with the --nocache flag? I suspect this is an issue where since terminus isn't sending the commit it doesn't know to purge the cache. We can brain storm about how to fix it but for now the --nocache flag "should" fix it. Can you confirm?

In all cases, I ran the commit in Terminus, not the dashboard. I'll try with --no-cache next time.

I have also experienced this issue running commits in Terminus.  Have not yet tried the --no-cache flag.

@livewyer Do you have any update on this issue? Have you tried using the --no-cache flag?

@bensheldon I have not tried with the --no-cache flag because now terminus does not go on to the next step until the previous step has finished.  I was needing to check status because previously it would just plow on ahead without first making sure the previous task was complete.

I have removed http caching (#306) which I think should solve this issue.


how to equip bots?/Как снарядить ботов?

Привет уважаемый разработчик мода, возникла проблема, в файле HumanLoadout.json и прочих подобных файлов поменял снаряжение для ботов, но они все также спавняться со своим старндартным снаряжением, как исправить?
Hello dear mod developer, there is a problem in the HumanLoadout file.json and other similar files have changed the equipment for bots, but they still spawn with their stardart equipment, how can I fix it?

Доброго времени суток.
Решается всё следующим способом:

Вставляй вместо своего - вставляй этот файл: HumanLoadout.txt
Направляемся в: Server\mpmissions\dayzOffline.ChernarusPlus\eAI\AI_init.c
Находим строку: ref array<string> patrol_loadouts =
Сверяем каждую строку с списком патрулей (т.е. по дефолту 10 патрулей и можно сделать уникальную разгрузку для каждого патруля ArrayExample.txt
Необходимо доукомплектовать метод: OnUnitSpawn(eAIBase unit), в нём можно накрутить обвесы
AiLoadoutExample.txt
PROFIT!!!!!!

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
English version:
Good daytime.
Your situation might be fixed that way:

Replace yours HumanLoadout.json with mine (rename from .txt to .json: HumanLoadout.txt
Get to the path: Server\mpmissions\dayzOffline.ChernarusPlus\eAI\AI_init.c
Find the line like: ref array<string> patrol_loadouts =
Check amount of patrols and amount of loadouts THEY MUST BE EQUAL!  ArrayExample.txt
You need to override method: OnUnitSpawn(eAIBase unit), there you may set additional attachments for yours AI firearm AiLoadoutExample.txt
PROFIT!!!!!!

I made a new file for the loadout and in no way do the bots come with the equipment I selected, and every time it creates a new SoldierLoadout.json file, I can edit this new file but within the game it doesn't change anything, and if I delete it it comes back appear next...

Please read my answer carefully. It contains everything to not to be ****ed up.
If write simply - checkout array of loadouts, items count in array MUST BE qual to ammount of patrols.
And try to not make any single mistake in loadout coz it might brake the loading of json file and everything went to trash.
Also there's one way where you may make a mistake is the function void InitDynamicPatrols()
There there's if statement like
if (i< patrol_loadouts.Count())
{
loadout = patrol_loadouts[i];
}
else
{
loadout = "HumanLoadout.json"; // Here you may set any other loadout, but keep in mind that state will submitted if made a mistake with count of loadouts (less then) and patrols count.
}

I've been trying to fix this for 2 days now... if you could help me...
// Patrol 1 = Balota strip
ref array patrol_1  = {"5237.821777 9.568775 2157.804199", "4887.835449 9.560701 2578.265625", "4917.622559 9.539299 2599.980469"};
// Patrol 2 = SW Rail Line
ref array patrol_2  = {"41.383652 6.637133 1568.725464", "167.029785 6.660925 1589.156372", "399.000854 6.637136 1605.268677", "450.407135 6.660660 1618.758667", "482.006226 6.711864 1632.124023", "799.668762 6.740325 1846.262695", "847.898071 5.795653 1886.695801", "923.040100 5.795653 1959.974121", "976.875427 5.795653 2031.899414", "1050.173218 6.664209 2158.251709", "1157.952637 5.795209 2307.297119", "1187.608032 6.407721 2340.853271", "1259.927368 6.011772 2363.105225", "1333.362915 6.637136 2342.896973", "1469.527222 6.721370 2247.018555", "1514.207764 5.795653 2222.483398", "1572.351074 6.581270 2193.880371", "1639.594482 6.438149 2169.135010", "1696.991211 5.795653 2156.455811", "1763.947998 6.373237 2143.247314", "1889.594116 6.014451 2166.340820", "2079.179688 6.529642 2219.987549", "2176.673584 6.011375 2196.734375", "2244.440430 5.995491 2087.459229", "2348.422119 5.795653 2048.190186", "2641.000000 6.692032 1985.662354", "2772.157471 6.697611 1985.912354", "3044.920166 5.795653 2044.465820", "2772.157471 6.697611 1985.912354", "2641.000000 6.692032 1985.662354", "2348.422119 5.795653 2048.190186", "2244.440430 5.995491 2087.459229", "2176.673584 6.011375 2196.734375", "2079.179688 6.529642 2219.987549", "1889.594116 6.014451 2166.340820", "1763.947998 6.373237 2143.247314", "1696.991211 5.795653 2156.455811", "1639.594482 6.438149 2169.135010", "1572.351074 6.581270 2193.880371", "1514.207764 5.795653 2222.483398", "1469.527222 6.721370 2247.018555", "1333.362915 6.637136 2342.896973", "1259.927368 6.011772 2363.105225", "1187.608032 6.407721 2340.853271", "1157.952637 5.795209 2307.297119", "1050.173218 6.664209 2158.251709", "976.875427 5.795653 2031.899414", "923.040100 5.795653 1959.974121", "847.898071 5.795653 1886.695801", "799.668762 6.740325 1846.262695", "482.006226 6.711864 1632.124023", "450.407135 6.660660 1618.758667"};
// Patrol 3 = Cherno Port
ref array patrol_3  = {"7332.387695 5.712450 2651.121338", "7632.803223 5.507639 3075.661865", "7621.013184 5.892049 3083.053223", "7321.484375 5.448769 2658.244141"};
// Patrol 4 = Elektro Yard
ref array patrol_4  = {"10825.153320 5.894602 2555.271240", "10853.957031 6.433348 2635.236816", "10889.441406 5.977321 2749.464111", "10852.090820 6.012342 2760.362793", "10828.861328 6.012496 2730.357910", "10794.523438 6.012444 2636.897705", "10779.160156 6.012487 2593.712158", "10781.082031 6.004701 2574.147949"};
// Patrol 5 = Solnechny south
ref array patrol_5  = {"13392.708984 5.809348 5952.577637", "13369.891602 6.012489 5624.214844", "13373.618164 5.943049 5486.794434",  "13369.891602 6.012489 5624.214844"};
// Patrol 6 = Rify Trail
ref array patrol_6  = {"13342.375977 27.020344 11228.225586", "13469.069336 11.282786 11163.261719", "13567.762695 6.128973 11127.067383", "13620.910156 8.011324 11244.537109", "13567.762695 6.128973 11127.067383", "13469.069336 11.282786 11163.261719"};
// Patrol 7 = Nizhneye
ref array patrol_7  = {"12879.688477 5.743166 8590.398438", "12983.769531 6.060859 8323.492188", "13000.213867 6.062475 8330.422852", "12967.809570 5.781274 8447.635742"};
// Patrol 8 = NWAF North
ref array patrol_8  = {"4078.499268 339.012421 10802.854492", "4277.165039 339.012360 10922.452148", "4271.527832 339.008148 10938.139648", "4064.494385 339.012421 10818.675781"};
// Patrol 9 = NWAF south
ref array patrol_9  = {"4772.428711 338.964355 9583.963867", "4639.255859 339.012390 9815.970703", "4978.569336 339.012451 10004.463867", "4639.255859 339.012390 9815.970703"};
// Patrol 10 = Tisy
ref array patrol_10 = {"1724.632080 451.730408 14298.412109", "1681.035522 451.784302 14278.791016", "1668.385742 451.730408 14268.739258", "1653.012695 451.784302 14245.443359", "1662.009521 451.784302 14220.044922", "1668.885010 451.730408 14177.100586", "1678.905029 451.784302 14134.460938", "1687.656250 451.784302 14097.293945", "1691.055054 451.728760 14072.710938", "1697.563721 450.094635 14019.088867", "1701.266235 448.636108 13981.079102", "1709.151733 448.368225 13969.950195", "1726.191772 447.882568 13954.740234", "1734.303101 447.342072 13945.562500", "1736.849487 447.158569 13939.061523", "1803.257568 436.318970 13812.399414", "1802.478149 435.682281 13794.238281", "1764.742676 434.271759 13667.715820", "1753.983521 434.111572 13660.847656", "1697.765381 433.031982 13621.431641", "1625.751953 437.192169 13583.775391", "1615.443726 437.193420 13582.367188", "1586.155762 439.010864 13609.286133", "1566.816040 441.081787 13643.261719", "1554.550049 441.587372 13645.919922", "1533.254028 440.683624 13646.856445", "1470.583130 444.685120 13679.353516", "1448.422729 446.229736 13681.502930", "1397.534424 448.255707 13663.409180", "1377.747681 448.799530 13661.333984", "1356.402222 451.658264 13669.961914", "1339.632813 454.855988 13690.362305", "1311.232178 457.548615 13730.733398", "1368.332275 455.560181 13762.721680", "1389.098022 453.795563 13785.572266", "1394.411499 451.237183 13801.572266", "1398.934204 451.644989 13828.162109", "1419.962524 456.061951 13891.482422", "1409.579224 458.430359 13947.408203", "1421.006104 459.254517 13993.981445", "1422.121094 459.807831 14022.114258", "1388.509277 462.222443 14044.217773", "1388.548340 462.354797 14044.183594", "1333.772217 463.948151 14062.096680", "1350.346069 465.658081 14107.701172", "1461.509521 459.874268 14133.793945", "1503.123291 455.995056 14137.425781", "1554.196045 452.867004 14107.243164", "1574.911743 452.540283 14100.198242", "1629.664673 451.792175 14197.793945", "1636.238647 451.792175 14221.260742", "1671.278564 451.792175 14275.020508", "1645.910522 451.807617 14315.247070", "1669.397339 451.792175 14331.668945", "1685.370361 451.792175 14341.243164"};
// If you add another patrol array, add it to this list
ref array<array> patrol_list = {
patrol_1,
patrol_2,
patrol_3,
patrol_4,
patrol_5,
patrol_6,
patrol_7,
patrol_8,
patrol_9,
patrol_10
};
// IMPORTANT: If you add an entry to the above list, pick the loadout for it by adding the loadout filename to this list
ref array patrol_loadouts = {
"SoldadosBlack.json",	// patrol_1
"SoldadosBlack.json",	// patrol_2
"SoldadosBlack.json",	// patrol_3
"SoldadosBlack.json",	// patrol_4
"SoldadosBlack.json",	// patrol_5
"SoldadosBlack.json",	// patrol_6
"SoldadosBlack.json",	// patrol_7
"SoldadosBlack.json",	// patrol_8
"SoldadosBlack.json",	// patrol_9
"SoldadosBlack.json"	// patrol_10
};
// you may change these quantities
const int NUMBER_PER_PATROL = 5;	// Number of AI per patrol
const int MAXR = 800;				// This is the main spawn radius- how close a player needs to be to spawn them in.
const int MINR = 250;				// If a player is this close to the patrol start point, it is too close for them to spawn
const int DESPAWNR = 1000;			// If all players are this far away, they despawn.
const int RESPAWN_SECONDS = 300;	// The amount of seconds before a new patrol will spawn, after they both die
class CustomPatrol : eAIDynamicPatrol {
override void OnPatrolSpawn(eAIGroup patrol) {
// Uncomment this line to change the faction of the patrol from Raiders (default)
// eAIFactionGuards for example is a faction which only kills players who have their weapons out
// patrol.SetFaction(new eAIFactionGuards());
	// Uncomment this line to slow down or speed up the patrol (1.0 to 3.0)
patrol.SetSpeedLimit(1.0);
}
override void OnUnitSpawn(eAIBase unit) {
	// Uncomment this to give the AI unlimited magazines (new one is added on reload)
unit.SetUnlimitedMags(true);

	// You can also do anything you would do in the StartingEquipSetup() for players here

	// These lines will add attachments the same way you would for a player. However, the AI must have the M4A1 class in the Loadout.json file already for it to work.
	//Weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
	//weapon.GetInventory().CreateAttachment("M4_PlasticHndgrd");
	//weapon.GetInventory().CreateAttachment("M4_OEBttstck");
	//weapon.GetInventory().CreateAttachment("M4_CarryHandleOptic");
}

};
autoptr array patrols = {};
void InitDynamicPatrols() {
for (int i = 0; i < patrol_list.Count(); i++) {
string loadout = "SoldadosBlack.json"; // default
if (i < patrol_loadouts.Count()) loadout = patrol_loadouts[i];
autoptr CustomPatrol pat = new CustomPatrol(patrol_list[i][0], patrol_list[i], loadout, NUMBER_PER_PATROL, MINR, MAXR, DESPAWNR, RESPAWN_SECONDS);
patrols.Insert(pat);
pat.UpdateTriggers();
}
}
void SpawnSentry(vector pos, string loadout = "SoldadosBlack.json") {
eAIGame game = MissionServer.Cast(GetGame().GetMission()).GetEAIGame();
eAIBase ai = game.SpawnAI_Sentry(pos, loadout);
}
modded class CustomMission
{
void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
m_eaiGame.GetGroupByLeader(player);
super.StartingEquipSetup(player, clothesChosen);
}
};

{
"Shirts": [
"MMG_combatshirt_dark_woodland"
],
"Pants": [
"MMG_combatpants_dark_woodland"
],
"Shoes": [
"MMG_boots_dark_woodland"
],
"BackPacks": [
"MMG_camelback_dark_woodland"
],
"Vests": [
"MMG_MK_V_Armor_dark_woodland"
],
"Headgear": [
"MMG_striker_helmet_dark_woodland"
],
"Gloves": [
"mmg_tactical_gloves_dark_woodland"
],
"Misc": [
"MMG_balaclava_dark_woodland"
],
"ClothesHealth": [
70,
100
],
"WeaponMelee": [
"MeleeBat"
],
"WeaponRifle": [
"Snafu_ScarH_DKMC_GUN",
"GCGN_M11_Barret",
"Snafu_pkp_Black_GUN"
],
"WeaponRifleMagCount": [
1,
3
],
"WeaponHandgun": [
"SN_Glock19"
],
"WeaponHandgunMagCount": [
1,
3
],
"WeaponHealth": [
70,
100
],
"Loot": [
"SodaCan_Cola",
],
"LootRandom": [
"SodaCan_Cola"
],
"LootChance": [
50,
50,
50,
50,
50,
50,
50,
50
],
"LootHealth": [
70,
100
],
"Locked": 0
}

Even if I edit the default SoldierLoadout.json file it doesn't load, if I just change the weapon, it continues to come with the default weapon, if I delete the SoldierLoadout.json file the system creates another file... I don't know what to do anymore ..

First point is the your JSON:
"Loot": [
"SodaCan_Cola",
],
"LootChance": [
50,
50,
50,
50,
50,
50,
50,
50
];
Loot has 1 item, when LootChance has 8 items 1 not equal to 8, so correct way should be
"Loot": [
"SodaCan_Cola",
],
"LootRandom": [
"SodaCan_Cola"
],
"LootChance": [
50
];

Even if I edit the default SoldierLoadout.json file it doesn't load, if I just change the weapon, it continues to come with the default weapon, if I delete the SoldierLoadout.json file the system creates another file... I don't know what to do anymore ..

To the hell I made some changes based on my file Mission\eAI\eAI_Init.c:
`ref array patrol_loadouts = {
"SoldadosBlack.json",	//	1
"SoldadosBlack.json",	//	2
"SoldadosBlack.json",	//	3
"SoldadosBlack.json",	//	4
"SoldadosBlack.json",	//	5
"SoldadosBlack.json",	//	6
"SoldadosBlack.json",	//	7
"SoldadosBlack.json",	//	8
"SoldadosBlack.json",	//	9
"SoldadosBlack.json"	//	10
};
// you may change these quantities
const int NUMBER_PER_PATROL = 10;	// Number of AI per patrol
const int MAXR = 1200;				// This is the main spawn radius- how close a player needs to be to spawn them in.
const int MINR = 400;				// If a player is this close to the patrol start point, it is too close for them to spawn
const int DESPAWNR = 1400;			// If all players are this far away, they despawn.
const int RESPAWN_SECONDS = 900;	// The amount of seconds before a new patrol will spawn, after they both die
autoptr array patrols = {};
class CustomPatrol : eAIDynamicPatrol
{
override void OnPatrolSpawn(eAIGroup patrol)
{
// Uncomment this line to change the faction of the patrol from Raiders (default)
// eAIFactionGuards for example is a faction which only kills players who have their weapons out
// patrol.SetFaction(new eAIFactionGuards());
// Uncomment this line to slow down or speed up the patrol (1.0 to 3.0)
// patrol.SetSpeedLimit(1.0);
}
override void OnUnitSpawn(eAIBase unit)
{
// Uncomment this to give the AI unlimited magazines (new one is added on reload)
unit.SetUnlimitedMags(true);
// You can also do anything you would do in the StartingEquipSetup() for players here
// These lines will add attachments the same way you would for a player. However, the AI must have the M4A1 class in the Loadout.json file already for it to work.
//Weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
//weapon.GetInventory().CreateAttachment("M4_PlasticHndgrd");
//weapon.GetInventory().CreateAttachment("M4_OEBttstck");
//weapon.GetInventory().CreateAttachment("M4_CarryHandleOptic");
}
};
void InitDynamicPatrols()
{
for (int i = 0; i < patrol_list.Count(); i++)
{
string loadout = "SoldadosBlack.json";
if (i < patrol_loadouts.Count())
{
loadout = patrol_loadouts[i];
}
else
{
loadout = "SoldadosBlack.json";
}
autoptr CustomPatrol pat = new CustomPatrol(patrol_list[i][0], patrol_list[i], loadout, NUMBER_PER_PATROL, MINR, MAXR, DESPAWNR, RESPAWN_SECONDS);
patrols.Insert(pat);
pat.UpdateTriggers();
}
}
void SpawnSentry(vector pos, string loadout = "SoldadosBlack.json")
{
eAIGame game = MissionServer.Cast(GetGame().GetMission()).GetEAIGame();
eAIBase ai = game.SpawnAI_Sentry(pos, loadout);
}
modded class CustomMission
{
override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
m_eaiGame.GetGroupByLeader(player);
super.StartingEquipSetup(player, clothesChosen);
}
};`
Paste it after ending of the ref array<array> patrol_list =  and I hope it will help you to fix your mission.

Friend, unfortunately it didn't work, I changed the amount of drop chance, and also the entire modified list that you envied, and now you can't access the server, it's online but you can't connect...

First point is the your JSON:
"Loot": [
"SodaCan_Cola",
],
"LootChance": [
50,
50,
50,
50,
50,
50,
50,
50
];
Loot has 1 item, when LootChance has 8 items 1 not equal to 8, so correct way should be
"Loot": [
"SodaCan_Cola",
],
"LootRandom": [
"SodaCan_Cola"
],
"LootChance": [
50
];
Dang it.
May you chekout the logs you need to checkout the crash_ file and DayZServer_x64_*.rpt, there should be a reason why the server is kicked down.
Any way I'll try to attach the .txt file with full version of that script, maybe it will help you...

SCRIPT    (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,297": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting
SCRIPT    (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,311": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting
SCRIPT    (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,325": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting
SCRIPT    (W): @"eAI/Scripts/5_Mission/eai\eaidynamicpatrol.c,66": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting
SCRIPT    (E): @"$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c,46": Wrong number of template parameters
SCRIPT    (E): Can't compile mission init script'!

I didn't find this other file DayZServer_x64_*.rpt

SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,297": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,311": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,325": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaidynamicpatrol.c,66": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (E): @"$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c,46": Wrong number of template parameters SCRIPT (E): Can't compile mission init script'!

I'd found that githab had had been fu**ed up my code. I'd rewritten it under your solutions and will sent you as text file attachment.

SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,297": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,311": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,325": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaidynamicpatrol.c,66": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (E): @"$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c,46": Wrong number of template parameters SCRIPT (E): Can't compile mission init script'!

I'd found that githab had had been fu**ed up my code. I'd rewritten it under your solutions and will sent you as text file attachment.

ok, thanks

Where do I see attachments?

SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,297": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,311": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaigame.c,325": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (W): @"eAI/Scripts/5_Mission/eai\eaidynamicpatrol.c,66": Unsafe down-casting, use 'PlayerBase.Cast' for safe down-casting SCRIPT (E): @"$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c,46": Wrong number of template parameters SCRIPT (E): Can't compile mission init script'!

I'd found that githab had had been fu**ed up my code. I'd rewritten it under your solutions and will sent you as text file attachment.

ok, thanks

Done.
Please be careful, don't direct copy the json file from here or attachments. Was error in json code:
Line 55, there's ',' in array with one single item.
Was:
"Loot": [
"SodaCan_Cola",
],
Correct is:
"Loot": [
"SodaCan_Cola"
],
eAI_Init.txt
SoldadosBlack.txt
Wish you luck!

I did everything here, the server is online but I can't connect, I'm going to uninstall everything and redo it to see...

I did everything here, the server is online but I can't connect, I'm going to uninstall everything and redo it to see...

Let's try in other way.
1st close the DayZ Launcher
2nd - Open windows CMD
And one by one enter next commands:
ipconfig /release
ipconfig /flushdns
ipconfig /renew
And star over the launcher

My server is on gportal, funny that yesterday it was working normally, and out of nowhere the bot mod stopped working, but any equipment I want to put on the bot doesn't work...

My server is on gportal, funny that yesterday it was working normally, and out of nowhere the bot mod stopped working, but any equipment I want to put on the bot doesn't work...

That's really odd.
About that you could not connect:
1st check versions of server mods and client mods
2 ways to solve it:
A) Clear cash of dns for windows (previous CMD commands)
B) In launcher select Direct Connection and input IP amd Port - that's actually working!

Log D:\home\sid_1167897\dayz\config\crash_2023-09-12_15-38-20.log started at 12.09. 15:38:39

M22685, 12.09 2023 15:38:39
Can't compile mission init script'!
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c(1): Can't find file '$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c'
Runtime mode
CLI params: config config\server.cfg cfg config\basic.cfg profiles config cpuCount 1 ip <IP_ADDRESS> port 28000 mod @zSpawnSelectionFixed;@VanillaPlusPlusMap;@Cabin_Mod_RaGed;@Cabin_Mod_CodeLock_RaGed;@CodeLock;@CodeLockCraft;@DayZ-Dog;@FlyingBirds!;@MMGBaseStorage;@MuchCarKey;@DurableToolsPlus;@Ear-Plugs;@BuildingFortifications;@AmmoStackBullet;@BuildEverywhere;@PristineRepair;@SchanaModParty;@ZensTireRack;@PVEZReloaded;@PVEZMarkersOnVPPMap;@VPPAdminTools;@CF;@Community-Online-Tools;@MMG-MightysMilitaryGear;@SNAFUWeapons;@BuilderItems;@DabsFramework;@AirRaid;@GAREA_Leaderboard;@LootBarrelTransfer;@RepairAttachments;@FuelConsumption;@VanillaCarsUp;@ZombieRunOverSound;@BlackoutsScorpion;@InediaStamina;@InediaInfectedAI;@eAI_Reloaded servermod @SurvivorMissions loadMissionToMemory  enableHT

Log D:\home\sid_1167897\dayz\config\crash_2023-09-12_15-38-20.log started at 12.09. 15:38:39

M22685, 12.09 2023 15:38:39
Can't compile mission init script'!
$CurrentDir:mpmissions\dayzOffline.chernarusplus\init.c(1): Can't find file '$CurrentDir:mpmissions/dayzOffline.chernarusplus/eAI/AI_init.c'
Runtime mode
CLI params: config config\server.cfg cfg config\basic.cfg profiles config cpuCount 1 ip <IP_ADDRESS> port 28000 mod @zSpawnSelectionFixed;@VanillaPlusPlusMap;@Cabin_Mod_RaGed;@Cabin_Mod_CodeLock_RaGed;@CodeLock;@CodeLockCraft;@DayZ-Dog;@FlyingBirds!;@MMGBaseStorage;@MuchCarKey;@DurableToolsPlus;@Ear-Plugs;@BuildingFortifications;@AmmoStackBullet;@BuildEverywhere;@PristineRepair;@SchanaModParty;@ZensTireRack;@PVEZReloaded;@PVEZMarkersOnVPPMap;@VPPAdminTools;@CF;@Community-Online-Tools;@MMG-MightysMilitaryGear;@SNAFUWeapons;@BuilderItems;@DabsFramework;@AirRaid;@GAREA_Leaderboard;@LootBarrelTransfer;@RepairAttachments;@FuelConsumption;@VanillaCarsUp;@ZombieRunOverSound;@BlackoutsScorpion;@InediaStamina;@InediaInfectedAI;@eAI_Reloaded servermod @SurvivorMissions loadMissionToMemory  enableHT

Dang... Are you just copied the .txt not even renamed from .txt into .c am I right?

Sorry, I copied it wrong, my head is already spinning here

Ok, I managed to enter the game and the bots spawned in the default settings, 2 default bots appeared, now I'm going to copy the files and edit, let's see..

Sorry, I copied it wrong, my head is already spinning here

How dang I understand you man :)

Ok, I managed to enter the game and the bots spawned in the default settings, 2 default bots appeared, now I'm going to copy the files and edit, let's see..

Wait if i understood you right then your new settings already shall working. But instead of 2 units shall be 4 if i didn't miss anything...

Yes, if I install the mod, and I enter the server and go to the air base, the default bots, which are 2, appear normal, but if I apply your configuration the server comes online but I can't enter the server... it's as if there was something wrong with the configuration

So, I can enter the server, but the bots I configured do not work, only the default one, which is SoldierLoadout.json or HumanLoadout.json
// Patrol 1 = Balota strip
ref array patrol_1  = {"5237.821777 9.568775 2157.804199", "4887.835449 9.560701 2578.265625", "4917.622559 9.539299 2599.980469"};
// Patrol 2 = SW Rail Line
ref array patrol_2  = {"41.383652 6.637133 1568.725464", "167.029785 6.660925 1589.156372", "399.000854 6.637136 1605.268677", "450.407135 6.660660 1618.758667", "482.006226 6.711864 1632.124023", "799.668762 6.740325 1846.262695", "847.898071 5.795653 1886.695801", "923.040100 5.795653 1959.974121", "976.875427 5.795653 2031.899414", "1050.173218 6.664209 2158.251709", "1157.952637 5.795209 2307.297119", "1187.608032 6.407721 2340.853271", "1259.927368 6.011772 2363.105225", "1333.362915 6.637136 2342.896973", "1469.527222 6.721370 2247.018555", "1514.207764 5.795653 2222.483398", "1572.351074 6.581270 2193.880371", "1639.594482 6.438149 2169.135010", "1696.991211 5.795653 2156.455811", "1763.947998 6.373237 2143.247314", "1889.594116 6.014451 2166.340820", "2079.179688 6.529642 2219.987549", "2176.673584 6.011375 2196.734375", "2244.440430 5.995491 2087.459229", "2348.422119 5.795653 2048.190186", "2641.000000 6.692032 1985.662354", "2772.157471 6.697611 1985.912354", "3044.920166 5.795653 2044.465820", "2772.157471 6.697611 1985.912354", "2641.000000 6.692032 1985.662354", "2348.422119 5.795653 2048.190186", "2244.440430 5.995491 2087.459229", "2176.673584 6.011375 2196.734375", "2079.179688 6.529642 2219.987549", "1889.594116 6.014451 2166.340820", "1763.947998 6.373237 2143.247314", "1696.991211 5.795653 2156.455811", "1639.594482 6.438149 2169.135010", "1572.351074 6.581270 2193.880371", "1514.207764 5.795653 2222.483398", "1469.527222 6.721370 2247.018555", "1333.362915 6.637136 2342.896973", "1259.927368 6.011772 2363.105225", "1187.608032 6.407721 2340.853271", "1157.952637 5.795209 2307.297119", "1050.173218 6.664209 2158.251709", "976.875427 5.795653 2031.899414", "923.040100 5.795653 1959.974121", "847.898071 5.795653 1886.695801", "799.668762 6.740325 1846.262695", "482.006226 6.711864 1632.124023", "450.407135 6.660660 1618.758667"};
// Patrol 3 = Cherno Port
ref array patrol_3  = {"7332.387695 5.712450 2651.121338", "7632.803223 5.507639 3075.661865", "7621.013184 5.892049 3083.053223", "7321.484375 5.448769 2658.244141"};
// Patrol 4 = Elektro Yard
ref array patrol_4  = {"10825.153320 5.894602 2555.271240", "10853.957031 6.433348 2635.236816", "10889.441406 5.977321 2749.464111", "10852.090820 6.012342 2760.362793", "10828.861328 6.012496 2730.357910", "10794.523438 6.012444 2636.897705", "10779.160156 6.012487 2593.712158", "10781.082031 6.004701 2574.147949"};
// Patrol 5 = Solnechny south
ref array patrol_5  = {"13392.708984 5.809348 5952.577637", "13369.891602 6.012489 5624.214844", "13373.618164 5.943049 5486.794434",  "13369.891602 6.012489 5624.214844"};
// Patrol 6 = Rify Trail
ref array patrol_6  = {"13342.375977 27.020344 11228.225586", "13469.069336 11.282786 11163.261719", "13567.762695 6.128973 11127.067383", "13620.910156 8.011324 11244.537109", "13567.762695 6.128973 11127.067383", "13469.069336 11.282786 11163.261719"};
// Patrol 7 = Nizhneye
ref array patrol_7  = {"12879.688477 5.743166 8590.398438", "12983.769531 6.060859 8323.492188", "13000.213867 6.062475 8330.422852", "12967.809570 5.781274 8447.635742"};
// Patrol 8 = NWAF North
ref array patrol_8  = {"4078.499268 339.012421 10802.854492", "4277.165039 339.012360 10922.452148", "4271.527832 339.008148 10938.139648", "4064.494385 339.012421 10818.675781"};
// Patrol 9 = NWAF south
ref array patrol_9  = {"4772.428711 338.964355 9583.963867", "4639.255859 339.012390 9815.970703", "4978.569336 339.012451 10004.463867", "4639.255859 339.012390 9815.970703"};
// Patrol 10 = Tisy
ref array patrol_10 = {"1724.632080 451.730408 14298.412109", "1681.035522 451.784302 14278.791016", "1668.385742 451.730408 14268.739258", "1653.012695 451.784302 14245.443359", "1662.009521 451.784302 14220.044922", "1668.885010 451.730408 14177.100586", "1678.905029 451.784302 14134.460938", "1687.656250 451.784302 14097.293945", "1691.055054 451.728760 14072.710938", "1697.563721 450.094635 14019.088867", "1701.266235 448.636108 13981.079102", "1709.151733 448.368225 13969.950195", "1726.191772 447.882568 13954.740234", "1734.303101 447.342072 13945.562500", "1736.849487 447.158569 13939.061523", "1803.257568 436.318970 13812.399414", "1802.478149 435.682281 13794.238281", "1764.742676 434.271759 13667.715820", "1753.983521 434.111572 13660.847656", "1697.765381 433.031982 13621.431641", "1625.751953 437.192169 13583.775391", "1615.443726 437.193420 13582.367188", "1586.155762 439.010864 13609.286133", "1566.816040 441.081787 13643.261719", "1554.550049 441.587372 13645.919922", "1533.254028 440.683624 13646.856445", "1470.583130 444.685120 13679.353516", "1448.422729 446.229736 13681.502930", "1397.534424 448.255707 13663.409180", "1377.747681 448.799530 13661.333984", "1356.402222 451.658264 13669.961914", "1339.632813 454.855988 13690.362305", "1311.232178 457.548615 13730.733398", "1368.332275 455.560181 13762.721680", "1389.098022 453.795563 13785.572266", "1394.411499 451.237183 13801.572266", "1398.934204 451.644989 13828.162109", "1419.962524 456.061951 13891.482422", "1409.579224 458.430359 13947.408203", "1421.006104 459.254517 13993.981445", "1422.121094 459.807831 14022.114258", "1388.509277 462.222443 14044.217773", "1388.548340 462.354797 14044.183594", "1333.772217 463.948151 14062.096680", "1350.346069 465.658081 14107.701172", "1461.509521 459.874268 14133.793945", "1503.123291 455.995056 14137.425781", "1554.196045 452.867004 14107.243164", "1574.911743 452.540283 14100.198242", "1629.664673 451.792175 14197.793945", "1636.238647 451.792175 14221.260742", "1671.278564 451.792175 14275.020508", "1645.910522 451.807617 14315.247070", "1669.397339 451.792175 14331.668945", "1685.370361 451.792175 14341.243164"};
// If you add another patrol array, add it to this list
ref array<array> patrol_list = {patrol_1, patrol_2, patrol_3, patrol_4, patrol_5, patrol_6, patrol_7, patrol_8, patrol_9, patrol_10};
// IMPORTANT: If you add an entry to the above list, pick the loadout for it by adding the loadout filename to this list
ref array patrol_loadouts = {"HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json", "HumanLoadout.json"};
// you may change these quantities
const int NUMBER_PER_PATROL = 2;	// Number of AI per patrol
const int MAXR = 800;				// This is the main spawn radius- how close a player needs to be to spawn them in.
const int MINR = 250;				// If a player is this close to the patrol start point, it is too close for them to spawn
const int DESPAWNR = 1000;			// If all players are this far away, they despawn.
const int RESPAWN_SECONDS = 300;	// The amount of seconds before a new patrol will spawn, after they both die
class CustomPatrol : eAIDynamicPatrol {
override void OnPatrolSpawn(eAIGroup patrol) {
// Uncomment this line to change the faction of the patrol from Raiders (default)
// eAIFactionGuards for example is a faction which only kills players who have their weapons out
// patrol.SetFaction(new eAIFactionGuards());
	// Uncomment this line to slow down or speed up the patrol (1.0 to 3.0)
	// patrol.SetSpeedLimit(1.0);
}
override void OnUnitSpawn(eAIBase unit) {
	// Uncomment this to give the AI unlimited magazines (new one is added on reload)
	// unit.SetUnlimitedMags(true);

	// You can also do anything you would do in the StartingEquipSetup() for players here

	// These lines will add attachments the same way you would for a player. However, the AI must have the M4A1 class in the Loadout.json file already for it to work.
	//Weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
	//weapon.GetInventory().CreateAttachment("M4_PlasticHndgrd");
	//weapon.GetInventory().CreateAttachment("M4_OEBttstck");
	//weapon.GetInventory().CreateAttachment("M4_CarryHandleOptic");
}

};
autoptr array patrols = {};
void InitDynamicPatrols() {
for (int i = 0; i < patrol_list.Count(); i++) {
string loadout = "SoldierLoadout.json"; // default
if (i < patrol_loadouts.Count()) loadout = patrol_loadouts[i];
autoptr CustomPatrol pat = new CustomPatrol(patrol_list[i][0], patrol_list[i], loadout, NUMBER_PER_PATROL, MINR, MAXR, DESPAWNR, RESPAWN_SECONDS);
patrols.Insert(pat);
pat.UpdateTriggers();
}
}
void SpawnSentry(vector pos, string loadout = "SoldierLoadout.json") {
eAIGame game = MissionServer.Cast(GetGame().GetMission()).GetEAIGame();
eAIBase ai = game.SpawnAI_Sentry(pos, loadout);
}
modded class CustomMission
{
void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
m_eaiGame.GetGroupByLeader(player);
super.StartingEquipSetup(player, clothesChosen);
}
};

Look what I did, I took all the information in the SoldadosBlack.json file, opened the HumanLoadout.json file, deleted everything inside and replaced it... and it worked... but I wanted the name of my file to work to put it different patrols across the map.. but if I use the term SoldadosBlack.json it doesn't work

Look what I did, I took all the information in the SoldadosBlack.json file, opened the HumanLoadout.json file, deleted everything inside and replaced it... and it worked... but I wanted the name of my file to work to put it different patrols across the map.. but if I use the term SoldadosBlack.json it doesn't work

Loadouts are described in eAI-Init.c, you shall there replace the names and please use only English letters in names. One before i got the same error with Russian names of files.
That could be a possible issue why it's not working...

Now it's working with my loadout, and I only made the name changes, you'll understand... look how it turned out...

// Patrol 1 = Balota strip
ref array patrol_1  = {"5237.821777 9.568775 2157.804199", "4887.835449 9.560701 2578.265625", "4917.622559 9.539299 2599.980469"};
// Patrol 2 = SW Rail Line
ref array patrol_2  = {"41.383652 6.637133 1568.725464", "167.029785 6.660925 1589.156372", "399.000854 6.637136 1605.268677", "450.407135 6.660660 1618.758667", "482.006226 6.711864 1632.124023", "799.668762 6.740325 1846.262695", "847.898071 5.795653 1886.695801", "923.040100 5.795653 1959.974121", "976.875427 5.795653 2031.899414", "1050.173218 6.664209 2158.251709", "1157.952637 5.795209 2307.297119", "1187.608032 6.407721 2340.853271", "1259.927368 6.011772 2363.105225", "1333.362915 6.637136 2342.896973", "1469.527222 6.721370 2247.018555", "1514.207764 5.795653 2222.483398", "1572.351074 6.581270 2193.880371", "1639.594482 6.438149 2169.135010", "1696.991211 5.795653 2156.455811", "1763.947998 6.373237 2143.247314", "1889.594116 6.014451 2166.340820", "2079.179688 6.529642 2219.987549", "2176.673584 6.011375 2196.734375", "2244.440430 5.995491 2087.459229", "2348.422119 5.795653 2048.190186", "2641.000000 6.692032 1985.662354", "2772.157471 6.697611 1985.912354", "3044.920166 5.795653 2044.465820", "2772.157471 6.697611 1985.912354", "2641.000000 6.692032 1985.662354", "2348.422119 5.795653 2048.190186", "2244.440430 5.995491 2087.459229", "2176.673584 6.011375 2196.734375", "2079.179688 6.529642 2219.987549", "1889.594116 6.014451 2166.340820", "1763.947998 6.373237 2143.247314", "1696.991211 5.795653 2156.455811", "1639.594482 6.438149 2169.135010", "1572.351074 6.581270 2193.880371", "1514.207764 5.795653 2222.483398", "1469.527222 6.721370 2247.018555", "1333.362915 6.637136 2342.896973", "1259.927368 6.011772 2363.105225", "1187.608032 6.407721 2340.853271", "1157.952637 5.795209 2307.297119", "1050.173218 6.664209 2158.251709", "976.875427 5.795653 2031.899414", "923.040100 5.795653 1959.974121", "847.898071 5.795653 1886.695801", "799.668762 6.740325 1846.262695", "482.006226 6.711864 1632.124023", "450.407135 6.660660 1618.758667"};
// Patrol 3 = Cherno Port
ref array patrol_3  = {"7332.387695 5.712450 2651.121338", "7632.803223 5.507639 3075.661865", "7621.013184 5.892049 3083.053223", "7321.484375 5.448769 2658.244141"};
// Patrol 4 = Elektro Yard
ref array patrol_4  = {"10825.153320 5.894602 2555.271240", "10853.957031 6.433348 2635.236816", "10889.441406 5.977321 2749.464111", "10852.090820 6.012342 2760.362793", "10828.861328 6.012496 2730.357910", "10794.523438 6.012444 2636.897705", "10779.160156 6.012487 2593.712158", "10781.082031 6.004701 2574.147949"};
// Patrol 5 = Solnechny south
ref array patrol_5  = {"13392.708984 5.809348 5952.577637", "13369.891602 6.012489 5624.214844", "13373.618164 5.943049 5486.794434",  "13369.891602 6.012489 5624.214844"};
// Patrol 6 = Rify Trail
ref array patrol_6  = {"13342.375977 27.020344 11228.225586", "13469.069336 11.282786 11163.261719", "13567.762695 6.128973 11127.067383", "13620.910156 8.011324 11244.537109", "13567.762695 6.128973 11127.067383", "13469.069336 11.282786 11163.261719"};
// Patrol 7 = Nizhneye
ref array patrol_7  = {"12879.688477 5.743166 8590.398438", "12983.769531 6.060859 8323.492188", "13000.213867 6.062475 8330.422852", "12967.809570 5.781274 8447.635742"};
// Patrol 8 = NWAF North
ref array patrol_8  = {"4078.499268 339.012421 10802.854492", "4277.165039 339.012360 10922.452148", "4271.527832 339.008148 10938.139648", "4064.494385 339.012421 10818.675781"};
// Patrol 9 = NWAF south
ref array patrol_9  = {"4772.428711 338.964355 9583.963867", "4639.255859 339.012390 9815.970703", "4978.569336 339.012451 10004.463867", "4639.255859 339.012390 9815.970703"};
// Patrol 10 = Tisy
ref array patrol_10 = {"1724.632080 451.730408 14298.412109", "1681.035522 451.784302 14278.791016", "1668.385742 451.730408 14268.739258", "1653.012695 451.784302 14245.443359", "1662.009521 451.784302 14220.044922", "1668.885010 451.730408 14177.100586", "1678.905029 451.784302 14134.460938", "1687.656250 451.784302 14097.293945", "1691.055054 451.728760 14072.710938", "1697.563721 450.094635 14019.088867", "1701.266235 448.636108 13981.079102", "1709.151733 448.368225 13969.950195", "1726.191772 447.882568 13954.740234", "1734.303101 447.342072 13945.562500", "1736.849487 447.158569 13939.061523", "1803.257568 436.318970 13812.399414", "1802.478149 435.682281 13794.238281", "1764.742676 434.271759 13667.715820", "1753.983521 434.111572 13660.847656", "1697.765381 433.031982 13621.431641", "1625.751953 437.192169 13583.775391", "1615.443726 437.193420 13582.367188", "1586.155762 439.010864 13609.286133", "1566.816040 441.081787 13643.261719", "1554.550049 441.587372 13645.919922", "1533.254028 440.683624 13646.856445", "1470.583130 444.685120 13679.353516", "1448.422729 446.229736 13681.502930", "1397.534424 448.255707 13663.409180", "1377.747681 448.799530 13661.333984", "1356.402222 451.658264 13669.961914", "1339.632813 454.855988 13690.362305", "1311.232178 457.548615 13730.733398", "1368.332275 455.560181 13762.721680", "1389.098022 453.795563 13785.572266", "1394.411499 451.237183 13801.572266", "1398.934204 451.644989 13828.162109", "1419.962524 456.061951 13891.482422", "1409.579224 458.430359 13947.408203", "1421.006104 459.254517 13993.981445", "1422.121094 459.807831 14022.114258", "1388.509277 462.222443 14044.217773", "1388.548340 462.354797 14044.183594", "1333.772217 463.948151 14062.096680", "1350.346069 465.658081 14107.701172", "1461.509521 459.874268 14133.793945", "1503.123291 455.995056 14137.425781", "1554.196045 452.867004 14107.243164", "1574.911743 452.540283 14100.198242", "1629.664673 451.792175 14197.793945", "1636.238647 451.792175 14221.260742", "1671.278564 451.792175 14275.020508", "1645.910522 451.807617 14315.247070", "1669.397339 451.792175 14331.668945", "1685.370361 451.792175 14341.243164"};
// If you add another patrol array, add it to this list
ref array<array> patrol_list = {patrol_1, patrol_2, patrol_3, patrol_4, patrol_5, patrol_6, patrol_7, patrol_8, patrol_9, patrol_10};
// IMPORTANT: If you add an entry to the above list, pick the loadout for it by adding the loadout filename to this list
ref array patrol_loadouts = {"SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json", "SoldadosBlack.json"};
// you may change these quantities
const int NUMBER_PER_PATROL = 2;	// Number of AI per patrol
const int MAXR = 800;				// This is the main spawn radius- how close a player needs to be to spawn them in.
const int MINR = 250;				// If a player is this close to the patrol start point, it is too close for them to spawn
const int DESPAWNR = 1000;			// If all players are this far away, they despawn.
const int RESPAWN_SECONDS = 300;	// The amount of seconds before a new patrol will spawn, after they both die
class CustomPatrol : eAIDynamicPatrol {
override void OnPatrolSpawn(eAIGroup patrol) {
// Uncomment this line to change the faction of the patrol from Raiders (default)
// eAIFactionGuards for example is a faction which only kills players who have their weapons out
// patrol.SetFaction(new eAIFactionGuards());
	// Uncomment this line to slow down or speed up the patrol (1.0 to 3.0)
	// patrol.SetSpeedLimit(1.0);
}
override void OnUnitSpawn(eAIBase unit) {
	// Uncomment this to give the AI unlimited magazines (new one is added on reload)
	// unit.SetUnlimitedMags(true);

	// You can also do anything you would do in the StartingEquipSetup() for players here

	// These lines will add attachments the same way you would for a player. However, the AI must have the M4A1 class in the Loadout.json file already for it to work.
	//Weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
	//weapon.GetInventory().CreateAttachment("M4_PlasticHndgrd");
	//weapon.GetInventory().CreateAttachment("M4_OEBttstck");
	//weapon.GetInventory().CreateAttachment("M4_CarryHandleOptic");
}

};
autoptr array patrols = {};
void InitDynamicPatrols() {
for (int i = 0; i < patrol_list.Count(); i++) {
string loadout = "SoldadosBlack.json"; // default
if (i < patrol_loadouts.Count()) loadout = patrol_loadouts[i];
autoptr CustomPatrol pat = new CustomPatrol(patrol_list[i][0], patrol_list[i], loadout, NUMBER_PER_PATROL, MINR, MAXR, DESPAWNR, RESPAWN_SECONDS);
patrols.Insert(pat);
pat.UpdateTriggers();
}
}
void SpawnSentry(vector pos, string loadout = "SoldadosBlack.json") {
eAIGame game = MissionServer.Cast(GetGame().GetMission()).GetEAIGame();
eAIBase ai = game.SpawnAI_Sentry(pos, loadout);
}
modded class CustomMission
{
void StartingEquipSetup(PlayerBase player, bool clothesChosen)
{
m_eaiGame.GetGroupByLeader(player);
super.StartingEquipSetup(player, clothesChosen);
}
};

Now it's working with my loadout, and I only made the name changes, you'll understand... look how it turned out...

Mate please don't insert document directly into github.
Use attachment system. Rename SomeFile.c into SomeFile.txt and drop onto free space of text message editor. In few seconds will appear the link to the file.
In result - you'll able to sent full code without any text correction. And your code will not loose type of brekers and etc special symbols.

Now it's working with my loadout, and I only made the name changes, you'll understand... look how it turned out...

Any way Congratulations with winning in this battle with DayZ.
Knowledges is the power!

Now it's working with my loadout, and I only made the name changes, you'll understand... look how it turned out...

Any way Congratulations with winning in this battle with DayZ.
Knowledges is the power!

Friend, thank you very much for helping me,

Welcome. And I had done nothing.
For something, I gusset you to use Notepad++ for editing JSON & XML files (free and powerful). And before publishing the file updates - validate them with JSON/XML validation sites. That might help you to save your time and find possible mistakes before the server will start to crashing. :-)

Ok, you can leave it... now I'm going to try to put the attachments on the weapons, the clothes, I don't know if it's possible to put the attachments on but I'll see what I can do, Thanks!

Ok, you can leave it... now I'm going to try to put the attachments on the weapons, the clothes, I don't know if it's possible to put the attachments on but I'll see what I can do, Thanks!

You nedd to change some stuff through the eAI_Init.c
If you i can attach here the example of equipment of AKM and M4 firearm with attachments.

In this case, I would put the weapons from the snafu mod..

In this case, I would put the weapons from the snafu mod..

Not really I not really wish to messed up with mods that I don't know.
I give you an example with comments any already should do it by your hands.
To make that live you need to change function OnUnitSpawn(). Here the example:
OnUnitSpawn.txt

An example is how can a gun come with a larger magazine?

Ah ok, I'll see if I can

Ah ok, I'll see if I can

Unpack the scrips.pbo (dta\scrips.pbo) it has all ingame classes, that may help you to get required methods and examples.
Class Magazine - in Magazine.c and Class Weapon_Base in Weapon_Base.c may give you some tricks with that.

I have no knowledge of .pbo, aren't they used to make and edit mods?

I have no knowledge of .pbo, aren't they used to make and edit mods?

1st find in network: PBO Manager v 1.4
2nd .pbo is addon file for Arma games: (Arma 2, Arma 2 OA, Arma 3, Take On Helicopters, Take On Mars, Arma Reforger) and DayZ.
Install it and use to view, unpack, pack pbo addons.

Ok, I'll do that but I'll take it easy because my head is already exploding configuring this mod hahaha

Ok, I'll do that but I'll take it easy because my head is already exploding configuring this mod hahaha

Welcome to the Arma world!

I'm using 2 types of weapons on my soldiers, one of them had the accessories for the other, even though the accessory didn't fit into it, did I have to do the same as what you told me? an attachment for each type of weapon?
    weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
weapon.GetInventory().CreateAttachment("SNAFU_AKTango6T_Black");
weapon.GetInventory().CreateAttachment("SNAFU_NPKPBIPOD");
weapon.GetInventory().CreateAttachment("SNAFU_MTango6T_Black");

I'm using 2 types of weapons on my soldiers, one of them had the accessories for the other, even though the accessory didn't fit into it, did I have to do the same as what you told me? an attachment for each type of weapon?
    weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());

weapon.GetInventory().CreateAttachment("SNAFU_AKTango6T_Black");
weapon.GetInventory().CreateAttachment("SNAFU_NPKPBIPOD");
weapon.GetInventory().CreateAttachment("SNAFU_MTango6T_Black");

Man you don't get into it.
You shall understand, that you have no idea about loadout of unit.
weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands()); // is wrong way to make the script without errors.
You trying to get unchecked unit state - unit.GetItemInHands() did you checked that unit isn't NULL to get access to his hands?  You didn't. it's a 1st place for error.
You trying to operate with variable "weapon" but did you checked that Cast operation is done correctly and ain't equal NULL? You didn't.
Any of those errors may crash your server!
2nd you may even use +∞ types of weapons but it shall be slotted correctly and eAI didn't get such awesome stuff.
eAI even not using a pistols why are you think that eAI shall using 2nd firearm? Answer - they will not use it.
I didn't get into slot system of eAI, i know that Player_Base has 2 slots for weapons left & right shoulder.
Need to find names of those slots and then you may take the firearm from that slot or slot there an firearm. I just don't know what are you really intented to do for that case.
Actually it might be a good idea, for example VSS + SVD (if primary weapon is VSS, then on second slot put SVD),
If primary weapon is AKM, then Secondary weapon should be Mosin 91/30 or SKS and manually spawn ammo for them.
I'll think how shall i done it... Thank you for an intesting idea.

I'm using 2 types of weapons on my soldiers, one of them had the accessories for the other, even though the accessory didn't fit into it, did I have to do the same as what you told me? an attachment for each type of weapon?
    weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());

weapon.GetInventory().CreateAttachment("SNAFU_AKTango6T_Black");
weapon.GetInventory().CreateAttachment("SNAFU_NPKPBIPOD");
weapon.GetInventory().CreateAttachment("SNAFU_MTango6T_Black");

Man I had done it!
Now you can spawn firearms into the slots of AI.
In few minutes will paste the modded version of OnSpawn function!

Here the update.
I send you an example with reloading secondary firearm (works with mostly except Revolvers type of firearm)
OnUnitSpawn_Updated.txt

One question, are you saying that within this parameter I need to put something? ()? I downloaded the original files and I'm just replacing them with the clothes and weapons I want, but if the way you said is better I'll try to do it, because the commands are cleaner.
now the way this one worked out.
5 bots are born, but sometimes 2 come with the rpk and another 3 with a vss.. and all of them are carrying the attachments.. in other words, it worked like this
this work
Weapon_Base weapon = Weapon_Base.Cast(unit.GetItemInHands());
weapon.GetInventory().CreateAttachment("SNAFU_AKTango6T_Black");
weapon.GetInventory().CreateAttachment("SNAFU_NPKPBIPOD");
weapon.GetInventory().CreateAttachment("SNAFU_HNightforce");

Here the update. I send you an example with reloading secondary firearm (works with mostly except Revolvers type of firearm) OnUnitSpawn_Updated.txt

What does this do? for the bot to change weapons? and why does he do this? When does the ammunition run out, for example?

Here the update. I send you an example with reloading secondary firearm (works with mostly except Revolvers type of firearm) OnUnitSpawn_Updated.txt

What does this do? for the bot to change weapons? and why does he do this? When does the ammunition run out, for example?

eAI has no such information 2nd read script, you had been set unlimited ammo on mag switching, how heck it may run out of ammunition? :-D

hahaha I don't know! but I would like to know lol
Another example does he change weapons? It would be interesting if at long distances the bot used a sniper, and when the player was close he picked up another, faster weapon.

hahaha I don't know! but I would like to know lol
Another example does he change weapons? It would be interesting if at long distances the bot used a sniper, and when the player was close he picked up another, faster weapon.

The problem of your logic is not understanding of ballistics.
Based on elevation angle bullet my fly on 100 and over 3000 meters...
Same trouble for AI it's finding distance adjusting zeroing to correct distance and if zeroing is not enough calculated additional angel to compensate distance...
That's a trick. Nothing more and nothing less.

hahaha I don't know! but I would like to know lol
Another example does he change weapons? It would be interesting if at long distances the bot used a sniper, and when the player was close he picked up another, faster weapon.

The problem of your logic is not understanding of ballistics.
Based on elevation angle bullet my fly on 100 and over 3000 meters...
Same trouble for AI it's finding distance adjusting zeroing to correct distance and if zeroing is not enough calculated additional angel to compensate distance...
That's a trick. Nothing more and nothing less.

I understand, it's not that simple... for me to put this configuration you sent, just put it in place of mine in AI_initi.c?

hahaha I don't know! but I would like to know lol
Another example does he change weapons? It would be interesting if at long distances the bot used a sniper, and when the player was close he picked up another, faster weapon.

The problem of your logic is not understanding of ballistics.
Based on elevation angle bullet my fly on 100 and over 3000 meters...
Same trouble for AI it's finding distance adjusting zeroing to correct distance and if zeroing is not enough calculated additional angel to compensate distance...
That's a trick. Nothing more and nothing less.

I understand, it's not that simple... for me to put this configuration you sent, just put it in place of mine in AI_initi.c?

You shall use it as an example. Everything other you need to do with your hands and mods that you are using.
To install it - you need to copy function into eAI_Init.c,
Read comments and include it to yours version of code.
Run server and check that everything works fine if server through the errors, then type here I'll resend the code with fixes.

Friend, I'll be honest, I'm really lost in these commands you sent... I wanted to do something simple, and it already works the way I did, the soldiers are born with the weapons and accessories I placed, but when a zombie comes close they don't shoot and Sometimes it keeps spinning around, doing nothing... so I think this is already in another file, right, because when the zombie gets close the soldier would have to get a melee weapon or just shoot

Friend, I'll be honest, I'm really lost in these commands you sent... I wanted to do something simple, and it already works the way I did, the soldiers are born with the weapons and accessories I placed, but when a zombie comes close they don't shoot and Sometimes it keeps spinning around, doing nothing... so I think this is already in another file, right, because when the zombie gets close the soldier would have to get a melee weapon or just shoot

It's problem of eAI it self.
There's a "Command Officer AI Unit", if it's dead all units failed to do anything at all.
Simple way could be of Command unit is killed in action or dead, then next AI from group list shall become as Group Commander and so until last one is dead but it's didn't happened.
So basically Command AI gives an order to subunits to engage the target. If Command AI is dead subunits don't receive any command for an engagement. Untill player tager is engage AI unit, then it may kill you otherwise not.
 And then kill others without any problems.
This is a problem of eAI in basics...
Best thing that we may do is report about it to the developer, but i think that they are know about this problem tho...

I understand, unfortunately not everything works the way we want.
I left my eAIAccuracy at 1.0 and they still miss several shots hahaha
I have a question, I didn't want the bots to leave the loot, but I wanted to leave a reward for whoever kills them, would there be a way to lock their loot, and leave just one item as a reward? like ammunition, magazines etc?

I understand, unfortunately not everything works the way we want.
I left my eAIAccuracy at 1.0 and they still miss several shots hahaha
I have a question, I didn't want the bots to leave the loot, but I wanted to leave a reward for whoever kills them, would there be a way to lock their loot, and leave just one item as a reward? like ammunition, magazines etc?

You can't do it without reimplementation of eAI.
Basic idea is create Player-like AIs that will work by 2 types.

You shall search for Survivor Missions - that module may give you such ability (mission where you can get a reward instead of killing Zombies and again eAI will not fit that state because I have no idea do eAI support event handler on eAI Death - that may help you to remove dead unit...), but I never ever before working with eAI on Survivor Missions (instead of Zombies).

For my purpose I wanted to place them to protect military bases, and helicrash... at the bases I wanted to place patrol, and some snipers in strategic points on the map, such as towers and high elevated locations...

For my purpose I wanted to place them to protect military bases, and helicrash... at the bases I wanted to place patrol, and some snipers in strategic points on the map, such as towers and high elevated locations...

Then create yourself mod based on eAI, but before ask for permission from developers.

Bases - pff not a problem at all. Just create the patrols with such road that will covers all base locations and make point of start to point of ending of AI patrol.

So to develop it, I don't even know how to do it, but in the helicrash, I was thinking about taking their coordinates, and putting them to spawn patrols in these locations... then whenever a player came close to the helicrash, the bots would also spawn.

So to develop it, I don't even know how to do it, but in the helicrash, I was thinking about taking their coordinates, and putting them to spawn patrols in these locations... then whenever a player came close to the helicrash, the bots would also spawn.

The problem is that square size of map is about 20000 km² or 12427.4 mi².
You need to call function to get huge list of objects on entire map, filter only helicrashes and only then somehow insert their locations in eAI cfg array for protection patrols.
Fatal problem that it will cost too freaking much server FPS. for 3 minutes each 20 minutes need to renew helicrash locations. Idea is good, really but it's too damn pricey...

Yes, seeing it from this side it gets really heavy,
I'm having a problem here, even though I block the bot from giving loot, his weapon always falls to the ground, do you know if there's a way to avoid this so the player doesn't pick up weapons lying on the ground?

Yes, seeing it from this side it gets really heavy,
I'm having a problem here, even though I block the bot from giving loot, his weapon always falls to the ground, do you know if there's a way to avoid this so the player doesn't pick up weapons lying on the ground?

It's falling on the ground coz AI unit is dead. In 34% dead bodies keep items in hads because of muscular problems, rest 66% or something about it loose items from hands on death.
In game that stuff was introduced somewhere in 1.0 or 1.10 game patches. So yeah it's a kinda problem that eAI can loose their weapons on the ground. It could be fixed but it requires to override event handler on death for Player_Base, to prevent loosing inhands item, but it causes another problem, that inhamds item shall required it's own slot. Coz player can carry 3 units of weapons at the same time on the body (sholders + hands) - that's problem was solved by throwing away inhands item on death in other case it will disappear...

I understand, I thought about reducing the weapon's health, but when I do that some of them get stuck and the bot can't shoot...

I understand, I thought about reducing the weapon's health, but when I do that some of them get stuck and the bot can't shoot...

If you added damage to the firearm unit your AI met an awesome problem that they couldn't yet solve.
eAI still don't know how to unjam jammed weapon.
So that will not solve your problem.

I understand, I thought about reducing the weapon's health, but when I do that some of them get stuck and the bot can't shoot...

If you added damage to the firearm unit your AI met an awesome problem that they couldn't yet solve.
eAI still don't know how to unjam jammed weapon. So that will not solve your problem.

yes I discovered that yesterday hahaha

my Friend, I'm trying to place some bots in the air base tower, but they always spawn on the ground, I want them to stay up there, is there any parameter for this? I don't want them to walk, they will stay still..

my Friend, I'm trying to place some bots in the air base tower, but they always spawn on the ground, I want them to stay up there, is there any parameter for this? I don't want them to walk, they will stay still..

It's not about loadout question, so it shouldn't be here.
And as answer - game uses 3D coordinates X Z Y
Where Z is height above sea level.
I guess the simplest way is spawn barrel in editor and grub coordinates.

To get the coordinates, I'm going to the location and asking for P, but I'm going to open a topic to talk about it.


[TextField] Fix disabled color in Safari

[x] I have followed (at least) the PR section of the contributing guide.

this PR is created base on an issue https://github.com/mui-org/material-ui/issues/23332
it fixes the opacity of disable color on the safari browser.
Closes #23332

@Morteza-Jenabzadeh Thanks

Hey team,
Which version has this fix released?

@shreyance-jain it was fixed in v5. You can search for the pull request number in the changelog to see exactly which version.

This seems like an easy fix. Why not also fix it in v4?


Report: Engagement Type

Add columns for number of unique community partners and if possible, number of unique campus partners.

@jerrodanzalone & @EdemD . This ticket is merged with pull request #861

Filtering is not working as intended

Query tested
-- ENGAGEMENT TYPE REPORT select distinct e.name engagement_type   ,count(distinct p.project_name) Projects 	,count(distinct pp.community_partner_id) CommPartners 	,count(distinct pp2.campus_partner_id) CampPartners 	,sum(p.total_uno_students) numberofunostudents 	,sum(p.total_uno_hours) unostudentshours from projects_project p   left join projects_engagementtype e on e.id = p.engagement_type_id  	left join projects_projectcommunitypartner pp on p.id = pp.project_name_id 	left join projects_projectcampuspartner pp2 on p.id = pp2.project_name_id -- where p.academic_year_id = 1 group by p.engagement_type_id, e.name order by engagement_type;


Can't run tiny pilot after recent update

Tinypilot used to run fine for me. I recently just re ran the install script:
curl \
  --silent \
  --show-error \
  https://raw.githubusercontent.com/mtlynch/tinypilot/master/quick-install | \
    bash - && \
  sudo reboot

But now when I navigate to the webpage, I get a blank white screen with the text "Not found" displayed. Checking systemctl, I can see tinypilot and ustreamer are running. Nginx is as well. Not sure why it stopped working after this install.

Sorry you're running into this. I haven't run into that and am not able to reproduce it on my side. Can you try checking some of the logs?
sudo journalctl -u tinypilot
sudo journalctl -u nginx
sudo tail /var/log/nginx/error.log
sudo tail /var/log/nginx/access.log

Here are the logs.
pi@node2:~ $ sudo journalctl -u tinypilot
-- Logs begin at Thu 2019-02-14 02:12:00 PST, end at Fri 2020-08-14 15:08:24 PDT. --
Aug 14 12:58:26 node2 systemd[1]: Started TinyPilot - RPi-based virtual KVM.
Aug 14 12:58:33 node2 python[322]: [2020-08-14 12:58:33,633] INFO in main: Starting app
Aug 14 12:58:33 node2 python[322]: [2020-08-14 12:58:33,753] INFO in server: Server initialized for eventlet.
Aug 14 12:58:33 node2 python[322]: [2020-08-14 12:58:33,808] INFO in _internal:  * Restarting with stat
Aug 14 12:58:37 node2 python[322]: [2020-08-14 12:58:37,992] INFO in main: Starting app
Aug 14 12:58:38 node2 python[322]: [2020-08-14 12:58:38,091] INFO in server: Server initialized for eventlet.

pi@node2:~ $ sudo journalctl -u nginx
-- Logs begin at Thu 2019-02-14 02:12:00 PST, end at Fri 2020-08-14 15:08:51 PDT. --
Aug 14 12:58:26 node2 systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 14 12:58:27 node2 systemd[1]: Started A high performance web server and a reverse proxy server.
Aug 14 13:03:01 node2 systemd[1]: Stopping A high performance web server and a reverse proxy server...
Aug 14 13:03:01 node2 systemd[1]: nginx.service: Succeeded.
Aug 14 13:03:01 node2 systemd[1]: Stopped A high performance web server and a reverse proxy server.
Aug 14 13:03:01 node2 systemd[1]: Starting A high performance web server and a reverse proxy server...
Aug 14 13:03:01 node2 systemd[1]: Started A high performance web server and a reverse proxy server.
Aug 14 13:20:57 node2 systemd[1]: Reloading A high performance web server and a reverse proxy server.

I see something listening on 8000:
pi@node2:~ $ sudo netstat -tulpn | grep LISTEN | grep 8000
tcp        0      0 <IP_ADDRESS>:8000          <IP_ADDRESS>:*               LISTEN      382/python

But maybe it is an ipv6 issue? It looks like it is trying to connect to port 8000 via IPV6 (http://[::1]:8000/) but the python app is only listening on ipv4?

So I think it was an ipv6 vs ipv4 issue.
I changed the following in nginx from:
    upstream tinypilot {
        server localhost:8000 fail_timeout=2s max_fails=600;
    }
    upstream ustreamer {
        server localhost:8001 fail_timeout=2s max_fails=600;
    }

to
    upstream tinypilot {
        server <IP_ADDRESS>:8000 fail_timeout=2s max_fails=600;
    }
    upstream ustreamer {
        server <IP_ADDRESS>:8001 fail_timeout=2s max_fails=600;
    }

and I rebooted, and then it worked fine.

Hmm...well it just stopped working on me after working for a bit. I see this in the log:
2020/08/14 15:23:42 [warn] 351#351: *5 an upstream response is buffered to a temporary file /var/lib/nginx/proxy/1/00/0000000001 while reading upstream, client: <IP_ADDRESS>, server: tinypilot, request: "GET /stream?advance_headers=1 HTTP/1.1", upstream: "http://<IP_ADDRESS>:8001/stream?advance_headers=1", host: "node2.int.volcrypt.com", referrer: "http://node2.int.volcrypt.com/"
Rebooting the pi brings things back up.

When it doesn't work, is it just showing "Not found" or is it loading TinyPilot but failing to load the video feed?

When it doesn't work, is it just showing "Not found" or is it loading TinyPilot but failing to load the video feed?

It just says Not found. It doesn’t load the TinyPilot webpage or interface at all.
It seems to run for about 5-10 minutes (sorry don’t have an exact time) after a reboot. Then it does.
I tried restarting all the services (ustream, tinypilot, ngoni) but just restarting those doesn’t bring things back. Have to actually reboot the whole pi.

@ubenmackin
When you get the Not Found error, can you please run these 2 commands and post the output?
sudo systemctl restart nginx
sudo cat /var/log/nginx/access.log

The first line restarts nginx and dumps access logs to the access.log file.
Second line prints the access log.

I think I stumbled on to something.
I am currently running this on a pi2b, because I wanted to test out the video piece while my pi4 was on order. The pi2 obviously can't do OTG, but I figured the keyboard part would just not work and the rest would.
It looks like there must be a check at some point for the keyboard/OTG interface after a period of time. I left up the site, and after awhile I got a big pink box that said something about the keyboard, but I refreshed the page (to see if it would go away) before I copied the error. After the refresh, I got the Not found error. I've tried repeating but can't get the pink box to appear again.
So do you know if there is a check for the OTG/keyboard, and if it is "Not found" the page would just error out?

This line does suggest it should crash after about 10 mins (600 tries):
server <IP_ADDRESS>:8000 fail_timeout=1s max_fails=600;
You can monitor if tinypilot or ustreamer crashed with the commands:
sudo journalctl -u tinypilot
sudo journalctl -u ustreamer

Run those immediately after you get the 404 error.

@ubenmackin - Did switching to the Pi 4 resolve this?
Sidenote: I added a convenience script for collecting and sharing logs:
/opt/tinypilot/dev-scripts/dump-logs

Sorry, yes it is working for me now on a rpi4.

Glad to hear it!


test

Hello @Remi-Gau! Thanks for opening this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file docs/source/conf.py:

Line 34:28: W291 trailing whitespace
Line 91:2: W292 no newline at end of file

Codecov Report

Merging #28 (6073737) into master (d0f0f98) will not change coverage.
The diff coverage is 0.00%.

@@           Coverage Diff           @@
##           master     #28    +/-   ##
=======================================
  Coverage    0.00%   0.00%
=======================================
  Files          11      31    +20
  Lines         866    1384   +518
=======================================
- Misses        866    1384   +518

Flag
Coverage Δ

unittests
0.00% <0.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d0f0f98...6073737. Read the comment docs.


Double test parameter files requests

Describe the bug
There's double the amount of requests when trying to edit a version.
To Reproduce
Steps to reproduce the behavior:

Go to my-tools and have a tool version that can be edited
Open the dev tools to look at requests
Click on Actions -> Edit
See 2+2 requests

Expected behavior
Should only see 2 requests.  1 for WDL, 1 for CWL
Additional context

UI version: dev
Webservice version: dev
host location: dev.dockstore.net

Introduced by https://github.com/dockstore/dockstore/issues/3758
┆Issue is synchronized with this Jira Story
┆Issue Number: DOCK-1616
┆Sprint: Sprint 47- Vampire Squid
┆Issue Type: Story

Looks good to me in dev, staging, and prod.

Looks good to me in dev, staging, and prod.


style test

Testing how to bundle indigo-pink

also update the documentation where we ask the user to import indigo-pink in their index.html (for example:   https://github.com/Laserfiche/lf-ui-components/blob/15aa10b18a3fbb2f7977e2bfce844f91a695ce77/projects/lf-documentation/src/app/getting-started/getting-started.component.html#L78C1-L78C1)

No longer  necessary, teams will use indigo-pink


Error with new colors as a default arguement

I have a method that draws a single character anywhere on the screen. I want you to be able to specify colors, however, I also want the default color to be white. This is what I have:
public void draw(int x, int y, string text, Color color = Color.White)
It gives me this error:

Default parameter value for 'color' must be a compile-time constant

Any way around this?

The best way to implement such behaviour, is use overload
public void draw(int x, int y, string text) //default white color
{
	draw(x, y, text, Color.White);
}

public void draw(int x, int y, string text, Color color)
{
	//you code
}

@ATMunnGit
Thanks for the question.  Is midianok's solution acceptable?  If not, we can discuss other ways.

@tomakita
Yep, that will work.


[BUG] - [SuperTextField] - Japanese IME input conversion duplicates text

Package Version
super_editor / latest main at 440a9bcde0904d6f9b3ab3f9bdeea36a14494b90
User Info
superlist
To Reproduce
Steps to reproduce the behavior:

On macOS, enable Japanese input in the keyboard settings (Japanese - Romaji or Japanese - Kana) and switch to it (ctrl + space)
Run the example app
Select the SuperTextField example
Start typing and cycle through IME suggestions

Actual behavior
When cycling through the suggestions in the IME panel (e.g. using arrow keys), parts of the input gets copied and appended to the text
https://github.com/user-attachments/assets/779243d8-73d6-4bb9-840c-638573d53004
Expected behavior
Cycling through the character conversions should not copy the text
https://github.com/user-attachments/assets/20e1996c-5ec5-4698-9f03-ecde5f81d5d8
Platform
macOS
Flutter version
Please list your Flutter and Dart version info. You can find this by running flutter --version at the command line.
Flutter 3.22.0-16.0.pre.213
Dart 3.5.0 (build 3.5.0-131.0.dev)

Cc @matthew-carroll @angelosilvestre

After some debugging I believe this might be a Flutter bug. I filed https://github.com/flutter/flutter/issues/153065


Handle empty contact created from netsuite

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 71.512%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
563

Relevant Lines:
764

💛  - Coveralls

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 71.512%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
563

Relevant Lines:
764

💛  - Coveralls


Function 4 : Emailer

Function 4 takes in a pandas dataframe or .csv file with from Function 3 and emails it to the end-user.

Documenting some of the decisions made in designing and implementing the emailer function.
These points were discussed in the group meeting on Friday February 26th.

Should the user have the ability to request the results in different forms (e.g. a csv or pandas dataframe object)?  Ultimately, the group decided that reading a .csv file into a pandas dataframe object was easy enough that the .csv file would be sufficient.
Should the user send the email to themselves from their own email address or show there be a central pyhousehunter email address?  We decided against the user sending themselves the results because they would need a gmail account and they would need to authorize access from less secure apps to their gmail account. This put the user's email at potential risk. Instead we set up an gmail account for pyhousehunters and send emails from there. We also plan to set up automation on the pyhousehunters gmail account where emails are not stored in the sent folder after they are sent (to protect user privacy).
Should the users have the ability to change the email subject and email message? This may or may not be a desired functionality so we are thinking of having this as an optional argument with a default message.

Reopen issue and move to milestones 2

Addressed in https://github.com/UBC-MDS/pyhousehunter/pull/18.


actions cleanup

[x] I have added the tests to cover my changes.
[x] I have updated the documentation and CHANGELOG accordingly.
[x] I have read the CONTRIBUTING document.

Need to edit publish and publish_dev so that they are only building the service containers

TODO: Fix the version tagging for the service images in ECR. Will be done as part of AgnostiqHQ/covalent-infra#23


Have plan to provide VueJS SSR template?

Really need VueJS SSR template with .NET integrated. If someone has achieved one recently or in the future, please share a repo link and  '@' me to let me know. I will appreciate it very much.

Duplicate of #1036 you can read the comments there for an implementation of SSR within Vue

@MarkPieszak Thank you for replying. I hav tried that implementation, but it doesn't work when published (I'v already opened an issue there), and it has not been maintained for a long time.
I'm not good at node.js, so I opened this issue to get some help, asking for a good implementation.

Thanks for the answer @markpieszak. Closing as duplicate.