Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Koms

[AuctionHouse] - Аукцион на Вашем сервере (торговля между игроками)

Recommended Posts

Исправленная, переведённая и дополненная установка аукциона

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

Что необходимо для работы скрипта: extDB и архив аукциона (во вложении исправленный).
Оригинал: http://epochmod.com/forum/index.php?/topic/33842-release-auction-house-mmo-style/
 
Итак, начнем установку:

 

dayz_server.pbo

1) в файле: server_functions.sqf (в папке init)
Вставляем этот текст:

//DB
"extDB" callExtension "9:DATABASE:Database2";
"extDB" callExtension format["9:ADD:DB_RAW_V2:%1",1];
"extDB" callExtension "9:LOCK";

После этого:

onPlayerDisconnected {[_uid,_name] call server_onPlayerDisconnect;}; 

 

В этом же файле находим:

server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";

Ниже добавляем:

server_buyitem = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\store\server_buyitem.sqf";
server_sellitem = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\store\server_sellitem.sqf";
server_claimprice = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\store\server_claimprice.sqf";
server_queryStoreitems = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\store\server_queryStoreitems.sqf"; 

 

2) Из архива копируем: fn_async.sqf в папку compile сервера.
 
3) Также в server_function.sqf:
 
Добавляем:

fn_asyncCall = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fn_async.sqf";

После:

server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf"; 

 
4) Копируем папку "store" из скачанного архива в compiles сервера.


 

Mission.pbo

5) В кастомном файле Compiles.sqf:
Добавляем это: 

player_claimmoney = compile preprocessFileLineNumbers "custom\scripts\auctionhouse\claimmoney.sqf";
player_sellitem = compile preprocessFileLineNumbers "custom\scripts\auctionhouse\player_sellitem.sqf";
player_buyitem = compile preprocessFileLineNumbers "custom\scripts\auctionhouse\player_buyitem.sqf"; 

Под этим:

// trader menu code
	if (DZE_ConfigTrader) then {
		call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuConfig.sqf";
	}else{
		call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuHive.sqf";
	}; 

 
6) В кастомном файле  fn_selfactions.sqf:
- Добавляем:

//Auctionhouse
if(_typeOfCursorTarget in serverTraders && (player distance _cursorTarget < 5)) then {
if (s_auction_dialog2 < 0) then {
s_auction_dialog2 = player addAction ["Buy Items from the Auctionhouse", "custom\scripts\auctionhouse\item_dialog.sqf",_cursorTarget, 0, true, false, "", ""];
};
if (s_auction_dialog < 0) then {
s_auction_dialog = player addAction ["Sell Items to the Auctionhouse", "custom\scripts\auctionhouse\item_sell_list.sqf",_cursorTarget, 0, true, false, "", ""];
};
if (s_auction_claim < 0) then {
s_auction_claim = player addAction ["Claim your Money", "custom\scripts\auctionhouse\claimmoney.sqf",_cursorTarget, 0, true, false, "", ""];
};
} else {
player removeAction s_auction_dialog2;
s_auction_dialog2 = -1;
player removeAction s_auction_dialog;
s_auction_dialog = -1;
player removeAction s_auction_claim;
s_auction_claim = -1;
};

После:

	if(_cursorTarget == dayz_hasFire) then {
		if ((s_player_fireout < 0) && !(inflamed _cursorTarget) && (player distance _cursorTarget < 3)) then {
			s_player_fireout = player addAction [localize "str_actions_self_06", "\z\addons\dayz_code\actions\fire_pack.sqf",_cursorTarget, 0, false, true, "",""];
		};
	} else {
		player removeAction s_player_fireout;
		s_player_fireout = -1;
	};

 

- Добавляем:

player removeAction s_auction_dialog2;
s_auction_dialog2 = -1;
player removeAction s_auction_dialog;
s_auction_dialog = -1;
player removeAction s_auction_claim;
s_auction_claim = -1;

После:

player removeAction s_player_downgrade_build;
s_player_downgrade_build = -1;

 
7) В кастомном файле  variables.sqf:
Добавляем:

s_auction_dialog2 = -1;
s_auction_dialog = -1;
s_auction_claim = -1; 

В самый низ секции

dayz_resetSelfActions = { 

 
8) Если необходимо - создаём папку scripts в папке custom и копируем туда папку "auctionhouse".
 
9) В файле description.ext
Добавляем:

#include "custom\scripts\auctionhouse\common.hpp"
#include "custom\scripts\auctionhouse\itemstore.hpp" 

В самый низ.
 
10) В файле description.ext могут быть вставлены уже ваши .hpp  - тут каждому придется разбираться самостоятельно . 
 
