Jump to content
johnnyboy

JBOY Dog [v1.5 - updated 12/21/2018]

Recommended Posts

3 hours ago, johnnyboy said:

For my education, why is "if (!isServer)  exitwith {};" a problem on dedicated?


I'd like to know this too!

Share this post


Link to post
Share on other sites

@johnnyboy

 

I skimmed through accuracythruvolume's post and here's what I make of it:

[[Doghouse, ["<t color='#3388DD'>Wakeup K9","Scripts\CreateDog.sqf"]],"addAction",true,true] call BIS_fnc_MP;

accuracythruvolume assigns an addAction to each machine/player using BIS_fnc_MP. Once a player activates the addAction, said player runs 'Scripts\CreateDog.sqf' locally.

 

In 'Scripts\CreateDog.sqf', said player runs the following (again they are running this locally, not on the server):

dog1 = [_caller, "Fin_tricolour_F", (_caller modelToWorld [2,2,0]), true] call JBOY_dog_create;  // Create dog. 4th parameter true means use Johnnyboy voice for commands.

Which will not work as the player is not the server in a dedicated server environment.  accuracythruvolume says their script worked when they hosted the mission (non-dedicated) which makes sense because they are the host/server; however, I am certain their script would fail for the other players as they are not the host.

 

To fix this issue without removing  "if (!isServer)  exitwith {};", JBOY_Dog users should remoteExec JBOY's functions so they execute on the server.

 

EDIT: this part of my post refers to accuracythruvolume's post before the removal of "if (!isServer)  exitwith {};".

 

@johnnyboy

On a related note, I skimmed through your scripts and it looks like you want the majority of the scripts to run on the server? I'm not familiar with your addon, but I have a feeling not all of your scripts need to execute on the server.

Edited by dchan200
  • Like 1

Share this post


Link to post
Share on other sites

@dchan200 Thanks much for looking into this.

 

I'm thinking the only part that should run local to each player client is creating the dog menu event handler.  So I think this line from my init.sqf should be local:

_dogMenu = [] spawn {sleep 2; _d=[player] call JBOY_fnc_DogDisplayEH;};  // Add dog menu to player

And the following scripts should all be run on the server (also from my init.sqf):

// **************************************************************************
// Create a dog, assign him to a handler (player or AI), spawn background command listener for dog
// In this example handler1 is an editor placed unit that is also the player.  Dog1 is a variable name 
// for the dog created and assigned to Handler1.  You could name the dog1 variable anything.
// **************************************************************************
dog1 = [handler1, "Fin_tricolour_F", (handler1 modelToWorld [2,2,0]), true] call JBOY_dog_create;  // Create dog. 4th parameter true means use Johnnyboy voice for commands.
nul = [dog1, handler1, 2.5] execVM "JBOY_Dog\JBOY_dogCommand.sqf";    // Start command listener for dog
_n=[] spawn {sleep 2; dog1 setVariable ["vCommand", 'sit', true]};    // Issue first command to dog (sit, heel, stay, etc.  Sleep to allow dog to be initialized first.
// **************************************************************************
// Start Trail Detection for dog1
// **************************************************************************
dog1 setVariable ["vScentTrailDetectionOn", true, true]; // Must set this property true if you want dog to track a trail of scentMarkers.
_dmy = [] spawn {sleep 1; _d=[dog1] call JBOY_DogScentDetectionLoop;};

// **************************************************************************
// Start dropping scent markers for leader of group to be tracked.  
// quarry1 is the name of an editor placed unit.  Change this to be any unit you want to be tracked.
// **************************************************************************
_dmy = [quarry1] spawn {params["_prey"];sleep 2; preyObject1=[_prey] call JBOY_dogPreyInit;}; 

The above commands can be repeated to create multiple dogs (each with its own command listener), and to start dropping scent trails for more than one quarry (unit to be tracked).

 

@accuracythruvolume:  I'm hoping you can try DChan200's suggestion, and remoteExec the dog create scripts if calling them via an AddAction (which is local).  It would be great to confirm that technique works, and I can keep all my "if (!isServer)  exitwith {};" lines in the scripts (to insure they only execute on the server).  I do appreciate your help and effort.

Share this post


Link to post
Share on other sites

Finally getting around to trying to implement this script into a mission and had a question for you. What would be the simplest way to get an AI "handled" dog to attack the player or the player's group members? I've successfully added a dog to an enemy patrol, but if I shoot at them or even kill them, the dog just sticks near whoever the handler is, so I'd like to figure out how I can have the handler order the dog to attack whoever engages him. To be brutally honest (in a good way) this script is mega-complicated so I'm not too sure what exactly to change to make this happen. I've looked through the majority of the sqf's to see if I could figure it out but I'm a bit lost.

 

This is on single player of course, so no need for an MP or Coop compatible solution.

Share this post


Link to post
Share on other sites
1 hour ago, Mynock said:

What would be the simplest way to get an AI "handled" dog to attack the player or the player's group members? I've successfully added a dog to an enemy patrol, but if I shoot at them or even kill them, the dog just sticks near whoever the handler is, so I'd like to figure out how I can have the handler order the dog to attack whoever engages him.

@Mynock I'm happy you're giving it a try.  This points out I need to build AI Handler/Dog team logic to order dog to attack detected enemies (potentially players).  You are right, currently they will only follow their AI handler.   Arrrrg...this just points out I have more work to do.  :) 

 

Until I build that new logic, you should be able to script this yourself.  You need to detect via a trigger or loop when you want AI to attack player or someone else (maybe a trigger on when AI knowsabout player).  Once detected, execute the following commands so the AI handler will order his assigned dog to attack.

