Sir_Joker 54 Report post Posted May 30, 2016 (edited) Da eine Nachfrage im Forum erfolglos blieb habe ich mich auf die Suche gemacht, ob ich das nicht selber bewerkstelligen kann.Da meine Kenntnisse beim scripten allerdings eingeschränkt sind, hier mal ein paar Gedankengänge, dass es so klappen könnte.Beim Kauf eines Items (alles ausser Fahrzeuge) wird das Script 'ExileServer_system_trading_network_purchaseItemRequest.sqf' aufgerufen: Spoiler /** * ExileServer_system_trading_network_purchaseItemRequest * * Exile Mod * exile.majormittens.co.uk * © 2015 Exile Mod Team * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. */ private["_sessionID","_parameters","_itemClassName","_quantity","_containerType","_containerNetID","_playerObject","_vehicleObject","_salesPrice","_playerMoney","_responseCode"]; _sessionID = _this select 0; _parameters = _this select 1; _itemClassName = _parameters select 0; _quantity = _parameters select 1; _containerType = _parameters select 2; _containerNetID = _parameters select 3; try { _playerObject = _sessionID call ExileServer_system_session_getPlayerObject; if (_playerObject getVariable ["ExileMutex",false]) then { throw 12; }; _playerObject setVariable ["ExileMutex",true]; _vehicleObject = objNull; if (isNull _playerObject) then { throw 1; }; if !(alive _playerObject) then { throw 2; }; if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _itemClassName) ) then { throw 3; }; _salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "price"); if (_salesPrice <= 0) then { throw 4; }; _playerMoney = _playerObject getVariable ["ExileMoney", 0]; if (_playerMoney < _salesPrice) then { throw 5; }; _playerMoney = _playerMoney - _salesPrice; _playerObject setVariable ["ExileMoney", _playerMoney]; format["setAccountMoney:%1:%2", _playerMoney, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget; [_sessionID, "purchaseItemResponse", [0, str _playerMoney, _itemClassName, 1, _containerType, _containerNetID]] call ExileServer_system_network_send_to; if !(_vehicleObject isEqualTo objNull) then { _vehicleObject call ExileServer_object_vehicle_database_update; } else { _playerObject call ExileServer_object_player_database_update; }; } catch { _responseCode = _exception; [_sessionID, "purchaseItemResponse", [_responseCode, "", "", 0, 0, ""]] call ExileServer_system_network_send_to; }; _playerObject setVariable ["ExileMutex",false]; true wenn ich das richtig lese werden hier einige Infos aus der DB und der config.cpp gelesen. u.a.player ID Poptabs (_playerMoney) aus der DB undItem und Verkaufspreis (_salesPrice) aus der config.cpp (CfgExileArsenal) wobei _salesPrice in der config mit price = zahl angegebn ist. _salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "price"); Frage 1: if Bedingung{ throw 1;} wenn die Bedingung zutrifft wird der Rückgabewert 1 erzeugt.Wird der unten bei catch { } weiterverarbeitet?Frage 2:_sellPrice wird aus dem Array in der config gelesen, Aufbau: class name { quality = 1; price = 150; sellprice= 20; } kann ich hier einfach einen Wert zufügen, also z.B. class name { quality = 1; price = 150; sellprice= 20; score= 150; } um dann mit _salesScore = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "score"); den Wert einzulesen?Zusammenfassend:Ich möchte den Items die ich mit Respekt handeln will einen Wert "score" zuweisen.In dem Script frage ich dann ab ob score >= 0 ist (ist ein nicht vergebener Wert hier 0 oder NULL?)wenn ja berechne ich die Respektpunkte wie in dem Script die Poptabs, wenn nein erfolgt der Verkauf mit Poptabs.Mein Lösungsansatz : Spoiler ... private["_sessionID","_parameters","_itemClassName","_quantity","_containerType","_containerNetID","_playerObject","_vehicleObject","_salesPrice","_playerMoney","_responseCode","_salesScore","_playerScore"]; _sessionID = _this select 0; _parameters = _this select 1; _itemClassName = _parameters select 0; _quantity = _parameters select 1; _containerType = _parameters select 2; _containerNetID = _parameters select 3; try { _playerObject = _sessionID call ExileServer_system_session_getPlayerObject; if (_playerObject getVariable ["ExileMutex",false]) then { throw 12; }; _playerObject setVariable ["ExileMutex",true]; _vehicleObject = objNull; if (isNull _playerObject) then { throw 1; }; if !(alive _playerObject) then { throw 2; }; if !(isClass (missionConfigFile >> "CfgExileArsenal" >> _itemClassName) ) then { throw 3; }; _salesPrice = getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "price"); if (_salesPrice <= 0) then { throw 4; }; //Respect buy - Mod START _playerScore = _playerObject getVariable ["ExileScore", 0]; _salesScore = _getNumber (missionConfigFile >> "CfgExileArsenal" >> _itemClassName >> "score"); if (_salesScore > 0) then //buy with Respect { if (_playerScore < _salesScore) then { throw 5; }; _playerScore = _playerScore - _salesScore; _playerObject setVariable ["ExileScore", _playerScore]; format["setAccountScore:%1:%2", _playerScore, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget; [_sessionID, "purchaseItemResponse", [0, str _playerScore, _itemClassName, 1, _containerType, _containerNetID]] call ExileServer_system_network_send_to; }; //buy with Respect END else //Normal buy { _playerMoney = _playerObject getVariable ["ExileMoney", 0]; if (_playerMoney < _salesPrice) then { throw 5; }; _playerMoney = _playerMoney - _salesPrice; _playerObject setVariable ["ExileMoney", _playerMoney]; format["setAccountMoney:%1:%2", _playerMoney, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget; [_sessionID, "purchaseItemResponse", [0, str _playerMoney, _itemClassName, 1, _containerType, _containerNetID]] call ExileServer_system_network_send_to; }; // Respect buy - MOD END if !(_vehicleObject isEqualTo objNull) then { _vehicleObject call ExileServer_object_vehicle_database_update; } else { _playerObject call ExileServer_object_player_database_update; }; } catch { _responseCode = _exception; [_sessionID, "purchaseItemResponse", [_responseCode, "", "", 0, 0, ""]] call ExileServer_system_network_send_to; }; _playerObject setVariable ["ExileMutex",false]; true Ergebnis:Server startet normal, kein Fehlereintrag im rpt, kann aber nichts kaufen oder verkaufen.Hat irgendwer eine Idee oder ist mein Vorhaben aus irgendeinem Grund nicht umsetzbar? Wie gesagt, ich sehe mich da als Anfänger, erwarte auch keine fertige Lösung sondern evtl. einen Denkanstoß. Edited May 30, 2016 by Sir_Joker Share this post Link to post Share on other sites
[Crazy] MrPromo 5 Report post Posted July 21, 2016 Push Share this post Link to post Share on other sites