11) В кастомном файле publicEH.sqf
Добавляем:

"PVDZE_getStoreitems" addPublicVariableEventHandler {(_this select 1) spawn server_queryStoreitems};
"PVDZE_sellItem" addPublicVariableEventHandler {(_this select 1) spawn server_sellitem};
"PVDZE_buyItem" addPublicVariableEventHandler {(_this select 1) spawn server_buyitem};
"PVDZE_claimmoney" addPublicVariableEventHandler {(_this select 1) spawn server_claimprice}; 

После:

if(isServer) then { part: (like below "PVDZE_plr_DeathB" addPublicVariableEventHandler {(_this select 1) spawn server_deaths}; 

 

База Данных

12) Заходим в БД, которую вы выбрали в extDB config и экспортируем database.sql из загруженного ранее архива.
 
В Базе данных появятся таблицы:
store
store_user
В которых и будет храниться весь аукцион (store_user-кто продает, store-итемы для продажи и цена).


 

Battleye:

13) Открываем: publicvariable.txt
 
Находим (4-я строка) :

5 "PVDZE_" 

Сразу после этого кода добавляем:

!"PVDZE_sellItem" !="PVDZE_sellItem" !"PVDZE_buyItem" !="PVDZE_buyItem" !"PVDZE_claimmoney" !="PVDZE_claimmoney" !"PVDZE_getStoreitems" !="PVDZE_getStoreitems" 

 

 infiSTAR:

В infiSTAR вносим разрешённые диалоги:

"s_auction_dialog2","s_auction_dialog","s_auction_claim" 

 В infiSTAR вносим разрешённые меню:

7800,8800

 

База extDB

 
Копируем папку @extDB в корень Arma II.
Должно получиться:
@DayZ_Epoch
@DayZ_Epoch_Server
@extDB

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.


Открываем в ней файл extdb-conf.ini и меняем в нём параметры вашей БД. Для примера указал свои.

[Database2]
Type = MySQL
Name = dayz_epoch
Username = root
Password = 12345
IP = localhost
Port = 3306

Database2 :

extdb-conf.ini
 

[Database2]
Type = MySQL
Name = dayz_epoch
Username = root
Password = 12345
IP = localhost
Port = 3306

minSessions = 1
maxSessions = 4
idleTime = 60


и
server_functions.sqf
 

//DB
"extDB" callExtension "9:DATABASE:Database2";
"extDB" callExtension format["9:ADD:DB_RAW_V2:%1",1];
"extDB" callExtension "9:LOCK";



Database2 = и там и там одно должно быть имя!  

 

Если у вас не один сервер-то параметры можно указывать не один раз. Просто копируем приведённую секция в extdb-conf.ini и даём другое имя (например, Database_845). 

Соответственно, подключение должно быть указано к другой БД.

 

после отладки и корректной работы также можно поменять в этом файле Filter = 2 на Filter = 5 - чтобы писались только критические ошибки.
 
Если необходимо привязать аукцион к конкретному торговцу, то в fn_selfactions.sqf вместо

//Auctionhouse
if(_typeOfCursorTarget in serverTraders && (player distance _cursorTarget < 5)) then { 

пишем

//Auctionhouse
if ((_typeOfCursorTarget == "Ins_Woodlander3") && (player distance _cursorTarget < 5)) then {

где "Ins_Woodlander3" - это Ваш торговец.
 
Запуск сервера теперь производится с такими параметрами: -mod=@DayZ_Epoch;@DayZ_Epoch_Server;@extDB;

 

Данный аукцион НЕ будет показывать Вам ваши товары! Только те, что продаёт другой игрок!


Скрипт полностью проверен несколькими игроками-работает 100%.   :wink:

Найдена, разобрана и проверена база extDB.

Предыдущий гайд дописан вполовину, потому создан новый. Автору респект.

 

Первое обновление скрипта (фиксы):

-Исправлена ошибка переменной _pice на _price.

-Добавлены необъявленные переменные.

-Русификация полная.  

 

Очередное обновление скрипта от 08.07.2015 (фиксы):

-Добавлена недостающая переменная "_money" в клиентскую часть.

-Добавлена анимация Medic при покупке\продаже\изъятии выручки (кому не нравится-удалите).

-Исправлен сбой в подсчёте денег при изъятии выручки - SC3.0 выдавал SCALAR вместо суммы (была ошибка в скрипте).

-Добавлена недостающая часть кода в файл скрипта покупки - спамило в клиентский лог.

 

На сегодня лог чистый.
 
База не прикреплется-размер большой. Выкладываю её на яндекс.
https://yadi.sk/d/c6GsbESwhPXL3   extDB.7z
 

Прикрепил новые оригинальную и переведённую версии.

Auction_House_fixed eng.zip

Auction_House_fixed rus.zip

Edited by Koms (see edit history)

Share this post


Link to post
Share on other sites



Вопрос к знатокам скриптописания:

Как сгруппировать пункты "продать", "купить", "забрать деньги" (то, что добавили в fn_selfaction) в подменю? Например, "Барахолка", а там уже эти три пункта. Будет более удобно.

Как сделать данный аукцион только одному торговцу?

Share this post


Link to post
Share on other sites

Вопрос к знатокам скриптописания:

Как сгруппировать пункты "продать", "купить", "забрать деньги" (то, что добавили в fn_selfaction) в подменю? Например, "Барахолка", а там уже эти три пункта. Будет более удобно.

Как сделать данный аукцион только одному торговцу?

1.) В смысле "сгруппировать"? Они и так находятся рядом.

 

2.) Вот так сделайте:

