Oh Gott, Danke, manchmal sieht mann den Wald vor lauter Bäumen nicht mehr
[TUTORIAL][Altis Life 4.4r3] RyanTTs Dynamic Market System
-
- Altis Life
-
blackfisch -
27. Juli 2016 um 01:04
-
-
Ja, schau im life_server/Functions/DynMarket/fn_config.sqf
DYNMARKET_UserNotification = true;
Das auf false stellen
-
Hat das schon wer auf 4.4r4 getestet was man ändern muß oder ob es auch so läuft bevor ich da anfange das ganze zu machen
danke schon mal -
Bei mir läuft es auf der 4.4R4 top
-
ok danke hast du da extra noch was geändert oder so nach denn gemacht wie es auf der ersten seite beschrieben ist bin zwar nicht mehr neu in denn bereich aber hab schon länger nichts mehr gemacht hatte vor ca 2 jahre mal etwas laufen gehabt
ein paar dinge noch
wann ich neue sachen hinzufüge zum Börse brauch ich die nur in der fn_config.sqf hinzufügen das sich dann die preise anpassen oder muß das wo anders auch noch rein.
dann noch kann es sein das die Börse einfach mal die preise aus der Config_vitems.hpp zieht hab nichts verkauft und steht auf einmal der preis von da drinnen wieso auch immer
-
Rein ziehen wie im TUT
Preise bearbeiten etc ist der Tread gelöscht weiß ich leider auch nicht wäre cool wen andere hier mir bei dem thema auch hilfestellung geben -
Preise kann man ja in der config anpassen mußt nur dann von der datenbank mal raus löschen dann passt es auch wieder genau so wann man neue sachen dazu schreibt ging jetzt auch
danke noch mal für das tut alles super beschrieben schafft jeder einfach großen lob an dich
-
Help with this problem linck Photo error
-
Help with this problem linck Photo error
- you re-packed your life_server and uploaded it ?
- as u can c it calls that the Config is not found -
- you re-packed your life_server and uploaded it ?- as u can c it calls that the Config is not found
Do not know anything All the same as in the tutorial. Forgive me for my level of English. Google translator photo
-
You Must complete pack into Life Server pbo and uploading it
-
Auch auf die Gefahr hin das ihr mich lüncht, hat einer ne Ahnung ob das mit extDB3 läuft? Oder ist das egal und sollte schon schief gehen?
-
Hi,super Anleitung.Läuft auch soweit bis auf das die items nicht angezeigt werden sprich im z menü ist die liste leer update wird angezeigt aber nix passiert.
Hat vielleicht einer von euch eine lösung Mfg Carlyle -
Hey ,
Hätte das Problem das wen ich in der Config die preise bearbeite sofort alles Crasht
Muss ich noch ihrgend wo was ändern ? Oder löschen ? -
Hi @blackfisch,
hier noch ein kleiner Zusatz den es nur für die 3.1.4.8 gab, den ich für meinen Server auf die 4.4r3 umgeschrieben habe:
Bitte darauf achten das ich ein Custom Nachrichten System verwende, das müsst ihr in der fn_randomEvent.sqf auf eure vorlieben anpassen!!!in der fn_config.sqf kam die Zeile 21 dazu:
Code: fn_config.sqf
Alles anzeigen/* ##################### DYNAMIC MARKET SCRIPT ##################### ### AUTHOR: RYAN TT. ### ### STEAM: www.steamcommunity.com/id/ryanthett ### ### ### ### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY ### ### WITH THIS HEADER / NOTIFICATION ### ################################################################# */ // ███████████████████████████████████████████████████████████████████████ // █████████████████ DYNAMIC MARKET BASIC CONFIGURATION ██████████████████ // ███████████████████████████████████████████████████████████████████████ DYNMARKET_Serveruptime = 05; // Serveruptime after restart in hours DYNMARKET_UseExternalDatabase = true; // Should the script use the External Database? DYNMARKET_PriceUpdateInterval = 01; // After how many minutes should the price be updated? DYNMARKET_CreateBackups = true; // Should the server save write the prices regulary into the Database? If false, it will save the prices before Server-restart? DYNMARKET_CreateBackupInterval = 03; // After how many updates (PriceUpdateIntervals) should the prices be saved into the Database? DYNMARKET_UserNotification = true; // Should the user be informed with a hint whenever the prices got updated? DYNMARKET_createRandomEvents = true; // Should random events appear that influence the market? // █████████████████ USER NOTIFICATION TEXTS █████████████████ DYNMARKET_UserNotification_Text = [ "Your prices have been updated!", "The new prices are being calculated by the server..." ]; // █████████████████ ITEM GROUP CONFIGURATION █████████████████ DYNMARKET_Items_Groups = [ ["Legal", [ ["apple",-1,10,50], ["peach",-1,30,100] ], 0.5 ], ["Illegal", [ /*["peach",-1,30,100]*/ ], 0.5 ] ]; // █████████████████ ALL SELLABLE ITEMS █████████████████ DYNMARKET_Items_ToTrack = [ ["apple",25], ["peach",50], ["tbacon",125], ["donuts",130], ["rabbit_raw",150], ["rabbit",170], ["ornate_raw",190], ["ornate",190], ["mackerel_raw",190], ["mackerel",190], ["tuna_raw",190], ["tuna",190], ["mullet_raw",190], ["mullet",200], ["catshark_raw",200], ["catshark",200], ["turtle_soup",200], ["hen_raw",200], ["hen",200], ["rooster_raw",210], ["sheep_raw",210], ["sheep",155], ["goat_raw",155], ["goat",300], ["redgull",1500], ["coffee",10], ["waterBottle",10], ["pickaxe",350], ["fuelFull",500], ["spikeStrip",1200], ["lockpick",75], ["goldbar",95000], ["blastingcharge",35000], ["boltcutter",7500], ["defusekit",2500], ["storagesmall",75000], ["storagebig",15000], ["oil_processed",1200], ["copper_refined",1700], ["iron_refined",1650], ["salt_refined",1850], ["glass",1450], ["diamond_cut",2530], ["cement",2350], ["heroin_processed",5000], ["marijuana",5250], ["cocaine_processed",5300] ]; //███████████████████████████████████████████████████████████████████████ //██████████████████ DO NOT MODIFY THE FOLLOWING CODE! ██████████████████ //███████████████████████████████████████████████████████████████████████ DYNMARKET_Items_CurrentPriceArr = []; DYNMARKET_sellarraycopy = DYNMARKET_Items_ToTrack; DYNMARKET_Serveruptime = (DYNMARKET_Serveruptime * 3600) - 300; { _currentArray = _x; DYNMARKET_Items_CurrentPriceArr pushBack [_currentArray select 0,_currentArray select 1,0]; } forEach DYNMARKET_Items_ToTrack; publicVariable "DYNMARKET_UserNotification"; publicVariable "DYNMARKET_UserNotification_Text"; if (DYNMARKET_UseExternalDatabase) then {[1] call TON_fnc_HandleDB;}; DYNMARKET_UpdateCount = 0; if (DYNMARKET_UseExternalDatabase) then { [] spawn { sleep DYNMARKET_Serveruptime; diag_log "### DYNMARKET >> CURRENT PRICES ARE BEING WRITTEN TO THE DATABASE ###"; diag_log "### DYNMARKET >> AS PLANNED, AWAITING RESULT... ###"; [0] call TON_fnc_HandleDB; }; }; sleep 5; [] call TON_fnc_sleeper;
dann bei der fn_calculatePrices.sqf die Zeile 127 hinzu:
Code: fn_calculateprices.sqf
Alles anzeigen/* ##################### DYNAMIC MARKET SCRIPT ##################### ### AUTHOR: RYAN TT. ### ### STEAM: www.steamcommunity.com/id/ryanthett ### ### ### ### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY ### ### WITH THIS HEADER / NOTIFICATION ### ################################################################# */ _tempArrayHolder = DYNMARKET_Items_CurrentPriceArr; { _itemName = _x select 0; _itemLastPrice = _x select 1; _itemAmountSold = _x select 2; _itemPricePerUnit = 0; _itemPriceMin = 0; _itemPriceMax = 0; _itemGroupName = ""; _itemFactorOfGroup = 0; _exit = false; if (_itemAmountSold>0) then { { if (!_exit) then { _GROUParray = _x; _itemGroupName = _GROUParray select 0; _GROUPITEMSarray = _GROUParray select 1; _itemFactorOfGroup = _GROUParray select 2; { _ITEMSarray = _x; _curITEMname = _ITEMSarray select 0; _curITEMpriceperunit = _ITEMSarray select 1; _curITEMmin = _ITEMSarray select 2; _curITEMmax = _ITEMSarray select 3; if (_curITEMname==_itemName) then { _exit = true; _itemPricePerUnit = _curITEMpriceperunit; _itemPriceMin = _curITEMmin; _itemPriceMax = _curITEMmax; }; } forEach _GROUPITEMSarray; }; } forEach DYNMARKET_Items_Groups; //ADJUST THE PRICES { _GROUParray = _x; _GROUPNAME = _GROUParray select 0; _GROUPITEMSarray = _GROUParray select 1; if (_itemGroupName==_GROUPNAME) then { { _ITEMSarray = _x; _curITEMname = _ITEMSarray select 0; _curITEMpriceperunit = _ITEMSarray select 1; _curITEMmin = _ITEMSarray select 2; _curITEMmax = _ITEMSarray select 3; if (_curITEMname==_itemName) then { // Find old price _curItemOldPrice = 0; { _curItemName2 = _x select 0; _curItemPrice2 = _x select 1; _curItemAmountSold2 = _x select 2; if (_curItemName2==_curITEMname) then { _curItemOldPrice = _curItemPrice2; }; } forEach DYNMARKET_Items_CurrentPriceArr; // Calculate new own price _NEWPRICE = _curItemOldPrice-(_itemAmountSold*(_curItemOldPrice/2000)*_itemFactorOfGroup); if (_NEWPRICE<_curITEMmin) then {_NEWPRICE=_curITEMmin}; if (_NEWPRICE>_curITEMmax) then {_NEWPRICE=_curITEMmax}; _index = -1; { _index = _index + 1; _curItemName3 = _x select 0; _curItemPrice3 = _x select 1; _curItemAmountSold3 = _x select 2; if (_curItemName3==_curITEMname) then { DYNMARKET_Items_CurrentPriceArr set [_index,[_curITEMname,_NEWPRICE,0]]; }; } forEach DYNMARKET_Items_CurrentPriceArr; } else { // Calculate new price _index = -1; { _index = _index + 1; _curItemName3 = _x select 0; _curItemPrice3 = _x select 1; _curItemAmountSold3 = _x select 2; if (_curItemName3==_curITEMname) then { _NEWPRICE = _curItemPrice3+(_itemAmountSold*(_curItemPrice3/1000)*_itemFactorOfGroup); if (_NEWPRICE<_curITEMmin) then {_NEWPRICE=_curITEMmin}; if (_NEWPRICE>_curITEMmax) then {_NEWPRICE=_curITEMmax}; DYNMARKET_Items_CurrentPriceArr set [_index,[_curITEMname,_NEWPRICE,_curItemAmountSold3]]; }; } forEach DYNMARKET_Items_CurrentPriceArr; }; } forEach _GROUPITEMSarray; }; } forEach DYNMARKET_Items_Groups; }; } forEach DYNMARKET_Items_CurrentPriceArr; DYNMARKET_Items_CurrentPriceArr = _tempArrayHolder; //[1,DYNMARKET_Items_CurrentPriceArr] remoteExecCall ["life_fnc_update",2]; // Translate to sell_array { _itemName = _x select 0; _itemNewPrice = _x select 1; _index = -1; { _index = _index + 1; _curItemName = _x select 0; if (_curItemName==_itemName) then { DYNMARKET_sellarraycopy set [_index,[_itemName,_itemNewPrice]]; }; } forEach DYNMARKET_sellarraycopy; } forEach DYNMARKET_Items_CurrentPriceArr; if (DYNMARKET_createRandomEvents) then {DYNMARKET_waitForEvent = false;[] spawn TON_fnc_randomEvent; waitUntil {DYNMARKET_waitForEvent};}; [1,DYNMARKET_sellarraycopy] remoteExecCall ["life_fnc_update",-2];
und zu guter letzt natürlich noch folgende Datei komplett einbinden (config.cpp und speicherort):
Code: fn_randomEvent.sqf
Alles anzeigen/* ##################### DYNAMIC MARKET SCRIPT ##################### ### AUTHOR: RYAN TT. ### ### STEAM: www.steamcommunity.com/id/ryanthett ### ### ### ### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY ### ### WITH THIS HEADER / NOTIFICATION ### ################################################################# */ // In this file you can configure random events DYNMARKET_chance = 10; // Chance for a random event to happen DYNMARKET_Events = [ ["Ein Öl Tanker ist gesunken wodurch die Ölpreise gestiegen sind!",["oil_processed"],-1], // -1 MEANS CHANGE PRICE TO MAX, -2 TO MIN, OR A VALUE TO WHICH THE PRICE BE CHANGED TO ["Die Bürger scheinen Gesünder zu leben und mehr Obst zu essen, dadurch ist die Nachfrage nach Obst gestiegen!",["apple","peach"],150] ]; _random = floor(random 100)+1; if (_random>DYNMARKET_chance) exitWith {DYNMARKET_waitForEvent = true;}; _eventCount = count DYNMARKET_Events; _randomEventID = floor(random _eventCount); _eventToHappen = DYNMARKET_Events select _randomEventID; // Create the event _eventMessage = _eventToHappen select 0; _eventItems = _eventToHappen select 1; _eventToPrice = _eventToHappen select 2; { _itemName = _x; _itemNewPrice = 0; _index = -1; { _index = _index + 1; if (_x select 0 == _itemName) then { if (_eventToPrice==-1) then { { { if (_x select 0 == _itemName) then {_itemNewPrice = _x select 2;}; } forEach (_x select 1); } forEach DYNMARKET_Items_Groups; DYNMARKET_sellarraycopy set [_index,[_x select 0,_itemNewPrice]]; DYNMARKET_Items_CurrentPriceArr set [_index,[_x select 0,_itemNewPrice,0]]; } else { if (_eventToPrice==-2) then { { { if (_x select 0 == _itemName) then {_itemNewPrice = _x select 3;}; } forEach (_x select 1); } forEach DYNMARKET_Items_Groups; DYNMARKET_sellarraycopy set [_index,[_x select 0,_itemNewPrice]]; DYNMARKET_Items_CurrentPriceArr set [_index,[_x select 0,_itemNewPrice,0]]; } else { DYNMARKET_sellarraycopy set [_index,[_x select 0,_eventToPrice]]; DYNMARKET_Items_CurrentPriceArr set [_index,[_x select 0,_eventToPrice,0]]; }; }; }; } forEach DYNMARKET_sellarraycopy; } forEach _eventItems; DYNMARKET_waitForEvent = true; sleep 2; diag_log "### DYNMARKET >> Event semd to be startet errorless ###"; diag_log " %1 ", _eventMessage; //[[0,_eventMessage],"life_fnc_broadcast",true,false] spawn life_fnc_MP; //[0,_eventMessage,true] remoteExecCall ["life_fnc_broadcast",-2]; _text = _eventMessage; _title = "MARKT ALARM"; _color = "pink"; [_text,_title,_color] remoteExec ["MSG_fnc_handle",civilian];
Ich hoffe jemand hat da seinen Spaß dran -
Hey ,
Hätte das Problem das wen ich in der Config die preise bearbeite sofort alles Crasht
Muss ich noch ihrgend wo was ändern ? Oder löschen ?zeig doch mal deine config
-
weiß einer was da falsch ist bei denn error
Error in expression <rray = _queryResult select 0;
if (count _pricearray < 1) then {
diag_log "######>
16:26:30 Error position: <_pricearray < 1) then {
diag_log "######>
16:26:30 Error Undefined variable in expression: _pricearray
16:26:30 File life_server\Functions\DynMarket\fn_HandleDB.sqf, line 33Code
Alles anzeigencase 1: { _query = format["SELECT prices FROM dynmarket WHERE id=1;"]; waitUntil{sleep (random 0.3); !DB_Async_Active}; _tickTime = diag_tickTime; _queryResult = [_query,2] call DB_fnc_asyncCall; //DYNMARKET_Items_CurrentPriceArr = _queryResult select 0; _pricearray = _queryResult select 0; if (count _pricearray < 1) then { diag_log "########################## DYNAMIC MARKET ##########################"; diag_log "### >> CAN'T LOAD PRICES FROM DATABASE: ERROR 01x ###"; diag_log "### THE REQUESTED PRICEARRAY WAS UNEXPECTEDLY EMPTY! ###"; diag_log "### IF YOU ARE RUNNING DYNMARKET FOR THE FIRST TIME, ###"; diag_log "### PLEASE IGNORE THIS ERROR! ###"; diag_log "####################################################################"; } else { DYNMARKET_Items_CurrentPriceArr = _pricearray; { _itemName = _x select 0; _itemNewPrice = _x select 1; _index = -1; { _index = _index + 1; _curItemName = _x select 0; if (_curItemName==_itemName) then { DYNMARKET_sellarraycopy set [_index,[_itemName,_itemNewPrice]]; }; } forEach DYNMARKET_sellarraycopy; } forEach DYNMARKET_Items_CurrentPriceArr; diag_log "########################## DYNAMIC MARKET ##########################"; diag_log "### >> SUCCESSFULLY LOADED PRICES FROM DATABASE! ###"; diag_log "####################################################################";
-
Hatte vorhin den selben Fehler.
Lag daran, dass meine Tabelle komplett leer war. Habe die dynmarket Tabelle einfach komplett gelöscht und neu erstellt. Danach lief es wieder ohne Probleme.
Sollte aber auch gehen, wenn du bei ID eine 1 und bei prices [] einträgst. -
ok danke für die hilfe werd es dann gleich testen denk auch meine ist leer
-
Wie kann ich es ändern das der preis etwas schneller nach unten geht wenn man viel verkauft geht mir etwas zu langsam in der wird es berechnet aber was muß ich ändert steht auch was von faktor dabei
fn_calculateprices.sqf in der wird es berechnet aber was muß ich ändert steht auch was von faktor dabei -