_dog setVariable ["vTarget", _dogTarget,true]; // _dogTarget is unit you want attacked, could be AI, player, or rabbit, chicken or snake
_dog setVariable ["vCommand", "attack",true];  // switches dog from current mode (probably "heel") to attack mode

If the the dog kills the target, and you want him to attack another target, then re-issue same commands above passing in a new target.

 

If you want the AI controlled dog to stop attacking, and return to following AI handler, then execute this command:

_dog setVariable ["vCommand", "heel",true];

Instead of "heel" you could use "stop" or "sit" to stop the dog attacking.  But "heel" is best to get dog following AI handler again.  Note when dog is in attack mode, he will continue to attack until:

  • dog is dead
  • dog is given a different command
  • or target the dog is attacking is dead. 

If dog's target is killed, then dog goes into an idle state (I think).  So you would have to issue the "heel" command to get the dog following the AI handler again.

 

If you want an AI handled dog to board a vehicle with his AI handler, execute the following:

_dog setVariable ["vVehicle", vehicle dogHandler1,true]; // assumes "dogHandler1" is name of AI controlling dog
_dog setVariable ["vCommand", "getin",true];  // commands dog to board vehicle

To have AI controlled dog exit vehicle:

_dog setVariable ["vCommand", "getout",true];  // dog exits vehicle 
sleep 1;
_dog setVariable ["vCommand", "heel",true];  // dog resumes following his handler

If AI Handler dies, and dog still lives, you can assign a new AI handler for him if you want:

_dog enablecollisionwith _handler;
_dog setVariable ["vHandler", _handler , true];  // assign new handler to dog

Hope that helps.  Feel free to shoot me more questions. 

 

Q:  Who said "There's only two kinds of people in this world my friend.  Those with loaded guns, and those who dig.  You dig."...?

  • Like 1

Share this post


Link to post
Share on other sites

Awesome, thank you very much sir! I'll get to work on it soon, I figured it was going to be something relatively simple I just thought it better to ask first. I opened the JBOY_Dog folder and went "oooooohhhhhh god where do I even start" lol. It's amazing what you've done with this, looking forward to implementing this and some of your other scripts into some missions.

  • Like 1

Share this post


Link to post
Share on other sites
15 hours ago, johnnyboy said:

That's great news ATV.  Thanks for these details, I will hunt down those statements.

 