//Auctionhouse
TraderAuction = ["Ваш торговец"];
_isAuctionItem = (typeOf cursorTarget) in Auction;

if(_isAuctionItem  && (player distance _cursorTarget < 5)) then {
if (s_auction_dialog2 < 0) then {
s_auction_dialog2 = player addAction ["Купить предметы на Аукционе", "custom\scripts\auctionhouse\item_dialog.sqf",_cursorTarget, 0, true, false, "", ""];
};
if (s_auction_dialog < 0) then {
s_auction_dialog = player addAction ["Продать предметы на Аукционе", "custom\scripts\auctionhouse\item_sell_list.sqf",_cursorTarget, 0, true, false, "", ""];
};
if (s_auction_claim < 0) then {
s_auction_claim = player addAction ["Забрать свои деньги", "custom\scripts\auctionhouse\claimmoney.sqf",_cursorTarget, 0, true, false, "", ""];
};
} else {
player removeAction s_auction_dialog2;
s_auction_dialog2 = -1;
player removeAction s_auction_dialog;
s_auction_dialog = -1;
player removeAction s_auction_claim;
s_auction_claim = -1;
};

Share this post


Link to post
Share on other sites

Сгруппировать-сделать подменю. Как в починке транспорта, например.

По второму попробую.

  1. TraderAuction = ["Ваш торговец"];

Что за торговец? TraderAuction = ["Woodlander3"]; - вписав так - пропадает меню аукциона у всех

Edited by Koms (see edit history)

Share this post


Link to post
Share on other sites

Сгруппировать-сделать подменю. Как в починке транспорта, например.

По второму попробую.

  1. TraderAuction = ["Ваш торговец"];
  2.  
  3.  
  4.  

Что за торговец? TraderAuction = ["Woodlander3"]; - вписав так - пропадает меню аукциона у всех

так привязывается действие только к 1 торговцу, по сути должно работать. Попробуйте прописать аукцион отдельно от меню с торговцами,например в самом низу fn_selfActions, если поставите объект и привяжете к нему аукцион - все будет работать, сейчас у себя проверю

Edited by Linux (see edit history)

Share this post


Link to post
Share on other sites

грозилсе поставить это чудо на сервер-игроки сразу сказали-там будет свалка оружия, которая будет использоваться как хранение.

Share this post


Link to post
Share on other sites

грозилсе поставить это чудо на сервер-игроки сразу сказали-там будет свалка оружия, которая будет использоваться как хранение.

ну можете сделать очистку "завалявшегося" товара, или просто пригрозить этим :D

Share this post


Link to post
Share on other sites

# Удаляем товар, лежащий более недели на аукционе
DELETE FROM `store` WHERE `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY);

Кто мешает так делать при старте?

 

Только ведь владелец товара не может его забрать обратно - смысл делать там свалку?

Share this post


Link to post
Share on other sites

 

# Удаляем товар, лежащий более недели на аукционе
DELETE FROM `store` WHERE `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY);

Кто мешает так делать при старте?

 

Только ведь владелец товара не может его забрать обратно - смысл делать там свалку?

ну по большой цене выставить а потом у самого себя купить и забрать деньги

Share this post


Link to post
Share on other sites

Так сам себе продать не можешь)) Видится только товар, который продаете НЕ вы. Хотя поковырявшись можно это исправить. 

С денежными системами работает, но товар хранится в базе, а не в файлах, как остальное. 

 

Еще бы анимацию медика прикрутить сюда при продаже-покупке, как оригинальная торговля-будет вообще комильфо. Потому как мгновенная покупка\продажа как то не по мне.

 

Linux, не получилось привязать к одному торгашу аукцион?

