source: trunk/test_server/char_edit.php@ 656

Last change on this file since 656 was 649, checked in by barny, 16 years ago

*Přidán minimanager pro test server

File size: 28.9 KB
Line 
1<?php
2
3
4require_once 'header.php';
5require_once 'libs/char_lib.php';
6require_once 'libs/item_lib.php';
7require_once 'libs/map_zone_lib.php';
8valid_login($action_permission['delete']);
9
10//########################################################################################################################
11// PRINT EDIT FORM
12//########################################################################################################################
13function edit_char() {
14 global $lang_global, $lang_char, $lang_item, $output, $realm_db, $characters_db, $realm_id, $mmfpm_db, $action_permission, $user_lvl,
15 $item_datasite;
16 wowhead_tt();
17
18valid_login($action_permission['delete']);
19if (empty($_GET['id'])) error($lang_global['empty_fields']);
20
21$sql = new SQL;
22$sql->connect($characters_db[$realm_id]['addr'], $characters_db[$realm_id]['user'], $characters_db[$realm_id]['pass'], $characters_db[$realm_id]['name']);
23
24$sqlm = new SQL;
25$sqlm->connect($mmfpm_db['addr'], $mmfpm_db['user'], $mmfpm_db['pass'], $mmfpm_db['name']);
26
27$id = $sql->quote_smart($_GET['id']);
28
29$result = $sql->query("SELECT account FROM `characters` WHERE guid = '$id'");
30
31if ($sql->num_rows($result)){
32 //resrict by owner's gmlvl
33 $owner_acc_id = $sql->result($result, 0, 'account');
34 $sql->connect($realm_db['addr'], $realm_db['user'], $realm_db['pass'], $realm_db['name']);
35 $query = $sql->query("SELECT gmlevel,username FROM account WHERE id ='$owner_acc_id'");
36 $owner_gmlvl = $sql->result($query, 0, 'gmlevel');
37 $owner_name = $sql->result($query, 0, 'username');
38 $owner_check = $sql->result($query, 0, 'username');
39
40 if ($user_lvl >= $owner_gmlvl){
41 $sql->connect($characters_db[$realm_id]['addr'], $characters_db[$realm_id]['user'], $characters_db[$realm_id]['pass'], $characters_db[$realm_id]['name']);
42
43 $result = $sql->query("SELECT guid,account,data,name,race,class,position_x,position_y,map,online,totaltime,position_z,zone, level, gender FROM `characters` WHERE guid = '$id'");
44 $char = $sql->fetch_row($result);
45 $char_data = explode(' ',$char[2]);
46
47 if($char[9]) $online = "<font class=\"error\">{$lang_char['online']}</font>{$lang_char['edit_offline_only_char']}";
48 else $online = $lang_char['offline'];
49
50 if($char_data[CHAR_DATA_OFFSET_GUILD_ID]){
51 $query = $sql->query("SELECT name FROM guild WHERE guildid ='{$char_data[CHAR_DATA_OFFSET_GUILD_ID]}'");
52 $guild_name = $sql->result($query, 0, 'name');
53 if ($user_lvl > 0 ) $guild_name = "<a href=\"guild.php?action=view_guild&amp;error=3&amp;id={$char_data[CHAR_DATA_OFFSET_GUILD_ID]}\" >$guild_name</a>";
54 if ($char_data[CHAR_DATA_OFFSET_GUILD_RANK]){
55 $guild_rank_query = $sql->query("SELECT rname FROM guild_rank WHERE guildid ='{$char_data[CHAR_DATA_OFFSET_GUILD_ID]}' AND rid='{$char_data[CHAR_DATA_OFFSET_GUILD_RANK]}'");
56 $guild_rank = $sql->result($guild_rank_query, 0, 'rname');
57 } else $guild_rank = $lang_char['guild_leader'];
58 } else {
59 $guild_name = $lang_global['none'];
60 $guild_rank = $lang_global['none'];
61 }
62
63 $block = unpack("f", pack("L", $char_data[CHAR_DATA_OFFSET_BLOCK]));
64 $block = round($block[1],4);
65 $dodge = unpack("f", pack("L", $char_data[CHAR_DATA_OFFSET_DODGE]));
66 $dodge = round($dodge[1],4);
67 $parry = unpack("f", pack("L", $char_data[CHAR_DATA_OFFSET_PARRY]));
68 $parry = round($parry[1],4);
69 $crit = unpack("f", pack("L", $char_data[CHAR_DATA_OFFSET_MELEE_CRIT]));
70 $crit = round($crit[1],4);
71 $range_crit = unpack("f", pack("L", $char_data[CHAR_DATA_OFFSET_RANGE_CRIT]));
72 $range_crit = round($range_crit[1],4);
73
74$output .= "<center>
75 <form method=\"get\" action=\"char_edit.php\" name=\"form\">
76 <input type=\"hidden\" name=\"action\" value=\"do_edit_char\" />
77 <input type=\"hidden\" name=\"id\" value=\"$id\" />
78 <table class=\"lined\">
79 <tr>
80 <td colspan=\"8\"><font class=\"bold\"><input type=\"text\" name=\"name\" size=\"14\" maxlength=\"12\" value=\"$char[3]\" /> - <img src='img/c_icons/{$char[4]}-{$char[14]}.gif' onmousemove='toolTip(\"".char_get_race_name($char[4])."\",\"item_tooltip\")' onmouseout='toolTip()' alt=\"\" /> <img src='img/c_icons/{$char[5]}.gif' onmousemove='toolTip(\"".char_get_class_name($char[5])."\",\"item_tooltip\")' onmouseout='toolTip()' alt=\"\" /> - lvl ".char_get_level_color($char[13])."</font><br />$online</td>
81</tr>
82<tr>
83 <td colspan=\"8\">".get_map_name($char[9], $sqlm)." - ".get_zone_name($char[12], $sqlm)."</td>
84</tr>
85<tr>
86 <td colspan=\"8\">{$lang_char['username']}: <input type=\"text\" name=\"owner_name\" size=\"20\" maxlength=\"25\" value=\"$owner_name\" /> | {$lang_char['acc_id']}: $owner_acc_id</td>
87</tr>
88<tr>
89 <td colspan=\"8\">{$lang_char['guild']}: $guild_name | {$lang_char['rank']}: $guild_rank</td>
90</tr>
91<tr>
92 <td colspan=\"8\">{$lang_char['honor_points']}: <input type=\"text\" name=\"honor_points\" size=\"8\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_HONOR_POINTS]}\" />/
93 <input type=\"text\" name=\"arena_points\" size=\"8\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_ARENA_POINTS]}\" /> - {$lang_char['honor_kills']}: <input type=\"text\" name=\"total_kills\" size=\"8\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_HONOR_KILL]}\" /></td>
94</tr>
95 <tr>
96 <td width=\"2%\"><input type=\"checkbox\" name=\"check[]\" value=\"a0\" /></td><td width=\"18%\">{$lang_item['head']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_HEAD]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_HEAD])."</a></td>
97 <td width=\"15%\">{$lang_item['health']}:</td><td width=\"15%\"><input type=\"text\" name=\"health\" size=\"10\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_HEALTH]}\" /></td>
98 <td width=\"15%\">{$lang_item['res_holy']}:</td><td width=\"15%\"><input type=\"text\" name=\"res_holy\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_HOLY]}\" /></td>
99 <td width=\"18%\">{$lang_item['gloves']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_GLOVES]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_GLOVES])."</a></td><td width=\"2%\"><input type=\"checkbox\" name=\"check[]\" value=\"a9\" /></td>
100 </tr>
101 <tr>
102 <td><input type=\"checkbox\" name=\"check[]\" value=\"a1\" /></td><td>{$lang_item['neck']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_NECK]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_NECK])."</a></td>
103 <td>{$lang_item['mana']}:</td><td><input type=\"text\" name=\"mana\" size=\"10\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_MANA]}\" /></td>
104 <td>{$lang_item['res_arcane']}:</td><td><input type=\"text\" name=\"res_arcane\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_ARCANE]}\" /></td>
105 <td>{$lang_item['belt']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_BELT]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_BELT])."</a></td> <td><input type=\"checkbox\" name=\"check[]\" value=\"a5\" /></td>
106 </tr>
107 <tr>
108 <td><input type=\"checkbox\" name=\"check[]\" value=\"a2\" /></td><td>{$lang_item['shoulder']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_SHOULDER]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_SHOULDER])."</a></td>
109 <td>{$lang_item['strength']}:</td><td><input type=\"text\" name=\"str\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_STR]}\" /></td>
110 <td>{$lang_item['res_fire']}:</td><td><input type=\"text\" name=\"res_fire\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_FIRE]}\" /></td>
111 <td>{$lang_item['legs']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_LEGS]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_LEGS])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a6\" /></td>
112 </tr>
113 <tr>
114 <td><input type=\"checkbox\" name=\"check[]\" value=\"a14\" /></td><td>{$lang_item['back']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_BACK]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_BACK])."</a></td>
115 <td>{$lang_item['agility']}:</td><td><input type=\"text\" name=\"agi\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_AGI]}\" /></td>
116 <td>{$lang_item['res_nature']}:</td><td><input type=\"text\" name=\"res_nature\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_NATURE]}\" /></td>
117 <td>{$lang_item['feet']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_FEET]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_FEET])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a7\" /></td>
118 </tr>
119 <tr>
120 <td><input type=\"checkbox\" name=\"check[]\" value=\"a4\" /></td><td>{$lang_item['chest']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_CHEST]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_CHEST])."</a></td>
121 <td>{$lang_item['stamina']}:</td><td><input type=\"text\" name=\"sta\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_STA]}\" /></td>
122 <td>{$lang_item['res_frost']}:</td><td><input type=\"text\" name=\"res_frost\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_FROST]}\" /></td>
123 <td>{$lang_item['finger']} 1<br /><a href=\"$item_datasite{$char_data[380]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_FINGER1])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a10\" /></td>
124 </tr>
125 <tr>
126 <td><input type=\"checkbox\" name=\"check[]\" value=\"a3\" /></td><td>{$lang_item['shirt']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_SHIRT]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_SHIRT])."</a></td>
127 <td>{$lang_item['intellect']}:</td><td><input type=\"text\" name=\"int\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_INT]}\" /></td>
128 <td>{$lang_item['res_shadow']}:</td><td><input type=\"text\" name=\"res_shadow\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_RES_SHADOW]}\" /></td>
129 <td>{$lang_item['finger']} 2<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_FINGER2]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_FINGER2])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a11\" /></td>
130 </tr>
131 <tr>
132 <td><input type=\"checkbox\" name=\"check[]\" value=\"a18\" /></td><td>{$lang_item['tabard']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_TABARD]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_TABARD])."</a></td>
133 <td>{$lang_item['spirit']}:</td><td><input type=\"text\" name=\"spi\" size=\"10\" maxlength=\"4\" value=\"{$char_data[CHAR_DATA_OFFSET_SPI]}\" /></td>
134 <td>{$lang_char['exp']}:</td><td><input type=\"text\" name=\"exp\" size=\"10\" maxlength=\"8\" value=\"{$char_data[CHAR_DATA_OFFSET_EXP]}\" /></td>
135 <td>{$lang_item['trinket']} 1<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_TRINKET1]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_TRINKET1])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a12\" /></td>
136 </tr>
137 <tr>
138 <td><input type=\"checkbox\" name=\"check[]\" value=\"a8\" /></td><td>{$lang_item['wrist']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_WRIST]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_WRIST])."</a></td>
139 <td>{$lang_item['armor']}:</td><td><input type=\"text\" name=\"armor\" size=\"10\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_ARMOR]}\" /></td>
140 <td>{$lang_char['melee_ap']}: <input type=\"text\" name=\"attack_power\" size=\"10\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_AP]}\" /></td><td>{$lang_char['ranged_ap']}: <input type=\"text\" name=\"range_attack_power\" size=\"10\" maxlength=\"6\" value=\"{$char_data[CHAR_DATA_OFFSET_RANGED_AP]}\" /></td>
141 <td>{$lang_item['trinket']} 2<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_TRINKET2]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_TRINKET2])."</a></td><td><input type=\"checkbox\" name=\"check[]\" value=\"a13\" /></td>
142 </tr>
143 <tr>
144 <td><input type=\"checkbox\" name=\"check[]\" value=\"a15\" /></td>
145 <td colspan=\"2\">{$lang_item['main_hand']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_MAIN_HAND]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_MAIN_HAND])."</a></td>
146 <td colspan=\"2\"><input type=\"checkbox\" name=\"check[]\" value=\"a16\" />&nbsp;{$lang_item['off_hand']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_OFF_HAND]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_OFF_HAND])."</a></td>
147 <td colspan=\"2\">{$lang_item['ranged']}<br /><a href=\"$item_datasite{$char_data[CHAR_DATA_OFFSET_EQU_RANGED]}\" target=\"_blank\">".get_item_name($char_data[CHAR_DATA_OFFSET_EQU_RANGED])."</a></td>
148 <td><input type=\"checkbox\" name=\"check[]\" value=\"a17\" /></td>
149<tr>
150<td colspan=\"8\">{$lang_char['block']} : <input type=\"text\" name=\"block\" size=\"5\" maxlength=\"3\" value=\"$block\" />%
151| {$lang_char['dodge']}: <input type=\"text\" name=\"dodge\" size=\"5\" maxlength=\"3\" value=\"$dodge\" />%
152| {$lang_char['parry']}: <input type=\"text\" name=\"parry\" size=\"5\" maxlength=\"3\" value=\"$parry\" />%
153| {$lang_char['melee_crit']}: <input type=\"text\" name=\"crit\" size=\"5\" maxlength=\"3\" value=\"$crit\" />%
154| {$lang_char['ranged_crit']}: <input type=\"text\" name=\"range_crit\" size=\"3\" maxlength=\"14\" value=\"$range_crit\" />%</td>
155 </tr>
156 <tr>
157<td colspan=\"4\">{$lang_char['gold']}: <input type=\"text\" name=\"money\" size=\"10\" maxlength=\"8\" value=\"{$char_data[CHAR_DATA_OFFSET_GOLD]}\" /></td>
158 <td colspan=\"4\">{$lang_char['tot_paly_time']}: <input type=\"text\" name=\"tot_time\" size=\"8\" maxlength=\"14\" value=\"{$char[10]}\" /></td>
159</tr>
160<tr>
161 <td colspan=\"5\">{$lang_char['location']}:
162 X:<input type=\"text\" name=\"x\" size=\"10\" maxlength=\"8\" value=\"{$char[6]}\" />
163 Y:<input type=\"text\" name=\"y\" size=\"8\" maxlength=\"16\" value=\"{$char[7]}\" />
164 Z:<input type=\"text\" name=\"z\" size=\"8\" maxlength=\"16\" value=\"{$char[11]}\" />
165 Map:<input type=\"text\" name=\"map\" size=\"8\" maxlength=\"16\" value=\"{$char[8]}\" />
166 </td>
167 <td colspan=\"3\">{$lang_char['move_to']}:<input type=\"text\" name=\"tp_to\" size=\"24\" maxlength=\"64\" value=\"\" /></td>
168</tr>
169
170</table><br />";
171
172//inventory+bank items
173 $sql->connect($characters_db[$realm_id]['addr'], $characters_db[$realm_id]['user'], $characters_db[$realm_id]['pass'], $characters_db[$realm_id]['name']);
174 $query2 = $sql->query("SELECT bag,slot,item,item_template FROM character_inventory WHERE guid = '$id' ORDER BY bag,slot");
175
176 $inv = array();
177 $count = 0;
178
179 while ($slot = $sql->fetch_row($query2)){
180 if ($slot[0] == 0) {
181 if($slot[1] >= 23 && $slot[1] <= 62) {
182 $count++;
183 $inv[$count][0] = $slot[3];
184 $inv[$count][1] = $slot[2];
185 }
186 } else {
187 $count++;
188 $inv[$count][0] = $slot[3];
189 $inv[$count][1] = $slot[2];
190 }
191 }
192
193$output .= "<table class=\"lined\">
194 <tr><td>{$lang_char['inv_bank']}</td></tr>
195 <tr><td height=\"100\" align=\"center\">
196 <table><tr align=\"center\">";
197 $j = 0;
198 for ($i=1; $i<=$count; $i++){
199 $j++;
200 $output .= "<td><a href=\"$item_datasite{$inv[$i][0]}\" target=\"_blank\">{$inv[$i][0]}</a><br /><input type=\"checkbox\" name=\"check[]\" value=\"{$inv[$i][1]}\" /></td>";
201 if ($j == 15) {
202 $output .= "</tr><tr align=\"center\">";
203 $j = 0;
204 }
205 }
206 $output .= "</tr></table></td></tr></table>
207 <br />
208 <table class=\"hidden\">
209 <tr><td>";
210 makebutton($lang_char['update'], "javascript:do_submit()",190);
211 makebutton($lang_char['to_char_view'], "char.php?id=$id",160);
212 makebutton($lang_char['del_char'], "char_list.php?action=del_char_form&amp;check%5B%5D=$id",160);
213 makebutton($lang_global['back'], "javascript:window.history.back()",160);
214 $output .= "</td></tr>
215 </table><br />
216 </form></center>";
217
218
219 //case of non auth request
220 } else {
221 $sql->close();
222 unset($sql);
223 error($lang_char['no_permission']);
224 exit();
225 }
226
227} else error($lang_char['no_char_found']);
228
229}
230
231
232//########################################################################################################################
233// DO EDIT CHARACTER
234//########################################################################################################################
235function do_edit_char() {
236 global $lang_global, $lang_char, $output, $realm_db,
237 $characters_db, $realm_id, $action_permission, $user_lvl, $world_db;
238valid_login($action_permission['delete']);
239if ( empty($_GET['id']) || empty($_GET['name']) ) error($lang_global['empty_fields']);
240
241$sql = new SQL;
242$sql->connect($characters_db[$realm_id]['addr'], $characters_db[$realm_id]['user'], $characters_db[$realm_id]['pass'], $characters_db[$realm_id]['name']);
243
244$id = $sql->quote_smart($_GET['id']);
245
246$result = $sql->query("SELECT account,online FROM `characters` WHERE guid = '$id'");
247
248if ($sql->num_rows($result)){
249//we cannot edit online chars
250 if(!$sql->result($result, 0, 'online')){
251 //resrict by owner's gmlvl
252 $owner_acc_id = $sql->result($result, 0, 'account');
253 $sql->connect($realm_db['addr'], $realm_db['user'], $realm_db['pass'], $realm_db['name']);
254 $query = $sql->query("SELECT gmlevel FROM account WHERE id ='$owner_acc_id'");
255 $owner_gmlvl = $sql->result($query, 0, 'gmlevel');
256 $new_owner_name = $_GET['owner_name'];
257 $query = $sql->query("SELECT id FROM account WHERE username ='$new_owner_name'");
258 $new_owner_acc_id = $sql->result($query, 0, 'id');
259 if ($owner_acc_id != $new_owner_acc_id) {
260 $max_players = $sql->query("SELECT numchars FROM realmcharacters WHERE acctid ='$new_owner_acc_id'");
261 $max_players = $max_players[0];
262 if($max_players <= 9)
263 $result = $sql->query("UPDATE `{$characters_db[$realm_id]['name']}`.`characters` SET account = $new_owner_acc_id WHERE guid = '$id'");
264 else redirect("char_edit.php?action=edit_char&id=$id&error=5");
265 }
266 if ($user_lvl > $owner_gmlvl){
267
268 if(isset($_GET['check'])) $check = $sql->quote_smart($_GET['check']);
269 else $check = NULL;
270
271 $new_name = $sql->quote_smart($_GET['name']);
272
273 if (isset($_GET['tot_time'])) $new_tot_time = $sql->quote_smart($_GET['tot_time']);
274 else $new_tot_time = 0;
275 if (isset($_GET['res_holy'])) $new_res_holy = $sql->quote_smart($_GET['res_holy']);
276 else $new_res_holy = 0;
277 if (isset($_GET['res_arcane'])) $new_res_arcane = $sql->quote_smart($_GET['res_arcane']);
278 else $new_res_arcane = 0;
279 if (isset($_GET['res_fire'])) $new_res_fire = $sql->quote_smart($_GET['res_fire']);
280 else $new_res_fire = 0;
281 if (isset($_GET['res_nature'])) $new_res_nature = $sql->quote_smart($_GET['res_nature']);
282 else $new_res_nature = 0;
283 if (isset($_GET['res_frost'])) $new_res_frost = $sql->quote_smart($_GET['res_frost']);
284 else $new_res_frost = 0;
285 if (isset($_GET['res_shadow'])) $new_res_shadow = $sql->quote_smart($_GET['res_shadow']);
286 else $new_res_shadow = 0;
287 if (isset($_GET['attack_power'])) $new_attack_power = $sql->quote_smart($_GET['attack_power']);
288 else $new_attack_power = 0;
289 if (isset($_GET['range_attack_power'])) $new_range_attack_power = $sql->quote_smart($_GET['range_attack_power']);
290 else $new_range_attack_power = 0;
291 if (isset($_GET['money'])) $new_money = $sql->quote_smart($_GET['money']);
292 else $new_money = 0;
293 if (isset($_GET['arena_points'])) $new_arena_points = $sql->quote_smart($_GET['arena_points']);
294 else $new_arena_points = 0;
295 if (isset($_GET['honor_points'])) $new_honor_points = $sql->quote_smart($_GET['honor_points']);
296 else $new_honor_points = 0;
297 if (isset($_GET['total_kills'])) $new_total_kills = $sql->quote_smart($_GET['total_kills']);
298 else $new_total_kills = 0;
299
300 if ((!is_numeric($new_tot_time))||(!is_numeric($new_res_holy))||(!is_numeric($new_res_arcane))||(!is_numeric($new_res_fire))
301 ||(!is_numeric($new_res_nature))||(!is_numeric($new_res_frost))||(!is_numeric($new_res_shadow))||(!is_numeric($new_attack_power))
302 ||(!is_numeric($new_range_attack_power))||(!is_numeric($new_money))||(!is_numeric($new_arena_points))||(!is_numeric($new_honor_points)))
303 error($lang_char['use_numeric']);
304
305 if (isset($_GET['health'])) $new_health = $sql->quote_smart($_GET['health']);
306 else $new_health = 1;
307 if (isset($_GET['mana'])) $new_mana = $sql->quote_smart($_GET['mana']);
308 else $new_mana = 0;
309 if (isset($_GET['str'])) $new_str = $sql->quote_smart($_GET['str']);
310 else $new_str = 1;
311 if (isset($_GET['agi'])) $new_agi = $sql->quote_smart($_GET['agi']);
312 else $new_agi = 1;
313 if (isset($_GET['sta'])) $new_sta = $sql->quote_smart($_GET['sta']);
314 else $new_sta = 1;
315 if (isset($_GET['int'])) $new_int = $sql->quote_smart($_GET['int']);
316 else $new_int = 1;
317 if (isset($_GET['spi'])) $new_spi = $sql->quote_smart($_GET['spi']);
318 else $new_spi = 1;
319 if (isset($_GET['exp'])) $new_exp = $sql->quote_smart($_GET['exp']);
320 else $new_exp = 0;
321 if (isset($_GET['armor'])) $new_armor = $sql->quote_smart($_GET['armor']);
322 else $new_armor = 0;
323 if (isset($_GET['block'])) $new_block = $sql->quote_smart($_GET['block']);
324 else $new_block = 0;
325 if (isset($_GET['dodge'])) $new_dodge = $sql->quote_smart($_GET['dodge']);
326 else $new_dodge = 0;
327 if (isset($_GET['parry'])) $new_parry = $sql->quote_smart($_GET['parry']);
328 else $new_parry = 0;
329 if (isset($_GET['crit'])) $new_crit = $sql->quote_smart($_GET['crit']);
330 else $new_crit = 0;
331 if (isset($_GET['range_crit'])) $new_range_crit = $sql->quote_smart($_GET['range_crit']);
332 else $new_range_crit = 0;
333
334 if ((!is_numeric($new_health))||(!is_numeric($new_mana))||(!is_numeric($new_str))||(!is_numeric($new_agi))
335 ||(!is_numeric($new_sta))||(!is_numeric($new_int))||(!is_numeric($new_spi))||(!is_numeric($new_exp))
336 ||(!is_numeric($new_armor))||(!is_numeric($new_block))||(!is_numeric($new_dodge))||(!is_numeric($new_parry))
337 ||(!is_numeric($new_crit))||(!is_numeric($new_range_crit))) error($lang_char['use_numeric']);
338
339 $x = (isset($_GET['x'])) ? $sql->quote_smart($_GET['x']) : 0;
340 $y = (isset($_GET['y'])) ? $sql->quote_smart($_GET['y']) : 0;
341 $z = (isset($_GET['z'])) ? $sql->quote_smart($_GET['z']) : 0;
342 $map = (isset($_GET['map'])) ? $sql->quote_smart($_GET['map']) : 0;
343 $tp_to = (isset($_GET['tp_to'])) ? $sql->quote_smart($_GET['tp_to']) : 0;
344
345 $sql->connect($characters_db[$realm_id]['addr'], $characters_db[$realm_id]['user'], $characters_db[$realm_id]['pass'], $characters_db[$realm_id]['name']);
346
347 $result = $sql->query("SELECT data FROM `characters` WHERE guid = '$id'");
348 $char = $sql->fetch_row($result);
349 $char_data = explode(' ',$char[0]);
350
351 $char_data[CHAR_DATA_OFFSET_AP] = $new_attack_power;
352 $char_data[CHAR_DATA_OFFSET_RANGED_AP] = $new_range_attack_power;
353 $char_data[CHAR_DATA_OFFSET_EXP] = $new_exp;
354 $char_data[CHAR_DATA_OFFSET_GOLD] = $new_money;
355 $char_data[CHAR_DATA_OFFSET_ARENA_POINTS] = $new_arena_points;
356 $char_data[CHAR_DATA_OFFSET_HONOR_POINTS] = $new_honor_points;
357 $char_data[CHAR_DATA_OFFSET_HONOR_KILL] = $new_total_kills;
358 $char_data[CHAR_DATA_OFFSET_HEALTH] = $new_health;
359 $char_data[CHAR_DATA_OFFSET_MANA] = $new_mana;
360 $char_data[CHAR_DATA_OFFSET_STR] = $new_str;
361 $char_data[CHAR_DATA_OFFSET_AGI] = $new_agi;
362 $char_data[CHAR_DATA_OFFSET_STA] = $new_sta;
363 $char_data[CHAR_DATA_OFFSET_INT] = $new_int;
364 $char_data[CHAR_DATA_OFFSET_SPI] = $new_spi;
365 $char_data[CHAR_DATA_OFFSET_ARMOR] = $new_armor;
366 $char_data[CHAR_DATA_OFFSET_RES_HOLY] = $new_res_holy;
367 $char_data[CHAR_DATA_OFFSET_RES_ARCANE] = $new_res_arcane;
368 $char_data[CHAR_DATA_OFFSET_RES_FIRE] = $new_res_fire;
369 $char_data[CHAR_DATA_OFFSET_RES_NATURE] = $new_res_nature;
370 $char_data[CHAR_DATA_OFFSET_RES_FROST] = $new_res_frost;
371 $char_data[CHAR_DATA_OFFSET_RES_SHADOW] = $new_res_shadow;
372
373 $new_block = unpack("L",pack("f", $new_block));
374 $char_data[CHAR_DATA_OFFSET_BLOCK] = $new_block[1];
375 $new_dodge = unpack("L",pack("f", $new_dodge));
376 $char_data[CHAR_DATA_OFFSET_DODGE] = $new_dodge[1];
377 $new_parry = unpack("L",pack("f", $new_parry));
378 $char_data[CHAR_DATA_OFFSET_PARRY] = $new_parry[1];
379 $new_crit = unpack("L",pack("f", $new_crit));
380 $char_data[CHAR_DATA_OFFSET_MELEE_CRIT] = $new_crit[1];
381 $new_range_crit = unpack("L",pack("f", $new_range_crit));
382 $char_data[CHAR_DATA_OFFSET_RANGE_CRIT] = $new_range_crit[1];
383
384 //some items need to be deleted
385 if($check){
386 $item_offset = array(
387 "a0" => CHAR_DATA_OFFSET_EQU_HEAD,
388 "a1" => CHAR_DATA_OFFSET_EQU_NECK,
389 "a2" => CHAR_DATA_OFFSET_EQU_SHOULDER,
390 "a3" => CHAR_DATA_OFFSET_EQU_SHIRT,
391 "a4" => CHAR_DATA_OFFSET_EQU_CHEST,
392 "a5" => CHAR_DATA_OFFSET_EQU_BELT,
393 "a6" => CHAR_DATA_OFFSET_EQU_LEGS,
394 "a7" => CHAR_DATA_OFFSET_EQU_FEET,
395 "a8" => CHAR_DATA_OFFSET_EQU_WRIST,
396 "a9" => CHAR_DATA_OFFSET_EQU_GLOVES,
397 "a10" => CHAR_DATA_OFFSET_EQU_FINGER1,
398 "a11" => CHAR_DATA_OFFSET_EQU_FINGER2,
399 "a12" => CHAR_DATA_OFFSET_EQU_TRINKET1,
400 "a13" => CHAR_DATA_OFFSET_EQU_TRINKET2,
401 "a14" => CHAR_DATA_OFFSET_EQU_BACK,
402 "a15" => CHAR_DATA_OFFSET_EQU_MAIN_HAND,
403 "a16" => CHAR_DATA_OFFSET_EQU_OFF_HAND,
404 "a17" => CHAR_DATA_OFFSET_EQU_RANGED,
405 "a18" => CHAR_DATA_OFFSET_EQU_TABARD
406 );
407
408 foreach ($check as $item_num) {
409 //deleting equiped items
410 if ($item_num[0] == "a"){
411 $char_data[$item_offset[$item_num]] = 0;
412
413 sscanf($item_num, "a%d",$item_num);
414 $result = $sql->query("SELECT item FROM character_inventory WHERE guid = '$id' AND slot = $item_num AND bag = 0");
415 $item_inst_id = $sql->result($result, 0, 'item');
416
417 $sql->query("DELETE FROM character_inventory WHERE guid = '$id' AND slot = $item_num AND bag = 0");
418 $sql->query("DELETE FROM item_instance WHERE guid = '$item_inst_id' AND owner_guid = '$id'");
419 $sql->query("DELETE FROM item_text WHERE id = '$item_inst_id'");
420 } else { //deleting inv/bank items
421 $sql->query("DELETE FROM character_inventory WHERE guid = '$id' AND item = '$item_num'");
422 $sql->query("DELETE FROM item_instance WHERE guid = '$item_num' AND owner_guid = '$id'");
423 $sql->query("DELETE FROM item_text WHERE id = '$item_num'");
424 }
425 }
426 }
427
428 $data = implode(" ",$char_data);
429
430 if ($tp_to){
431 $query = $sql->query("SELECT map, position_x, position_y, position_z, orientation FROM `".$world_db[$realm_id]['name']."`.`game_tele` WHERE LOWER(name) = '".strtolower($tp_to)."'");
432 $tele = $sql->fetch_row($query);
433 if($tele) $teleport = "map='$tele[0]', position_x='$tele[1]', position_y='$tele[2]', position_z='$tele[3]', orientation='$tele[4]',";
434 else error($lang_char['no_tp_location']);
435 } else $teleport = "map='$map', position_x='$x', position_y='$y', position_z='$z',";
436
437 $result = $sql->query("UPDATE `characters` SET data = '$data', name = '$new_name', $teleport totaltime = '$new_tot_time' WHERE guid = '$id'");
438 $sql->close();
439 unset($sql);
440
441 if ($result) redirect("char_edit.php?action=edit_char&id=$id&error=3");
442 else redirect("char_edit.php?action=edit_char&id=$id&error=4");
443 } else {
444 $sql->close();
445 unset($sql);
446 error($lang_char['no_permission']);
447 }
448 } else {
449 $sql->close();
450 unset($sql);
451 redirect("char_edit.php?action=edit_char&id=$id&error=2");
452 }
453} else error($lang_char['no_char_found']);
454$sql->close();
455unset($sql);
456}
457
458
459//########################################################################################################################
460// MAIN
461//########################################################################################################################
462$err = (isset($_GET['error'])) ? $_GET['error'] : NULL;
463
464$lang_char = lang_char();
465
466$output .= "<div class=\"top\">";
467switch ($err) {
468case 1:
469 $output .= "<h1><font class=\"error\">{$lang_global['empty_fields']}</font></h1>";
470 break;
471case 2:
472 $output .= "<h1><font class=\"error\">{$lang_char['err_edit_online_char']}</font></h1>";
473 break;
474case 3:
475 $output .= "<h1><font class=\"error\">{$lang_char['updated']}</font></h1>";
476 break;
477case 4:
478 $output .= "<h1><font class=\"error\">{$lang_char['update_err']}</font></h1>";
479 break;
480case 5:
481 $output .= "<h1><font class=\"error\">{$lang_char['max_acc']}</font></h1>";
482 break;
483default: //no error
484 $output .= "<h1>{$lang_char['edit_char']}</h1><br />{$lang_char['check_to_delete']}";
485}
486$output .= "</div>";
487
488$action = (isset($_GET['action'])) ? $_GET['action'] : NULL;
489
490switch ($action) {
491case "edit_char":
492 edit_char();
493 break;
494case "do_edit_char":
495 do_edit_char();
496 break;
497default:
498 edit_char();
499}
500
501unset($action);
502unset($action_permission);
503unset($lang_char);
504
505require_once("footer.php");
506?>
Note: See TracBrowser for help on using the repository browser.