· 8 years ago · Feb 11, 2018, 04:40 PM
1//-------------------------- 2/4/2018 -- 14:59:01 -- yo_1.3.6.0 --
2ECHO 2018-02-04 14:59:01.223 {} <> [0] Processor Init:
3ECHO 2018-02-04 14:59:01.223 {} <> [0] Features detected: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC MTRR SEP PGE MCA CMOV PAT PSE36 CLFLUSH ACPI MMX FXSR SSE SSE2 SS HT TM PBE PNI PCLMUL EST TM2 SSSE3 CX16 XTPR SSE4_1 SSE4_2 SYSCALL XD MOVBE POPCNT AES XSAVE OSXSAVE AVX RDTSCP LM LAHF_LM CONSTANT_TSC FMA3 F16C RDRAND AVX2 BMI1 BMI2 HTT
4ECHO 2018-02-04 14:59:01.223 {} <> [0] GenuineIntel, Haswell (Xeon)
5ECHO 2018-02-04 14:59:01.223 {} <> [0] MP detected [4 cores, 8 logical, 1 physical]
6ECHO 2018-02-04 14:59:01.223 {} <> [0]
7ECHO 2018-02-04 14:59:01.223 {} <> [0] Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz, ~3.40 Ghz
8ECHO 2018-02-04 14:59:01.223 {} <> [0] Initializing platform...
9ECHO 2018-02-04 14:59:01.223 {} <> [0] Done
10INFO 2018-02-04 14:59:01.258 {01} <defaultParseArgs> [0] -worldID == 40
11ECHO 2018-02-04 14:59:01.259 {} <> [0]
12ECHO 2018-02-04 14:59:01.260 {} <<Thread>> [0] Binding server port to 0.0.0.0 [T:ThreadConsole:0x1A20]
13ECHO 2018-02-04 14:59:01.261 {} <> [0] --------- Loading DIRS ---------
14INFO 2018-02-04 14:59:01.261 {} <> [0] vyo_1.3.6.0
15ECHO 2018-02-04 14:59:01.261 {} <> [0]
16WARN 2018-02-04 14:59:01.294 {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
17WARN 2018-02-04 14:59:01.294 {01} <onStart> [0] CmMessages::load() - can't parse message# 2946
18ECHO 2018-02-04 14:59:01.298 {01} <onStart> [0]
19--------- Initializing Directory: scripts ---------
20ECHO 2018-02-04 14:59:01.298 {02} <initServer> [0]
21--------- Initializing LiF Server: Server Scripts ---------
22ECHO 2018-02-04 14:59:01.302 {02} <initServer> [0] Loading CmConfiguration
23ECHO 2018-02-04 14:59:01.303 {02} <initServer> [0] Init of DB interface
24INFO 2018-02-04 14:59:01.304 {03} <checkServerIdLockFile> [0] Renaming log file name from 'logs/2018-02-04/S0_LA610_2018-02-04-14-59-01_p6940.log' to 'logs/2018-02-04/S40_LA610_2018-02-04-14-59-01_p6940.log'...
25//-------------------------- 2/4/2018 -- 14:59:01 -- yo_1.3.6.0 --
26INFO 2018-02-04 14:59:01.308 {03} <checkServerIdLockFile> [0] Log file name successfully renamed!
27INFO 2018-02-04 14:59:01.311 {02} <initServer> [0] WORLD_ID=40
28WARN 2018-02-04 14:59:01.312 {02} <initServer> [0] DB::RS(0 ms) SHOW DATABASES LIKE 'lif_40';
29WARN 2018-02-04 14:59:01.312 {02} <initServer> [0] DB::noRS(0 ms) USE `lif_40`;
30WARN 2018-02-04 14:59:01.898 {02} <initServer> [0] DB::mNoRS(587 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 ();
31ECHO 2018-02-04 14:59:01.898 {02} <initServer> [0] Patching database [1/2]...
32WARN 2018-02-04 14:59:01.898 {02} <initServer> [0] DB::noRS(0 ms) USE `lif_40`;
33WARN 2018-02-04 14:59:01.914 {02} <initServer> [0] DB::mNoRS(16 ms)
34-- NOTE: do not use DELIMITER here
35-- NOTE: do not use DEFINER for stored procedures and functions here
36
37DROP PROCEDURE IF EXISTS _transferSkill;
38CREATE PROCEDURE _transferSkill(
39^IN `in_oldSkillTypeID` INT UNSIGNED,
40^IN `in_newSkillTypeID` INT UNSIGNED
41)
42BEGIN
43
44-- allocate needed skill with 0 values at first.
45-- don't use "insert ... select on duplicate key update" here - it is not so safe for replication.
46insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
47^select c.ID, in_newSkillTypeID as SkillTypeID, 0 as newSkillAmount, 1 as newLockStatus
48^^from `character` c
49^^join skills s on s.CharacterID = c.ID
50^^where s.SkillTypeID = in_oldSkillTypeID
51^^^and !exists(select * from skills_new sn where sn.CharacterID = c.ID and sn.SkillTypeID = in_newSkillTypeID)
52^^order by c.ID;
53
54-- transfer skill values
55update skills_new sn
56^join skills s on sn.CharacterID = s.CharacterID and sn.SkillTypeID = in_newSkillTypeID and s.SkillTypeID = in_oldSkillTypeID
57^set sn.SkillAmount = (sn.SkillAmount + s.SkillAmount);
58
59-- empty old skill values
60update skills
61^set SkillAmount = 0
62^where SkillTypeID = in_oldSkillTypeID;
63
64-- allocate child skills, if our skill has value >= 30
65insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
66^select sn.CharacterID, stn.ID, 0 as newSkillAmount, 1 as newLockStatus
67^from skill_type_new stn
68^join skills_new sn on sn.SkillTypeID = stn.Parent
69^where stn.Parent = in_newSkillTypeID
70^^and sn.SkillAmount >= 30*10000000
71^^and !exists(select * from skills_new sn2 where sn2.CharacterID = sn.CharacterID and sn2.SkillTypeID = stn.ID);
72
73-- distribute skills with value > 100 to first child skill with value < 100
74-- (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)
75update skills_new sn
76-- select sn.SkillAmount as oldVal, (sn.SkillAmount + (sn_base.SkillAmount - 100*10000000)) as newVal, sn.* from skills_new sn
77^join skill_type_new stn on stn.ID = sn.SkillTypeID
78^-- 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
79^join (select SkillTypeID, CharacterID, SkillAmount from skills_new where SkillTypeID = in_newSkillTypeID) as sn_base
80^^on sn_base.SkillTypeID = stn.Parent and sn_base.CharacterID = sn.CharacterID
81^set sn.SkillAmount = (sn.SkillAmount + (sn_base.SkillAmount - 100*10000000))
82^where sn_base.SkillAmount > 100*10000000
83^^-- and sn.SkillAmount < 100*10000000
84^^-- and stn.Parent = 1
85^^and stn.ID in
86^^(
87^^^select min(stn2.ID)
88^^^from skill_type_new stn2
89^^^-- 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
90^^^join (select SkillTypeID, CharacterID, SkillAmount from skills_new where SkillAmount < 100*10000000) as sn2
91^^^^on sn2.SkillTypeID = stn2.ID
92^^^where stn2.Parent = in_newSkillTypeID
93^^^^and sn2.CharacterID = sn.CharacterID
94^^^^-- and sn2.SkillAmount < 100*10000000
95^^);
96^-- order by stn.ID
97^-- limit 1
98
99-- cap skill values at 100
100update skills_new
101^set SkillAmount = 100*10000000
102^where SkillAmount > 100*10000000;
103
104END;
105
106DROP FUNCTION IF EXISTS _getMaxSkillValue;
107CREATE FUNCTION `_getMaxSkillValue`(
108^`in_parentSkillValue` INT UNSIGNED
109)
110^RETURNS INT UNSIGNED
111BEGIN
112^declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
113
114^if(in_parentSkillValue < 30*skillAmountMult) then
115^^return 0;
116^elseif(in_parentSkillValue < 60*skillAmountMult) then
117^^return (30*skillAmountMult - 1);
118^end if;
119
120^return 100*skillAmountMult;
121END;
122
123DROP PROCEDURE IF EXISTS _transferSkillStraight;
124CREATE PROCEDURE _transferSkillStraight(
125^IN `in_oldSkillTypeID` INT UNSIGNED,
126^IN `in_newSkillTypeID` INT UNSIGNED
127)
128BEGIN
129
130declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
131
132-- allocate needed skill with 0 values at first.
133-- don't use "insert ... select on duplicate key update" here - it is not so safe for replication.
134insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
135^select c.ID, in_newSkillTypeID as SkillTypeID, 0 as newSkillAmount, 1 as newLockStatus
136^^from `character` c
137^^join skills s on s.CharacterID = c.ID
138^^where s.SkillTypeID = in_oldSkillTypeID
139^^^and !exists(select * from skills_new sn where sn.CharacterID = c.ID and sn.SkillTypeID = in_newSkillTypeID)
140^^order by c.ID;
141
142-- transfer skill values
143update skills_new sn
144^join skills s
145^^on sn.CharacterID = s.CharacterID
146^^and sn.SkillTypeID = in_newSkillTypeID
147^^and s.SkillTypeID = in_oldSkillTypeID
148^set sn.SkillAmount = (sn.SkillAmount + s.SkillAmount);
149
150-- empty old skill values
151update skills
152^set SkillAmount = 0
153^where SkillTypeID = in_oldSkillTypeID;
154
155-- allocate child skills, if our skill has value >= 30
156insert into skills_new (CharacterID, SkillTypeID, SkillAmount, LockStatus)
157^select sn.CharacterID, stn.ID, 0 as newSkillAmount, 1 as newLockStatus
158^from skill_type_new stn
159^join skills_new sn on sn.SkillTypeID = stn.Parent
160^where stn.Parent = in_newSkillTypeID
161^^and sn.SkillAmount >= 30*skillAmountMult
162^^and !exists(select * from skills_new sn2 where sn2.CharacterID = sn.CharacterID and sn2.SkillTypeID = stn.ID);
163
164-- cap skill values at 100
165update skills_new
166^set SkillAmount = 100*10000000
167^where SkillAmount > 100*10000000;
168
169END;
170
171
172DROP PROCEDURE IF EXISTS _transferSkillToSkillChainLimit;
173CREATE PROCEDURE _transferSkillToSkillChainLimit(
174^IN `in_oldSkillTypeID` INT UNSIGNED,
175^IN `in_newBaseSkillTypeID` INT UNSIGNED,
176^IN `in_skillAmountLimit` INT UNSIGNED
177)
178BEGIN
179
180declare skillAmountMult INT UNSIGNED DEFAULT 10000000;
181declare skillAmountLimit INT UNSIGNED DEFAULT least(greatest(in_skillAmountLimit, 30), 100); -- clamp skill amount limit at 100
182declare newBaseSkillTypeID INT UNSIGNED DEFAULT in_newBaseSkillTypeID; -- currently used parent skill in skill chain
183
184if(in_skillAmountLimit < 30 or in_skillAmountLimit > 100) then
185^SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'in_skillAmountLimit should be between 30 and 100';
186end if;
187
188while newBaseSkillTypeID is not nu
189WARN 2018-02-04 14:59:01.915 {02} <initServer> [0] DB::RS(0 ms) SELECT `Value` FROM `_patch_execute_status` LIMIT 1;
190ERRR 2018-02-04 14:59:01.915 {02} <initServer> [0] CmServerInfoManager::_applyDbPatch() - validation of patch file execution failed
191ERRR 2018-02-04 14:59:01.915 {02} <initServer> [0] [line #1167] CmServerInfoManager::initLocalWorld() - can't access to db for world id=40
192ERRR 2018-02-04 14:59:01.915 {02} <initServer> [0] Fatal: Can't init local world (id=40). Terminating.
193quit() -- quit requested!
194ECHO 2018-02-04 14:59:01.915 {} <> [0] Engine initialized...
195ECHO 2018-02-04 14:59:01.916 {} <> [0] Thread pool initialized, threads: 7
196WARN 2018-02-04 14:59:01.916 {} <> [1] Warning - Tick [1] took 695 (>64) ms!
197core/scripts/server/server.cs (0): Unable to find function destroyWorld
198INFO 2018-02-04 14:59:01.916 {01} <onExit> [1] The server has been shut down!
199ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread6:0x0434]
200ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread3:0x1248]
201ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread4:0x1E0C]
202ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread2:0x1040]
203ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread5:0x1D3C]
204ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread1:0x0204]
205ECHO 2018-02-04 14:59:01.916 {} <<Thread>> [1] Thread worker terminated [T:WorkerThread0:0x1CC4]
206ECHO 2018-02-04 14:59:01.916 {} <> [1] Thread pool shut down