killzone_kid 1329 Posted January 27, 2017 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
dchan200 18 Posted January 27, 2017 (edited) @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 January 28, 2017 by dchan200 1 Share this post Link to post Share on other sites
johnnyboy 3754 Posted January 28, 2017 @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
Mynock 243 Posted January 28, 2017 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
johnnyboy 3754 Posted January 28, 2017 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."...? 1 Share this post Link to post Share on other sites
Mynock 243 Posted January 28, 2017 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. 1 Share this post Link to post Share on other sites
accuracythruvolume 547 Posted January 28, 2017 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 2 Share this post Link to post Share on other sites
zagor64bz 1225 Posted January 28, 2017 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 1 Share this post Link to post Share on other sites
T.Gavin 12 Posted February 4, 2017 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
johnnyboy 3754 Posted February 4, 2017 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? 1 Share this post Link to post Share on other sites
Jimbo Dude 1 Posted February 5, 2017 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 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 1 Share this post Link to post Share on other sites
johnnyboy 3754 Posted February 5, 2017 @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). 1 Share this post Link to post Share on other sites
zagor64bz 1225 Posted February 5, 2017 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? 1 Share this post Link to post Share on other sites
androxe 0 Posted February 16, 2017 (edited) 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 February 16, 2017 by androxe Share this post Link to post Share on other sites
johnnyboy 3754 Posted February 16, 2017 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
Kronons 4 Posted February 17, 2017 (edited) 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 February 17, 2017 by Kronons Share this post Link to post Share on other sites
Kronons 4 Posted February 17, 2017 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
zagor64bz 1225 Posted February 17, 2017 @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
johnnyboy 3754 Posted February 17, 2017 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
Kronons 4 Posted February 17, 2017 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. 2 Share this post Link to post Share on other sites
AZCoder 921 Posted February 17, 2017 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
johnnyboy 3754 Posted February 18, 2017 @AZCoder I'm losing my mind...it was @Persian MO that hooked me up with the JIP statements. :) Share this post Link to post Share on other sites
Kronons 4 Posted February 18, 2017 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
johnnyboy 3754 Posted February 18, 2017 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
Kronons 4 Posted February 18, 2017 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