1 | <?php
|
---|
2 |
|
---|
3 | require_once ('includes/allitems.php');
|
---|
4 | require_once ('includes/alllocales.php');
|
---|
5 |
|
---|
6 | // Классы персонажей (битовые маски)
|
---|
7 | define ("CLASS_WARRIOR", 1);
|
---|
8 | define ("CLASS_PALADIN", 2);
|
---|
9 | define ("CLASS_HUNTER", 4);
|
---|
10 | define ("CLASS_ROGUE", 8);
|
---|
11 | define ("CLASS_PRIEST", 16);
|
---|
12 | define ("CLASS_SHAMAN", 64);
|
---|
13 | define ("CLASS_MAGE", 128);
|
---|
14 | define ("CLASS_WARLOCK", 256);
|
---|
15 | define ("CLASS_DRUID", 1024);
|
---|
16 |
|
---|
17 | // Классы персонажей (архив)
|
---|
18 | $classes = array(
|
---|
19 | 1 => LOCALE_WARRIOR,
|
---|
20 | 2 => LOCALE_PALADIN,
|
---|
21 | 3 => LOCALE_HUNTER,
|
---|
22 | 4 => LOCALE_ROGUE,
|
---|
23 | 5 => LOCALE_PRIEST,
|
---|
24 | 6 => LOCALE_DEATH_KNIGHT,
|
---|
25 | 7 => LOCALE_SHAMAN,
|
---|
26 | 8 => LOCALE_MAGE,
|
---|
27 | 9 => LOCALE_WARLOCK,
|
---|
28 | 11 => LOCALE_DRUID
|
---|
29 | );
|
---|
30 |
|
---|
31 | define ("RACE_HUMAN", 1);
|
---|
32 | define ("RACE_ORC", 2);
|
---|
33 | define ("RACE_DWARF", 4);
|
---|
34 | define ("RACE_NIGHTELF", 8);
|
---|
35 | define ("RACE_UNDEAD", 16);
|
---|
36 | define ("RACE_TAUREN", 32);
|
---|
37 | define ("RACE_GNOME", 64);
|
---|
38 | define ("RACE_TROLL", 128);
|
---|
39 | define ("RACE_BLOODELF", 512);
|
---|
40 | define ("RACE_DRAENEI", 1024);
|
---|
41 |
|
---|
42 | // Типы разделов
|
---|
43 | global $types;
|
---|
44 | $types = array(
|
---|
45 | 1 => 'npc',
|
---|
46 | 2 => 'object',
|
---|
47 | 3 => 'item',
|
---|
48 | 4 => 'itemset',
|
---|
49 | 5 => 'quest',
|
---|
50 | 6 => 'spell',
|
---|
51 | 7 => 'zone',
|
---|
52 | 8 => 'faction'
|
---|
53 | );
|
---|
54 |
|
---|
55 | // Отношения со фракциями
|
---|
56 | $reputations = array(
|
---|
57 | 1 => LOCALE_NEUTRAL,
|
---|
58 | 3000 => LOCALE_FRIENDLY,
|
---|
59 | 9000 => LOCALE_HONORED,
|
---|
60 | 21000 => LOCALE_REVERED,
|
---|
61 | 42000 => LOCALE_EXALTED
|
---|
62 | );
|
---|
63 |
|
---|
64 | function sec_to_time($secs)
|
---|
65 | {
|
---|
66 | $time = array();
|
---|
67 | if ($secs>=3600)
|
---|
68 | {
|
---|
69 | $time['h'] = floor($secs/3600);
|
---|
70 | $secs = $secs - $time['h']*3600;
|
---|
71 | }
|
---|
72 | if ($secs>=60)
|
---|
73 | {
|
---|
74 | $time['m'] = floor($secs/60);
|
---|
75 | $secs = $secs - $time['m']*60;
|
---|
76 | }
|
---|
77 | if ($secs>0)
|
---|
78 | $time['s'] = $secs;
|
---|
79 | return $time;
|
---|
80 | }
|
---|
81 |
|
---|
82 | function money2coins($money)
|
---|
83 | {
|
---|
84 | $coins = array();
|
---|
85 | if ($money>=10000)
|
---|
86 | {
|
---|
87 | $coins['moneygold'] = floor($money/10000);
|
---|
88 | $money = $money - $coins['moneygold']*10000;
|
---|
89 | }
|
---|
90 | if ($money>=100)
|
---|
91 | {
|
---|
92 | $coins['moneysilver'] = floor($money/100);
|
---|
93 | $money = $money - $coins['moneysilver']*100;
|
---|
94 | }
|
---|
95 | if ($money>0)
|
---|
96 | $coins['moneycopper'] = $money;
|
---|
97 | return $coins;
|
---|
98 | }
|
---|
99 |
|
---|
100 | // Классы, для которых предназначена вещь
|
---|
101 | function classes($class)
|
---|
102 | {
|
---|
103 | $tmp = '';
|
---|
104 | if ($class & CLASS_WARRIOR)
|
---|
105 | $tmp = LOCALE_WARRIOR;
|
---|
106 | if ($class & CLASS_PALADIN)
|
---|
107 | if ($tmp) $tmp = $tmp.', '.LOCALE_PALADIN; else $tmp = LOCALE_PALADIN;
|
---|
108 | if ($class & CLASS_HUNTER)
|
---|
109 | if ($tmp) $tmp = $tmp.', '.LOCALE_HUNTER; else $tmp = LOCALE_HUNTER;
|
---|
110 | if ($class & CLASS_ROGUE)
|
---|
111 | if ($tmp) $tmp = $tmp.', '.LOCALE_ROGUE; else $tmp = LOCALE_ROGUE;
|
---|
112 | if ($class & CLASS_PRIEST)
|
---|
113 | if ($tmp) $tmp = $tmp.', '.LOCALE_PRIEST; else $tmp = LOCALE_PRIEST;
|
---|
114 | if ($class & CLASS_SHAMAN)
|
---|
115 | if ($tmp) $tmp = $tmp.', '.LOCALE_SHAMAN; else $tmp = LOCALE_SHAMAN;
|
---|
116 | if ($class & CLASS_MAGE)
|
---|
117 | if ($tmp) $tmp = $tmp.', '.LOCALE_MAGE; else $tmp = LOCALE_MAGE;
|
---|
118 | if ($class & CLASS_WARLOCK)
|
---|
119 | if ($tmp) $tmp = $tmp.', '.LOCALE_WARLOCK; else $tmp = LOCALE_WARLOCK;
|
---|
120 | if ($class & CLASS_DRUID)
|
---|
121 | if ($tmp) $tmp = $tmp.', '.LOCALE_DRUID; else $tmp = LOCALE_DRUID;
|
---|
122 | if ($tmp == LOCALE_WARRIOR.', '.LOCALE_PALADIN.', '.LOCALE_HUNTER.', '.LOCALE_ROGUE
|
---|
123 | .', '.LOCALE_PRIEST.', '.LOCALE_SHAMAN.', '.LOCALE_MAGE.', '.LOCALE_WARLOCK.', '.LOCALE_DRUID)
|
---|
124 | return;
|
---|
125 | else
|
---|
126 | return $tmp;
|
---|
127 | }
|
---|
128 |
|
---|
129 | function races($race)
|
---|
130 | {
|
---|
131 | // Простые варианты:
|
---|
132 | if($race == RACE_HUMAN|RACE_ORC|RACE_DWARF|RACE_NIGHTELF|RACE_UNDEAD|RACE_TAUREN|RACE_GNOME|RACE_TROLL|RACE_BLOODELF|RACE_DRAENEI || $race == 0)
|
---|
133 | return array('side' => 3, 'name' => LOCALE_BOTH);
|
---|
134 | elseif($race == RACE_ORC|RACE_UNDEAD|RACE_TAUREN|RACE_TROLL|RACE_BLOODELF)
|
---|
135 | return array('side' => 2, 'name' => LOCALE_HORDE);
|
---|
136 | elseif($race == RACE_HUMAN|RACE_DWARF|RACE_NIGHTELF|RACE_GNOME|RACE_DRAENEI)
|
---|
137 | return array('side' => 1, 'name' => LOCALE_ALLIANCE);
|
---|
138 | else
|
---|
139 | {
|
---|
140 | $races = array('name' => '', 'side' => 0);
|
---|
141 | if ($race & RACE_HUMAN)
|
---|
142 | {
|
---|
143 | (($races['side']==2) or ($races['side']==3))? $races['side']=3 : $races['side']=1;
|
---|
144 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_HUMAN;
|
---|
145 | }
|
---|
146 | if ($race & RACE_ORC)
|
---|
147 | {
|
---|
148 | (($races['side']==1) or ($races['side']==3))? $races['side']=3 : $races['side']=2;
|
---|
149 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_ORC;
|
---|
150 | }
|
---|
151 | if ($race & RACE_DWARF)
|
---|
152 | {
|
---|
153 | (($races['side']==2) or ($races['side']==3))? $races['side']=3 : $races['side']=1;
|
---|
154 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_DWARF;
|
---|
155 | }
|
---|
156 | if ($race & RACE_NIGHTELF)
|
---|
157 | {
|
---|
158 | (($races['side']==2) or ($races['side']==3))? $races['side']=3 : $races['side']=1;
|
---|
159 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_NIGHT_ELF;
|
---|
160 | }
|
---|
161 | if ($race & RACE_UNDEAD)
|
---|
162 | {
|
---|
163 | (($races['side']==1) or ($races['side']==3))? $races['side']=3 : $races['side']=2;
|
---|
164 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_UNDEAD;
|
---|
165 | }
|
---|
166 | if ($race & RACE_TAUREN)
|
---|
167 | {
|
---|
168 | (($races['side']==1) or ($races['side']==3))? $races['side']=3 : $races['side']=2;
|
---|
169 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_TAUREN;
|
---|
170 | }
|
---|
171 | if ($race & RACE_GNOME)
|
---|
172 | {
|
---|
173 | (($races['side']==2) or ($races['side']==3))? $races['side']=3 : $races['side']=1;
|
---|
174 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_GNOME;
|
---|
175 | }
|
---|
176 | if ($race & RACE_TROLL)
|
---|
177 | {
|
---|
178 | (($races['side']==1) or ($races['side']==3))? $races['side']=3 : $races['side']=2;
|
---|
179 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_TROLL;
|
---|
180 | }
|
---|
181 | if ($race & RACE_BLOODELF)
|
---|
182 | {
|
---|
183 | (($races['side']==1) or ($races['side']==3))? $races['side']=3 : $races['side']=2;
|
---|
184 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_BLOOD_ELF;
|
---|
185 | }
|
---|
186 | if ($race & RACE_DRAENEI)
|
---|
187 | {
|
---|
188 | (($races['side']==2) or ($races['side']==3))? $races['side']=3 : $races['side']=1;
|
---|
189 | if ($races['name']) $races['name'] .= ', '; $races['name'] .= LOCALE_DRAENEI;
|
---|
190 | }
|
---|
191 | return $races;
|
---|
192 | }
|
---|
193 | }
|
---|
194 |
|
---|
195 | function sum_subarrays_by_key( $tab, $key ) {
|
---|
196 | $sum = 0;
|
---|
197 | foreach($tab as $sub_array) {
|
---|
198 | $sum += $sub_array[$key];
|
---|
199 | }
|
---|
200 | return $sum;
|
---|
201 | }
|
---|
202 |
|
---|
203 | function coord_mangos2wow($mapid, $x, $y, $global)
|
---|
204 | {
|
---|
205 | // Карты
|
---|
206 | global $map_images;
|
---|
207 | // Подключение к базе
|
---|
208 | global $DB;
|
---|
209 |
|
---|
210 | $rows = $DB->select("SELECT * FROM ?_zones WHERE (mapID=? and x_min<? and x_max>? and y_min<? and y_max>?)", $mapid, $x, $x, $y, $y);
|
---|
211 |
|
---|
212 | foreach ($rows as $numRow=>$row) {
|
---|
213 | // Сохраяняем имя карты и координаты
|
---|
214 | $wow['zone'] = $row['areatableID'];
|
---|
215 | $wow['name'] = $row['name'];
|
---|
216 |
|
---|
217 | // Т.к. в игре координаты начинают отсчёт с левого верхнего угла
|
---|
218 | // а в системе координат сервера с правого нижнего,
|
---|
219 | // делаем соответствующее преобразование.
|
---|
220 | $tx = 100 - ($y - $row["y_min"]) / (($row["y_max"] - $row["y_min"]) / 100);
|
---|
221 | $ty = 100 - ($x - $row["x_min"]) / (($row["x_max"] - $row["x_min"]) / 100);
|
---|
222 |
|
---|
223 | // А если ещё и с цветом совпала - нах цикл, это всё наше :) Оо
|
---|
224 | // Если ещё не загружена - загружаем.
|
---|
225 | if (!isset($map_images[$wow['zone']])) {
|
---|
226 | $mapname = str_replace("\\", "/", getcwd()).'/images/tmp/'.$row['areatableID'].'.png';
|
---|
227 | if (file_exists($mapname)) {
|
---|
228 | $map_images[$wow['zone']] = @ImageCreateFromPNG($mapname);
|
---|
229 | } else {
|
---|
230 | echo "<font color=red>....Map $mapname not found (ID=".$wow['zone'].")</font><br>";
|
---|
231 | }
|
---|
232 | }
|
---|
233 |
|
---|
234 | // Если так и не загрузилась... Возможно такой карты ещё просто нету :)
|
---|
235 | if ($map_images[$wow['zone']]) {
|
---|
236 | if (@ImageColorAt($map_images[$wow['zone']], round($tx * 10), round($ty * 10)) === 0) {
|
---|
237 | break;
|
---|
238 | }
|
---|
239 | }
|
---|
240 | }
|
---|
241 |
|
---|
242 | if (count($rows)==0)
|
---|
243 | {
|
---|
244 | // Ничего не найдено. Мб инста??
|
---|
245 |
|
---|
246 | $row = $DB->selectRow("SELECT * FROM ?_zones WHERE (mapID=? and x_min=0 and x_max=0 and y_min=0 and y_max=0)", $mapid);
|
---|
247 | if ($row) {
|
---|
248 | $wow['zone'] = $row['areatableID'];
|
---|
249 | $wow['name'] = $row['name'];
|
---|
250 | } else {
|
---|
251 | echo "<font color=red>....Location for Map with ID=$mapid not found</font><br>";
|
---|
252 | return;
|
---|
253 | }
|
---|
254 | }
|
---|
255 |
|
---|
256 | // округляем до 2 цифер после запятой
|
---|
257 | // почему до 2?
|
---|
258 | if (isset($tx, $ty)) {
|
---|
259 | $wow["x"] = /*round(*/$tx;//, 2);
|
---|
260 | $wow["y"] = /*round(*/$ty;//, 2);
|
---|
261 | }
|
---|
262 |
|
---|
263 | return $wow;
|
---|
264 | }
|
---|
265 |
|
---|
266 | // Преобразование целого массива координат
|
---|
267 | // Всегда пользовацца только им!
|
---|
268 | function mass_coord(&$data)
|
---|
269 | {
|
---|
270 | // Карты
|
---|
271 | global $map_images;
|
---|
272 | // Объявляем новый массив с преобразованными данными
|
---|
273 | $xdata = array();
|
---|
274 | // Перебираем по порядку все координаты, посланные функции
|
---|
275 | // Если таких же координат (уже преобразованных) ещё нет, добавляем в новый массив
|
---|
276 | foreach ($data as $ndata) {
|
---|
277 | // Если помимо координат есть ещё данные о респауне, преобразуем их к удобочитаемому виду:
|
---|
278 | if (isset($ndata['spawntimesecs']))
|
---|
279 | $tmp = array_merge(coord_mangos2wow($ndata['m'], $ndata['x'], $ndata['y'], false), array('r' => sec_to_time($ndata['spawntimesecs'])));
|
---|
280 | else
|
---|
281 | $tmp = coord_mangos2wow($ndata['m'], $ndata['x'], $ndata['y'], false);
|
---|
282 | $xdata[] = $tmp;
|
---|
283 | }
|
---|
284 | // Освобождаем всю память выделенную под карты
|
---|
285 | if ($map_images)
|
---|
286 | foreach ($map_images as $map_image)
|
---|
287 | imagedestroy($map_image);
|
---|
288 |
|
---|
289 | // Возвращаем новый массив
|
---|
290 | return $xdata;
|
---|
291 | }
|
---|
292 |
|
---|
293 | // Функция информации о фракции
|
---|
294 | function factioninfo($id)
|
---|
295 | {
|
---|
296 | global $DB;
|
---|
297 | $row = $DB->selectRow("SELECT name FROM ?_factions WHERE factionID = ?d LIMIT 1", $id);
|
---|
298 | $faction['name'] = $row['name'];
|
---|
299 | $faction['entry'] = $id;
|
---|
300 | return $faction;
|
---|
301 | }
|
---|
302 |
|
---|
303 | // Function, that creates loot_table (without references) from lootid
|
---|
304 | // $table - table, in which we search
|
---|
305 | // $lootid - loot ident
|
---|
306 | // $repetition_factor - repetition factor
|
---|
307 |
|
---|
308 | function loot_table($table, $lootid, $max_percent=100)
|
---|
309 | {
|
---|
310 | // Все элементы
|
---|
311 | global $DB;
|
---|
312 | global $loot_groups;
|
---|
313 | global $item_cols;
|
---|
314 | $loot = array();
|
---|
315 | $groups = array();
|
---|
316 | // Мего запрос :)
|
---|
317 | $rows = $DB->select('
|
---|
318 | SELECT l.ChanceOrQuestChance, l.mincountOrRef, l.maxcount as `d-max`, l.groupid, ?#, i.entry, i.maxcount
|
---|
319 | {, loc.name_loc?d AS `name_loc`}
|
---|
320 | FROM ?# l
|
---|
321 | LEFT JOIN (?_icons a, item_template i) ON l.item=i.entry AND a.id=i.displayid
|
---|
322 | {LEFT JOIN (locales_item loc) ON loc.entry=i.entry AND ?d}
|
---|
323 | WHERE
|
---|
324 | l.entry=?d
|
---|
325 | {LIMIT ?d}
|
---|
326 | ',
|
---|
327 | $item_cols[2],
|
---|
328 | ($_SESSION['locale'])? $_SESSION['locale']: DBSIMPLE_SKIP,
|
---|
329 | $table,
|
---|
330 | ($_SESSION['locale'])? 1: DBSIMPLE_SKIP,
|
---|
331 | $lootid,
|
---|
332 | ($AoWoWconf['limit']!=0)? $AoWoWconf['limit']: DBSIMPLE_SKIP
|
---|
333 | );
|
---|
334 |
|
---|
335 | // Перебираем
|
---|
336 | foreach ($rows as $i => $row)
|
---|
337 | {
|
---|
338 | if ($row['mincountOrRef']>0)
|
---|
339 | {
|
---|
340 | // Не ссылка!
|
---|
341 | if ($row['groupid']>0)
|
---|
342 | {
|
---|
343 | // Групповой лут!
|
---|
344 | $groups[$row['groupid']][] = array(
|
---|
345 | 'mincount' => $row['mincountOrRef'],
|
---|
346 | 'maxcount' => $row['d-max'],
|
---|
347 | 'percent' => $row['ChanceOrQuestChance']*$max_percent/100,
|
---|
348 | 'item' => iteminfo2($row,0)
|
---|
349 | );
|
---|
350 | // Общее число элементов группы с равнозначным шансом
|
---|
351 | if (!(IsSet($group_idx[$row['groupid']]['num-equal'])))
|
---|
352 | $group_idx[$row['groupid']]['num-equal'] = 0;
|
---|
353 | // Общий шанс дропа для группового лута
|
---|
354 | if (!(IsSet($group_idx[$row['groupid']]['percent'])))
|
---|
355 | $group_idx[$row['groupid']]['percent'] = 0;
|
---|
356 | // Если шанс дропа=0, значит это равнозначный лут в группе
|
---|
357 | // Иначе, увеличиваем зарезервированный шанс для элементов лута с четко определенным шансом дропа
|
---|
358 | if ($row['ChanceOrQuestChance']==0)
|
---|
359 | $group_idx[$row['groupid']]['num-equal'] ++;
|
---|
360 | else
|
---|
361 | $group_idx[$row['groupid']]['percent'] += abs($row['ChanceOrQuestChance']);
|
---|
362 | } else {
|
---|
363 | // Старый добрый обычный лут :)
|
---|
364 | $loot[] = array_merge(array(
|
---|
365 | 'percent' => ($max_percent!=100)? $max_percent : $row['ChanceOrQuestChance'],
|
---|
366 | 'mincount' => $row['mincountOrRef'],
|
---|
367 | 'maxcount' => $row['d-max'],
|
---|
368 | 'group' => 0
|
---|
369 | ), iteminfo2($row, 0));
|
---|
370 | }
|
---|
371 | } else {
|
---|
372 | // Ссылка!
|
---|
373 | // Вот если это ссылка, то ######
|
---|
374 | // Наша задача - вызвать эту же функцию, но с предопределенным значением percent и maxcount
|
---|
375 | for ($j=1;$j<=$row['d-max'];$j++)
|
---|
376 | $loot = array_merge($loot, loot_table($table, -$row['mincountOrRef'], $row['ChanceOrQuestChance']));
|
---|
377 | }
|
---|
378 | }
|
---|
379 | // Перебираем группы лута
|
---|
380 | foreach ($groups as $groupid => $group)
|
---|
381 | {
|
---|
382 | foreach($group as $field => $group_item)
|
---|
383 | {
|
---|
384 | if(isset($group_item['item']))
|
---|
385 | $loot[] = array_merge(array(
|
---|
386 | 'mincount' => $group_item['mincount'],
|
---|
387 | 'maxcount' => $group_item['maxcount'],
|
---|
388 | 'percent' => ($group_item['percent']==0)? (($max_percent-$group_idx[$groupid]['percent'])/$group_idx[$groupid]['num-equal']) : $group_item['percent'],
|
---|
389 | 'group' => $loot_groups,
|
---|
390 | 'grouppercent' => ($group_idx[$groupid]['num-equal']>0)? $max_percent : $group_idx[$groupid]['percent']
|
---|
391 | ), $group_item['item']);
|
---|
392 | }
|
---|
393 | $loot_groups++;
|
---|
394 | }
|
---|
395 | return $loot;
|
---|
396 | }
|
---|
397 |
|
---|
398 | function loot($table, $lootid)
|
---|
399 | {
|
---|
400 | global $loot_groups;
|
---|
401 | $loot_groups=1;
|
---|
402 | $loot = loot_table($table, $lootid);
|
---|
403 | return $loot;
|
---|
404 | }
|
---|
405 |
|
---|
406 | // Кто дропает
|
---|
407 | function drop($table, $item)
|
---|
408 | {
|
---|
409 | global $DB;
|
---|
410 | $rows = $DB->select('
|
---|
411 | SELECT l.ChanceOrQuestChance, l.mincountOrRef, l.maxcount, l.entry
|
---|
412 | FROM ?# l
|
---|
413 | WHERE
|
---|
414 | l.item=?
|
---|
415 | {LIMIT ?d}
|
---|
416 | ',
|
---|
417 | $table,
|
---|
418 | $item,
|
---|
419 | ($AoWoWconf['limit']!=0)? $AoWoWconf['limit']: DBSIMPLE_SKIP
|
---|
420 | );
|
---|
421 | $drop = array();
|
---|
422 | foreach ($rows as $i => $row)
|
---|
423 | {
|
---|
424 | if ($row['mincountOrRef'] > 0)
|
---|
425 | {
|
---|
426 | $num = $row['entry'];
|
---|
427 | $drop[$num] = array();
|
---|
428 | $drop[$num]['percent'] = abs($row['ChanceOrQuestChance']);
|
---|
429 | $drop[$num]['mincount'] = $row['mincountOrRef'];
|
---|
430 | $drop[$num]['maxcount'] = $row['maxcount'];
|
---|
431 |
|
---|
432 | // Ищем лут, который ссылается на этот лут
|
---|
433 | $refrows = $DB->select('SELECT entry FROM ?# WHERE mincountOrRef=? LIMIT 200',$table, -$num);
|
---|
434 | foreach ($refrows as $i => $refrow)
|
---|
435 | {
|
---|
436 | $num = $refrow['entry'];
|
---|
437 | $drop[$num] = array();
|
---|
438 | $drop[$num]['percent'] = abs($row['ChanceOrQuestChance']);
|
---|
439 | $drop[$num]['mincount'] = $row['mincountOrRef'];
|
---|
440 | $drop[$num]['maxcount'] = $row['maxcount'];
|
---|
441 | }
|
---|
442 | }
|
---|
443 | }
|
---|
444 | return $drop;
|
---|
445 | }
|
---|
446 |
|
---|
447 | // позиция
|
---|
448 | function position($data)
|
---|
449 | {
|
---|
450 | global $smarty, $exdata, $zonedata;
|
---|
451 | if(count($data) > 0)
|
---|
452 | {
|
---|
453 | $data = mass_coord($data);
|
---|
454 |
|
---|
455 | // Сортируем массив. Зачем???
|
---|
456 | if($data)
|
---|
457 | sort($data);
|
---|
458 |
|
---|
459 | // Во временную переменную tmp заносим номер локации
|
---|
460 | $j = 0;
|
---|
461 | $tmp = $data[$j]['zone'];
|
---|
462 | // Номер массива
|
---|
463 | $n = 0;
|
---|
464 | $k = 0;
|
---|
465 | $zonedata[$n] = array();
|
---|
466 | $zonedata[$n]['zone'] = $data[$j]['zone'];
|
---|
467 | $zonedata[$n]['name'] = $data[$j]['name'];
|
---|
468 |
|
---|
469 | for($j=0; $j<count($data); $j++)
|
---|
470 | {
|
---|
471 | // Если изменился номер карты, то начинаем новый массив
|
---|
472 | if($tmp!=$data[$j]['zone'])
|
---|
473 | {
|
---|
474 | // Количество объектов на зоне
|
---|
475 | $zonedata[$n]['count'] = $k;
|
---|
476 | $n++;
|
---|
477 | $exdata[$n] = array();
|
---|
478 | $zonedata[$n] = array();
|
---|
479 | $tmp=$data[$j]['zone'];
|
---|
480 | // Заносим номер зоны в список зон
|
---|
481 | $zonedata[$n]['zone'] = $data[$j]['zone'];
|
---|
482 | // TODO: Заносим название зоны в список зон
|
---|
483 | $zonedata[$n]['name'] = $data[$j]['name'];
|
---|
484 | $k=0;
|
---|
485 | }
|
---|
486 | $exdata[$n][$k] = array();
|
---|
487 | $exdata[$n][$k] = $data[$j];
|
---|
488 | $k++;
|
---|
489 | }
|
---|
490 |
|
---|
491 | // Количество объектов на зоне
|
---|
492 | $zonedata[$n]['count'] = $k;
|
---|
493 |
|
---|
494 | // Сортировка массивов по количеству объектов на зоне.
|
---|
495 | for($i=0; $i<=$n; $i++)
|
---|
496 | {
|
---|
497 | for($j=$i; $j<=$n; $j++)
|
---|
498 | {
|
---|
499 | if($zonedata[$j]['count'] > $zonedata[$i]['count'])
|
---|
500 | {
|
---|
501 | unset($tmp);
|
---|
502 | $tmp = $zonedata[$i];
|
---|
503 | $zonedata[$i] = $zonedata[$j];
|
---|
504 | $zonedata[$j] = $tmp;
|
---|
505 | unset($tmp);
|
---|
506 | $tmp = $exdata[$i];
|
---|
507 | $exdata[$i] = $exdata[$j];
|
---|
508 | $exdata[$j] = $tmp;
|
---|
509 | }
|
---|
510 | }
|
---|
511 | }
|
---|
512 |
|
---|
513 | $smarty->assign('zonedata',$zonedata);
|
---|
514 | $smarty->assign('exdata',$exdata);
|
---|
515 | }
|
---|
516 | }
|
---|
517 | ?>
|
---|