2 include_once("conf.php");
3 include_once("include/gameobject_table.php");
4 include_once("include/info_table_generator.php");
5 include_once("include/report_generator.php");
8 Script show GO data by its entry
10 - Show simple GO table tooltip
14 - How can possible open it (lock info)
15 - Required for quest list
20 $entry = intval(@$_REQUEST['object']);
21 $page = intval(@$_REQUEST['page']);
22 $mark = @$_REQUEST['mark'];
24 $obj=getGameobject($entry);
27 RenderError($lang['go_not_found']);
31 $baseLink = '?object='.$entry;
34 if ($lang['www_gameobject'])
35 echo "<a href=\"".sprintf($lang['www_gameobject'], $entry)."\" target=\"_blank\"\">".sprintf($lang['www_gameobject'], $entry)."</a><br>";
36 echo "<table cellspacing=0 cellpadding=0 width=500>";
39 // $icon = "--";//getObjIcon($obj[displayId]);
40 // echo "<td valign=top align=right width=20><br><a href=\"#\"><IMG height=64 width=64 border=0 src='$icon'></a></td>";
41 echo "<td align=center>";generateGameobjectTable($obj);echo "</td>";
43 if ($obj['mingold']) echo "<td align=center><b><FONT color=#000000>$lang[Rew_money]</b> ".money($obj['mingold']);
44 if (($obj['maxgold']) && ($obj['maxgold']>$obj['mingold'])) echo " - ".money($obj['maxgold']);
45 echo "<tr><td colspan=2 align=center><a href=\"?map&obj=$obj[entry]\">$lang[show_map] (".getGameobjectCount($obj['entry']).")</a></td></tr>";
46 echo "</tbody></table>";
48 if ($config['show_go_details'])
50 echo "<br><table class=details width=600>";
52 echo "<tr><td colspan=4 class=head>$lang[detail_info]</td></tr>";
53 // echo "<tr><th width=100px></th><th></th></tr>";
54 echo "<tr><th>Type</th><td colspan=3>".getGameobjectType($obj['type'])."</td></tr>";
55 echo "<tr><th>Flags</th><td colspan=3>";
56 if ($flag = $obj['flags'])
58 if ($flag & GO_FLAG_IN_USE
) echo "GO_FLAG_IN_USE<br>";
59 if ($flag & GO_FLAG_LOCKED
) echo "GO_FLAG_LOCKED<br>";
60 if ($flag & GO_FLAG_INTERACT_COND
)echo "GO_FLAG_INTERACT_COND<br>";
61 if ($flag & GO_FLAG_TRANSPORT
) echo "GO_FLAG_TRANSPORT<br>";
62 if ($flag & GO_FLAG_UNK1
) echo "GO_FLAG_UNK1<br>";
63 if ($flag & GO_FLAG_NODESPAWN
) echo "GO_FLAG_NODESPAWN<br>";
64 if ($flag & GO_FLAG_TRIGGERED
) echo "GO_FLAG_TRIGGERED<br>";
65 if ($flag & GO_FLAG_UNK2
) echo "GO_FLAG_UNK2<br>";
72 case GAMEOBJECT_TYPE_DOOR
:
73 echo "<tr><th>startOpen</th><td>".($obj['data0']?
"opened":"closed")."</td>";
74 echo "<th>lockId</th><td>".($obj['data1'])."</td></tr>";
75 echo "<tr><th>autoCloseTime</th><td>".($obj['data2']/1000)." sec</td>";
76 echo "<th>noDamageImmune</th><td>".$obj['data3']."</td></tr>";
77 echo "<tr><th>openTextID</th><td>".$obj['data4']."</td>";
78 echo "<th>closeTextID</th><td>".$obj['data5']."</td></tr>";
80 case GAMEOBJECT_TYPE_BUTTON
:
81 echo "<tr><th>startOpen</th><td>".($obj['data0']?
"opened":"closed")."</td>";
82 echo "<th>lockId</th><td>".($obj['data1'])."</td></tr>";
83 echo "<tr><th>autoCloseTime</th><td>".($obj['data2']/1000)." sec</td>";
84 echo "<th>linkedTrap</th><td>".($obj['data3']?
getGameobjectName($obj['data3']):"n/a")."</td></tr>";
85 echo "<tr><th>noDamageImmune</th><td>".$obj['data4']."</td>";
86 echo "<th>large</th><td>".$obj['data5']."</td></tr>";
87 echo "<tr><th>openTextID</th><td>".$obj['data6']."</td>";
88 echo "<th>closeTextID</th><td>".$obj['data7']."</td></tr>";
89 echo "<tr><th>losOK</th><td>".$obj['data8']."</td><td colspan=3></td></tr>";
91 case GAMEOBJECT_TYPE_QUESTGIVER
:
92 echo "<tr><th>lockId</th><td>".$obj['data0']."</td>";
93 echo "<th>questList</th><td>".$obj['data1']."</td></tr>";
94 echo "<tr><th>pageMaterial</th><td>".$obj['data2']."</td>";
95 echo "<th>gossipID</th><td>".$obj['data3']."</td></tr>";
96 echo "<tr><th>customAnim</th><td>".$obj['data4']."</td>";
97 echo "<th>noDamageImmune</th><td>".$obj['data5']."</td></tr>";
98 echo "<tr><th>openTextID</th><td>".$obj['data6']."</td>";
99 echo "<th>losOK</th><td>".$obj['data7']."</td></tr>";
100 echo "<tr><th>allowMounted</th><td>".$obj['data8']."</td>";
101 echo "<th>large</th><td>".$obj['data9']."</td></tr>";
103 case GAMEOBJECT_TYPE_CHEST
:
104 echo "<tr><th>lockId</th><td>".$obj['data0']."</td>";
105 echo "<th>lootId</th><td>".$obj['data1']."</td></tr>";
106 echo "<tr><th>chestRestockTime</th><td>".$obj['data2']."</td>";
107 echo "<th>consumable</th><td>".$obj['data3']."</td></tr>";
108 echo "<tr><th>minSuccessOpens</th><td>".$obj['data4']."</td>";
109 echo "<th>maxSuccessOpens</th><td>".$obj['data5']."</td></tr>";
110 echo "<tr><th>eventId</th><td>".$obj['data6']."</td>";
111 echo "<th>linkedTrapId</th><td>".($obj['data7']?
getGameobjectName($obj['data7']):"n/a")."</td></tr>";
112 echo "<tr><th>questId</th><td>".($obj['data8']?
getQuestName($obj['data8']):"n/a")."</td>";
113 echo "<th>level</th><td>".$obj['data9']."</td></tr>";
114 echo "<tr><th>losOK</th><td>".$obj['data10']."</td>";
115 echo "<th>leaveLoot</th><td>".$obj['data11']."</td></tr>";
116 echo "<tr><th>notInCombat</th><td>".$obj['data12']."</td>";
117 echo "<th>logLoot</th><td>".$obj['data13']."</td></tr>";
118 echo "<tr><th>openTextID</th><td>".$obj['data14']."</td>";
119 echo "<th>groupLootRules</th><td>".$obj['data15']."</td></tr>";
121 case GAMEOBJECT_TYPE_BINDER
:
123 case GAMEOBJECT_TYPE_GENERIC
:
124 echo "<tr><th>floatingTooltip</th><td>".$obj['data0']."</td>";
125 echo "<th>highlight</th><td>".$obj['data1']."</td></tr>";
126 echo "<tr><th>serverOnly</th><td>".$obj['data2']."</td>";
127 echo "<th>large</th><td>".$obj['data3']."</td></tr>";
128 echo "<tr><th>floatOnWater</th><td>".$obj['data4']."</td>";
129 echo "<th>questID</th><td>".($obj['data5']?
getQuestName($obj['data5']):"n/a")."</td></tr>";
131 case GAMEOBJECT_TYPE_TRAP
:
132 echo "<tr><th>lockId</th><td>".$obj['data0']."</td>";
133 echo "<th>level</th><td>".$obj['data1']."</td></tr>";
134 echo "<tr><th>radius</th><td>".$obj['data2']."</td>";
135 echo "<th>spellId</th><td>".($obj['data3']?
getSpellNameFromId($obj['data3']):"n/a")."</td></tr>";
136 echo "<tr><th>charges</th><td>".$obj['data4']."</td>";
137 echo "<th>cooldown</th><td>".$obj['data5']." sec</td></tr>";
138 echo "<tr><th>autoCloseTime</th><td>".($obj['data6']/1000)." sec</td>";
139 echo "<th>startDelay</th><td>".$obj['data7']." sec</td></tr>";
140 echo "<tr><th>serverOnly</th><td>".$obj['data8']."</td>";
141 echo "<th>stealthed</th><td>".$obj['data9']."</td></tr>";
142 echo "<tr><th>large</th><td>".$obj['data10']."</td>";
143 echo "<th>stealthAffected</th><td>".$obj['data11']."</td></tr>";
144 echo "<tr><th>openTextID</th><td>".$obj['data12']."</td>";
145 echo "<th>closeTextID</th><td>".$obj['data13']."</td></tr>";
147 case GAMEOBJECT_TYPE_CHAIR
:
148 echo "<tr><th>slots</th><td>".$obj['data0']."</td></tr>";
149 echo "<tr><th>height</th><td>".$obj['data1']."</td></tr>";
150 echo "<tr><th>onlyCreatorUse</th><td>".$obj['data2']."</td></tr>";
152 case GAMEOBJECT_TYPE_SPELL_FOCUS
:
153 echo "<tr><th>focusId</th><td>".($obj['data0']?
getSpellFocusName($obj['data0'], 1):"n/a")."</td>";
154 echo "<th>dist</th><td>".$obj['data1']."</td></tr>";
155 echo "<tr><th>linkedTrapId</th><td>".($obj['data2']?
getGameobjectName($obj['data2']):"n/a")."</td>";
156 echo "<th>serverOnly</th><td>".$obj['data3']."</td></tr>";
157 echo "<tr><th>questID</th><td>".($obj['data4']?
getQuestName($obj['data4']):"n/a")."</td>";
158 echo "<td colspan=2></td></tr>";
160 case GAMEOBJECT_TYPE_TEXT
:
161 echo "<tr><th>pageID</th><td>".$obj['data0']."</td></tr>";
162 echo "<tr><th>language</th><td>".$obj['data1']."</td></tr>";
163 echo "<tr><th>pageMaterial</th><td>".$obj['data2']."</td></tr>";
164 echo "<tr><th>allowMounted</th><td>".$obj['data3']."</td></tr>";
166 case GAMEOBJECT_TYPE_GOOBER
:
167 echo "<tr><th>lockId</th><td>".$obj['data0']."</td>";
168 echo "<th>questId</th><td>".($obj['data1']?
getQuestName($obj['data1']):"n/a")."</td></tr>";
169 echo "<tr><th>eventId</th><td>".$obj['data2']."</td>";
170 echo "<th>autoCloseTime</th><td>".($obj['data3']/1000)." sec</td></tr>";
171 echo "<tr><th>customAnim</th><td>".$obj['data4']."</td>";
172 echo "<th>consumable</th><td>".$obj['data5']."</td></tr>";
173 echo "<tr><th>cooldown</th><td>".$obj['data6']."</td>";
174 echo "<th>pageId</th><td>".$obj['data7']."</td></tr>";
175 echo "<tr><th>language</th><td>".$obj['data8']."</td>";
176 echo "<th>pageMaterial</th><td>".$obj['data9']."</td></tr>";
177 echo "<tr><th>spellId</th><td>".($obj['data10']?
getSpellNameFromId($obj['data10']):"n/a")."</td>";
178 echo "<th>noDamageImmune</th><td>".$obj['data11']."</td></tr>";
179 echo "<tr><th>linkedTrapId</th><td>".($obj['data12']?
getGameobjectName($obj['data12']):"n/a")."</td>";
180 echo "<th>large</th><td>".$obj['data13']."</td></tr>";
181 echo "<tr><th>openTextID</th><td>".$obj['data14']."</td>";
182 echo "<th>closeTextID</th><td>".$obj['data15']."</td></tr>";
183 echo "<tr><th>losOK</th><td>".$obj['data16']."</td>";
184 echo "<th>allowMounted</th><td>".$obj['data17']."</td></tr>";
186 case GAMEOBJECT_TYPE_TRANSPORT
:
188 case GAMEOBJECT_TYPE_AREADAMAGE
:
190 case GAMEOBJECT_TYPE_CAMERA
:
191 echo "<tr><th>lockId</th><td>".$obj['data0']."</td></tr>";
192 echo "<tr><th>cinematicId</th><td>".$obj['data1']."</td></tr>";
193 echo "<tr><th>eventID</th><td>".$obj['data2']."</td></tr>";
194 echo "<tr><th>openTextID</th><td>".$obj['data3']."</td></tr>";
196 case GAMEOBJECT_TYPE_MAP_OBJECT
:
198 case GAMEOBJECT_TYPE_MO_TRANSPORT
:
199 echo "<tr><th>taxiPathId</th><td>".$obj['data0']."</td></tr>";
200 echo "<tr><th>moveSpeed</th><td>".$obj['data1']."</td></tr>";
201 echo "<tr><th>accelRate</th><td>".$obj['data2']."</td></tr>";
202 echo "<tr><th>startEventID</th><td>".$obj['data3']."</td></tr>";
203 echo "<tr><th>stopEventID</th><td>".$obj['data4']."</td></tr>";
204 echo "<tr><th>transportPhysics</th><td>".$obj['data5']."</td></tr>";
205 echo "<tr><th>mapID</th><td>".getMapName($obj['data6'])."</td></tr>";
207 case GAMEOBJECT_TYPE_DUEL_ARBITER
:
209 case GAMEOBJECT_TYPE_FISHINGNODE
:
210 echo "<tr><th>_data0</th><td>".$obj['data0']."</td></tr>";
211 echo "<tr><th>lootId</th><td>".$obj['data1']."</td></tr>";
213 case GAMEOBJECT_TYPE_SUMMONING_RITUAL
:
214 echo "<tr><th>reqParticipants</th><td>".$obj['data0']."</td></tr>";
215 echo "<tr><th>spellId</th><td>".($obj['data1']?
getSpellNameFromId($obj['data1']):"n/a")."</td></tr>";
216 echo "<tr><th>animSpell</th><td>".$obj['data2']."</td></tr>";
217 echo "<tr><th>ritualPersistent</th><td>".$obj['data3']."</td></tr>";
218 echo "<tr><th>casterTargetSpell</th><td>".$obj['data4']."</td></tr>";
219 echo "<tr><th>casterTargetSpellTargets</th><td>".$obj['data5']."</td></tr>";
220 echo "<tr><th>castersGrouped</th><td>".$obj['data6']."</td></tr>";
221 echo "<tr><th>ritualNoTargetCheck</th><td>".$obj['data7']."</td></tr>";
223 case GAMEOBJECT_TYPE_MAILBOX
:
225 case GAMEOBJECT_TYPE_AUCTIONHOUSE
:
226 echo "<tr><th>data0</th><td>".$obj['data0']."</td></tr>";
228 case GAMEOBJECT_TYPE_GUARDPOST
:
230 case GAMEOBJECT_TYPE_SPELLCASTER
:
231 echo "<tr><th>spellId</th><td>".($obj['data0']?
getSpellNameFromId($obj['data0']):"n/a")."</td></tr>";
232 echo "<tr><th>charges</th><td>".$obj['data1']."</td></tr>";
233 echo "<tr><th>partyOnly</th><td>".$obj['data2']."</td></tr>";
235 case GAMEOBJECT_TYPE_MEETINGSTONE
:
236 echo "<tr><th>minLevel</th><td>".$obj['data0']."</td></tr>";
237 echo "<tr><th>maxLevel</th><td>".$obj['data1']."</td></tr>";
238 echo "<tr><th>areaID</th><td>".getAreaName($obj['data2'])."</td></tr>";
240 case GAMEOBJECT_TYPE_FLAGSTAND
:
241 echo "<tr><th>data0</th><td>".$obj['data0']."</td>";
242 echo "<th>data1</th><td>".$obj['data1']."</td></tr>";
243 echo "<tr><th>data2</th><td>".$obj['data2']."</td>";
244 echo "<th>data3</th><td>".$obj['data3']."</td></tr>";
245 echo "<tr><th>data4</th><td>".$obj['data4']."</td>";
246 echo "<th>data5</th><td>".$obj['data5']."</td></tr>";
248 case GAMEOBJECT_TYPE_FISHINGHOLE
:
249 echo "<tr><th>radius</th><td>".$obj['data0']."</td></tr>";
250 echo "<tr><th>lootId</th><td>".$obj['data1']."</td></tr>";
251 echo "<tr><th>minSuccessOpens</th><td>".$obj['data2']."</td></tr>";
252 echo "<tr><th>maxSuccessOpens</th><td>".$obj['data3']."</td></tr>";
253 echo "<tr><th>lockId</th><td>".$obj['data4']."</td></tr>";
255 case GAMEOBJECT_TYPE_FISHINGHOLE
:
257 case GAMEOBJECT_TYPE_FLAGDROP
:
258 echo "<tr><th>data0</th><td>".$obj['data0']."</td>";
259 echo "<th>data1</th><td>".$obj['data1']."</td></tr>";
260 echo "<tr><th>data2</th><td>".$obj['data2']."</td>";
261 echo "<th>data3</th><td>".$obj['data3']."</td></tr>";
263 case GAMEOBJECT_TYPE_MINI_GAME
:
264 echo "<tr><th>gameId</th><td>".$obj['data0']."</td></tr>";
266 case GAMEOBJECT_TYPE_LOTTERY_KIOSK
:
268 case GAMEOBJECT_TYPE_CAPTURE_POINT
:
269 echo "<tr><th>data0</th><td>".$obj['data0']."</td>";
270 echo "<th>data1</th><td>".$obj['data1']."</td></tr>";
271 echo "<tr><th>data2</th><td>".$obj['data2']."</td>";
272 echo "<th>data3</th><td>".$obj['data3']."</td></tr>";
273 echo "<tr><th>data4</th><td>".$obj['data4']."</td>";
274 echo "<th>data5</th><td>".$obj['data5']."</td></tr>";
275 echo "<tr><th>data6</th><td>".$obj['data6']."</td>";
276 echo "<th>data7</th><td>".$obj['data7']."</td></tr>";
277 echo "<tr><th>data8</th><td>".$obj['data8']."</td>";
278 echo "<th>data9</th><td>".$obj['data9']."</td></tr>";
279 echo "<tr><th>data10</th><td>".$obj['data10']."</td>";
280 echo "<th>data11</th><td>".$obj['data11']."</td></tr>";
281 echo "<tr><th>data12</th><td>".$obj['data12']."</td>";
282 echo "<th>data13</th><td>".$obj['data13']."</td></tr>";
283 echo "<tr><th>data14</th><td>".$obj['data14']."</td>";
284 echo "<th>data15</th><td>".$obj['data15']."</td></tr>";
285 echo "<tr><th>data16</th><td>".$obj['data16']."</td>";
286 echo "<th>data17</th><td>".$obj['data17']."</td></tr>";
287 echo "<tr><th>data18</th><td>".$obj['data18']."</td>";
288 echo "<td colspan=2></td></tr>";
290 case GAMEOBJECT_TYPE_AURA_GENERATOR
:
291 echo "<tr><th>data0</th><td>".$obj['data0']."</td></tr>";
292 echo "<tr><th>data1</th><td>".$obj['data1']."</td></tr>";
293 echo "<tr><th>spellId1</th><td>".($obj['data2']?
getSpellNameFromId($obj['data2']):"n/a")."</td></tr>";
294 echo "<tr><th>spellId2</th><td>".($obj['data3']?
getSpellNameFromId($obj['data3']):"n/a")."</td></tr>";
296 case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
:
297 echo "<tr><th>data0</th><td>".$obj['data0']."</td></tr>";
298 echo "<tr><th>data1</th><td>".$obj['data1']."</td></tr>";
300 case GAMEOBJECT_TYPE_BARBERSHOP
:
302 case GAMEOBJECT_TYPE_BARBER_CHAIR
:
304 case GAMEOBJECT_TYPE_GUILDBANK
:
306 case GAMEOBJECT_TYPE_TRAPDOOR
:
312 echo "</tbody></table><br>";
316 //********************************************************************************
318 //********************************************************************************
319 $summoned_by =& new SpellReportGenerator
;
320 $fields = array('SPELL_REPORT_ICON','SPELL_REPORT_NAME');
321 if ($summoned_by->Init($fields, $baseLink, 'summonLIST', $config['fade_limit'], 'name'))
323 $summoned_by->summonGO($entry);
324 $summoned_by->createReport($lang['go_summoned_by']);
326 //********************************************************************************
328 //********************************************************************************
329 $cast_spell =& new SpellReportGenerator
;
330 $fields = array('SPELL_REPORT_ICON','SPELL_REPORT_NAME');
331 if ($cast_spell->Init($fields, $baseLink, 'castLIST', $config['fade_limit'], 'name'))
334 if ($obj['type'] == GAMEOBJECT_TYPE_TRAP
) $spellid = $obj['data3'];
335 else if ($obj['type'] == GAMEOBJECT_TYPE_GOOBER
) $spellid = $obj['data10'];
336 else if ($obj['type'] == GAMEOBJECT_TYPE_SUMMONING_RITUAL
) $spellid = $obj['data1'];
337 else if ($obj['type'] == GAMEOBJECT_TYPE_SPELLCASTER
) $spellid = $obj['data0'];
340 $cast_spell->doRequirest('`id` = ?d', $entry);
341 $cast_spell->createReport($lang['go_cast_spell']);
344 //********************************************************************************
345 // How can possible open it (lock info)
346 //********************************************************************************
347 $locked =& new LockReportGenerator();
348 $fields = array('LOCK_REPORT_ID', 'LOCK_REPORT_KEY');
349 if ($locked->Init($fields, $baseLink, 'lockLIST', $config['fade_limit'], ''))
352 if ($obj['type'] == GAMEOBJECT_TYPE_DOOR
) $lockid = $obj['data1'];
353 else if ($obj['type'] == GAMEOBJECT_TYPE_BUTTON
) $lockid = $obj['data1'];
354 else if ($obj['type'] == GAMEOBJECT_TYPE_QUESTGIVER
) $lockid = $obj['data0'];
355 else if ($obj['type'] == GAMEOBJECT_TYPE_CHEST
) $lockid = $obj['data0'];
356 else if ($obj['type'] == GAMEOBJECT_TYPE_TRAP
) $lockid = $obj['data0'];
357 else if ($obj['type'] == GAMEOBJECT_TYPE_GOOBER
) $lockid = $obj['data0'];
358 else if ($obj['type'] == GAMEOBJECT_TYPE_CAMERA
) $lockid = $obj['data0'];
361 $locked->doRequirest('`id` = ?d', $lockid);
362 $locked->createReport($lang['go_locked']);
366 //********************************************************************************
367 // Required for quest list
368 //********************************************************************************
369 $reqForQuest =& new QuestReportGenerator();
370 $fields = array('QUEST_REPORT_LEVEL', 'QUEST_REPORT_NAME', 'QUEST_REPORT_GIVER', 'QUEST_REPORT_REWARD');
371 if ($reqForQuest->Init($fields, $baseLink, 'qreqLIST', $config['fade_limit'], 'name'))
373 $reqForQuest->requireGO($entry);
374 $reqForQuest->createReport($lang['req_for_quest']);
376 //********************************************************************************
378 //********************************************************************************
379 $giveQuest =& new QuestReportGenerator('go_giver');
380 $fields = array('QUEST_REPORT_LEVEL', 'QUEST_REPORT_NAME', 'QUEST_REPORT_REWARD');
381 if ($giveQuest->Init($fields, $baseLink, 'qgLIST', $config['fade_limit'], 'name'))
383 $giveQuest->getGiveTakeList($entry);
384 $giveQuest->createReport($lang['give_quest']);
386 //********************************************************************************
388 //********************************************************************************
389 $takeQuest =& new QuestReportGenerator('go_take');
390 $fields = array('QUEST_REPORT_LEVEL', 'QUEST_REPORT_NAME', 'QUEST_REPORT_REWARD');
391 if ($takeQuest->Init($fields, $baseLink, 'qtLIST', $config['fade_limit'], 'name'))
393 $takeQuest->getGiveTakeList($entry);
394 $takeQuest->createReport($lang['take_quest']);
396 //********************************************************************************
398 //********************************************************************************
401 if ($obj['type']==GAMEOBJECT_TYPE_CHEST
OR $obj['type']==GAMEOBJECT_TYPE_FISHINGHOLE
)
403 $page_seek = init_pagePerMark($mark, "g_lootLIST", $page);
404 $rows = getLootList($obj['data1'], "gameobject_loot_template", $totalRecords, $page_seek, $config['fade_limit']);
405 renderLootTableList($rows, $lang['can_loot'], $page_seek, $totalRecords, $baseLink, "g_lootLIST");