1 | <?php
|
---|
2 |
|
---|
3 |
|
---|
4 | require_once 'header.php';
|
---|
5 | require_once 'libs/char_lib.php';
|
---|
6 | require_once 'libs/item_lib.php';
|
---|
7 | require_once 'libs/map_zone_lib.php';
|
---|
8 | valid_login($action_permission['delete']);
|
---|
9 |
|
---|
10 | //########################################################################################################################
|
---|
11 | // PRINT EDIT FORM
|
---|
12 | //########################################################################################################################
|
---|
13 | function 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 |
|
---|
18 | valid_login($action_permission['delete']);
|
---|
19 | if (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 |
|
---|
31 | if ($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&error=3&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\" /> {$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&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 | //########################################################################################################################
|
---|
235 | function do_edit_char() {
|
---|
236 | global $lang_global, $lang_char, $output, $realm_db,
|
---|
237 | $characters_db, $realm_id, $action_permission, $user_lvl, $world_db;
|
---|
238 | valid_login($action_permission['delete']);
|
---|
239 | if ( 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 |
|
---|
248 | if ($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();
|
---|
455 | unset($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\">";
|
---|
467 | switch ($err) {
|
---|
468 | case 1:
|
---|
469 | $output .= "<h1><font class=\"error\">{$lang_global['empty_fields']}</font></h1>";
|
---|
470 | break;
|
---|
471 | case 2:
|
---|
472 | $output .= "<h1><font class=\"error\">{$lang_char['err_edit_online_char']}</font></h1>";
|
---|
473 | break;
|
---|
474 | case 3:
|
---|
475 | $output .= "<h1><font class=\"error\">{$lang_char['updated']}</font></h1>";
|
---|
476 | break;
|
---|
477 | case 4:
|
---|
478 | $output .= "<h1><font class=\"error\">{$lang_char['update_err']}</font></h1>";
|
---|
479 | break;
|
---|
480 | case 5:
|
---|
481 | $output .= "<h1><font class=\"error\">{$lang_char['max_acc']}</font></h1>";
|
---|
482 | break;
|
---|
483 | default: //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 |
|
---|
490 | switch ($action) {
|
---|
491 | case "edit_char":
|
---|
492 | edit_char();
|
---|
493 | break;
|
---|
494 | case "do_edit_char":
|
---|
495 | do_edit_char();
|
---|
496 | break;
|
---|
497 | default:
|
---|
498 | edit_char();
|
---|
499 | }
|
---|
500 |
|
---|
501 | unset($action);
|
---|
502 | unset($action_permission);
|
---|
503 | unset($lang_char);
|
---|
504 |
|
---|
505 | require_once("footer.php");
|
---|
506 | ?>
|
---|