Jump to content

TheVampire

Collaborator
  • Posts

    1310
  • Joined

  • Last visited

  • Days Won

    35

Posts posted by TheVampire

  1. I posted on the Discord when someone mentioned it. Enhanced Interaction checks that the door is disabled via BIS_disabled_door_%
    I'm not sure if Epoch buildables has the functionality to disable them this way, but if it does or adds it, and then makes it so the doors are disabled when locked, then Enhanced Interaction will no longer work.

    If an Epoch Dev could look into it, that would be great.

  2. For example a military weapons trader.

    - Would likely only exist in one trader city on the map.

    - Would offer the cheapest prices for purchasing military weapons (compared to other traders) and the highest value for selling military weapons.

    - Will purchase anything, but if it isn't a military weapon he will want it much cheaper than a dedicated trader for that item. If I tried to go to a computer store and sell them a bunch of cans of beans, they might be interested if I sell it cheap enough, but otherwise they'd tell me to get lost.

    - Occasionally gets new military weapons supplied to his inventory. Possibly daily real time (configurable) which would be a few randomly selected military weapons. He would still be selling anything he has been sold.

    I imagine that there would be a military weapons trader, a building supply trader, and a vehicle trader that all act above in their respective category. However they'd all be at separate trader cities, which would make travelling to different trader cities and base location more important.

    It mainly would encourage people to travel to the trader cities for the best prices on items.

    I imagine that non-city traders would act as they already do, but with maybe some randomly generated common loot added occasionally. They are traders of opportunity, like survivors who are willing to trade if they see a deal. It's like a friend of mine says, "Everything you see is for sale if you name the right price."

  3. Was working today and started thinking about what exactly was the turn off to playing Epoch for me. I love the community and a majority of what the mod experience offers, but I don't find myself playing vanilla at all. I came to the conclusion that the biggest reason to me is how the traders currently are.

    I think the way the traders only sell sold items is great, but it causes a problem. A vanilla server starts with empty traders, and that doesn't make sense. Why organize a whole trader city if all the trader has to sell is a few drinks and cans of meat? If there's a trader city then the traders obviously have goods to sell.

    It also doesn't make sense that every trader buys the same items at the same server prices. That's not how life works. Instead the traders should be varied. One should sell mainly guns and related gear, but if you are really hurting to sell an item, he will take it for cheap enough.

    Another gripe is that there are too many traders on the map, which leads to the inventory problems traders have anyways.

    So what do I suggest? Traders in cities should specialize in specific goods and give the best prices on them, yet still buy everything else with extra tax. They should be split between cities. Roaming traders should remain the same, but offer worse prices than the specialists.

    Thoughts?

     

  4. Thanks for point to the script Grahame, but your code is currently outdated. That section is now in the Legacy area. Any new saves would be schema 1.0 and they skip that area.

    	_newPlyr = _group createUnit[_class, _location, [], 0, "CAN_COLLIDE"];
            if !(isNull _newPlyr) then {
    	            // disable AI on temp unit
                _newPlyr disableAI "ALL";
    	            if (!_alreadyDead) then {
                    // Medical
                    _newPlyr setBleedingRemaining _bleedingRemaining;
                    // _newPlyr setFatigue _fatigue;
                    _newPlyr setOxygenRemaining _oxygenRemaining;
                    _newPlyr setDamage _damage;
                } else {
                    // player dead use default Data for appearance and loadout data
                    _playerData = _defaultData;
                };
    	            // disable further damage server side
                _newPlyr allowDamage false;
    	            _newPlyr setDir _dir;
                _newPlyr setPosATL _location;
    	            // set player loadout
                if (_schemaVersion >= 1.0) then {
                    _playerData params ["","","_appearance","","","_loadout"];
                    // get current weapon to send to param for selectWeapon
                    _currentWeapon = _appearance param [4,""];
    //                _newPlyr setUnitLoadout [_loadout, false];
    	                // Workaround for Client / Server synchronizing issue in SetUnitLoadout
                    [_newPlyr,_loadout] call Epoch_server_SetUnitLoadout;
    	                diag_log format["DEBUG: loaded player %1 with new schema Version %2", _newPlyr, _schemaVersion];
    	            } else {

    Looking at the code, it doesn't seem to sanitize the player any. It likely should be wiping the character of any headgear and goggles that code with the default creation of the character. After creation of the character it is going to Epoch_server_SetUnitLoadout.

    It uses SetUnitLoadout (Command) but I'd wager a guess that the command doesn't overwrite existing items.

    EDIT: SetUnitLoadout Command in Editor does overwrite items, so that's not it.

  5. I began working on a server the past few weeks again and realised the other day that Epoch doesn't save Headgear and Goggles from being overwritten by the profile settings of the player.
    I understand when it is just cosmetic items, but my server has gasmasks that occupy the goggles slot. These gas masks are expensive and hard to find, so I need to correct this.

    Players who have balaclavas in their profile are also losing their saved headgear.


    Has anyone else already corrected this?

     

  6. What Epoch endgame needs is something similar to DayZ Origins, but perhaps less grindy.
    Bosses that are hard to find or expensive to summon, that have a very low rare drop chance which allows the players to access something unique like Sector B was. Maybe something that requires a large group.

     

    Something else is an ongoing fight, like I was working towards with VEMF. If players don't login and fight expanding AI, it makes it harder on the players to do what they need done.

    Unfortunately I don't see either of these being added into the core mod.

     

  7. What I enjoyed doing when I ran an Arma 2 Epoch server was tinkering with AI, anomalies, and survival aspects.

    Something I really liked about namalsk was trying to survive it at night. I adjusted the temperature settings on my server so that you either were relaxing around a fire with your buddies at night, or chewing through heatpacks to get what you needed done.

    I had DZAI with roaming vehicles (among more) but my buddies began jumping the 3 ai and selling the vehicles for easy cash. I added some lines so there was a 5-10% chance that a Ural would spawn loaded to the gills. The first time they ran into it and all 20+ ai spilled out it made them play a little more reasonably.

    Anomalies I'm a big fan of. Anything that is the unknown will keep your players going. A rotating ai city, unique unicorn patrols, scary vehicles, hell you could irradiate the hell out of an island on the map and tell them it has a secret and they'd all keep going there. Epoch lacks a lot of the unknown in the end game.

    Basically as a server owner anything you can add that makes the game realistic and challenging without being unfair to slow down the player or make them be challenged and routinely lose gear will extend the trip to end game. Things like pulling helicopters from your Tanoa map, adding AI, random events, treasure hunts, etc.

  8. The geiger counter is designed to only detect objects in the front 90 degree view of the player, however the radiation should continue to go up regardless. I will check this later today and confirm as I've been playing with it also.

    Here's the snippet of code from epoch_geiger_simulate.sqf in the mission files:

    {
        _reldir = player getRelDir _x;
        
        if (_reldir > 315 || _reldir < 45) then { //only capture 90 degrees in front of player
            _reldir = if (_reldir > 315) then { 360 - _reldir} else {_reldir}; //convert into 0-45 degrees
            _prc = 100 - (_reldir / 45 * 100); //current direction percent, 45 = 100%
            
            _x getVariable "EPOCH_Rads" params ["_str","_intensity"];
            _dist = player distance _x;
            _radIntensity = if (_dist <= _intensity) then { //only capture rads when within distance
                _rds = (_str / _dist);
                _rdsPrc = (_prc / 100 * _rds);
                _rdsPrc
            } else {
                0
            };
        _rads = _rads + _radIntensity
        };
    } forEach _radObjects;

     

    If for some reason you wanted it to work in all directions, you could cut out the direction checking. It would be nice if you could have two settings on the geiger, one that is overall, and one that is directional.

  9. BIS_fnc_findSafePos basically looks for safe positions on the map based on Area, Terrain Slope, Shoreline, Near Objects, and etc. It doesn't just select randomly on the map. The main issue with it is that it will select the same safe areas repeatedly since it wasn't designed to be used this way. DZMS is designed to use code to get around that.

    There could be other solutions instead of findSafePos, but it would require a lot more code than what we have already, or may require looping more times for a good position.

  10. To fix the issue with all the missions spawning too close, edit the _okDis in DZMSFindPos. Currently in your code it is set to 1000. When I was testing DZMS on Altis I had to bump it up to 6000.

    To get missions off the salt flats I just used the blacklist.

        [[23496.6,18389.7,0],1900],
        [[10801.4,10606.9,0],500],
        [[23723.8,16225.6,0],340]

     

    This is pulled from the easy port I had of DZMS to run on Altis Life back before Arma updated and broke my method.

  11. Reading your code this is really over-complicated for what it does. Part of the age old "if you wrote it twice you wrote it too much". You should never need to use random and then a switch unless you are randomizing code to run.

    A call like that is also poor as I believe each call would create a new thread. The only downside to my code is it is likely biased to one side, only your testing will tell. Your minimums and maxes may need adjusting.

    Here's my take on it.

     
    
    /*
    	Author: Vampire (vampuricgaming.net)
    	Desc: Randomize Market Multiplier
    											*/
    
    if !(isDedicated) exitWith { /* Not a Server */ };
    
    // stock prices
    DZE_buyMult = 1;
    DZE_sellMult = 1;
    publicVariable "DZE_buyMult";
    publicVariable "DZE_sellMult";
    
    while {true} do {
    	// Randomize the Market
    	_buyMax = 2.5; // Max Buying Mult
    	_buyMin = 0.7; // Min Buying Mult
    	_sellMax = 2; // Max Sell Mult
    	_sellMin = 0.5; // Min Sell Mult
    	_sleep = 1800; // Time to Sleep
    	_time = diag_tickTime; // Current Time (in seconds)
    	
    	// Randomize -> trim to one decimal -> make sure in min/max -> broadcast
    	DZE_buyMult = [(random _buyMax),1] call BIS_fnc_cutDecimals;
    	if (DZE_buyMult < _buyMin) then { DZE_buyMult = _buyMin; };
    	if (DZE_buyMult > _buyMax) then { DZE_buyMult = _buyMax; };
    	publicVariable "DZE_buyMult";
    	
    	DZE_sellMult = [(random _sellMax),1] call BIS_fnc_cutDecimals;
    	if (DZE_sellMult < _sellMin) then { DZE_sellMult = _sellMin; };
    	if (DZE_sellMult > _sellMax) then { DZE_sellMult = _sellMax; };
    	publicVariable "DZE_sellMult";
    	
    	// Only show if not startup run
    	if !(isNil "MULT_startDone") then {
    		[nil,nil,rTitleText,"Prices have changed! Check out the sweet deals NOW!", "PLAIN",10] call RE;
    	} else {
    		MULT_startDone = true;
    	};
    	
    	diag_log format["[ECONOMY] Price Change Using Economy! ~You Buy %1 Percent, You Sell %2 Percent", (DZE_buyMult * 100), (DZE_sellMult * 100)];
    	
    	// Sleep Time
    	waitUntil{sleep 1;diag_tickTime >= (_time + _sleep)};
    };

     

    Much cleaner in less lines and it should be better performance. You also don't need to include it inside (isServer) since I have an exitWith at the top if it isn't a server.

  12. Although I don't have time to look at your code I'll try to help you get a grasp on the global variable and publicVar.

    A Script can run client side or server side or both. An easy example is anything ran from the init.sqf gets ran by the server on startup and then by each client when they load into the server.

    Commands exist to control this; isDedicated, isServer, hasInterface, etc.

    Variables prefaced with an underscore are local to the scope the script is running in. If I use execvm to run a script nothing outside of the script will be able to see that variable.

    Global variables have no underscore and are global to the side they are on, client or server. A client can have a global with a different value from every other client and the server. Any script running on that machine can change the global var at any time but cannot change the global variable on any of the other machines.

    A public variable is when a global variable is broadcasted to other machines. A public variable must be rebroadcast each time you want to update a value on another machine.

    There are 3 ways to broadcast a public variable; publicVariable, publicVariableServer, and publicVariableClient. These can be used on any machine and do what their name suggests. PublicVariable broadcasts to all machines, publicVariableServer broadcasts to server, and publicVariableClient broadcasts to a specific client.

    When using publicVariableClient you must specify the client by netid. The easiest way is for the server to also provide the player object and then grab the owner of the object. You can use publicVariableClient on the same machine as the target. Same with server.

    So an example, if you want each player to carry a random value but to update a value on the server on-command you can use publicVariableServer to only update the server variable while each client retains a unique value.

    Another is if you want to track zombie kills in a var on each player you can then use publicVariableClient to update each specific player with their new stats when they kill a zombie from the serverside.

    Things get more interesting when you start looking at publicVariableEventHandlers.

    Hope this helps.

  13. To check the server fps (not just "how it feels") you need to put #login password in chat (password being your admin password from server.cfg)(if you're paranoid you can put it in vehicle chat or something) and you should then have (Admin) next to your name in the lobby. Then do #monitor 15 to monitor fps for 15 seconds and report the fps. The larger the value the better (fps wise). It should go without saying to do this when you are having issues and report it to us.

    You can have a server that "feels fine", runs perfectly smooth as a player but then you'll still notice lag performing actions and such.

    You want to check your server.rpt (which you likely have) but you also have a clientside rpt. Every script that runs on the server is either serversided or clientsided or both. If a script is clientsided and is throwing errors you could have server issues even if your server.rpt is clean.

    Client RPT is located at "C:\Users\YOURUSERNAME\AppData\local\Arma 2 OA\" as an RPT file.

    If both of your RPT clientside and serverside are clean and your server has more than 15fps i would maybe look at the scripts you are running and maybe reevaluate how often they run or what their settings are. Certain scripts can quickly load up the server scheduler leading to things that are tied to the scheduler to come to a standstill. This is what causes things like VCOMAI to cause so much lag as certain parts of the AI choosing locations and such fill the scheduler up.

  14. Personally I doubt they would be interested in attempting to port over assets to a new engine that likely will have poor documentation.
    Also if the license for DayZ mod is any sign, I doubt I would want to wrap my code up in the license that will probably be included with modding for Standalone.

    By having their own mod for Arma 3 they are able to do as they wish under whichever license they wish. There's no threat of Bohemia possibly coming down and telling them what they can and can't do.

    Everything that has been done in DayZ Standalone could be done with enough time and effort by dedicated developers of an Arma 3 mod. Hell for example I even had readable books programmed two years or so ago for A3: 2017 mod, unfortunately that code is probably gone now.

  15. 1 hour ago, Ganja_PimP said:

    all players are getting kicked for this error in scripts.log

    #50 "ard' call VEMFr_fnc_scriptPath ); ( _this select 0 ) removeAllEventHandlers 'MPKilled' }"

    I know i have to add a BE filter to line 52 of scripts.txt but I am unsure what i should put, can anyone help please?

    This should do it

    !="call VEMFr_fnc_scriptPath ); ( _this select 0 ) removeAllEventHandlers 'MPKilled' }"

     

×
×
  • Create New...