-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstat_default.as
133 lines (109 loc) · 6.14 KB
/
stat_default.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// if we get some stat from a unit, but he has none of it, we come here!!
class stat_default{
static var statDefaultCategory = new Array(
new Array('биография', new Array('имя','фамилия','отец','мать','брак','рождение','раса','пол'))
,new Array('состояние-болезнь', new Array('рана','перелом'))
,new Array('стат-бой', new Array('максимальное ОЗ', 'максимальное ОМ','физ урон',
'маг урон','физ защита','маг защита','уклонение','инициатива'))
,new Array('состояние', new Array('ОЗ', 'ОМ'))
,new Array('стат', new Array(2,3,4))
);
static var statDefault = new Array(
new Array(new Array('name', 'имя'),
new Array('раса:гном|пол:ж', 'Марта'),
new Array('раса:гном|пол:м', 'Ульрих'),
new Array('раса:человек|пол:ж', 'Мари'),
new Array('раса:человек|пол:м', 'Вильям'),
new Array('', 'Безымянный')
),
new Array(new Array('lastname', 'фамилия'),
new Array('раса:гном', 'Берсон'),
new Array('раса:человек', 'Стоун'),
new Array('', 'Безфамильный')
),
new Array(new Array('str','strength','сил','сила'), new Array('', 8)),
new Array(new Array('dex','dexterity','лов','ловкость'), new Array('', 8)),
new Array(new Array('con','constitution','тел','телосложение'), new Array('', 8)),
new Array(new Array('int','intellect','инт','интеллект'), new Array('', 6)),
new Array(new Array('wis','wisdom','муд','мудрость'), new Array('', 6)),
new Array(new Array('cha','charisma','хар','харизма'), new Array('', 6)),
new Array(new Array('IP', 'initiative points','ОИ','очки инициативы'), new Array('', 0)),
new Array(new Array('ini ref','initiative refill','нак иниц','накопление инициативы'), new Array('', 10)),
new Array(new Array('base HP', 'базовое ОЗ'), new Array('', stat_calculator.baseHP)),
new Array(new Array('max HP', 'максимальное ОЗ'), new Array('', stat_calculator.maxHP)),
new Array(new Array('HP', 'ОЗ','очки здоровья'), new Array('', stat_calculator.curHP)),
new Array(new Array('fdmg', 'физ урон'), new Array('', stat_calculator.curHP)),
new Array(new Array('mdmg', 'маг урон'), new Array('', stat_calculator.curHP)),
new Array(new Array('fdef', 'физ защита'), new Array('', stat_calculator.curHP)),
new Array(new Array('mdef', 'маг защита'), new Array('', stat_calculator.curHP)),
new Array(new Array('ddg', 'уклонение'), new Array('', stat_calculator.curHP))
);
static function findDefaultCategory(statName){
for (var i = 0; i < statDefaultCategory.length; ++i)
for (var j = 0; j < statDefaultCategory[i][1].length; ++j)
if (statName == statDefaultCategory[i][1][j])
return statDefaultCategory[i][0];
return 'стат';
}
static function goCheckCondition(who, template):Boolean{
var rules:Array = template.split('|');
var result = true;
for (var i = 0; i < rules.length; ++i){
rules[i] = rules[i].split(':');
var statNam = rules[i][0];
var paramVal = rules[i][1];
var val = stat_engine.watchStatValue(who, statNam);
var found = false;
for (var j = 0; j < val.length; ++j)
if (val[j] == paramVal) found = true;
if (found != true)
{ ut.TraceDebug('- ' + who.name + ': ' + rules[i][0] + ' - не ' + paramVal); return false; }
}
ut.TraceDebug('> Шаблон подходит: ' + who.name + ' является ' + template);
return result;//result;
}
static function getDefaultStat(who, statName):Object{
ut.TraceDebug('? найти дефолтное значение для ' + who.name + ': ' + statName);
var resStatName:String = statName;
var resStatValue:Array = new Array();
//resultStat.push();
for (var stDefInd = 0; stDefInd < statDefault.length; ++stDefInd){
var statNameVariants = statDefault[stDefInd][0];
var nameIndT = -1;
for (var nameInd = 0; nameInd < statDefault[stDefInd][0].length; ++nameInd){
var possibleName = statDefault[stDefInd][0][nameInd];
if (possibleName == statName || (possibleName.charAt(0) == '%' && (statName.indexOf(possibleName.substr(1)) >= 0)))
{nameIndT = nameInd; ut.TraceDebug('+ Существует параметр с именем "' + statName + '": ' + nameIndT);break;}
}
if (nameIndT >= 0){
var statName = statDefault[stDefInd][0][nameIndT];
for (var caseInd = 1; caseInd < statDefault[stDefInd].length; ++caseInd){
var goCopy = false;
if (statDefault[stDefInd][caseInd][0] == '' ) // no condition
goCopy = true;
else
goCopy = goCheckCondition(who, statDefault[stDefInd][caseInd][0]);// go check condition
if (goCopy == true){
for (var jj = 1; jj < statDefault[stDefInd][caseInd].length; ++jj){
if (typeof(statDefault[stDefInd][caseInd][jj])+'' == 'function'){
resStatValue.push(statDefault[stDefInd][caseInd][jj](who));
ut.TraceDebug('Рассчёт параметра '+statName+' по функции.');
}
else
{
resStatValue.push(statDefault[stDefInd][caseInd][jj]);
stat_calculator.addInfo(who, statName, resStatValue + ' база'); // не вычислямое по формуле, добавляется как база
}
}
var newStat = stat_engine.createStat(resStatName, resStatValue);
newStat.category = findDefaultCategory(newStat.name);
ut.Trace('Дефолтное значение для "' + statName + '" становится -> ' + stat_engine.statToString(newStat));
return newStat;
}
}
ut.TraceDebug('- В базе дефолтных значений, нет правильного значения для ' + who + ':' + statName+ ', ему присвоено значение пустого массива {}');
}
}
return stat_engine.createStat(resStatName, undefined);
}
}