Share this post


Link to post
Share on other sites

Так сам себе продать не можешь)) Видится только товар, который продаете НЕ вы. Хотя поковырявшись можно это исправить. 

С денежными системами работает, но товар хранится в базе, а не в файлах, как остальное. 

 

Еще бы анимацию медика прикрутить сюда при продаже-покупке, как оригинальная торговля-будет вообще комильфо. Потому как мгновенная покупка\продажа как то не по мне.

 

Linux, не получилось привязать к одному торгашу аукцион?

Привязать это иззи 

if ((_typeOfCursorTarget == "MAP_Misc_PostBox") && (player distance _cursorTarget < 5)) then {

MAP_Misc_PostBox замени на что тебе понравится))

 

А вот у меня трабл, товар выставляю, а вот купить никто не может просто висит ищу товары и на этом все! С чем трабл? РПТ сервера и клиента молчит! 

Share this post


Link to post
Share on other sites

Так сам себе продать не можешь)) Видится только товар, который продаете НЕ вы. Хотя поковырявшись можно это исправить. 

С денежными системами работает, но товар хранится в базе, а не в файлах, как остальное. 

 

Еще бы анимацию медика прикрутить сюда при продаже-покупке, как оригинальная торговля-будет вообще комильфо. Потому как мгновенная покупка\продажа как то не по мне.

 

Linux, не получилось привязать к одному торгашу аукцион?

я привязал к табличке аукцион

Share this post


Link to post
Share on other sites

товар выставляю, а вот купить никто не может просто висит ищу товары и на этом все! С чем трабл? РПТ сервера и клиента молчит! 

 

Проверяй коннект к БД-не может считать, видимо. Ну и в самой базе товар то появился? Ну и если тут всё нормально-то проверить пошагово всё сделанное.

Edited by Koms (see edit history)

Share this post


Link to post
Share on other sites

 

Проверяй коннект к БД-не может считать, видимо. Ну и в самой базе товар то появился? Ну и если тут всё нормально-то проверить пошагово всё сделанное.

В базе товар не появился, коннект к БД вроде есть, ошибок никаких не выявил. Ставил и по этому гайду и по оригиналу, эффект тот же

Share this post


Link to post
Share on other sites

В базе товар не появился, коннект к БД вроде есть, ошибок никаких не выявил. Ставил и по этому гайду и по оригиналу, эффект тот же

точно есть коннект к бд?

установите extdb debug в папке с ней у вас буду логи работы с бд, посмотрите или выкиньте на форум, посмотрим поможем

Share this post


Link to post
Share on other sites

Проверяем пошагово все действия, ставим полный лог в настройках extDB (кстати она подключается при старте сервера?) Такое было, когда в батнике старта не был указан параметр @DayZ_Epoch;@DayZ_Epoch_Server;@extDB;

extdb-conf.ini

[Main]
;Threads = 0 
; Default Value is number of CPU Cores Detected

[Logging]
; If u are going to disable Logging for performance reasons, grab the No-Logging Version of extdb
Filter = 2
; 2 = Default Setting, this doesn't take effect till after Config File has been loaded.
;         0 = more cpu intensive, 5 = barely anything except exception handling 
;
; 0 trace
; 1 debug
; 2 info
; 3 warning
; 4 error
; 5 fatal

[Database]
Type = SQLite
Name = sqlite.db

minSessions = 1
; minSession Default Value = 1

;maxSessions = 4
; maxSession Default Value = number of Main->Threads
;     u really should leave this value alone
idleTime = 60
; idleTime no Default Value yet, needs to be defined.
;     idleTime is the time before a database session is stopped if not used. 
;    If Database Sessions are greater than minSessions

[Database2]
Type = MySQL
Name = dayz_epoch_test

Username = root
Password = 12345
IP = localhost
Port = 3306

minSessions = 1
maxSessions = 4
idleTime = 60

параметры подключения HiveEXT.ini к БД самого мода (они обязательно должны совпадать!):

REM Your MySQL connection details - you need this to generate vehicles directly into the DB
set dbhost=localhost
set dbport=3306
set dbuser=root
set dbpass=12345
set dbname=dayz_epoch_test

Проверьте у себя это, и также:

 

1) в файле: server_functions.sqf (в папке init)

Вставляем этот текст:
 
//DB
"extDB" callExtension "9:DATABASE:Database2";
"extDB" callExtension format["9:ADD:DB_RAW_V2:%1",1];
"extDB" callExtension "9:LOCK";
После этого:
onPlayerDisconnected {[_uid,_name] call server_onPlayerDisconnect;}; 
 