A few questions:

  • For my education, why is "if (!isServer)  exitwith {};" a problem on dedicated?
  • And without it, don't I risk running the scrpts redundantly on all clients?
  • If more than one player connected, you still only had one dog correctly created?  (i.e., there wasn't a dog spammed per client?)

I really appreciate the help man, and will add you to the credits list!

 

 

I use a variable on the player to track if they have a dog already:

if ( isNil { _caller getVariable "HasDog" }  ) then 

 

That combined with the check for the player's classname (i only have one dog handler slot) provides that only one player can have one dog.

 

As dchan pointed out, moving the scripts to use remoteExec could solve the issue. Although I'm unsure how you would implement it.   RemoteExec syntax can get...a little funky.

 

Glad I could assist.  Your the one that deserves credit for giving us a doggie with some nice functions.   I already have a mission made that I wouldn't be able to make without your work, so thank you!

 

--ATV

 

  • Like 2

Share this post


Link to post
Share on other sites

Hey..look like missions with dog support are popping out more and more..LOVE THAT!!!!!

NOW, if just someone good with modeling would make a K-9 combat vest..

Spoiler

k9-vest-with-handler-2.jpgimages?q=tbn:ANd9GcS4NI845S4xuJe_BUjmUYB

:icon_dj:

  • Like 1

Share this post


Link to post
Share on other sites

So, I'm confused....

 

Did we get it working on a Dedi or.....are we still messing with it?

Share this post


Link to post
Share on other sites
5 hours ago, T.Gavin said:

So, I'm confused....

 

Did we get it working on a Dedi or.....are we still messing with it?

I think it CAN work on a Dedi server, but so far Accuracy Thru Volume is the only one to do it.  And he used a "non-standard" way  (IMO), where he removed all the "if (!isServer)  exitwith {};" from the top of many sprocs, and found an alternative way to insure only one dog was created per player in a dedi situation.  ATV deserves credit for solving his issue and I'm glad the Dogs are being used.  I'm just not sure his solution is the one everyone should use.

 

Its likely this could have been handled differently using remote_exec, in which case you wouldn't have to remove a statement from many sprocs.

 

Anyway, I believe there is not too much work involved in implementing this in Dediicated server.  However, I hope someone else takes that on and points the way.  My time is limited, so setting up and learning about dedicated servers is not going to happen.  I'd rather invest my time adding and improving capabilties for the dog (bomb sniffing, etc.).

 

So if anyone wants to volunteer for JBOY Dog MP/Dedi Integration and Testing that would be awesome.  You will be credited accordingly of course.

 

@T.Gavin, also you mentioned you would send me the errors and logs from your attempt to use it Dedi.  Can you still provide those?

  • Like 1

Share this post


Link to post
Share on other sites
On 1/28/2017 at 4:19 AM, zagor64bz said:

Hey..look like missions with dog support are popping out more and more..LOVE THAT!!!!!

NOW, if just someone good with modeling would make a K-9 combat vest..

  Hide contents

k9-vest-with-handler-2.jpgimages?q=tbn:ANd9GcS4NI845S4xuJe_BUjmUYB

:icon_dj:

I have a nice vest model, however I'm wondering how it can be attached to a dog and move with him? I tried to port the dog from arma 2 myself with this vest as a part of the model and it moved around ingame, however it had no animations. Here is a picture: https://gyazo.com/000ba427c2310d7b762ab8a5ae8b14e3

  • Like 1

Share this post


Link to post
Share on other sites

@Jimbo Dude  That looks really cool.  I have no skills in modding, so don't know how to help with that. But I would love to see one strapped on a Jboy Dog!  :)

 

@thedog88generously offered up this awesome tactical vest below also.  I think he ported it from Arma 2, but it still needed work to be usable.  He was willing to turn this over to anyone who could make it Arma 3 compliant (he's got too many other serious projects going, so no time for the dog). 

 

 

wIlgcED.png

  • Like 1

Share this post


Link to post
Share on other sites
6 hours ago, Jimbo Dude said:

I have a nice vest model, however I'm wondering how it can be attached to a dog and move with him? I tried to port the dog from arma 2 myself with this vest as a part of the model and it moved around ingame, however it had no animations. Here is a picture: https://gyazo.com/000ba427c2310d7b762ab8a5ae8b14e3

 

6 hours ago, johnnyboy said:

@Jimbo Dude  That looks really cool.  I have no skills in modding, so don't know how to help with that. But I would love to see one strapped on a Jboy Dog!  :)

 

@thedog88generously offered up this awesome tactical vest below also.  I think he ported it from Arma 2, but it still needed work to be usable.  He was willing to turn this over to anyone who could make it Arma 3 compliant (he's got too many other serious projects going, so no time for the dog). 

 

 

 

Those are awesome and fit perfectly in any mission..maybe change SHERIFF with K9 and boom...deal done!

Anyone want eternal gratitude?  

  • Like 1

Share this post


Link to post
Share on other sites

I added it to my mission but I can not get the dog to spawn. I am using altis life 5.0 as my mission.

Edited by androxe

Share this post


Link to post
Share on other sites

Hey androxe, I'm glad you're giving it a try.  But if you want help, you have to provide details.

Share this post


Link to post
Share on other sites

Hi JonnyBoy,

 

I followed your instructions exactly. No errors in RPT log and seems like everything is loaded. But no dog spawn and 'T' menu doesn't work. The dog is supposed to spawn in next to player correct? Or how does one spawn in the dogs?

 

Btw I am on a dedicated server. Gtxgaming host.

 

Add both folders to mission pbo. Added needed lines to description.ext and init.sqf

 

Description.ext

 

Spoiler

///////////////////////////////////////////////////////////////////////////////
// Server Settings - Modify at will
///////////////////////////////////////////////////////////////////////////////
author = "Updated by [FPS]kuplion";
onLoadName = "Exile Australia";
onLoadMission= "www.exilemod.com";
loadScreen = "exile_assets\texture\mod\logo.paa"; 
disableChannels[] = {0, 2};
OnLoadIntro = "";
OnLoadIntroTime = false;
OnLoadMissionTime = false;

class Header
{
    gameType = Survive; // Do NOT change this
    minPlayers = 1;
    maxPlayers = 100;
};

///////////////////////////////////////////////////////////////////////////////
// Exile Settings - Do not change these!
///////////////////////////////////////////////////////////////////////////////
forceRotorLibSimulation = 2;
skipLobby = 1;
joinUnassigned = 1;
respawn = "BASE";
respawnDelay = 120;
respawnDialog = 0;
respawnOnStart = 0;
respawnButton = 1; 
respawnTemplates[] = {"Exile"};
corpseManagerMode = 0;
corpseLimit = 20;
corpseRemovalMinTime = 1800;
corpseRemovalMaxTime = 3600;
wreckManagerMode = 0;
wreckLimit = 2;
wreckRemovalMinTime = 60;
wreckRemovalMaxTime = 360;
scriptedPlayer = 1;
disabledAI = 1;
enableItemsDropping = 0;
briefing = 0;
debriefing = 0;
allowFunctionsLog = 1;
enableDebugConsole = 0; 
allowFunctionsRecompile = 0;
showSquadRadar = 0;
showUAVFeed = 0;
reviveDelay = 6;
reviveForceRespawnDelay = 3;
reviveBleedOutDelay = 120;

showHUD[] = 
{
    true,   // Scripted HUD (same as showHUD command)
    true,   // Vehicle + soldier info
    true,   // Vehicle radar 
    true,   // Vehicle compass
    true,   // Tank direction indicator
    true,  // Commanding menu
    false,  // Group Bar
    true,   // HUD Weapon Cursors
    false   // Squad Radar
};

#include "config.cpp"

// Infistar
#include "CfgRemoteExec.hpp"
#include "infiSTAR_AdminMenu.hpp"

// SM Zombie Spawner
#include "SM_Zombz.hpp"

// XM8 ExAd Apps
#include "ExAdClient\ExAd.cpp"

class CfgFunctions
{
    //Ex Ad Xm8 Apps
    #include "ExAdClient\CfgFunctions.cpp"
    // TcB AIS Wounding System
    #include "Custom\ais_injury\cfgFunctionsAIS.hpp"
};

class RscTitles
{
    //Ex Ad Xm8 Apps
    #include "ExAdClient\RscTitles.cpp"
    
    //Dogs
    #include "Custom\JBOY_Dog\Dialog\Common.hpp"
    #include "Custom\JBOY_Dog\Dialog\JBOY_gui_Dog.hpp"
    
    //TcB AIS Wounding System
    #include "Custom\ais_injury\dialogs\rscTitlesAIS.hpp"
};

class CfgHints
{
    #include "ExAdClient\CfgHints.cpp"
};

class CfgNetworkMessages
{
    #include "ExAdClient\CfgNetworkMessages.cpp"
};

//--------------------------------------------------------------

//Add Dog Sounds
#include "Custom\JBOY_Dog\Dialog\Common.hpp"
#include "Custom\JBOY_Dog\Dialog\JBOY_gui_Dog.hpp"

class CfgSounds
{    
    class boomerFind
    {
        name = "boomerFind"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerFind.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngFind
    {
        name = "EngFind"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngFind.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreFind
    {
        name = "FreFind"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreFind.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerFind
    {
        name = "PerFind"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerFind.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiFind
    {
        name = "ChiFind"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiFind.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerTrack
    {
        name = "boomerTrack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerTrack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngTrack
    {
        name = "EngTrack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngTrack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreTrack
    {
        name = "FreTrack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreTrack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerTrack
    {
        name = "PerTrack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerTrack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiTrack
    {
        name = "ChiTrack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiTrack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerDetain
    {
        name = "boomerDetain"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerDetain.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngDetain
    {
        name = "EngDetain"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngDetain.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreDetain
    {
        name = "FreDetain"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreDetain.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerDetain
    {
        name = "PerDetain"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerDetain.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiDetain
    {
        name = "ChiDetain"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiDetain.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerStay
    {
        name = "boomerStay"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerStay.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngStay
    {
        name = "EngStay"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngStay.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreStay
    {
        name = "FreStay"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreStay.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerStay
    {
        name = "PerStay"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerStay.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiStay
    {
        name = "ChiStay"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiStay.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerDropIt
    {
        name = "boomerDropIt"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerDropIt.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngDropIt
    {
        name = "EngDropIt"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngDropIt.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreDropIt
    {
        name = "FreDropIt"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreDropIt.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerDropIt
    {
        name = "PerDropIt"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerDropIt.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiDropIt
    {
        name = "ChiDropIt"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiDropIt.ogg, 1, 1.0};
        titles[] = {0, ""};
    };    
    class boomerFetch
    {
        name = "boomerFetch"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerFetch.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class EngFetch
    {
        name = "EngFetch"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\EngFetch.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class FreFetch
    {
        name = "FreFetch"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\FreFetch.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class PerFetch
    {
        name = "PerFetch"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\PerFetch.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class ChiFetch
    {
        name = "ChiFetch"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\ChiFetch.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerYelp
    {
        name = "boomerYelp"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerYelp.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerYelp2
    {
        name = "boomerYelp2"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerYelp2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class whimper1
    {
        name = "whimper1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\whimper1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class barkGrowlbark
    {
        name = "barkGrowlbark"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\barkGrowlbark.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class growlLong
    {
        name = "growlLong"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\growlLong.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerHeel
    {
        name = "boomerHeel"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerHeel.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerAtEase
    {
        name = "boomerAtEase"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerAtEase.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerWoof1
    {
        name = "boomerWoof1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerWoof1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerStop
    {
        name = "boomerStop"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerStop.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerSit
    {
        name = "boomerSit"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerSit.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerSitrep
    {
        name = "boomerSitrep"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerSitrep.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerAttack
    {
        name = "boomerAttack"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerAttack.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGuard
    {
        name = "boomerGuard"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGuard.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGetIn
    {
        name = "boomerGetIn"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGetIn.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGetOut
    {
        name = "boomerGetOut"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGetOut.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGuard2
    {
        name = "boomerGuard2"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGuard2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGuardThisJoker
    {
        name = "boomerGuardThisJoker"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGuardThisJoker.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerGuardThisPrick
    {
        name = "boomerGuardThisPrick"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerGuardThisPrick.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerScout
    {
        name = "boomerScout"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerScout.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class boomerMoveThere
    {
        name = "boomerMoveThere"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\boomerMoveThere.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class goodBoy
    {
        name = "goodBoy"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\goodBoy.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class goodDog
    {
        name = "goodDog"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\goodDog.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class bark2
    {
        name = "bark2"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\bark2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class barkmean2
    {
        name = "barkmean2"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\barkmean2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class growls3
    {
        name = "growls3"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\growls3.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class barkmean3
    {
        name = "barkmean3"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\barkmean3.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class barkmean1
    {
        name = "barkmean1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\barkmean1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class bark1
    {
        name = "bark1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\bark1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dog_growl_vicious
    {
        name = "dog_growl_vicious"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dog_growl_vicious.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dog_howl
    {
        name = "dog_howl"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dog_howl.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dogPant1
    {
        name = "dogPant1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dogPant1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dogPant2
    {
        name = "dogPant1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dogPant1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dogSniff1
    {
        name = "dogSniff1"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dogSniff1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class dogSniff2
    {
        name = "dogSniff2"; 
        sound[] = {\Custom\JBOY_Dog\Sounds\dogSniff2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class wings1
    {
        name = "wings1"; 
        sound[] = {\Custom\JBOY\Sounds\wings1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class wings2
    {
        name = "wings2"; 
        sound[] = {\Custom\JBOY\Sounds\wings2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class crow1
    {
        name = "crow1"; 
        sound[] = {\Custom\JBOY\Sounds\crow1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class crow2
    {
        name = "crow2"; 
        sound[] = {\Custom\JBOY\Sounds\crow2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class crow3
    {
        name = "crow3"; 
        sound[] = {\Custom\JBOY\Sounds\crow3.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class crow4
    {
        name = "crow4"; 
        sound[] = {\Custom\JBOY\Sounds\crow4.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class crow5
    {
        name = "crow5"; 
        sound[] = {\Custom\JBOY\Sounds\crow5.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck1
    {
        name = "cluck1"; 
        sound[] = {\Custom\JBOY\Sounds\cluck1.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck2
    {
        name = "cluck2"; 
        sound[] = {\Custom\JBOY\Sounds\cluck2.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck3
    {
        name = "cluck3"; 
        sound[] = {\Custom\JBOY\Sounds\cluck3.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck4
    {
        name = "cluck4"; 
        sound[] = {\Custom\JBOY\Sounds\cluck4.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck5
    {
        name = "cluck5"; 
        sound[] = {\Custom\JBOY\Sounds\cluck5.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
    class cluck6
    {
        name = "cluck6"; 
        sound[] = {\Custom\JBOY\Sounds\cluck6.ogg, 1, 1.0};
        titles[] = {0, ""};
    };
};

 

Init.sqf

 

Spoiler

// ACD Traders
#include "Custom\ACD\preinit.sqf";

// Rearm/Repair
[] execVM "Custom\rearm\takegive_poptab_init.sqf";

if(hasInterface) then{
    [] execVM "Custom\rearm\service_point.sqf";
};

// Enigma Revive Players With Defib
[] execVM "Custom\EnigmaRevive\init.sqf";

// Claim Vehicles
[] execVM "Custom\ClaimVehicles_Client\ClaimVehicles_Client_init.sqf";

if (hasInterface || isServer) then {
    [] call compileFinal preprocessFileLineNumbers "Custom\Welcome_Dialog\welcome.sqf";
};

// TcB AIS Wounding System
["%1 --- Executing TcB AIS init.sqf",diag_ticktime] call BIS_fnc_logFormat;
enableSaving [false,false];
enableTeamswitch false;            // TcB AIS wont support teamswitch


// TcB AIS Wounding System --------------------------------------------------------------------------
if (!isDedicated) then {
    TCB_AIS_PATH = "Custom\ais_injury\";
    [] spawn {
        {[_x] call compile preprocessFile (TCB_AIS_PATH+"init_ais.sqf")} forEach (if (isMultiplayer) then {playableUnits} else {switchableUnits});        // execute for every playable unit
        
        //{[_x] call compile preprocessFile (TCB_AIS_PATH+"init_ais.sqf")} forEach (units group player);                                                    // only own group - you cant help strange group members
        
        //{[_x] call compile preprocessFile (TCB_AIS_PATH+"init_ais.sqf")} forEach [p1,p2,p3,p4,p5];                                                        // only some defined units
    };
};
// --------------------------------------------------------------------------------------------------------------

//if(7!isServer) then {waitUntil{!isNull player}};
//AZC_fnc_Delete            = compile preprocessFileLineNumbers "JBOY_Dog\fnc_Delete.sqf";
JBOY_say3d =              compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_say3d.sqf";
JBOY_dog_create =         compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dog_create.sqf";
JBOY_getSpeakerLanguage = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getSpeakerLanguage.sqf";
JBOY_getDogPOSPerVeh =    compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getDogPOSPerVeh.sqf";
JBOY_watchNextWP =        compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_watchNextWP.sqf";
JBOY_isFetchable =        compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_isFetchable.sqf";
JBOY_dogPackCreate =      compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dogPackCreate.sqf";
JBOY_dogPackLoop =        compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dogPackLoop.sqf";
JBOY_turboChicken =       compile preprocessFileLineNumbers "Custom\JBOY\JBOY_turboChicken.sqf";
JBOY_dogExecuteAction =   compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dogExecuteAction.sqf";
//CALC_INTERMEDIATE_POS   = compile preprocessFileLineNumbers "JBOY_Dog\CALC_INTERMEDIATE_POS.sqf";
JBOY_dogPackMemberAttack= compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dogPackMemberAttack.sqf";
JBOY_getNearTargets     = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getNearTargets.sqf";
JBOY_getClosestObjFromArray       = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getClosestObjFromArray.sqf";
JBOY_getTargetDesignatedByHandler = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getTargetDesignatedByHandler.sqf";
_dogDialog = [] spawn compile PreprocessFileLineNumbers "Custom\JBOY_Dog\Dialog\JBOY_fnc_DogDialog.sqf";
//JBOY_fnc_DogDialog = [] spawn compile PreprocessFileLineNumbers "Dialog\JBOY_fnc_DogDialog.sqf";

// New scritps added for Tracking
JBOY_dogPreyInit = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_dogPreyInit.sqf";
JBOY_DogScentDropLoop = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_DogScentDropLoop.sqf";
JBOY_getFreshestScentMarker = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getFreshestScentMarker.sqf";
JBOY_DogScentDetectionLoop = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_DogScentDetectionLoop.sqf";
JBOY_DogSmashGrassLoop = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_DogSmashGrassLoop.sqf";
JBOY_getNearEnemies = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_getNearEnemies.sqf";
JBOY_DogScentDeleteOlderScent = compile preprocessFileLineNumbers "Custom\JBOY_Dog\JBOY_DogScentDeleteOlderScent.sqf";


//if jip player and not server then exit
_JIPplayer = not isServer && isNull player;
if (_JIPplayer) exitwith {};
// **************************************************************************
// Enable hints and chats for debugging, and places yellow sphere above dog pack leader
// **************************************************************************
JBOY_DEBUG = True;
JBOY_preyArray = [];

// **************************************************************************
// Create game logic used by JBOY_AIFightsDogs.sqf to force AI to fire weapons.
// **************************************************************************
JBOYDogLogicCenter = createCenter sideLogic;
JBOYDogLogicGroup = createGroup JBOYDogLogicCenter;
JBOYDogGameLogic = JBOYDogLogicGroup createUnit ["Logic", [0,0,0], [], 0, "NONE"];

// **************************************************************************
// Create dog and have him follow player
// **************************************************************************
_dogMenu = [] spawn {sleep 2; _d=[player] call JBOY_fnc_DogDisplayEH;};  // Add dog menu to player
dog1 = [player, "Fin_tricolour_F", (handler1 modelToWorld [2,2,0]), true] call JBOY_dog_create;  // Create dog. 4th parameter true means use Johnnyboy voice for commands.
nul = [dog1, player, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";    // Start command listener for dog
//nul = [dog1, handler1] execVM "JBOY_Dog\JBOY_dog_assign_actions.sqf"; // if dog has handler, assign action menu to handler
_n=[] spawn {sleep 2; dog1 setVariable ["vCommand", 'sit', true]};    // Issue first command to dog (sit, heel, stay, etc.  Sleep to allow dog to be initialized first.
// **************************************************************************
// Start Trail Detection for dog1
// **************************************************************************
dog1 setVariable ["vScentTrailDetectionOn", true, true]; // Must set this property true if you want dog to track a trail of scentMarkers.
_dmy = [] spawn {sleep 1; _d=[dog1] call JBOY_DogScentDetectionLoop;};

// **************************************************************************
// Start dropping scent markers for leader of group to be tracked.  
// quarry1 is a unit that starts near vehicles on the beach, and  follows move waypoints dropping a trail.
// **************************************************************************
_dmy = [quarry1] spawn {params["_prey"];sleep 2; preyObject1=[_prey] call JBOY_dogPreyInit;}; 
// **************************************************************************
// Loop that smashes down grass as dude walks along.  Only good for 90 seconds until grass pops up again.
// In the future, may have better solution that continually smashes grass trail for player to follow.
// **************************************************************************
_dmy = [] spawn {sleep 1; _d=[quarry1] call JBOY_DogSmashGrassLoop;};

// **************************************************************************
// Create more dogs and assign to AI Handlers
// **************************************************************************
dog2 = [handler2, "Alsatian_Sandblack_F", (handler2 modelToWorld [3,4,0]), false] call JBOY_dog_create; // 4th parameter false means voice commands will be in AI's native language.
nul = [dog2, handler2, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf"; // Start command listener for dog
_n=[] spawn {sleep 2; dog2 setVariable ["vCommand", 'heel', true]}; // Start dog heeling (following) his handler


dog3 = [handler3, "Alsatian_Sand_F", (handler3 modelToWorld [1.3,1.5,0]), false] call JBOY_dog_create;
nul = [dog3, handler3, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf"; // Start command listener for dog
_n=[] spawn {sleep 3; dog3 setVariable ["vCommand", 'heel', true]}; // Start dog heeling (following) his handler
/*
dog4 = [handler4, "Alsatian_Black_F", (handler4 modelToWorld [1.3,1.5,0]), false] call JBOY_dog_create;
nul = [dog4, handler4, 2.5] execVM "JBOY_Dog\JBOY_dogCommand.sqf"; // Start command listener for dog
_n=[] spawn {sleep 2; dog4 setVariable ["vCommand", 'heel', true]};
*/

// **************************************************************************
// Create some rabbits and chickens explicitly.  These small animals will run or fly when dog or man approaches.
// Also look at Animals Module in sample mission for adding chickens.  It has call to scatter script in the module's init field.
// **************************************************************************
R1 = createAgent ['Rabbit_F', rabbitPos getRelPos [2,   0], [], 0, "NONE"];
R2 = createAgent ['Rabbit_F', rabbitPos getRelPos [5,  90], [], 0, "NONE"];
R3 = createAgent ['Rabbit_F', rabbitPos getRelPos [4, 180], [], 0, "NONE"];
R4 = createAgent ['Rabbit_F', rabbitPos getRelPos [2, 270], [], 0, "NONE"];
{nul = [_x,true] execVM "Custom\JBOY\JBOY_animalScatter.sqf";} foreach [R1,R2,R3,R4]; // rabbits will scatter when dog or man near.
C1 = createAgent ['Cock_random_F', rabbitPos getRelPos [3, 200], [], 0, "NONE"];
C2 = createAgent ['Cock_white_F', rabbitPos getRelPos [3, 100], [], 0, "NONE"];
S1 = createAgent ['Snake_random_F', rabbitPos getRelPos [3, 200], [], 0, "NONE"];
S2 = createAgent ['Snake_random_F', rabbitPos getRelPos [1, 200], [], 0, "NONE"];

// **************************************************************************
// Create a dog with no handler, but run JBOY_dogCommand.sqf on it so dog behaviour
// can be scripted.  Dog5 is positioned to walk straight thru obstacle course.
// **************************************************************************
dog5 = [objNull, "Alsatian_Black_F", (getpos courseStart), false] call JBOY_dog_create;
dog5 setdir ([courseStart, courseEnd] call BIS_fnc_dirTo);
dog5 dowatch getpos courseEnd;
[dog5, "Dog_Sit"] remoteExec ["switchMove", 0];
dog5 setVariable ["vCommand", 'sit', true];
dog5 setVariable ["vHandlerLanguageAbbrev", 'FRE', true]; // Force dog command language to ENGFRE

dog5 setdir ([dog5, courseEnd] call BIS_fnc_dirTo);
nul = [dog5, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler
dog5 dowatch getpos courseEnd;

// **************************************************************************
// Create more dogs without handlers
// **************************************************************************
dog6 = [objNull, "Alsatian_Black_F", (getpos dog6pos), false] call JBOY_dog_create;
dog6 setdir 270;
[dog6, "Dog_Sit"] remoteExec ["switchMove", 0];
dog6 setVariable ["vCommand", 'sit', true];
nul = [dog6, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog7 = [objNull, "Alsatian_Sand_F", (getpos dog7pos), false] call JBOY_dog_create;
dog7 setdir 270;
[dog7, "Dog_Sit"] remoteExec ["switchMove", 0];
dog7 setVariable ["vCommand", 'sit', true];
nul = [dog7, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog8 = [objNull, "Fin_blackwhite_F", (getpos dog8pos), false] call JBOY_dog_create;
dog8 setdir 270;
[dog8, "Dog_Sit"] remoteExec ["switchMove", 0];
dog8 setVariable ["vCommand", 'sit', true];
nul = [dog8, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler


// **************************************************************************
// set handlers to different speakers to demonstrate dogs commanding in different languages
// **************************************************************************
[handler2, "Male02PER"] remoteExecCall ["setSpeaker", 0];
[handler3, "Male02FREENG"] remoteExecCall ["setSpeaker", 0];
//[handler4, "Male02CHI"] remoteExecCall ["setSpeaker", 0];
[walker, "Male02FRE"] remoteExecCall ["setSpeaker", 0];

// **************************************************************************
// Create pack of 6 dogs without handlers.  Will be triggered to attack a patrol later.
// **************************************************************************
dog10 = [objNull, "Alsatian_Black_F", (dogPackPos getRelPos [12, 0]), false] call JBOY_dog_create;
[dog10, "Dog_Sit"] remoteExec ["switchMove", 0];
dog10 setVariable ["vCommand", 'sit', true];
nul = [dog10, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog11 = [objNull, "Alsatian_Sandblack_F", (dogPackPos getRelPos [2, 45]), false] call JBOY_dog_create;
[dog11, "Dog_Sit"] remoteExec ["switchMove", 0];
dog11 setVariable ["vCommand", 'sit', true];
nul = [dog11, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog12 = [objNull, "Alsatian_Black_F", (dogPackPos getRelPos [5, 90]), false] call JBOY_dog_create;
[dog12, "Dog_Sit"] remoteExec ["switchMove", 0];
dog12 setVariable ["vCommand", 'sit', true];
nul = [dog12, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog13 = [objNull, "Fin_blackwhite_F", (dogPackPos getRelPos [1, 120]), false] call JBOY_dog_create;
[dog13, "Dog_Sit"] remoteExec ["switchMove", 0];
dog13 setVariable ["vCommand", 'sit', true];
nul = [dog13, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog14 = [objNull, "Fin_tricolour_F", (dogPackPos getRelPos [7, 150]), false] call JBOY_dog_create;
[dog14, "Dog_Sit"] remoteExec ["switchMove", 0];
dog14 setVariable ["vCommand", 'sit', true];
nul = [dog14, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

dog15 = [objNull, "Alsatian_Sand_F", (dogPackPos getRelPos [22, 180]), false] call JBOY_dog_create;
[dog15, "Dog_Sit"] remoteExec ["switchMove", 0];
dog15 setVariable ["vCommand", 'sit', true];
nul = [dog15, objNull, 2.5] execVM "Custom\JBOY_Dog\JBOY_dogCommand.sqf";  // pass in objNull for dog with no handler

// This is here for demonstration only, and allows player to switch languages he commands dogs in.
_n= [] spawn 
{
sleep 2;
    gFre  = player addAction ["Player French",  {[player, "Male02FRE"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "FRE", true];  }, [_dog]];
    gPer  = player addAction ["Player Persian", {[player, "Male02PER"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "PER", true];  }, [_dog]];
    gCHI  = player addAction ["Player Chinese", {[player, "Male02CHI"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "CHI", true];  }, [_dog]];
    gGRE  = player addAction ["Player Greek",   {[player, "Male02GRE"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "GRE", true];  }, [_dog]];
    gENG  = player addAction ["Player English", {[player, "Male02ENG"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "ENG", true];  }, [_dog]];
    gENGB = player addAction ["Player British", {[player, "Male02ENGB"] remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "ENGB", true];  }, [_dog]];
    gFreeng  = player addAction ["Player French Accent",  {[player, "Male02ENGFRE"]  remoteExecCall ["setSpeaker", 0]; (player getVariable "vDogAssigned") setVariable ["vHandlerLanguageAbbrev", "ENGFRE", true];  }, [_dog]];
};

 

Edited by Kronons

Share this post


Link to post
Share on other sites

Hi JonnyBoy,

 

Looking at the code again this morning. The menu probably doesn't come up because of this in the init.sqf file correct? Or can you help me out to get it working? Thanks!

 

//if jip player and not server then exit
_JIPplayer = not isServer && isNull player;
if (_JIPplayer) exitwith {};

Also do I have to add anything from the mission.sqm file to mine? As in your instructions you don't state it is required. 

Share this post


Link to post
Share on other sites

@Kronons

Hey bud,I don't mean to be disrespectful or anything, and I feel your frustration,  but use the "spoiler" function when you post such long  pieces of  code.

It will avoid cluttering the thread...

Thank you Bud!!!

 

Share this post


Link to post
Share on other sites
31 minutes ago, Kronons said:

Hi JonnyBoy,

 

Looking at the code again this morning. The menu probably doesn't come up because of this in the init.sqf file correct? Or can you help me out to get it working? Thanks!

 


//if jip player and not server then exit
_JIPplayer = not isServer && isNull player;
if (_JIPplayer) exitwith {};

Also do I have to add anything from the mission.sqm file to mine? As in your instructions you don't state it is required. 

Hi Kronos, I apologize, but I have zero time for the next week to look deeply in to any problems.   My time should free up some late next week.  But here's a few points:

 

1.  You should need nothing from the .SQM file.

2. I see you put all my scripts under a folder called Custom.  You updated all the compiled functions to reference Custom directory (that's good).  And you updated file paths in .EXT file (good).  But some of the JBOY dog scripts reference the folders internally.  These would have to be changed.  And you would have to find all occurrences of  this in all all the scripts.  I think it would be quicker and easier to NOT put everything under Custom folder.   Let's eliminate that as a problem.  Once you get a dog spawned and working, you go back to trying to put everything under Custom if it is important to you.  For example, here's some folder refererences found in JBOY_dog_create.sqf script:

// these statements in JBOY_dog_create.sqf, and reference the JBOY_Dog folder

           if (_hits <= 4) then {dummy= [_dog, 0, ([ "boomerYelp", "boomerYelp2"] call BIS_fnc_arrayShuffle) select 0, "Yelp"] execVM "JBOY_Dog\delaySay.sqf";};


_dog setobjecttextureGlobal [0,"JBOY_Dog\Textures\dogBloodNeck2Hole" + (typeOf _dog)+".jpg"]; 

3. Regarding the JIP player logic, that is something that @AZCoder added to get the dog packs to work in MP (I'm not sure if that was dedicated server or not).  I am no expert on JIP or dedicated server logic, and this script is not yet proven on Dedicated servers.  So I can't help you there.

 

4.  I would comment out or remove all my init.sqf code you copied AFTER the line below.  This will restrict your inital dog integration to spawing one dog associated with a player.   Once you get that working, you can decide if you want to implement other dogs handled by AI, independent dog packs, a unit to be tracked by dogs, etc.   Let's just get a player controlled dog working first.

10 hours ago, Kronons said:

_dmy = [quarry1] spawn {params["_prey"];sleep 2; preyObject1=[_prey] call JBOY_dogPreyInit;};

Good luck.  My demo missions work fine, but its not guaranteed for dedicated server.  But It would be awesome if someone tests and tweaks until it works on dedi.  I'm confident it can work...probably just needs a few changes here and there. 

 

And finally, please put the large code blocks within spoiler tags.  Thanks!

Share this post


Link to post
Share on other sites
2 hours ago, zagor64bz said:

@Kronons

Hey bud,I don't mean to be disrespectful or anything, and I feel your frustration,  but use the "spoiler" function when you post such long peaces of code.

It will avoid cluttering the thread...

Thank you Bud!!!

 

 

Apologies. I have fixed my post to use the spoiler. Thanks for the advice.

 

1 hour ago, johnnyboy said:

Hi Kronos, I apologize, but I have zero time for the next week to look deeply in to any problems.   My time should free up some late next week.  But here's a few points:

 

1.  You should need nothing from the .SQM file.

2. I see you put all my scripts under a folder called Custom.  You updated all the compiled functions to reference Custom directory (that's good).  And you updated file paths in .EXT file (good).  But some of the JBOY dog scripts reference the folders internally.  These would have to be changed.  And you would have to find all occurrences of  this in all all the scripts.  I think it would be quicker and easier to NOT put everything under Custom folder.   Let's eliminate that as a problem.  Once you get a dog spawned and working, you go back to trying to put everything under Custom if it is important to you.  For example, here's some folder refererences found in JBOY_dog_create.sqf script:


// these statements in JBOY_dog_create.sqf, and reference the JBOY_Dog folder

           if (_hits <= 4) then {dummy= [_dog, 0, ([ "boomerYelp", "boomerYelp2"] call BIS_fnc_arrayShuffle) select 0, "Yelp"] execVM "JBOY_Dog\delaySay.sqf";};


_dog setobjecttextureGlobal [0,"JBOY_Dog\Textures\dogBloodNeck2Hole" + (typeOf _dog)+".jpg"]; 

3. Regarding the JIP player logic, that is something that @AZCoder added to get the dog packs to work in MP (I'm not sure if that was dedicated server or not).  I am no expert on JIP or dedicated server logic, and this script is not yet proven on Dedicated servers.  So I can't help you there.

 

4.  I would comment out or remove all my init.sqf code you copied AFTER the line below.  This will restrict your inital dog integration to spawing one dog associated with a player.   Once you get that working, you can decide if you want to implement other dogs handled by AI, independent dog packs, a unit to be tracked by dogs, etc.   Let's just get a player controlled dog working first.

Good luck.  My demo missions work fine, but its not guaranteed for dedicated server.  But It would be awesome if someone tests and tweaks until it works on dedi.  I'm confident it can work...probably just needs a few changes here and there. 

 

And finally, please put the large code blocks within spoiler tags.  Thanks!

 

Hi Johnny Boy,

 

Thanks a lot for the reply and response. I should of looked through your code to see for other references. I think that is probably where my issues resides. I will have to check the files. I will be doing some more testing tonight and this weekend to see if I can get it to work. The reason I have a custom folder is to organize all added custom scripts. Instead of having a mission root directory filled with a ton of files. I'll try to do a fresh install of your scripts and test first like you said. And later move it over to the custom folder. 

 

Thanks I will look into the JIP logic and see if that affects dedicated servers or not.

 

Thanks for the clarification. I'll have to comment the code out and test the dog spawn only. 

 

Fixed my previous post to use spoiler.

 

I'll report back my progress of getting this to work on a dedicated server.

  • Like 2

Share this post


Link to post
Share on other sites

I should mention that I never did any JIP or MP stuff, I just build SP missions. Sorry I am no help here.

Share this post


Link to post
Share on other sites

To clarify if it is installed properly a dog should automatically spawn next to the player when the player spawns in? I first tried changing all the links to fit my custom folder setup. It is proving to not be working. Will be trying a fresh install with no messing of directories soon.

Share this post


Link to post
Share on other sites
3 minutes ago, Kronons said:

To clarify if it is installed properly a dog should automatically spawn next to the player when the player spawns in?

Correct.  A dog should spawn next to player.

Share this post


Link to post
Share on other sites
14 minutes ago, johnnyboy said:

Correct.  A dog should spawn next to player.

 

Thanks! I reinstalled a fresh copy with everything set to default. Hopefully I see a dog! Will report back.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×