Hier für alle suchenden eine Fehlerfrei funktionierende Version des Dynamic Market Scripts. Achtung: Die Config kann von den Itemnamen fehlerhaft sein, ich hab das nur grob gecheckt!
Script: RyanTTs Dynamic Market System
Version: Altis Life 4.4r3
Schiwerigkeitsgrad: Fortgeschrittener (mittel) - ein gewisses Scriptverständnis wird zum Bearbeiten vorausgesetzt!
Funktionen:
~ Börsenmenü (wahlweise über Z-Menü oder NPC aufrufbar)
~ Preise werden in der Datenbank gespeichert
~ Items beeinflussen sich gegenseitig
Rechtliche Hinweise (Copyright):
Dieses Script/Tutorial basiert auf dem Script von RyanTT aka. Optix.
Ich untersage dennoch die Verbreitung dieser Daten und die des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.
Nun zum eigentlichen Teil dieses Posts...
Anleitung:
Beginnen wir mit der Missionsdatei:
- Öffnet eure Functions.hpp und fügt dort folgendes unter class Dialog_Controls ein
- Erstellt einen neuen Ordner DynMarket im core-Ordner und fügt die Dateien aus folgendem Archiv ein DynMarketMISSION.rar
- Öffnet eure init.sqf im core-Ordner und fügt über den letzten 3 Zeilen (die diag_log Befehele) folgendes ein
- Öffnet eure fn_virt_sell.sqf (zu finden im Ordner core\shops) und ersetzt sie mit folgendem Inhalt:
C
Alles anzeigen#include "..\..\script_macros.hpp" /* File: fn_virt_sell.sqf Author: Bryan "Tonic" Boardwine Description: Sell a virtual item to the store / shop */ private["_type","_index","_price","_amount","_name"]; if ((lbCurSel 2402) isEqualTo -1) exitWith {}; _type = lbData[2402,(lbCurSel 2402)]; _price = -2; _itemNameToSearchFor = _type; { _curItemName = _x select 0; _curItemPrice = _x select 1; if (_curItemName==_itemNameToSearchFor) then {_price=_curItemPrice}; } forEach DYNMARKET_prices; if (_price isEqualTo -1) exitWith {}; if (_price isEqualTo -2) then { _price = M_CONFIG(getNumber,"VirtualItems",_type,"sellPrice"); if (_price isEqualTo -1) exitWith {}; }; _amount = ctrlText 2405; if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; _amount = parseNumber (_amount); if (_amount > (ITEM_VALUE(_type))) exitWith {hint localize "STR_Shop_Virt_NotEnough"}; if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; life_action_delay = time; _price = (_price * _amount); _name = M_CONFIG(getText,"VirtualItems",_type,"displayName"); if ([false,_type,_amount] call life_fnc_handleInv) then { hint format[localize "STR_Shop_Virt_SellItem",_amount,(localize _name),[_price] call life_fnc_numberText]; CASH = CASH + _price; [0] call SOCK_fnc_updatePartial; [] call life_fnc_virt_update; DYNAMICMARKET_boughtItems pushBack [_type,_amount]; }; if (life_shop_type isEqualTo "drugdealer") then { private["_array","_ind","_val"]; _array = life_shop_npc getVariable["sellers",[]]; _ind = [getPlayerUID player,_array] call TON_fnc_index; if (!(_ind isEqualTo -1)) then { _val = ((_array select _ind) select 2); _val = _val + _price; _array set[_ind,[getPlayerUID player,profileName,_val]]; life_shop_npc setVariable["sellers",_array,true]; } else { _array pushBack [getPlayerUID player,profileName,_price]; life_shop_npc setVariable["sellers",_array,true]; }; }; if (life_shop_type isEqualTo "gold" && (LIFE_SETTINGS(getNumber,"noatm_timer")) > 0) then { [] spawn { life_use_atm = false; sleep ((LIFE_SETTINGS(getNumber,"noatm_timer")) * 60); life_use_atm = true; }; }; [0] call SOCK_fnc_updatePartial; [3] call SOCK_fnc_updatePartial;
- Öffnet eure CfgRemoteExec.hpp und fügt unter den "Server only Functions" folgendes ein
- Öffnet eure Masterhandler.hpp (zu finden im dialog-Ordner) und fügt unten folgendes ein
- Fügt die Dateien aus folgendem Archiv in eurem dialog-Ordner ein dialog.rar
Nun zum Part in der @life_server:
- Öffnet eure config.cpp und fügt über class Systems folgendes ein
- Erstellt einen neuen Ordner DynMarket im Functions-Ordner und fügt die Dateien aus folgendem Archiv ein DynMarketLIFE.zip
- Öffnet eure init.sqf und fügt dort über den letzten drei Zeilen (wieder die diag_log's) folgendes ein
Zu guter Letzt die Datenbank: - Führt nun noch folgenden Code in der Befehlszeile eurer Datenbank aus
CSS
CREATE TABLE `dynmarket` ( `id` INT NOT NULL DEFAULT 1, `prices` TEXT NOT NULL, PRIMARY KEY (`id`)); INSERT INTO `dynmarket` VALUES (1,'[]');
OPTIONAL: (Danke an @AmaZiinG)
- Öffnet eure player_inv.hpp (zu finden im dialog Ordner) und fügt folgenden Code unter class ButtonSyncData ein
- Öffnet eure fn_p_openMenu.sqf (zu finden im Ordner core\pmenu) und fügt unter class independent und class west folgendes ein (kann ausgelassen werden, versteckt den Knopf für Cops/Medics)
- Um einen NPC oder ein anderes Objekt zum Einsehen der Börse zu verwenden, einfach folgenden Code in die init-Zeile setzen
Fertig!
Das war's schon!
Solltet ihr Wünsche, Anregungen oder Verbesserungsvorschläge haben, lasst es mich gerne wissen!
Informationen zum Konfigurieren des Scripts (Preise anpassen etc.) gibt es hier: [Script] "DynamicMarket" by Ryan (AltisLife 3.1.4.8 and 4.0.0.0 compatible) - 4.0 - Altis Life RPG (Originalthread von RyanTT - hier an dieser Stelle auch noch mal vielen Dank an ihn!)
Ich wünsche euch Viel Spaß mit dem Tutorial