В строке: extDB" callExtension "9:DATABASE:Database2 заменяем Database2 на Databaseconfig, который вы укажете в extdb-conf.ini

 

Потому как у меня и других работает.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Edited by Koms (see edit history)

Share this post


Link to post
Share on other sites

Проверяем пошагово все действия, ставим полный лог в настройках extDB (кстати она подключается при старте сервера?) Такое было, когда в батнике старта не был указан параметр @DayZ_Epoch;@DayZ_Epoch_Server;@extDB;

extdb-conf.ini



[Main]
;Threads = 0 
; Default Value is number of CPU Cores Detected

[Logging]
; If u are going to disable Logging for performance reasons, grab the No-Logging Version of extdb
Filter = 2
; 2 = Default Setting, this doesn't take effect till after Config File has been loaded.
;         0 = more cpu intensive, 5 = barely anything except exception handling 
;
; 0 trace
; 1 debug
; 2 info
; 3 warning
; 4 error
; 5 fatal

[Database]
Type = SQLite
Name = sqlite.db

minSessions = 1
; minSession Default Value = 1

;maxSessions = 4
; maxSession Default Value = number of Main->Threads
;     u really should leave this value alone
idleTime = 60
; idleTime no Default Value yet, needs to be defined.
;     idleTime is the time before a database session is stopped if not used. 
;    If Database Sessions are greater than minSessions

[Database2]
Type = MySQL
Name = dayz_epoch_test

Username = root
Password = 12345
IP = localhost
Port = 3306

minSessions = 1
maxSessions = 4
idleTime = 60

параметры подключения к БД самого мода (они обязательно должны совпадать!):



REM Your MySQL connection details - you need this to generate vehicles directly into the DB
set dbhost=localhost
set dbport=3306
set dbuser=root
set dbpass=12345
set dbname=dayz_epoch_test

Проверьте у себя это, и также:

 

Потому как у меня и других работает.

лицензия или пиратка?

Share this post


Link to post
Share on other sites

У меня лицензия. Только разницы нет-подключение должно быть указано и в конфиге запуска Эпохи, и в конфиге extDB одинаковое-этим мы указываем с какой базой работать. 

Share this post


Link to post
Share on other sites

У меня лицензия. Только разницы нет-подключение должно быть указано и в конфиге запуска Эпохи, и в конфиге extDB одинаковое-этим мы указываем с какой базой работать. 

всеправильно, со всеми файлами идет файлик sql вы его загрузили в dayz_epoch_test таблицу? Разница есть, первый релиз данного скрипта не работал с NOCD серверами

Share this post


Link to post
Share on other sites

Я то загрузил конечно. Всё проверил и потом написал этот гайд, когда убедился в работоспособности на 100%. Не продавал\покупал когда не было коннекта. Потом все заработало, когда скорректировал коннект к БД.

Share this post


Link to post
Share on other sites

точно есть коннект к бд?

установите extdb debug в папке с ней у вас буду логи работы с бд, посмотрите или выкиньте на форум, посмотрим поможем

Вот что написано в логах

 

 

[17:54:58 +00:-1] [Thread 1131620634] extDB: Version: 35
[17:54:58 +00:-1] [Thread 1131620634] extDB: Windows Version
[17:54:58 +00:-1] [Thread 1131620634] Message: Arma Linux Servers are using Older Physic Library (than Windows Servers), due to Debian 7 using old version of Glibc
[17:54:58 +00:-1] [Thread 1131620634] Message: If you like extDB consider donating or bug BIS to drop support for Debian 7 thanks, so Linux Servers get same Physic Library Version as Windows
[17:54:58 +00:-1] [Thread 1131620634] Message: Note currently most/all development for extDB is done on a Linux Server
[17:54:58 +00:-1] [Thread 1131620634] Message: Torndeco: 24/01/15
[17:54:58 +00:-1] [Thread 1131620634] 
[17:54:58 +00:-1] [Thread 1131620634] extDB: Found extdb-conf.ini
[17:54:58 +00:-1] [Thread 1131620634] extDB: Detected 2 Cores, Setting up 2 Worker Threads
[17:54:58 +00:-1] [Thread 1131620634] extDB: Database Type: MySQL
[17:54:58 +00:-1] [Thread 1131620634] extDB: Database Session Pool Started
[17:54:59 +00:-1] [Thread 1131620634] extDB: DB_RAW_V3: Initialized: ADD_QUOTES True
[18:03:05 +00:-1] [Thread 1131620634] extDB: Stopping ...

Share this post


Link to post
Share on other sites

 

Вот что написано в логах

 

 



