Guest User

Untitled

a guest
Nov 23rd, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.10 KB | None | 0 0
  1. <?php
  2. // lock kvuli synchronizaci
  3. $lockFile = "prevod_lock";
  4. if(file_exists($lockFile) && file_get_contents($lockFile) == "1") {
  5.    echo "Jiz se provadi";
  6.    return;
  7. }
  8.  
  9. $fh = fopen($lockFile, 'w') or die("can't open file");
  10. fwrite($fh, "1");
  11. fclose($fh);
  12.  
  13. // spojeni s db
  14. $user = "czechwow_prevod";
  15. $pass = "urUThuhmvc7YbMH9";
  16. $spojeni = mysql_connect("durotan.czechdream.cz", $user, $pass);
  17. mysql_query("SET NAMES utf8");
  18. mysql_select_db("drago_335_proper_char", $spojeni);
  19.  
  20. $query = mysql_query("SELECT id, postava, account, stav FROM cd_drupal.czechwow_prevody WHERE stav IN(0,3) ORDER BY id;");
  21. while($postava = mysql_fetch_object($query)) {
  22.    echo "Zpracovavam postavu ".$postava->postava."\n";
  23.    $vysl = zpracujPostavu($postava->id, $postava->postava, $postava->account, $postava->stav);
  24.    mysql_query("UPDATE cd_drupal.czechwow_prevody SET stav = ".$vysl." WHERE id = ".$postava->id);
  25.    sleep(10);
  26. }
  27.  
  28. $fh = fopen($lockFile, 'w') or die("can't open file");
  29. fwrite($fh, "0");
  30. fclose($fh);
  31. return;
  32.  
  33. function zpracujPostavu($id, $guid, $account, $stav) {
  34.    // kontrola poctu postav na ucte
  35.    $pocetPostav = mysql_fetch_object(mysql_query("SELECT count(guid) AS pocet FROM characters WHERE account = ".$account))->pocet;
  36.    echo "Postav na uctu: ".$pocetPostav."\n";
  37.    if($pocetPostav >= 10)
  38.        return 5;
  39.  
  40.    // nacteni postavy
  41.    $postava = mysql_fetch_array(mysql_query("SELECT
  42.   `guid`, `account`, `name`, `race`, `class`, `gender`, `level`, `xp`, `money`, `playerBytes`, `playerBytes2`,
  43.   `playerFlags`, `position_x`, `position_y`, `position_z`, `map`, `orientation`, `taximask`, `online`, `cinematic`,
  44.   `totaltime`, `leveltime`, `logout_time`, `is_logout_resting`, `rest_bonus`, `resettalents_cost`, `resettalents_time`,
  45.   `trans_x`, `trans_y`, `trans_z`, `trans_o`, `transguid`, `extra_flags`, `stable_slots`, `at_login`, `zone`,
  46.   `death_expire_time`, `taxi_path`, `arenaPoints`, `totalHonorPoints`, `todayHonorPoints`, `yesterdayHonorPoints`,
  47.   `totalKills`, `todayKills`, `yesterdayKills`, `chosenTitle`, `knownCurrencies`, `watchedFaction`, `drunk`, `health`,
  48.   `power1`, `power2`, `power3`, `power4`, `power5`, `power6`, `power7`, `specCount`, `activeSpec`, `exploredZones`,
  49.   `equipmentCache`, `ammoId`, `knownTitles`, `actionBars`, `deleteInfos_Account`, `deleteInfos_Name`, `deleteDate`,
  50.   `instance_id`, `instance_mode_mask`, `latency`
  51.   FROM czechwow.characters WHERE guid = ".$guid));
  52.    echo "Postava nactena\n";
  53.    // kontrola jmena
  54.    $postavySeStejnymJmenem = mysql_query("SELECT name FROM characters WHERE name LIKE '".$postava["name"]."';");
  55.    echo "Kontroluji stejna jmena\n";
  56.    if(mysql_num_rows($postavySeStejnymJmenem) > 0) {
  57.        echo "Postava se stejnym jmenem existuje, predavam rucnimu vyrizeni konfliktu\n";
  58.        return 2;
  59.    }
  60.    $postava["at_login"] |= 4;
  61.    
  62.    // vytvoreni nove postavy s novym guid
  63.    echo "Vytvarim postavu:";
  64.    mysql_query("LOCK TABLES characters WRITE;");
  65.    $query = mysql_query("SELECT max(guid) AS newguid FROM characters;");
  66.    $newGuid = mysql_fetch_object($query)->newguid+1;
  67.    $sql = "INSERT INTO characters
  68.   (`guid`, `account`, `name`, `race`, `class`, `gender`, `level`, `xp`, `money`, `playerBytes`, `playerBytes2`,
  69.   `playerFlags`, `position_x`, `position_y`, `position_z`, `map`, `orientation`, `taximask`, `online`, `cinematic`,
  70.   `totaltime`, `leveltime`, `logout_time`, `is_logout_resting`, `rest_bonus`, `resettalents_cost`, `resettalents_time`,
  71.   `trans_x`, `trans_y`, `trans_z`, `trans_o`, `transguid`, `extra_flags`, `stable_slots`, `at_login`, `zone`,
  72.   `death_expire_time`, `taxi_path`, `arenaPoints`, `totalHonorPoints`, `todayHonorPoints`, `yesterdayHonorPoints`,
  73.   `totalKills`, `todayKills`, `yesterdayKills`, `chosenTitle`, `knownCurrencies`, `watchedFaction`, `drunk`, `health`,
  74.   `power1`, `power2`, `power3`, `power4`, `power5`, `power6`, `power7`, `speccount`, `activespec`, `exploredZones`,
  75.   `equipmentCache`, `ammoId`, `knownTitles`, `actionBars`, `deleteInfos_Account`, `deleteInfos_Name`, `deleteDate`,
  76.   `instance_id`, `instance_mode_mask`, `latency`)";
  77.    $sql .= " VALUES (".$newGuid.",".$account;
  78.    // pokud se ma postava prejmenovat
  79.    if($stav == 3) {
  80.        $postava["name"] .= rand(10,99);
  81.        $postava["at_login"] |= 1;
  82.    }
  83.    echo "jmeno ".$postava["name"]."\n";
  84.    $sloupcu = 70;
  85.    for($i = 2 ; $i < $sloupcu ; $i++) {
  86.        $sql .= ",'".$postava[$i]."'";
  87.    }
  88.    $sql .= ");";
  89.    echo $sql."\n";
  90.    mysql_query($sql);
  91.    mysql_query("UNLOCK TABLES;");
  92.    
  93.    // prevod item_instance
  94.    mysql_query("LOCK TABLES item_instance, czechwow.item_instance, czechwow.character_inventory, czechwow.mail_item WRITE, czechwow.mail;");
  95.    // item_instance z character_inventory
  96.    $nejvyssiItem = mysql_fetch_object(mysql_query("SELECT max(guid) AS maxguid FROM item_instance"))->maxguid+2-7044651;
  97.    $sql = "INSERT INTO item_instance (SELECT ch.`guid`+$nejvyssiItem, ch.`itemEntry`, $newGuid, 0, 0, ch.`count`, ch.`duration`, ch.`charges`, ch.`flags`, ch.`enchantments`, ch.`randomPropertyId`, ch.`durability`, ch.`playedTime`, ch.`text` FROM czechwow.item_instance ch INNER JOIN czechwow.character_inventory chi ON chi.item = ch.guid WHERE chi.guid = $guid);";
  98.    mysql_query($sql);
  99.    echo mysql_error();
  100.    if(mysql_error() != "")
  101.        echo "Nepovedlo se zapsat do item_instance: ".$sql."\n";
  102.    // item_instance z mail_items
  103.    $sql = "INSERT INTO item_instance (SELECT ch.`guid`+$nejvyssiItem, ch.`itemEntry`, $newGuid, 0, 0, ch.`count`, ch.`duration`, ch.`charges`, ch.`flags`, ch.`enchantments`, ch.`randomPropertyId`, ch.`durability`, ch.`playedTime`, ch.`text` FROM czechwow.item_instance ch INNER JOIN czechwow.mail_items mi ON mi.item_guid = ch.guid INNER JOIN czechwow.mail m ON m.id = mi.mail_id WHERE m.receiver = $guid);";
  104.    mysql_query($sql);
  105.    echo mysql_error();
  106.    if(mysql_error() != "")
  107.        echo "Nepovedlo se zapsat do item_instance: ".$sql."\n";
  108.    mysql_query("UNLOCK TABLES;");
  109.    
  110.    // prevod mail
  111.    mysql_query("LOCK TABLES mail, czechwow.mail WRITE;");
  112.    $nejvyssiMail = mysql_fetch_object(mysql_query("SELECT max(id) AS maxid FROM mail"))->maxid+2-7069439;
  113.    $sql = "INSERT INTO mail (SELECT m.id+$nejvyssiMail, m.messageType, m.stationery, m.mailTemplateId, $newGuid, $newGuid, m.subject, m.body, m.has_items, m.expire_time, m.deliver_time, m.money, m.cod, m.checked FROM czechwow.mail m WHERE m.receiver = $guid);";
  114.    mysql_query("UNLOCK TABLES;");
  115.        
  116.    $sql = array();
  117.    $sql[] = "INSERT INTO character_achievement (SELECT $newGuid, achievement, date FROM czechwow.character_achievement WHERE guid = $guid);";
  118.    $sql[] = "INSERT INTO character_achievement_progress (SELECT $newGuid, criteria, counter, date FROM czechwow.character_achievement_progress WHERE guid = $guid);";
  119.    $sql[] = "INSERT INTO character_action (SELECT $newGuid, spec, button, action, type FROM czechwow.character_action WHERE guid = $guid);";
  120.    $sql[] = "INSERT INTO character_aura (SELECT $newGuid, $newGuid, item_guid+$nejvyssiItem, spell, effect_mask, recalculate_mask, stackcount, amount0, amount1, amount2, base_amount0, base_amount1, base_amount2, maxduration, remaintime, remaincharges FROM czechwow.character_aura WHERE guid = $guid);";
  121.    $sql[] = "INSERT INTO character_homebind (SELECT $newGuid, map, zone, position_x, position_y, position_z FROM czechwow.character_homebind WHERE guid = $guid);";
  122.    $sql[] = "INSERT INTO character_inventory (SELECT $newGuid, bag, slot, item+$nejvyssiItem FROM czechwow.character_inventory WHERE guid = $guid AND bag = 0);";
  123.    $sql[] = "INSERT INTO character_inventory (SELECT $newGuid, bag+$nejvyssiItem, slot, item+$nejvyssiItem FROM czechwow.character_inventory WHERE guid = $guid AND bag > 0);";
  124.    $sql[] = "INSERT INTO character_queststatus (SELECT $newGuid, quest, status, explored, timer, mobcount1, mobcount2, mobcount3, mobcount4, itemcount1, itemcount2, itemcount3, itemcount4 FROM czechwow.character_queststatus WHERE guid = $guid);";
  125.    $sql[] = "INSERT INTO character_queststatus_rewarded (SELECT $newGuid, quest FROM czechwow.character_queststatus_rewarded WHERE guid = $guid);";
  126.    $sql[] = "INSERT INTO character_reputation (SELECT $newGuid, faction, standing, flags FROM czechwow.character_reputation WHERE guid = $guid);";
  127.    $sql[] = "INSERT INTO character_skills (SELECT $newGuid, skill, value, max FROM czechwow.character_skills WHERE guid = $guid);";
  128.    $sql[] = "INSERT INTO character_spell (SELECT $newGuid, spell, active, disabled FROM czechwow.character_spell WHERE guid = $guid);";
  129.    $sql[] = "INSERT INTO mail_items (SELECT mi.mail_id+$nejvyssiMail, mi.item_guid+$nejvyssiItem, mi.receiver FROM czechwow.mail_items mi INNER JOIN czechwow.mail m ON m.id = mi.mail_id WHERE m.receiver = $guid);";
  130.    foreach($sql AS $key => $val) {
  131.        mysql_query($val);
  132.        echo mysql_error();
  133.        if(mysql_error() != "")
  134.            echo $val."\n";
  135.    }
  136.    echo mysql_error();
  137.    if(mysql_error() != "")
  138.        echo "Nepovedlo se zapsat do ostatnich tabulek: ".$sql."\n";
  139.    
  140.    
  141.    mysql_query("UPDATE cd_drupal.czechwow_prevody SET noveGuid = ".$newGuid." WHERE id = ".$id);
  142.    echo "Postava uspesne prevedena";
  143.    return 1;
  144. }
  145. ?>
Add Comment
Please, Sign In to add comment