ich habe im Tut noch einen Fehler gefunden
die life_fnc_vAH_reciever muss für Client freigegeben werden und nicht Server in der CFGRemoteExec
AvirexDE : komme in den NN TS dann schaue ich mir das an
Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.
ich habe im Tut noch einen Fehler gefunden
die life_fnc_vAH_reciever muss für Client freigegeben werden und nicht Server in der CFGRemoteExec
AvirexDE : komme in den NN TS dann schaue ich mir das an
AvirexDE : hier mal die geänderte version. Ich bin jetzt im NN TS falls wer probleme hat
ok ich schaue dann noch mal
Alice Kingsleigh ich hab dich auch lieb
Multivitamin na es geht schon darum sachen live zu ändern . Man muss sich halt vor dem umschreiben überlegen welche infos zwingend aktualisiert werden müssen.
man muss ja nur die Änderungen in die DB schreiben und an die Clients publizieren ohne nochmal die komplette Tabelle auszulesen . Man müsste halt ein Konzept erarbeiten mit dem man den DB und Client-Server Traffic auf ein Minimum beschränkt.
Warum sollte das die extDB nicht mitmachen. Das Thema mit Verkaufspreisen habe ich schon in die DB verfrachtet. Also entweder läd man den Kram nur bei Serverstart oder halt regelmäßig, wenn es nur beim server start ist sollte das grundsätzlich ja kein problem darstellen, nur dann fällt halt die dynamik weg
Man muss halt das komplette Framework dann umbauen
mh... ich sehe den nicht? in der Version von heute morgen war noch ein Fehler drin, das ist richtig
#include "..\..\script_macros.hpp"
/*
File: fn_vAH_buy.sqf
Description: buys the item but does some checks and another cool thing
Author: Fresqo
## Modified by powerafro2 ##
returns _id,_seller,_item,_price,_type,_amount,_sellerName
*/
disableSerialization;
private["_d","_e","_dialog","_myListbox","_selectedOffer","_id","_seller","_item","_value","_checkid","_cnt","_status","_online","_pid","_unit","_type","_amount","_diff","_uid","_caller","_handle","_tamount","_iCheck"];
_dialog = findDisplay 15100;
_myListbox = _dialog displayCtrl 15101;
if (lbCurSel _myListbox < 0) exitWith {hint "Du musst ein Gegenstand auswählen";};
_selectedOffer = call compile (_myListbox lbData (lbCurSel _myListbox));
if (!vAH_loaded) exitWith {hint "Das Aktionshaus arbeitet gerade, du musst dich gedulden und einen Moment warten!"};
if (count _selectedOffer < 6) exitWith {};
_id = _selectedOffer select 0;
_seller = _selectedOffer select 1;
_item = _selectedOffer select 2;
_value = _selectedOffer select 3;
_type = _selectedOffer select 4;
_amount = _selectedOffer select 5;
_sellerName = _selectedOffer select 6;
_uid = getPlayerUID player;
_caller = player;
_online = false;
_iCheck = true;
_e = missionNamespace getVariable [format["ahItem_%1",_id],false];
if (player getVariable["ahID",0] != _id && !_e) exitWith {hint "Someone may be buying or retrieving this item as we speak!";};
if (_seller isEqualTo _uid) exitWith {hint "Du kannst nicht dein eigenen Gegenstand kaufen!";};
{_checkid = _x select 0;if (_checkid == _id) then {_status = _x select 7};}forEach all_ah_items;
if !(_status isEqualTo 0) exitWith {hint "Der Gegenstand wurde bereits schon gekauft!";};
if (BANK < _value) exitWith {hint "Du hast leider nicht genug Geld auf deinem Bank-Konto!";};
if (_type isEqualTo 0) then
{
_diff = [_item,_amount,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff;
if(_diff < _amount) then {_iCheck = false;};
} else
{
if (_type isEqualTo 1)then
{ if (_amount > 1) then
{
_iCheck = [_item,_amount] call life_fnc_vAH_checkItem;
};
};
};
if(!_iCheck) exitWith {hint localize "STR_NOTF_InvFull";};
BANK = BANK - _value;
switch (_type) do {
case 0: {[true,_item,_diff] call life_fnc_handleInv;};
case 1: {
_tamount = _amount + 1;
for [{_i=0}, {_i<_tamount}, {_i=_i+1}] do
{
[_item,true] call life_fnc_handleItem;
};
};
};
{if(getPlayerUID _x isEqualTo _seller) then {_online = true; _unit = _x};} foreach allPlayers;
if (_online) then {
if (life_HC_isActive) then {
[1,_id] remoteExec ["HC_fnc_vAH_update",HC_Life];
} else {
[1,_id] remoteExec ["TON_fnc_vAH_update",RSERV];
};
[0,[_item,_value,name _unit]] remoteExec ["life_fnc_vAH_reciever",_caller];
[1,[_caller,_value]] remoteExec ["life_fnc_vAH_reciever",_unit];
} else {
if (life_HC_isActive) then {
[3,_id,_value,_seller] remoteExec ["HC_fnc_vAH_update",HC_Life];
} else {
[3,_id,_value,_seller] remoteExec ["TON_fnc_vAH_update",RSERV];
};
[0,[_item,_value,_sellerName]] remoteExec ["life_fnc_vAH_reciever",_caller];
};
closeDialog 0;
[1] call SOCK_fnc_updatePartial;
[3] call SOCK_fnc_updatePartial;
Alles anzeigen
Moin,
also den Fehler im extDB Log bekommst Du weg in dem Du entweder für die Prozeduren deinen DBUser verwendest bzw. wenn dein User arma3 heißt benötigt er das recht zu löschen.
11:24:24 Scripting function 'spy_fnc_cookiejar' is not allowed to be remotely executed
11:24:24 Scripting function 'spy_fnc_notifyadmins' is not allowed to be remotely executed
hier müssen die Funktionen in der CFGRemoteExec eingetragen werden
Gruß,
moeck
Moin zusammen,
ich stelle mir seid geraumer Zeit die Frage ob es nicht sinnvoller ist die ganze Konfigurationen (Weapon, vItems, Vehicle, ...) statt in den Missionconfigfiles nicht in der DB zu speichern. Mich ärgert es immer wieder für kleinere Änderungen jedes Mal eine neue Missiondatei auf den Server zu laden. Wenn man das über die DB machen würde könnte man das zum einen dynamisch machen und im laufenden Betrieb Preise anpassen oder man ein neues vItem hinzufügen. Ausserdem könnte man auch das Sammeln bzw. Verarbeiten dynamisch verändern.
Das Ganze hat aus meiner Sicht relativ viel Potenzial um zusammen mit der anderen Idee Konzept Dynamisches Markt- und Verarbeitungssystem ein komplett neues Wirtschaftssystem für Arma Life zubauen. Man könnte dann sogar soweit gehen, dass es möglich ist eine neue Route einzuführen während man auf der Insel ist. Heißt ohne dass man die Mission.sqm im Editor bearbeiten muss.
Nun zu meinen eigentlichen Fragen
1. spricht aus Performancegründen irgendwas dagegen
2. ist so etwas aus Arma Life Sicht überhaupt sinnvoll
Ich freue mich auf Euer Feedback .
Gruß,
moeck
so ich habe das nochmal angepasst , ich habe das jetzt so angepasst dass es auch mit dem HC funktioniert. Es müsste dann halt in der config.cpp des hc's noch das folgende eingetragen werden
Ich denke aber Leute die HC's nutzen wissen was zu tun ist
So ich bin jetzt mal alles soweit durch gegangen und habe mal das eine oder andere optimiert bzw. den einen oder anderen Fehler behoben. Ich kann es momentan leider nicht testen. Sollten Fehler auftreten einfach hier posten.
Moin,
ich wurde gestern bzw. heute nacht gefragt ob ich mir das mal das Auktionshaus anschauen kann. Alice Kingsleigh du wolltest es ja nicht anders . Die ersten beiden Fehler habe ich auch schon gefunden
.
In der fn_vAH_reciever.sqf hat die Variable info den falschen Typ. Hier mal die korrigierte Version
#include "..\..\script_macros.hpp"
/*
File: fn_vAH_reciever.sqf
Author: Ryan. Edited by Fresqo for our auction house
## Modified by powerafro2 ##
*/
params [
["_mode",-1,[0]]
,["_info",[],[[]]]
];
if (_info isEqualTo []) exitWith {diag_log format ["vAH Error reciever: %1", getPlayerUID player];
switch (_mode) do
{
case 0:
{
_item = _info select 0;
_price = _info select 1;
_seller = _info select 2;
hint format["Du hast den Gegenstand von %1 für $%2 gekauft.",_seller,[_price]call life_fnc_numberText];
closeDialog 0;
};
case 1:
{
_seller = _info select 0;
_price = _info select 1;
hint parseText format
[
"%1 hat eines deiner Gegenstände gekauft<br/>
<t color='#228B22'>%3%2</t><br/>", name _seller,[_price]call life_fnc_numberText,"$"
];
BANK = BANK + _price;
};
};
Alles anzeigen
Des Weiteren sind mir auch ein paar Sachen in den fn_vAH_buy.sqf aufgefallen.
#include "..\..\script_macros.hpp"
/*
File: fn_vAH_buy.sqf
Description: buys the item but does some checks and another cool thing
Author: Fresqo
## Modified by powerafro2 ##
returns _id,_seller,_item,_price,_type,_amount,_sellerName
*/
disableSerialization;
private["_d","_e","_dialog","_myListbox","_selectedOffer","_id","_seller","_item","_value","_checkid","_cnt","_status","_online","_pid","_unit","_type","_amount","_diff","_uid","_caller","_handle","_tamount","_iCheck"];
_dialog = findDisplay 15100;
_myListbox = _dialog displayCtrl 15101;
if (lbCurSel _myListbox < 0) exitWith {hint "Du musst ein Gegenstand auswählen";};
_selectedOffer = call compile (_myListbox lbData (lbCurSel _myListbox));
if (!vAH_loaded) exitWith {hint "Das Aktionshaus arbeitet gerade, du musst dich gedulden und einen Moment warten!"};
if (count _selectedOffer < 6) exitWith {};
_id = _selectedOffer select 0;
_seller = _selectedOffer select 1;
_item = _selectedOffer select 2;
_value = _selectedOffer select 3;
_type = _selectedOffer select 4;
_amount = _selectedOffer select 5;
_sellerName = _selectedOffer select 6;
_uid = getPlayerUID player;
_caller = player;
_online = false;
_iCheck = true;
_e = missionNamespace getVariable [format["ahItem_%1",_id],false];
if (player getVariable["ahID",0] != _id && !_e) exitWith {hint "Someone may be buying or retrieving this item as we speak!";};
if (_seller isEqualTo _uid) exitWith {hint "Du kannst nicht dein eigenen Gegenstand kaufen!";};
{_checkid = _x select 0;if (_checkid == _id) then {_status = _x select 7};}forEach all_ah_items;
if !(_status isEqualTo 0) exitWith {hint "Der Gegenstand wurde bereits schon gekauft!";};
if (BANK < _value) exitWith {hint "Du hast leider nicht genug Geld auf deinem Bank-Konto!";};
if (_type isEqualTo 0) then
{
_diff = [_item,_amount,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff;
if(_diff < _amount) then {_iCheck = false;};
} else
{
if (_type isEqualTo 1)then
{ if (_amount > 1) then
{
_iCheck = [_item,_amount] call life_fnc_vAH_checkItem;
};
};
};
if(!_iCheck) exitWith {hint localize "STR_NOTF_InvFull";};
BANK = BANK - _value;
switch (_type) do {
case 0: {[true,_item,_diff] call life_fnc_handleInv;};
case 1: {
_tamount = _amount + 1;
for [{_i=0}, {_i<_tamount}, {_i=_i+1}] do
{
[_item,true] call life_fnc_handleItem;
};
};
};
{if(getPlayerUID _x isEqualTo _seller) then {_online = true; _unit = _x};} foreach allPlayers;
if (_online) then {
[[1,_id] remoteExec ["TON_fnc_vAH_update",RSERV];
[0,[_item,_value,name _unit]] remoteExec ["life_fnc_vAH_reciever",_caller];
[1,[_caller,_value]] remoteExec ["life_fnc_vAH_reciever",_unit];
} else {
[3,_id,_value,_seller] remoteExec ["TON_fnc_vAH_update",RSERV];
[0,[_item,_value,_sellerName]] remoteExec ["life_fnc_vAH_reciever",_caller];
};
closeDialog 0;
[1] call SOCK_fnc_updatePartial;
[3] call SOCK_fnc_updatePartial;
Alles anzeigen
bitte mal client, server und extDB logs anhängen
Alice Kingsleigh du kannst noch das wegen der Anzeige aufnehmen fn_vehInventory dann sieht das nicht so komisch aus wenn es mehr als eine Mille ist
Moin,
ich würde mal im Dicord bei Maverick nachfragen .
Gruß,
moeck
wie wäre es mit den Startparametern? Meine Glaskugel ist nämlich schon wieder in der Reparatur Weil ich es gerade sehe unter Linux gibt es immer mal wieder Probleme mit dem @ bei den Ordnernamen
22:46:44 Error in expression <typeOf _vehicle) >> "displayName")]];
} else {
ctrlSetText[3501,format [(localiz>
22:46:44 Error position: <else {
ctrlSetText[3501,format [(localiz>
22:46:44 Error else: Typ Array, erwartet code
22:46:44 File core\vehicle\fn_openInventory.sqf [life_fnc_openInventory], line 95
guckst Du da? Da hast Du wohl was falsch eingebaut
Alice Kingsleigh nimm mal meine letzte version