[17:54:58 +00:-1] [Thread 1131620634] extDB: Version: 35
[17:54:58 +00:-1] [Thread 1131620634] extDB: Windows Version
[17:54:58 +00:-1] [Thread 1131620634] Message: Arma Linux Servers are using Older Physic Library (than Windows Servers), due to Debian 7 using old version of Glibc
[17:54:58 +00:-1] [Thread 1131620634] Message: If you like extDB consider donating or bug BIS to drop support for Debian 7 thanks, so Linux Servers get same Physic Library Version as Windows
[17:54:58 +00:-1] [Thread 1131620634] Message: Note currently most/all development for extDB is done on a Linux Server
[17:54:58 +00:-1] [Thread 1131620634] Message: Torndeco: 24/01/15
[17:54:58 +00:-1] [Thread 1131620634] 
[17:54:58 +00:-1] [Thread 1131620634] extDB: Found extdb-conf.ini
[17:54:58 +00:-1] [Thread 1131620634] extDB: Detected 2 Cores, Setting up 2 Worker Threads
[17:54:58 +00:-1] [Thread 1131620634] extDB: Database Type: MySQL
[17:54:58 +00:-1] [Thread 1131620634] extDB: Database Session Pool Started
[17:54:59 +00:-1] [Thread 1131620634] extDB: DB_RAW_V3: Initialized: ADD_QUOTES True
[18:03:05 +00:-1] [Thread 1131620634] extDB: Stopping ...

если последняя строка это после выключения сервера то у вас все работает

смотрите траблы в коде, лучше все файлы берите из первоисточника

Share this post


Link to post
Share on other sites

Коннект есть. Значит проверяем все действия пошагово. Что-то где-то пошло не так...

 

