· 8 years ago · Jan 09, 2018, 10:48 PM
1//-------------------------- 1/9/2018 -- 14:45:01 -- yo_1.3.6.0 --
2ECHO 2018-01-09 14:45:00.940 {} <> [0] Processor Init:
3ECHO 2018-01-09 14:45:00.940 {} <> [0] Features detected: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC MTRR SEP PGE MCA CMOV PAT PSE36 CLFLUSH MMX FXSR SSE SSE2 SS HT PNI PCLMUL SSSE3 CX16 SSE4_1 SSE4_2 SYSCALL XD POPCNT AES XSAVE OSXSAVE AVX RDTSCP LM LAHF_LM F16C RDRAND X2APIC HTT
4ECHO 2018-01-09 14:45:00.940 {} <> [0] GenuineIntel, Xeon LV
5ECHO 2018-01-09 14:45:00.940 {} <> [0] MP detected [6 cores, 12 logical, 1 physical]
6ECHO 2018-01-09 14:45:00.940 {} <> [0]
7ECHO 2018-01-09 14:45:00.940 {} <> [0] Intel(R) Xeon(R) CPU E5-2687W v2 @ 3.40GHz, ~3.40 Ghz
8ECHO 2018-01-09 14:45:00.940 {} <> [0] Initializing platform...
9ECHO 2018-01-09 14:45:00.941 {} <> [0] Done
10ECHO 2018-01-09 14:45:01.003 {} <> [0]
11ECHO 2018-01-09 14:45:01.003 {} <> [0] --------- Loading DIRS ---------
12INFO 2018-01-09 14:45:01.003 {} <> [0] vyo_1.3.6.0
13ECHO 2018-01-09 14:45:01.004 {} <> [0]
14WARN 2018-01-09 14:45:01.039 {01} <onStart> [0] invalid symbol ' ' after % in the message: You are trying to improve your horse to %(o1). You need to get training level to 100% within %2 seconds
15WARN 2018-01-09 14:45:01.039 {01} <onStart> [0] CmMessages::load() - can't parse message# 2946
16ECHO 2018-01-09 14:45:01.041 {01} <onStart> [0]
17--------- Initializing Directory: scripts ---------
18ECHO 2018-01-09 14:45:01.041 {02} <initServer> [0]
19--------- Initializing LiF Server: Server Scripts ---------
20ECHO 2018-01-09 14:45:01.044 {02} <initServer> [0] Loading CmConfiguration
21ECHO 2018-01-09 14:45:01.045 {02} <initServer> [0] Init of DB interface
22WARN 2018-01-09 14:45:01.045 {02} <initServer> [0] CmServerInfoManager::loadLocalWorldsList() - world# 2 already registered. Skip config/world_2.xml
23INFO 2018-01-09 14:45:01.045 {03} <checkServerIdLockFile> [0] Renaming log file name from 'logs/2018-01-09/S0_GAME-PC_2018-01-09-14-45-01_p4308.log' to 'logs/2018-01-09/S2_GAME-PC_2018-01-09-14-45-01_p4308.log'...
24//-------------------------- 1/9/2018 -- 14:45:01 -- yo_1.3.6.0 --
25INFO 2018-01-09 14:45:01.046 {03} <checkServerIdLockFile> [0] Log file name successfully renamed!
26INFO 2018-01-09 14:45:01.050 {02} <initServer> [0] WORLD_ID=2
27WARN 2018-01-09 14:45:01.051 {02} <initServer> [0] DB::RS(0 ms) SHOW DATABASES LIKE 'lif_2';
28WARN 2018-01-09 14:45:01.051 {02} <initServer> [0] DB::noRS(1 ms) USE `lif_2`;
29WARN 2018-01-09 14:45:01.120 {02} <initServer> [0] DB::mNoRS(68 ms) DROP TABLE IF EXISTS `_patch_execute_status`; CREATE TABLE `_patch_execute_status`( ^`Value` tinyint unsigned NOT NULL DEFAULT 0 ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci; INSERT INTO `_patch_execute_status` () VALUES ();
30ECHO 2018-01-09 14:45:01.120 {02} <initServer> [0] Patching database [1/2]...
31WARN 2018-01-09 14:45:01.121 {02} <initServer> [0] DB::noRS(0 ms) USE `lif_2`;
32WARN 2018-01-09 14:45:01.138 {02} <initServer> [0] DB::mNoRS(18 ms)
33-- NOTE: do not use DELIMITER here
34-- NOTE: do not use DEFINER for stored procedures and functions here
35
36DROP PROCEDURE IF EXISTS _transferSkill;
37CREATE PROCEDURE _transferSkill(
38^IN `in_oldSkillTypeID` INT UNSIGNED,
39^IN `in_newSkillTypeID` INT UNSIGNED
40)
41BEGIN
42
43-- allocate needed skill with 0 values at first.
44-- don't use "insert ... select on duplicate key update" here - it is not so safe for replication.
45insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
46^select c.ID, in_newSkillTypeID as SkillTypeID, 0 as newSkillAmount, 1 as newLockStatus
47^^from `character` c
48^^join skills s on s.CharacterID = c.ID
49^^where s.SkillTypeID = in_oldSkillTypeID
50^^^and !exists(select * from skills_new sn where sn.CharacterID = c.ID and sn.SkillTypeID = in_newSkillTypeID)
51^^order by c.ID;
52
53-- transfer skill values
54update skills_new sn
55^join skills s on sn.CharacterID = s.CharacterID and sn.SkillTypeID = in_newSkillTypeID and s.SkillTypeID = in_oldSkillTypeID
56^set sn.SkillAmount = (sn.SkillAmount + s.SkillAmount);
57
58-- empty old skill values
59update skills
60^set SkillAmount = 0
61^where SkillTypeID = in_oldSkillTypeID;
62
63-- allocate child skills, if our skill has value >= 30
64insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
65^select sn.CharacterID, stn.ID, 0 as newSkillAmount, 1 as newLockStatus
66^from skill_type_new stn
67^join skills_new sn on sn.SkillTypeID = stn.Parent
68^where stn.Parent = in_newSkillTypeID
69^^and sn.SkillAmount >= 30*10000000
70^^and !exists(select * from skills_new sn2 where sn2.CharacterID = sn.CharacterID and sn2.SkillTypeID = stn.ID);
71
72-- distribute skills with value > 100 to first child skill with value < 100
73-- (we can't use ORDER BY and LIMIT in multiple-table update. Also, we can't use LIMIT in subqueries due to MariaDB compatibility reasons)
74update skills_new sn
75-- select sn.SkillAmount as oldVal, (sn.SkillAmount + (sn_base.SkillAmount - 100*10000000)) as newVal, sn.* from skills_new sn
76^join skill_type_new stn on stn.ID = sn.SkillTypeID
77^-- join skills_new sn_base on sn_base.SkillTypeID = stn.Parent and sn_base.CharacterID = sn.CharacterID -- we can't use updated table in subquery, so implicitly copy it into a temporary table
78^join (select SkillTypeID, CharacterID, SkillAmount from skills_new where SkillTypeID = in_newSkillTypeID) as sn_base
79^^on sn_base.SkillTypeID = stn.Parent and sn_base.CharacterID = sn.CharacterID
80^set sn.SkillAmount = (sn.SkillAmount + (sn_base.SkillAmount - 100*10000000))
81^where sn_base.SkillAmount > 100*10000000
82^^-- and sn.SkillAmount < 100*10000000
83^^-- and stn.Parent = 1
84^^and stn.ID in
85^^(
86^^^select min(stn2.ID)
87^^^from skill_type_new stn2
88^^^-- join skills_new sn2 on sn2.SkillTypeID = stn2.ID -- we can't use updated table in subquery, so implicitly copy it into a temporary table
89^^^join (select SkillTypeID, CharacterID, SkillAmount from skills_new where SkillAmount < 100*10000000) as sn2
90^^^^on sn2.SkillTypeID = stn2.ID
91^^^where stn2.Parent = in_newSkillTypeID
92^^^^and sn2.CharacterID = sn.CharacterID
93^^^^-- and sn2.SkillAmount < 100*10000000
94^^);
95^-- order by stn.ID
96^-- limit 1
97
98-- cap skill values at 100
99update skills_new
100^set SkillAmount = 100*10000000
101^where SkillAmount > 100*10000000;
102
103END;
104
105DROP FUNCTION IF EXISTS _getMaxSkillValue;
106CREATE FUNCTION `_getMaxSkillValue`(
107^`in_parentSkillValue` INT UNSIGNED
108)
109^RETURNS INT UNSIGNED
110BEGIN
111^declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
112
113^if(in_parentSkillValue < 30*skillAmountMult) then
114^^return 0;
115^elseif(in_parentSkillValue < 60*skillAmountMult) then
116^^return (30*skillAmountMult - 1);
117^end if;
118
119^return 100*skillAmountMult;
120END;
121
122DROP PROCEDURE IF EXISTS _transferSkillStraight;
123CREATE PROCEDURE _transferSkillStraight(
124^IN `in_oldSkillTypeID` INT UNSIGNED,
125^IN `in_newSkillTypeID` INT UNSIGNED
126)
127BEGIN
128
129declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
130
131-- allocate needed skill with 0 values at first.
132-- don't use "insert ... select on duplicate key update" here - it is not so safe for replication.
133insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
134^select c.ID, in_newSkillTypeID as SkillTypeID, 0 as newSkillAmount, 1 as newLockStatus
135^^from `character` c
136^^join skills s on s.CharacterID = c.ID
137^^where s.SkillTypeID = in_oldSkillTypeID
138^^^and !exists(select * from skills_new sn where sn.CharacterID = c.ID and sn.SkillTypeID = in_newSkillTypeID)
139^^order by c.ID;
140
141-- transfer skill values
142update skills_new sn
143^join skills s
144^^on sn.CharacterID = s.CharacterID
145^^and sn.SkillTypeID = in_newSkillTypeID
146^^and s.SkillTypeID = in_oldSkillTypeID
147^set sn.SkillAmount = (sn.SkillAmount + s.SkillAmount);
148
149-- empty old skill values
150update skills
151^set SkillAmount = 0
152^where SkillTypeID = in_oldSkillTypeID;
153
154-- allocate child skills, if our skill has value >= 30
155insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
156^select sn.CharacterID, stn.ID, 0 as newSkillAmount, 1 as newLockStatus
157^from skill_type_new stn
158^join skills_new sn on sn.SkillTypeID = stn.Parent
159^where stn.Parent = in_newSkillTypeID
160^^and sn.SkillAmount >= 30*skillAmountMult
161^^and !exists(select * from skills_new sn2 where sn2.CharacterID = sn.CharacterID and sn2.SkillTypeID = stn.ID);
162
163-- cap skill values at 100
164update skills_new
165^set SkillAmount = 100*10000000
166^where SkillAmount > 100*10000000;
167
168END;
169
170
171DROP PROCEDURE IF EXISTS _transferSkillToSkillChainLimit;
172CREATE PROCEDURE _transferSkillToSkillChainLimit(
173^IN `in_oldSkillTypeID` INT UNSIGNED,
174^IN `in_newBaseSkillTypeID` INT UNSIGNED,
175^IN `in_skillAmountLimit` INT UNSIGNED
176)
177BEGIN
178
179declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
180declare skillAmountLimit INT UNSIGNED DEFAULT least(greatest(in_skillAmountLimit, 30), 100); -- clamp skill amount limit at 100
181declare newBaseSkillTypeID INT UNSIGNED DEFAULT in_newBaseSkillTypeID; -- currently used parent skill in skill chain
182
183if(in_skillAmountLimit < 30 or in_skillAmountLimit > 100) then
184^SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'in_skillAmountLimit should be between 30 and 100';
185end if;
186
187while newBaseSkillTypeID is not nu
188WARN 2018-01-09 14:45:01.139 {02} <initServer> [0] DB::RS(1 ms) SELECT `Value` FROM `_patch_execute_status` LIMIT 1;
189ERRR 2018-01-09 14:45:01.139 {02} <initServer> [0] CmServerInfoManager::_applyDbPatch() - validation of patch file execution failed
190ERRR 2018-01-09 14:45:01.139 {02} <initServer> [0] [line #1167] CmServerInfoManager::initLocalWorld() - can't access to db for world id=2
191ERRR 2018-01-09 14:45:01.139 {02} <initServer> [0] Fatal: Can't init local world (id=2). Terminating.
192quit() -- quit requested!
193ECHO 2018-01-09 14:45:01.139 {} <> [0] Engine initialized...
194ECHO 2018-01-09 14:45:01.172 {} <> [0] Thread pool initialized, threads: 11
195WARN 2018-01-09 14:45:01.172 {} <> [1] Warning - Tick [1] took 334 (>64) ms!
196core/scripts/server/server.cs (0): Unable to find function destroyWorld
197INFO 2018-01-09 14:45:01.172 {01} <onExit> [1] The server has been shut down!
198ECHO 2018-01-09 14:45:01.172 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread9:0x1160]
199ECHO 2018-01-09 14:45:01.172 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread8:0x115C]
200ECHO 2018-01-09 14:45:01.172 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread3:0x1148]
201ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread6:0x1154]
202ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread1:0x1140]
203ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread5:0x1150]
204ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread0:0x113C]
205ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread4:0x114C]
206ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread7:0x1158]
207ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread2:0x1144]
208ECHO 2018-01-09 14:45:01.173 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread10:0x1164]
209ECHO 2018-01-09 14:45:01.173 {} <> [1] Thread pool shut down