. */ /*** * List of web egs commands * * - give_item sheet quality quantity inventory * - recv_item sheet quality quantity inventory * - check_item sheet quality quantity inventory * - check_position min_x min_y max_x max_y * - check_fame faction_name "below"|"above" value * - check_target "sheet"|"bot_name"|"player_name" name * - check_brick brick_name * - set_brick "add"|"del" brick_name * - check_outpost name "attacker"|"defender"|"attack"|"defend" (attacker/defender : check if guild of player is attacker/defender, attack/defend : check if OP is in state atttack/defend) * - create_group number sheet [ dispersion "self"|"random"|orientation bot_name x y ] * - group_script bot_name command1 [ command2 ... ] * - change_vpx player_name property value * - set_title title * ***/ include_once(RYAPI_PATH.'/common/dfm.php'); class ryHmagic { function __construct() { $this->dfm = new ryDataFileManager(_user()->id); } function getWebCommand($web_app_url, $command, $is_next=false, $need_callback=false, $old_sep=false, $replace_space=true) { $command = str_replace('#player', ryzom_get_param('player_eid'), $command); if ($replace_space) $command = str_replace(' ', chr(160), $command); $last_connected_date = strtotime($_SESSION['last_played_date']); $index_infos = $this->dfm->loadUserDataFromApp('hmagic.index', 'app_profile'); if ($index_infos == null) { $index_infos['last_played_date'] = $last_connected_date; $index_infos['time'] = array(); $index_infos['index'] = 0; } if ($index_infos['last_played_date'] != $last_connected_date) { $index_infos['last_played_date'] = $last_connected_date; $index_infos['time'] = array(); $index_infos['index'] = 0; } if (!is_array($index_infos['time'])) $index_infos['time'] = array(); $index_infos['index']++; $index_infos['time'][strval($index_infos['index'])] = strval($index_infos['index']).'_'.strval(time()); $index_infos['url'][strval($index_infos['index'])] = $web_app_url; $tid = 'tid='.$index_infos['time'][strval($index_infos['index'])]; $this->dfm->saveUserDataFromApp('hmagic.index', 'app_profile', $index_infos); $eid = ryzom_get_param('datasetid'); $checksum = $web_app_url.'&'.$tid . $last_connected_date . $index_infos['index'] . $command . $eid; $hmac = strtoupper(hash_hmac('sha1', $checksum, RYAPI_EGS_SALT)); return ' local command = \''.str_replace("'", '\\\'',str_replace('&', '&', $command)).'\''."\n\t". (RYAPI_HMAGIC_DEBUG?'runCommand("a","webExecCommand","debug", "1", command, "hmac", "2","'.($is_next?'1':'0').'","'.($need_callback?'1':'0').'")':'runCommand("a","webExecCommand","'.str_replace('&', '&', $web_app_url).'&'.$tid.'","'.$index_infos['index'].'",command,"'.$hmac.'","'.($old_sep?'1':'3').'","'.($is_next?'1':'0').'","'.($need_callback?'1':'0').'")'); } function validateCallback() { $index_infos = $this->dfm->loadUserDataFromApp('hmagic.index', 'app_profile'); $playerEid = ryzom_get_param('player_eid'); $event = ryzom_get_param('event'); $desc_error = ryzom_get_param('desc'); $desc = ''; if ($desc_error) $desc = '&desc='.$desc_error; list($index, $tid) = explode('_', ryzom_get_param('tid')); $web_app_url = $index_infos['url'][$index]; if ($index.'_'.$tid != $index_infos['time'][$index]) return false; $trans_id = ''; if ($tid) $trans_id = '&tid='.$index.'_'.$tid; $hmac = ryzom_get_param('hmac'); $checksum = $web_app_url.$trans_id.'&player_eid='.$playerEid.'&event='.$event.$desc; $real_hmac = strtoupper(hash_hmac('sha1', $checksum, RYAPI_EGS_SALT)); if ($real_hmac != $hmac) return false; else return true; } } ?>