if ((_typeOfCursorTarget == "Woodlander3") && (player distance _cursorTarget < 5)) then {

Всё отлично привязалось к определенному торговцу.

Share this post


Link to post
Share on other sites

Очередное обновление скрипта от 08.07.2015 (фиксы):

-Добавлена недостающая переменная "_money" в клиентскую часть.

-Добавлена анимация Medic при покупке\продаже\изъятии выручки (кому не нравится-удалите).

-Исправлен сбой в подсчёте денег при изъятии выручки - SC3.0 выдавал SCALAR вместо суммы (была ошибка в скрипте).

-Добавлена недостающая часть кода в файл скрипта покупки - спамило в клиентский лог.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By BorizzK
      Собственно речь про расширения VPPAdmintools
      1 Автор собирает IP серверов где работает админка
      2 Если надо он заносит ip в некий черный список, сервер при обращении к его "сайту" получит инфу, что сервер в блоке и скрипт не даст подключаться игрокам

      Само расширение - код - спасибо комраду @Selleti
       
      modded class MissionServer { private string vppatlockmessage = "Server is Currently Locked!"; private string serverIP; private bool violatedRules = false; void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.vppapi, 5000.0, false); serverIP = GetServerIP(); } private void vppapi() { VPPATapiCB cb = new VPPATapiCB( this ); CURLContext ctx = GetCURLCore().GetCURLContext("http://54.39.130.144:5600"); ctx.GET( cb, string.Format( "/Validate?address=%1", serverIP ) ); } void setStatus(bool state) { violatedRules = state; if ( state ) vppatlockmessage = "Server Locked. Please contact the developer of the following mod [ VPPAdminTools ]\nEmail: vanillaplusplusdayz@gmail.com\nDiscord: discord.gg/GWXN2bB"; } void ForceKickPlayers() { GetRPCManager().SendRPC( "RPC_MissionGameplay", "KickClientHandle", new Param1<string>( vppatlockmessage ), true, NULL); array<PlayerIdentity> identities = new array<PlayerIdentity>; GetGame().GetPlayerIndentities( identities ); foreach(ref PlayerIdentity iden: identities) { GetGame().ChatPlayer("#kick " + iden.GetName()); Print(vppatlockmessage); } GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.ForceKickPlayers); } override void OnEvent(EventType eventTypeId, Param params) { if ( violatedRules ) GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(this.ForceKickPlayers, 3500, false); else super.OnEvent(eventTypeId,params); } string GetServerIP() { string ip; if (GetCLIParam("ip", ip)) { return ip; } return "0.0.0.0"; } }; class VPPATapiCB: CURLCallback { private string response; private MissionServer serverMission; void VPPATapiCB(MissionServer ms) { serverMission = ms; } override void OnSuccess( string data, int dataSize ) { response = data; if ( response == "true" ) serverMission.setStatus(true); } }; И собственно 2 фикса для серверного мода

      1 Удаляет расширение из загруженных модов вообще - автор Selleti
      выполнено в виде конфига мода
       
      class CfgPatches { class VPPATExtensions_FIX { units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = {"DZM_VPPATExtensions"}; }; }; class CfgMods { delete VPPATExtensions; }; 2 Удаляет из очереди вызов функицию которая ставится в очередь в конструкторе класса MissionServer  в моде VPPAdmintools в скрипте из обфусцированного VPPExtensions.pbo - автор - ну в общем пофигу - просто все
      выполнено в виде скрипта
      modded class MissionServer extends MissionBase { void MissionServer() { GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(this.vppapi); } }
      За сим раскланиваюсь
      Всегда Ваш

       
    • By BorizzK
      Довольно тупое охлаждение жратвы и кастрюли если они оказались на земле
      Прикрутить охлаждение содержимого кастрюли как 2 байта сами знаете что
      Сделать охлаждение после снятия с костра и тп вобщем то же не проблема
       
      Просто код и ничего лишнего
       
      Комментарии к коду добавлю позже
      Логгирование в коде закомментировано - раскомментируйте, что бы наблюдать за процессом
       
      Для жратвы убавление температуры раз в 10 сек на 1 градус
      Для кастрюли на 2 градуса
       
      Охлаждается до дневной температуры воздуха далее охлаждение прекращается
      У бгемотов есть 2 температуры воздуха - дневная и ночная
      Идиотизм? Однозначно
      Я пытался в погоде сделать ее плавное изменение в зависимости от Overcast, Rain и тп, но забил - потом как-нибудь
       
      Есть вопросы, задавайте, отвечу если будет время.
       
      Вобщем как-то так:
       
      //08.05.2020 modded class ItemBase extends InventoryItem { ref Timer m_TemperatureDecrease; private float m_InitTemperature; private float m_DecreaseTempTime = 10; private float m_TempDecreaseCoef = -1; void ItemBase() { m_InitTemperature = 12; //g_Game.GetMission().GetWorldData().GetDayTemperature(); // Не работает ((( какого художника - я хз if ( IsInherited(Pot) /* GetInventory().GetCargo() */ ) { m_TempDecreaseCoef = -2; } } override void AfterStoreLoad() { super.AfterStoreLoad(); if (!IsInherited(FireplaceBase)) TryToStartTempDecrease(); } private void TryToStartTempDecrease() { if (GetTemperature() > GetInitTemperature()) { if (!GetHierarchyParent()) { if (!m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: Init: TryToStartTempDecrease: this: " + this + ": GetHierarchyParent(): " + GetHierarchyParent() + ": GetTemperature(): " + GetTemperature()); StartTemperatureDecrease(); } } } } override void EEItemLocationChanged(notnull InventoryLocation oldLoc, notnull InventoryLocation newLoc) { super.EEItemLocationChanged(oldLoc,newLoc); //Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": newLoc.GetType(): " + newLoc.GetType() + ": newLoc.GetParent(): " + newLoc.GetParent() + ": GetTemperature(): " + GetTemperature()); if (GetTemperature() > GetInitTemperature()) { if (!newLoc.GetParent() || newLoc.GetType() == InventoryLocationType.GROUND) { if (!m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": Begin decrease temperature: GetTemperature(): " + GetTemperature()); StartTemperatureDecrease(); } } } else { if (m_TemperatureDecrease) { Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: EEItemLocationChanged: this: " + this + ": End decrease temperature: GetTemperature(): " + GetTemperature()); StopTemperatureDecrease(); } } } private void StartTemperatureDecrease() { m_TemperatureDecrease = new Timer( CALL_CATEGORY_SYSTEM ); m_TemperatureDecrease.Run(m_DecreaseTempTime, this, "DecreaseTemperature", NULL, true); } private void StopTemperatureDecrease() { m_TemperatureDecrease.Stop(); m_TemperatureDecrease = NULL; } void DecreaseTemperature() { if (GetTemperature() > GetInitTemperature()) { AddTemperature(GetTempDecreaseCoef()); if ( IsInherited(Pot) /* GetInventory().GetCargo() */) { DecreaseCargoTemperature(); } Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Decrease: GetTemperature(): " + GetTemperature()); } else { SetTemperature(GetInitTemperature()); StopTemperatureDecrease(); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseTemperature: this: " + this + ": Stop decrease: GetTemperature(): " + GetTemperature()); } } void DecreaseCargoTemperature() { ItemBase item; int item_count = GetInventory().GetCargo().GetItemCount(); for (int i = 0; i < item_count; i++) { item = ItemBase.Cast(GetInventory().GetCargo().GetItem(i)); if (item) { if (item.GetTemperature() > item.GetInitTemperature()) { item.AddTemperature(item.GetTempDecreaseCoef()); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } else { item.SetTemperature(item.GetInitTemperature()); Print("::: SERVER: [ItemBase extends InventoryItem: Decreasetemp]: DecreaseCargoTemperature: this: " + this + ": Stop decrease: item: " + item + ": item.GetTemperature(): " + item.GetTemperature()); } } } } float GetInitTemperature() { return m_InitTemperature; } float GetTempDecreaseCoef() { return m_TempDecreaseCoef; } } Немного переделал код
      Теперь охлаждается все если оно имеет Т выше 12, а если это кастрюля с содержимым, то и ее содержимое
      Получить Т воздуха в конструкторе не выходит потому указал руками
       
    • By DrTauren
      Как всем известно, сегодня, 19 сентября разработчики DayZ Standalone официально опубликовали документацию серверов Dayz, а также предоставили возможность скачать файлы для запуска сервера DayZ. Ниже прилагается перевод официальной документации этих самых файлов с форума DayZ, а также документация касательно других файлов, которых нет в официальной документации. Пользуйтесь на здоровье 
       
      Скачать серверные файлы через Steam: steam://rungameid/223350
      На данный момент присутствует ошибка с невозможностью скачать файлы сервера, если на вашем аккаунте Steam отсутствует купленная DayZ.
       
      P.S. Если у вас есть чем заполнить эту статью, обязательно пишите мне в лс 
    • By DrTauren
      Что нам понадобится:
      1) Архив
      2) Notepad


      Инструкция:
      1) Качаем архив и копируем из него папку custom в вашу папку с миссией
      2) Открываем init.sqf и ищем такие строки:
      if (!isDedicated) then { 0 fadeSound 0; waitUntil {!isNil "dayz_loadScreenMsg"}; dayz_loadScreenMsg = (localize "STR_AUTHENTICATING"); _id = player addEventHandler ["Respawn", {_id = [] spawn player_death;}]; }; 3) Перед закрывающей скобкой }; прописываем это:
      _nil = [] execVM "custom\JAEM\EvacChopper_init.sqf"; 4) Выбираем одно из двух, выполняем действия указанные ниже:
      Если у вас нет своего variables.sqf в папке с миссией:  
       
      Если у вас есть свой variables.sqf в папке с миссией:  

      5) Копируем файлы remoteexec.txt, waypointcondition.txt, waypointstatement.txt в вашу папку с фильтрами BattlEye (\instance_11_Chernarus\BattlEye)

      Настройка параметров:
      Открываем файл EvacChopper_init.sqf (custom\JAEM\EvacChopper_init.sqf), находим нужную строку, редактируем по своему усмотрению:
      evac_chopperPrice = 3; Цена вашего спасения евреями. По умолчанию 3 Брифкейса
       
      evac_needRadio = 0; Обязательно ли радио для того, что бы вызвать хапуг? (0-не нужно, 1-таки извольте)
       
      evac_zoneMarker = 0; Дымовая граната на месте эвакуации (0-не надо, 1-таки не увидим мы без дыма)
       
      evac_minDistance = 500; Дословно: минимальное расстояние, что бы вызвать евреев. Меньше 500 не ставить!
    • By Serdce
      Ссылка на первоисточник - https://github.com/BrettNordin/Exile
      Я всего лишь перевёл
      Собственно переходим по ссылке, и скачиваем архив.
      Для тех, кто не знает как качать с хаба скрин 
      И так, едем дальше
      Скачанный архив распаковываем в удобное место для работы,
      Идём в ваш @ExileServer, там нас интересуют файлы - extDB2.dll , extDB2.so , extDB2-conf.ini , XM8.dll , XM8.so Удаляем эти файлы
      Далее идём в @ExileServer которую мы скачали, всё её содержимое копируем в аналогичную папку на сервере.
      Теперь идём в вашу MPmissions и там распаковываем вашу миссию "Exile.название карты",
      Туда мы копируем содержимое папки Exile.MapName из архива,
      Далее открываем ваш config.cpp и ищем там class CfgExileCustomCode 
      В него мы добавляем - #include "CfgExileCustomCode.cpp"
      Должно получится так
      Запаковываем обратно)
      Ну и теперь из архива мы копируем tbbmalloc.dll, tbbmalloc_x64.dll в папку расположения вашего Arma3_server.exe
      Не забываем поменять в вашем файле запуска сервера с arma3server.exe на arma3server_x64.exe 
      Ну и финишная прямая, открываем вашу базу данных ( желательно с название exile ) и добавляем файл Exile_Database_Update_64x.sql
      Далее настройте под себя ваш extdb3-conf.ini
       
×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.