Dobby2

Dobby

  1. // ==UserScript==
  2. // @name Dobby2
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.52
  5. // @description Dobby
  6. // @author xxxx
  7. // @include https://*.the-west.*/game.php*
  8. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13.  
  14. function JobPrototype(x,y,id) {
  15. this.x = x;
  16. this.y = y;
  17. this.id = id;
  18. this.silver = false;
  19. this.distance = 0;
  20. this.experience = 0;
  21. this.money = 0;
  22. this.motivation = 0;
  23. this.stopMotivation = 75;
  24. this.set = -1;
  25. };
  26. JobPrototype.prototype = {
  27. setSilver: function(isSilver) {
  28. this.silver = isSilver;
  29. },
  30. calculateDistance:function() {
  31. this.distance = GameMap.calcWayTime({x:this.x,y:this.y},Character.position);
  32. },
  33. setExperience:function(xp) {
  34. this.experience = xp;
  35. },
  36. setMoney:function(money) {
  37. this.money = money;
  38. },
  39. setMotivation:function(motivation) {
  40. this.motivation = motivation;
  41. },
  42. setStopMotivation:function(stopMotivation) {
  43. this.stopMotivation = stopMotivation;
  44. },
  45. setSet:function(setIndex) {
  46. this.set = setIndex;
  47. }
  48. };
  49. function ConsumablePrototype(id,image,name) {
  50. this.id = id;
  51. this.energy = 0;
  52. this.motivation = 0;
  53. this.health = 0;
  54. this.selected = true;
  55. this.image = image;
  56. this.count = 0;
  57. this.name = name;
  58. };
  59. ConsumablePrototype.prototype = {
  60. setEnergy:function(energy) {
  61. this.energy = energy;
  62. },
  63. setMotivation:function(motivation) {
  64. this.motivation = motivation;
  65. },
  66. setHealth:function(health) {
  67. this.health = health;
  68. },
  69. setSelected:function(select) {
  70. this.selected = select;
  71. },
  72. setCount:function(count) {
  73. this.count = count;
  74. }
  75. };
  76.  
  77. Dobby = {
  78. window:null,
  79. jobsLoaded:false,
  80. allJobs:[],
  81. allConsumables:[],
  82. consumableUsed:[],
  83. addedJobs:[],
  84. forts:[],
  85. homeTown:null,
  86. jobFilter:{filterOnlySilver:false,filterNoSilver:false,filterCenterJobs:false,filterJob:""},
  87. sortJobTableXp:0,
  88. sortJobTableDistance:0,
  89. jobTablePosition:{content:"0px",scrollbar:"0px"},
  90. addedJobTablePosition:{content:"0px",scrollbar:"0px"},
  91. consumableTablePosition:{content:"0px",scrollbar:"0px"},
  92. currentState:0,
  93. states:["idle","running","waiting for a consumable cooldown"],
  94. sets:null,
  95. selectedSet:0,
  96. selectedSleepPlace:-2,
  97. travelSet:-1,
  98. jobSet:-1,
  99. healthSet:-1,
  100. regenerationSet:-1,
  101. language:"",
  102. searchKeys:{
  103. "en_DK":{
  104. energy:"Energy",
  105. energyText:"Energy increase:",
  106. motivation:"Work motivation",
  107. motivationText:"Work motivation increase:",
  108. health: "Health point bonus",
  109. healthText:"Health point bonus:"
  110. },
  111. "sk_SK":{
  112. energy:"Energia",
  113. energyText:"Zvýšenie energie:",
  114. motivation:"Pracovnej motivácie",
  115. motivationText:"Zvýšenie pracovnej motivácie:",
  116. health: "Bonus bodov zdravia",
  117. healthText:"Bonus bodov zdravia:"
  118. },
  119. "cs_CZ":{
  120. energy:"Energie",
  121. energyText:"Zvýšení energie:",
  122. motivation:"Pracovní motivace",
  123. motivationText:"Zvýšení pracovní motivace:",
  124. health: "Bonus zdraví",
  125. healthText:"Bonus zdraví:"
  126. },
  127. "hu_HU":{
  128. energy:"Energia növekedése:",
  129. energyText:"Energia növekedése:",
  130. motivation:"Munka motiváció növelése:",
  131. motivationText:"Munka motiváció növelése:",
  132. health: "Életerő bónusz",
  133. healthText:"Életerő bónusz:"
  134. },
  135. "pl_PL":{
  136. energy:"Wzrost energii:",
  137. energyText:"Wzrost energii:",
  138. motivation:"Zwiększenie motywacji do pracy:",
  139. motivationText:"Zwiększenie motywacji do pracy:",
  140. health: "Bonus Punktów życia:",
  141. healthText:"Bonus Punktów życia:"
  142. },
  143. "ro_RO":{
  144. energy:"Energie mărită:",
  145. energyText:"Energie mărită:",
  146. motivation:"Creştere a motivaţiei de muncă:",
  147. motivationText:"Creştere a motivaţiei de muncă:",
  148. health: "Puncte de viaţă:",
  149. healthText:"Puncte de viaţă:"
  150. },
  151.  
  152.  
  153. },
  154. consumableSelection:{energy:false,motivation:false,health:false},
  155. isRunning:false,
  156. currentJob:{job:0,direction:true},
  157. jobRunning:false,
  158. settings:{
  159. addEnergy:false,
  160. addMotivation:false,
  161. addHealth:false,
  162. healthStop:10,
  163. setWearDelay:5,
  164. jobDelayMin:0,
  165. jobDelayMax:0,
  166. enableRegeneration:false
  167. },
  168. statistics:{
  169. jobsInSession:0,
  170. xpInSession:0,
  171. totalJobs:0,
  172. totalXp:0,
  173. }
  174.  
  175. };
  176. Dobby.isNumber = function(potentialNumber) {
  177. return Number.isInteger(parseInt(potentialNumber));
  178. };
  179.  
  180. Dobby.generateRandomNumber = function(min,max) {
  181. var minN = Math.min(min,max);
  182. var maxN = Math.max(min,max);
  183.  
  184. var number = Math.floor((minN + Math.random() * (maxN-minN+1)));
  185. console.log("Generated job set delay is :" + number + " seconds");
  186. return number;
  187. }
  188.  
  189. Dobby.loadJobs = function() {
  190. if(!Dobby.jobsLoaded) {
  191. new UserMessage("Loading...", UserMessage.TYPE_HINT).show();
  192. var tiles = [];
  193. var index = 0;
  194. var currentLength = 0;
  195. var maxLength = 299;
  196. Ajax.get('map','get_minimap',{},function(r){
  197. var tiles = [];
  198. var jobs = [];
  199.  
  200. for(var townNumber in r.towns) {
  201. if(r.towns[townNumber].town_id == Character.homeTown.town_id) {
  202. Dobby.homeTown = r.towns[townNumber];
  203. break;
  204. }
  205. }
  206.  
  207. /*for(var fortNumber in r.forts) {
  208. for(var fortNumber2 in r.forts[fortNumber]) {
  209. var fort = r.forts[fortNumber][fortNumber2];
  210. if(fort['fort']['alliance_id'] == Character.homeTown.alliance_id) {
  211. Dobby.forts.push(fort['fort']);
  212. }
  213. }
  214. }*/
  215.  
  216. for(var jobGroup in r.job_groups) {
  217. var group = r.job_groups[jobGroup];
  218. var jobsGroup = JobList.getJobsByGroupId(parseInt(jobGroup));
  219. for(var tilecoord = 0; tilecoord < group.length;tilecoord++) {
  220. var xCoord = Math.floor(group[tilecoord][0]/GameMap.tileSize);
  221. var yCoord = Math.floor(group[tilecoord][1]/GameMap.tileSize);
  222. if(currentLength == 0) {
  223. tiles[index] = [];
  224. }
  225. tiles[index].push([xCoord,yCoord]);
  226. currentLength++;
  227. if(currentLength == maxLength) {
  228. currentLength = 0;
  229. index++;
  230. }
  231. for(var i = 0 ; i < jobsGroup.length;i++) {
  232. jobs.push(new JobPrototype(group[tilecoord][0],group[tilecoord][1],jobsGroup[i].id));
  233. }
  234. }
  235. }
  236. var toLoad = tiles.length;
  237. var loaded = 0;
  238. for(var blocks = 0; blocks < tiles.length;blocks++) {
  239. GameMap.Data.Loader.load(tiles[blocks],function(){
  240. loaded++;
  241. if(loaded == toLoad) {
  242. Dobby.jobsLoaded = true;
  243. Dobby.allJobs = jobs;
  244. Dobby.findAllConsumables();
  245. Dobby.createWindow();
  246. }
  247. });
  248. }
  249. });
  250. }else {
  251. Dobby.findAllConsumables();
  252. Dobby.createWindow();
  253. }
  254. };
  255. Dobby.loadJobData = function(callback) {
  256. Ajax.get('work','index',{},function(r) {
  257. if(r.error) {
  258. console.log(r.error);
  259. return;
  260. }
  261. JobsModel.initJobs(r.jobs);
  262. callback();
  263. });
  264. };
  265. Dobby.loadSets = function(callback) {
  266. Ajax.remoteCallMode('inventory', 'show_equip', {}, function(r) {
  267. Dobby.sets = r.data;
  268. callback();
  269. });
  270. };
  271. Dobby.loadLanguage = function() {
  272. Ajax.remoteCall("settings", "settings", {}, function(resp) {
  273. Dobby.language = resp.lang.account.key;
  274. });
  275. };
  276. Dobby.loadJobMotivation = function(index,callback) {
  277. Ajax.get('job','job',{jobId:Dobby.addedJobs[index].id,x:Dobby.addedJobs[index].x,y:Dobby.addedJobs[index].y},function(r){
  278. callback(r.motivation*100);
  279. });
  280. };
  281. Dobby.getJobName = function(id) {
  282. return JobList.getJobById(id).name;
  283. };
  284. Dobby.getJobIcon = function(silver,id,x,y) {
  285. var html ='<div class="centermap" onclick="GameMap.center(' + x + ',' + y + ');"style="position: absolute;background-image: url(\'../images/map/icons/instantwork.png\');width: 20px;height: 20px;top: 0;right: 3px;cursor: pointer;"></div>';
  286. var silverHtml = "";
  287. if(silver) {
  288. silverHtml = '<div class="featured silver"></div>';
  289. }
  290. return'<div class="job" style="left: 0; top: 0; position: relative;"><div onclick="" class="featured"></div>' + silverHtml + html + '<img src="../images/jobs/' + JobList.getJobById(id).shortname + '.png" class="job_icon"></div>';
  291. };
  292. Dobby.getConsumableIcon = function(src) {
  293. return "<div><img src ="+ src + "></div>";
  294. };
  295. Dobby.checkIfSilver = function(x,y,id) {
  296. var key = x + "-" + y;
  297. var jobData = GameMap.JobHandler.Featured[key];
  298. if(jobData == undefined || jobData[id] == undefined) {
  299. return false;
  300. }else {
  301. return jobData[id].silver;
  302. }
  303. };
  304. Dobby.compareUniqueJobs = function(job,jobs){
  305. for(var i = 0 ; i < jobs.length;i++) {
  306. if(jobs[i].id == job.id) {
  307. if(job.silver && !jobs[i].silver || (job.silver == jobs[i].silver &&job.distance < jobs[i].distance)) {
  308. jobs.splice(i,1);
  309. jobs.push(job);
  310. }
  311. return;
  312. }
  313. }
  314. jobs.push(job);
  315. };
  316. Dobby.findJobData = function(job) {
  317. for(var i = 0 ; i < JobsModel.Jobs.length;i++) {
  318. if(JobsModel.Jobs[i].id == job.id) {
  319. return JobsModel.Jobs[i];
  320. }
  321. }
  322. };
  323. Dobby.parseJobData = function(jobs) {
  324. for(var job = 0 ; job < jobs.length;job++) {
  325. var currentJob = jobs[job];
  326. var data = Dobby.findJobData(currentJob);
  327. var xp = data.basis.short.experience;
  328. var money = data.basis.short.money;
  329. currentJob.setMotivation(data.jobmotivation*100);
  330. if(currentJob.silver) {
  331. xp = Math.ceil(1.5*xp);
  332. money = Math.ceil(1.5*money);
  333. }
  334. currentJob.setExperience(xp);
  335. currentJob.setMoney(money);
  336. }
  337. };
  338. Dobby.updateJobDistances = function() {
  339. for(var i = 0; i < Dobby.allJobs.length;i++) {
  340. Dobby.allJobs[i].calculateDistance();
  341. }
  342. };
  343. Dobby.getAllUniqueJobs = function() {
  344. Dobby.updateJobDistances();
  345. var jobs = [];
  346. for(var i = 0 ; i < Dobby.allJobs.length;i++) {
  347. var currentJob = Dobby.allJobs[i];
  348. if(Dobby.jobFilter.filterJob != "") {
  349. if(!Dobby.getJobName(currentJob.id).toLowerCase().includes(Dobby.jobFilter.filterJob)) {
  350. continue;
  351. }
  352. }
  353. if(!JobList.getJobById(currentJob.id).canDo()) {
  354. continue;
  355. }
  356. if(Dobby.checkIfJobAdded(currentJob.id)) {
  357. continue;
  358. }
  359. var isSilver = Dobby.checkIfSilver(currentJob.x,currentJob.y,currentJob.id);
  360. currentJob.silver = isSilver;
  361. currentJob.calculateDistance();
  362. if(isSilver && Dobby.jobFilter.filterNoSilver) {
  363. continue;
  364. }
  365. if(!isSilver && Dobby.jobFilter.filterOnlySilver) {
  366. continue;
  367. }
  368. if(Dobby.jobFilter.filterCenterJobs && currentJob.id < 131 ) {
  369. continue;
  370. }
  371. Dobby.compareUniqueJobs(currentJob,jobs);
  372. }
  373. Dobby.parseJobData(jobs);
  374.  
  375. var experienceSort = function(a,b) {
  376. if(a == null && b == null) {
  377. return 0;
  378. }
  379. if(a == null && b != null) {
  380. return 1;
  381. }
  382. if(a != null && b == null) {
  383. return -1;
  384. }
  385. var a1 = a.experience;
  386. var b1 = b.experience;
  387. return (a1 > b1) ? -1 :(a1 < b1) ? 1 :0;
  388. };
  389. var reverseExperienceSort = function(a,b) {
  390. if(a == null && b == null) {
  391. return 0;
  392. }
  393. if(a == null && b != null) {
  394. return -1;
  395. }
  396. if(a != null && b == null) {
  397. return 1;
  398. }
  399. var a1 = a.experience;
  400. var b1 = b.experience;
  401. return (a1 > b1) ? 1 :(a1 < b1) ? -1 :0;
  402. };
  403. var distanceSort = function(a,b) {
  404. if(a == null && b == null) {
  405. return 0;
  406. }
  407. if(a == null && b != null) {
  408. return 1;
  409. }
  410. if(a != null && b == null) {
  411. return -1;
  412. }
  413. var a1 = a.distance;
  414. var b1 = b.distance;
  415. return (a1 > b1) ? -1 :(a1 < b1) ? 1 :0;
  416. };
  417. var reverseDistanceSort = function(a,b) {
  418. if(a == null && b == null) {
  419. return 0;
  420. }
  421. if(a == null && b != null) {
  422. return -1;
  423. }
  424. if(a != null && b == null) {
  425. return 1;
  426. }
  427. var a1 = a.distance;
  428. var b1 = b.distance;
  429. return (a1 > b1) ? 1 :(a1 < b1) ? -1 :0;
  430. };
  431. if(Dobby.sortJobTableXp == 1) {
  432. jobs.sort(experienceSort);
  433. }
  434. if(Dobby.sortJobTableXp == -1) {
  435. jobs.sort(reverseExperienceSort);
  436. }
  437. if(Dobby.sortJobTableDistance == 1) {
  438. jobs.sort(distanceSort);
  439. }
  440. if(Dobby.sortJobTableDistance == -1) {
  441. jobs.sort(reverseDistanceSort);
  442. }
  443. return jobs;
  444. };
  445. Dobby.findJob = function(x,y,id) {
  446. for(var i = 0 ; i < Dobby.allJobs.length;i++) {
  447. if(Dobby.allJobs[i].id == id && Dobby.allJobs[i].x == x && Dobby.allJobs[i].y == y) {
  448. return Dobby.allJobs[i];
  449. }
  450. }
  451. };
  452. Dobby.addJob = function(x,y,id) {
  453. if(!Dobby.checkIfJobAdded(id)) {
  454. Dobby.addedJobs.push(Dobby.findJob(x,y,id));
  455. }
  456. };
  457. Dobby.removeJob = function(x,y,id) {
  458. for(var i = 0; i < Dobby.addedJobs.length;i++) {
  459. if(Dobby.addedJobs[i].id == id && Dobby.addedJobs[i].x == x && Dobby.addedJobs[i].y == y) {
  460. Dobby.addedJobs.splice(i,1);
  461. Dobby.consolidePosition(i);
  462. break;
  463. }
  464. }
  465. };
  466. Dobby.checkIfJobAdded = function(id) {
  467. for(var i = 0; i < Dobby.addedJobs.length;i++) {
  468. if(Dobby.addedJobs[i].id == id ) {
  469. return true;
  470. }
  471. }
  472. return false;
  473. };
  474. Dobby.findAddedJob = function(x,y,id) {
  475. for(var i = 0 ; i < Dobby.addedJobs.length;i++) {
  476. if(Dobby.addedJobs[i].x == x && Dobby.addedJobs[i].y == y && Dobby.addedJobs[i].id == id ) {
  477. return Dobby.addedJobs[i];
  478. }
  479. }
  480. return null;
  481. };
  482. Dobby.getJobSet = function(x,y,id) {
  483. var job = Dobby.findAddedJob(x,y,id);
  484. if(job != null)
  485. return job.set;
  486. };
  487. Dobby.setJobSet = function(x,y,id,set) {
  488. var job = Dobby.findAddedJob(x,y,id);
  489. if(job != null)
  490. return job.setSet(set);
  491. };
  492. Dobby.setSetForAllJobs = function() {
  493. for(var i = 0 ;i < Dobby.addedJobs.length;i++) {
  494. if(Dobby.addedJobs[i].set == -1)
  495. Dobby.addedJobs[i].setSet(Dobby.jobSet);
  496. }
  497. };
  498. Dobby.consolidePosition = function(removeIndex) {
  499. if(removeIndex <= Dobby.currentJob.job && Dobby.currentJob.job > 0) {
  500. Dobby.currentJob.job--;
  501. }
  502. if(Dobby.addedJobs.length == 1) {
  503. Dobby.currentJob.direction = true;
  504. }
  505. }
  506. Dobby.parseStopMotivation = function() {
  507. for(var i = 0 ; i < Dobby.addedJobs.length;i++) {
  508. var stopMotivation = $(".dobby2window #x-" + Dobby.addedJobs[i].x + "y-" + Dobby.addedJobs[i].y + "id-" + Dobby.addedJobs[i].id).prop("value");
  509. if(Dobby.isNumber(stopMotivation)) {
  510. Dobby.addedJobs[i].setStopMotivation(parseInt(stopMotivation));
  511. }else {
  512. return false;
  513. }
  514. }
  515. return true;
  516. };
  517. Dobby.getItemImage = function(id) {
  518. return ItemManager.get(id).wear_image;
  519. };
  520. Dobby.findAllConsumables = function() {
  521. if(Dobby.searchKeys[Dobby.language] == undefined) return;
  522. var energyConsumes = Bag.search(Dobby.searchKeys[Dobby.language].energy);
  523. for(var i = 0 ; i < energyConsumes.length;i++) {
  524. Dobby.addConsumable(energyConsumes[i]);
  525. }
  526. var motivationConsumes = Bag.search(Dobby.searchKeys[Dobby.language].motivation);
  527. for(var i = 0; i < motivationConsumes.length;i++) {
  528. Dobby.addConsumable(motivationConsumes[i]);
  529. }
  530. var healthConsumes = Bag.search(Dobby.searchKeys[Dobby.language].health);
  531. for(var i = 0; i < healthConsumes.length;i++) {
  532. Dobby.addConsumable(healthConsumes[i]);
  533. }
  534. };
  535. Dobby.CheckIfConsumableAdded = function(item) {
  536. if(item == undefined)
  537. return true;
  538. for(var i = 0 ; i < Dobby.allConsumables.length;i++) {
  539. if(Dobby.allConsumables[i].id == item.obj.item_id) {
  540. return true;
  541. }
  542. }
  543. return false;
  544. };
  545. Dobby.addConsumable = function(item) {
  546. if(Dobby.CheckIfConsumableAdded(item)) {
  547. return;
  548. }
  549. var consumable = new ConsumablePrototype(item.obj.item_id,item.obj.image,item.obj.name);
  550. var bonuses = Dobby.parseConsumableBonuses(item.obj.usebonus);
  551. if(bonuses[0] == 0 && bonuses[1] == 0 && bonuses[2] == 0)
  552. return;
  553. consumable.setEnergy(bonuses[0]);
  554. consumable.setMotivation(bonuses[1]);
  555. consumable.setHealth(bonuses[2]);
  556. consumable.setCount(item.count);
  557. Dobby.allConsumables.push(consumable);
  558. };
  559. Dobby.removeConsumable = function(item) {
  560. var index;
  561. for(var i = 0 ; i < Dobby.allConsumables.length;i++) {
  562. if(Dobby.allConsumables[i].id == item.id) {
  563. index = i;
  564. break;
  565. }
  566. }
  567. if(index != undefined) {
  568. if(Dobby.allConsumables[index].count > 1) {
  569. Dobby.allConsumables[index].count--;
  570. }else {
  571. Dobby.allConsumables.slice(index,1);
  572. }
  573. }
  574. };
  575. Dobby.parseConsumableBonuses = function(bonuses) {
  576. var getBonus = function(text,type) {
  577. switch(type) {
  578. case 0:
  579. text = text.replace(Dobby.searchKeys[Dobby.language].energyText,"");
  580. break;
  581. case 1:
  582. text = text.replace(Dobby.searchKeys[Dobby.language].motivationText,"")
  583. break;
  584. case 2:
  585. text = text.replace(Dobby.searchKeys[Dobby.language].healthText,"");
  586. break;
  587. }
  588. text = text.slice(1);
  589. text = text.replace("%","");
  590. return parseInt(text);
  591. }
  592. var result = Array(3).fill(0);
  593. for(var i = 0 ; i < bonuses.length;i++) {
  594. var type = -1;
  595. if(bonuses[i].includes(Dobby.searchKeys[Dobby.language].energyText)) {
  596. type = 0;
  597. }else if(bonuses[i].includes(Dobby.searchKeys[Dobby.language].motivationText)) {
  598. type = 1;
  599. }else if(bonuses[i].includes(Dobby.searchKeys[Dobby.language].healthText)) {
  600. type = 2;
  601. }
  602. if(type !=-1)
  603. result[type] = getBonus(bonuses[i],type);
  604.  
  605. }
  606. return result;
  607. };
  608. Dobby.filterConsumables = function(energy,motivation,health) {
  609. var result = [];
  610. for(var i = 0 ; i < Dobby.allConsumables.length;i++) {
  611. if(energy && Dobby.allConsumables[i].energy == 0) {
  612. continue;
  613. }
  614. if(motivation && Dobby.allConsumables[i].motivation == 0) {
  615. continue;
  616. }
  617. if(health && Dobby.allConsumables[i].health == 0) {
  618. continue;
  619. }
  620. result.push(Dobby.allConsumables[i]);
  621. }
  622. return result;
  623. };
  624. Dobby.changeConsumableSelection = function(id,selected) {
  625. for(var i = 0 ; i < Dobby.allConsumables.length;i++) {
  626. if(Dobby.allConsumables[i].id == id) {
  627. Dobby.allConsumables[i].setSelected(selected);
  628. break;
  629. }
  630. }
  631. };
  632. Dobby.changeSelectionAllConsumables = function(selected) {
  633. for(var i = 0 ; i < Dobby.allConsumables.length;i++) {
  634. Dobby.allConsumables[i].setSelected(selected);
  635. }
  636. };
  637. Dobby.canUseConsume = function(item) {
  638. if(BuffList.cooldowns[item.id] != undefined && BuffList.cooldowns[item.id].time > new ServerDate().getTime()) {
  639. return false;
  640. }
  641. return true;
  642. };
  643. Dobby.useConsumable = async function(itemToUse) {
  644. var item = Bag.getItemByItemId(itemToUse.id);
  645. item.showCooldown();
  646. Dobby.currentState = 2;
  647. Dobby.selectTab("choosenJobs");
  648. while(true) {
  649. if(Dobby.canUseConsume(itemToUse)) {
  650. if(Dobby.healthSet != -1) {
  651. Dobby.equipSet(Dobby.healthSet);
  652. await new Promise(r => setTimeout(r, Dobby.settings.setWearDelay*1000));
  653. }
  654. Dobby.removeConsumable(itemToUse);
  655. Dobby.consumableUsed.push(itemToUse);
  656. ItemUse.doIt(itemToUse.id);
  657. break;
  658. }
  659. await new Promise(r => setTimeout(r, 1));
  660. }
  661. while(true) {
  662. if(!Dobby.canUseConsume(itemToUse)) {
  663. $(".tw2gui_dialog_framefix").remove();
  664. break;
  665. }
  666. await new Promise(r => setTimeout(r, 1));
  667. }
  668. Dobby.run();
  669. };
  670. Dobby.findProperConsumable = function(motivationMissing,energyMissing,healthMissing,averageMotivationMissing,consumables) {
  671. var betterEnergy = function(item1,item2) {
  672. var distanceItem1 = Math.abs(energyMissing - item1.energy);
  673. var distanceItem2 = Math.abs(energyMissing - item2.energy);
  674. return (distanceItem1 < distanceItem2 ) ? -1 :(distanceItem1 > distanceItem2) ? 1 : 0;
  675. };
  676. var betterMotivation = function(item1,item2) {
  677. var distanceItem1 = Math.abs(averageMotivationMissing - item1.motivation);
  678. var distanceItem2 = Math.abs(averageMotivationMissing - item2.motivation);
  679. return (distanceItem2 < distanceItem1) ? item2 : item1;
  680. };
  681. var findMotivationConsume = function(consumes) {
  682. var consumeToChoose = null;
  683. for(var i = 0 ; i < consumes.length;i++) {
  684. if(consumeToChoose == null && consumes[i].motivation != 0) {
  685. consumeToChoose = consumes[i];
  686. continue;
  687. }
  688. if(consumeToChoose != null && consumes[i].motivation != 0) {
  689. consumeToChoose = betterMotivation(consumeToChoose,consumables[i]);
  690. }
  691. }
  692. return consumeToChoose;
  693. };
  694. var findHealthConsume = function(consumes) {
  695. for(var i = 0 ; i < consumes.length;i++) {
  696. if(consumes[i].health != 0) {
  697. return consumes[i];
  698. }
  699. }
  700. return null;
  701. };
  702. if(consumables.length == 0) return null;
  703. var consums = consumables;
  704. consums = consums.sort(betterEnergy);
  705. if(energyMissing == 100) {
  706. return consums[0];
  707. }
  708. if(motivationMissing == Dobby.addedJobs.length) {
  709. return findMotivationConsume(consums);
  710. }
  711. if(Dobby.isHealthBelowLimit()) {
  712. return findHealthConsume(consums);
  713. }
  714. };
  715. Dobby.tryUseConsumable = function(result) {
  716. var healthMissing = 100 - (Character.health/Character.maxHealth) * 100;
  717. var energyMissing = 100 - (Character.energy/Character.maxEnergy) * 100;
  718. var motivationMissing = Dobby.jobsBelowMotivation(result);
  719. var consumables = Dobby.allConsumables;
  720. var averageMotivationMissing = Dobby.averageMissingMotivation(result);
  721. var selectedConsumes = [];
  722. for(var i = 0 ; i < consumables.length;i++) {
  723. if(consumables[i].selected)
  724. selectedConsumes.push(consumables[i]);
  725. }
  726. var itemToUse = Dobby.findProperConsumable(motivationMissing,energyMissing,healthMissing,averageMotivationMissing,selectedConsumes);
  727. if(itemToUse == null) return false;
  728. Dobby.useConsumable(itemToUse);
  729. return true;
  730. };
  731. Dobby.calculateDistances = function() {
  732. for(var i = 0; i < Dobby.addedJobs.length;i++) {
  733. Dobby.addedJobs[i].calculateDistance();
  734. }
  735. };
  736. Dobby.createDistanceMatrix = function() {
  737. var distances = new Array(Dobby.addedJobs.length);
  738. for(var i = 0 ; i < distances.length;i++) {
  739. distances[i] = new Array(Dobby.addedJobs.length);
  740. }
  741. for(var i = 0 ; i < distances.length;i++) {
  742. for(var j = i; j < distances[i].length;j++) {
  743. if(i == j) {
  744. distances[i][j] = distances[j][i] = Number.MAX_SAFE_INTEGER;
  745. continue;
  746. }
  747. distances[i][j] = distances[j][i] = GameMap.calcWayTime({x:Dobby.addedJobs[i].x,y:Dobby.addedJobs[i].y},{x:Dobby.addedJobs[j].x,y:Dobby.addedJobs[j].y});
  748. }
  749. }
  750. return distances;
  751. };
  752. Dobby.createRoute = function() {
  753. Dobby.currentJob = {job:0,direction:true}
  754. Dobby.calculateDistances();
  755. var closestJobIndex = 0;
  756. var closestDistance = Dobby.addedJobs[0].distance;
  757. var route = [];
  758. var distances = Dobby.createDistanceMatrix();
  759. var getClosestJob = function(index,route,distances) {
  760. var closestDistance = Number.MAX_SAFE_INTEGER;
  761. var closestIndex = -1;
  762. for(var i = 0 ; i < distances.length;i++) {
  763. if(index == i || route.includes(i)) {
  764. continue;
  765. }
  766. if(distances[i][index] < closestDistance) {
  767. closestDistance = distances[i][index];
  768. closestIndex = i;
  769. }
  770. }
  771. return closestIndex;
  772. };
  773. for(var i = 1; i < Dobby.addedJobs.length;i++) {
  774. if(Dobby.addedJobs[i].distance < closestDistance) {
  775. closestDistance = Dobby.addedJobs[i].distance;
  776. closestJobIndex = i;
  777. }
  778. }
  779. route.push(closestJobIndex);
  780. while(route.length < Dobby.addedJobs.length) {
  781. var closestJob = getClosestJob(route[route.length-1],route,distances);
  782. route.push(closestJob);
  783. }
  784. var addedJobsOrder = [];
  785. for(var i = 0 ; i < route.length;i++) {
  786. addedJobsOrder.push(Dobby.addedJobs[route[i]]);
  787. }
  788. Dobby.addedJobs = addedJobsOrder;
  789. Dobby.selectTab("choosenJobs");
  790. };
  791. Dobby.equipSet = async function(set) {
  792. if(set == -1) return true;
  793. EquipManager.switchEquip(Dobby.sets[set].equip_manager_id);
  794. while(true) {
  795. let finished = await Dobby.isGearEquiped(Dobby.getSetItemArray(Dobby.sets[set]));
  796. if(finished) break;
  797. await new Promise(r => setTimeout(r, 1));
  798. }
  799. return Promise.resolve(true);
  800. };
  801. Dobby.getSetItemArray = function(set) {
  802. var items = [];
  803. if(set.head != null)
  804. items.push(set.head);
  805. if(set.neck != null)
  806. items.push(set.neck);
  807. if(set.body != null)
  808. items.push(set.body);
  809. if(set.right_arm != null)
  810. items.push(set.right_arm);
  811. if(set.left_arm != null)
  812. items.push(set.left_arm);
  813. if(set.belt != null)
  814. items.push(set.belt);
  815. if(set.foot != null)
  816. items.push(set.foot);
  817. if(set.animal != null)
  818. items.push(set.animal);
  819. if(set.yield != null)
  820. items.push(set.yield);
  821. if(set.pants != null)
  822. items.push(set.pants);
  823. return items;
  824. };
  825. Dobby.isWearing = function(itemId) {
  826. if(Wear.wear[ItemManager.get(itemId).type] == undefined) return false;
  827. return Wear.wear[ItemManager.get(itemId).type].obj.item_id == itemId;
  828. };
  829. Dobby.isGearEquiped = async function(items) {
  830. for(var i = 0 ; i < items.length;i++) {
  831. if(!Dobby.isWearing(items[i]))return false;
  832. }
  833. return true;
  834. }
  835. Dobby.getBestGear = function(jobid) {
  836. var modelId = function(jobid) {
  837. for(var i = 0 ; i < JobsModel.Jobs.length;i++) {
  838. if(JobsModel.Jobs[i].id == jobid)
  839. return i;
  840. }
  841. return -1;
  842. }
  843. var result = west.item.Calculator.getBestSet(JobsModel.Jobs[modelId(jobid)].get('skills'), jobid);
  844. var bestItems = result && result.getItems();
  845. return bestItems;
  846. };
  847. Dobby.equipBestGear = async function(jobid) {
  848. var bestGear = Dobby.getBestGear(jobid);
  849. if(bestGear == undefined) {
  850. return Promise.resolve(true);;
  851. }
  852. for(var i = 0 ; i < bestGear.length;i++) {
  853. if(!Dobby.isWearing(bestGear[i]))
  854. Wear.carry(Bag.getItemByItemId(bestGear[i]));
  855. }
  856. while(true) {
  857. let finished = await Dobby.isGearEquiped(bestGear);
  858. if(finished) break;
  859. await new Promise(r => setTimeout(r, 1));
  860. }
  861. return Promise.resolve(true);
  862. };
  863. Dobby.checkMotivation = function(index,result,callback) {
  864. var check = function(index,result) {
  865. Dobby.loadJobMotivation(index,function(motivation) {
  866. result.push(motivation);
  867. if(index+1 < Dobby.addedJobs.length ) {
  868. check(++index,result);
  869. }else
  870. if(index+1 == Dobby.addedJobs.length) {
  871. callback(result);
  872. return;
  873. }
  874. });
  875. };
  876. check(0,result);
  877. };
  878. Dobby.isMotivationAbove = function(result) {
  879. for(var i = 0 ; i < result.length;i++) {
  880. if(result[i] > Dobby.addedJobs[i].stopMotivation) {
  881. return true;
  882. }
  883. }
  884. return false;
  885. };
  886. Dobby.getBackToJobAfterMotivationStop = function() {
  887.  
  888. };
  889. Dobby.jobsBelowMotivation = function(result) {
  890. var count = 0;
  891. for(var i = 0 ; i < result.length;i++) {
  892. if(result[i] <= Dobby.addedJobs[i].stopMotivation) {
  893. count++;
  894. }
  895. }
  896. return count;
  897. };
  898. Dobby.averageMissingMotivation = function(result) {
  899. var motivation = 0;
  900. for(var i = 0 ; i < result.length;i++) {
  901. motivation += (100-result[i]);
  902. }
  903. return motivation/result.length;
  904. };
  905. Dobby.isHealthBelowLimit = function() {
  906. if(Dobby.settings.healthStop >= ((Character.health/Character.maxHealth) * 100)) {
  907. return true;
  908. }
  909. return false;
  910. };
  911. Dobby.isStopMotivationZero = function() {
  912. for(var i = 0 ; i < Dobby.addedJobs.length;i++) {
  913. if(Dobby.addedJobs[i].stopMotivation == 0) {
  914. return true;
  915. }
  916. }
  917. return false;
  918. };
  919. Dobby.canAddMissing = function(result) {
  920. if(!Dobby.settings.addMotivation && Dobby.jobsBelowMotivation(result) && !Dobby.isStopMotivationZero()) {
  921. alert("Can't continue because of motivation");
  922. return false;
  923. }
  924. if(!Dobby.settings.addEnergy && Character.energy == 0) {
  925. alert("Can't continue because of energy");
  926. return false;
  927. }
  928. if(!Dobby.settings.addHealth && Dobby.isHealthBelowLimit()) {
  929. alert("Can't continue because of health");
  930. return false;
  931. }
  932. return true;
  933. };
  934. Dobby.finishRun = function() {
  935. Dobby.currentState = 0;
  936. Dobby.isRunning = false;
  937. Dobby.selectTab("choosenJobs");
  938. alert("Finished");
  939. };
  940. Dobby.updateStatistics = function(oldXp) {
  941. var xpDifference = Character.experience - oldXp;
  942. Dobby.statistics.xpInSession += xpDifference;
  943. Dobby.statistics.totalXp += xpDifference;
  944. }
  945. Dobby.run = function() {
  946. Dobby.checkMotivation(0,[],function(result) {
  947. if((Dobby.isMotivationAbove(result) || Dobby.isStopMotivationZero()) && Character.energy > 0 && !Dobby.isHealthBelowLimit()){
  948. Dobby.currentState = 1;
  949. Dobby.selectTab("choosenJobs");
  950. Dobby.prepareJobRun(Dobby.currentJob.job);
  951. }else {
  952. if(!Dobby.canAddMissing(result)) {
  953. Dobby.finishRun();
  954. }else {
  955. var answer = Dobby.tryUseConsumable(result);
  956. if(!answer) {
  957. Dobby.finishRun();
  958. }
  959. }
  960. }
  961. });
  962. };
  963. Dobby.prepareJobRun = function(index) {
  964. setTimeout(function() {
  965. Dobby.loadJobMotivation(index,async function(motivation) {
  966. if(Character.energy == 0 || Dobby.isHealthBelowLimit()) {
  967. Dobby.run();
  968. }
  969. else if(motivation <= Dobby.addedJobs[index].stopMotivation && Dobby.addedJobs[index].stopMotivation > 0) {
  970. Dobby.checkMotivation(0,[],function(result) {
  971. if(Dobby.isMotivationAbove(result)) {
  972. Dobby.changeJob();
  973. }else {
  974. Dobby.run();
  975. }
  976. });
  977. }else
  978. if(GameMap.calcWayTime(Character.position,{x:Dobby.addedJobs[index].x,y:Dobby.addedJobs[index].y}) == 0) {
  979. var maxJobs;
  980. (Premium.hasBonus('automation')) ? maxJobs = 9 : maxJobs = 4;
  981. if(Dobby.addedJobs[index].stopMotivation != 0){
  982. var numberOfJobs = Math.min(Math.min(motivation - Dobby.addedJobs[index].stopMotivation,Character.energy),maxJobs);
  983. }else {
  984. var numberOfJobs = Math.min(Character.energy,maxJobs);
  985. }
  986. Dobby.runJob(index,numberOfJobs);
  987. }else {
  988. var equiped = await Dobby.equipSet(Dobby.travelSet);
  989. Dobby.walkToJob(index);
  990. }
  991. });
  992. },Dobby.generateRandomNumber(Dobby.settings.jobDelayMin,Dobby.settings.jobDelayMax)*1000);
  993. };
  994. Dobby.walkToJob = async function(index) {
  995. JobWindow.startJob(Dobby.addedJobs[index].id,Dobby.addedJobs[index].x,Dobby.addedJobs[index].y,15);
  996. while(true) {
  997. if(GameMap.calcWayTime(Character.position,{x:Dobby.addedJobs[index].x,y:Dobby.addedJobs[index].y}) == 0) {
  998. break;
  999. }
  1000. if(!Dobby.isRunning) {
  1001. break;
  1002. }
  1003. await new Promise(r => setTimeout(r, 1));
  1004. }
  1005. Dobby.cancelJobs();
  1006. if(Dobby.isRunning)
  1007. Dobby.prepareJobRun(index);
  1008. };
  1009. Dobby.sleep = async function() {
  1010. if(Dobby.settings.enableRegeneration && Dobby.selectedSleepPlace != -2) {
  1011. //if sleep place is town
  1012. if(Dobby.selectedSleepPlace == -1) {
  1013. TaskQueue.add(new TaskWalk(Dobby.homeTown.town_id,'town'));
  1014. }else {
  1015. TaskQueue.add(new TaskWalk(Dobby.forts[Dobby.selectedSleepPlace].fort_id,'fort'));
  1016. }
  1017.  
  1018. while(true) {
  1019. if(GameMap.calcWayTime(Character.position,{x:Dobby.addedJobs[index].x,y:Dobby.addedJobs[index].y}) == 0) {
  1020. break;
  1021. }
  1022. if(!Dobby.isRunning) {
  1023. break;
  1024. }
  1025. await new Promise(r => setTimeout(r, 1));
  1026. }
  1027. }
  1028.  
  1029. }
  1030. Dobby.changeJob = function() {
  1031. (Dobby.currentJob.direction) ? Dobby.currentJob.job++ : Dobby.currentJob.job--;
  1032. if(Dobby.currentJob.job == Dobby.addedJobs.length) {
  1033. Dobby.currentJob.job--;
  1034. Dobby.currentJob.direction = false;
  1035. } else if(Dobby.currentJob.job < 0) {
  1036. Dobby.currentJob.job++;
  1037. Dobby.currentJob.direction = true;
  1038. }
  1039. Dobby.setCookies();
  1040. Dobby.run();
  1041. };
  1042. Dobby.runJob = async function(jobIndex,jobCount) {
  1043. Dobby.statistics.jobsInSession += jobCount;
  1044. Dobby.statistics.totalJobs += jobCount;
  1045. var oldXp = Character.experience;
  1046. await Dobby.equipBestGear(Dobby.addedJobs[jobIndex].id);
  1047. for(var i = 0; i < jobCount;i++) {
  1048. JobWindow.startJob(Dobby.addedJobs[jobIndex].id,Dobby.addedJobs[jobIndex].x,Dobby.addedJobs[jobIndex].y,15);
  1049. }
  1050. await new Promise(r => setTimeout(r, Dobby.settings.setWearDelay * 1000));
  1051. Dobby.equipSet(Dobby.addedJobs[jobIndex].set);
  1052. while(true) {
  1053. if(TaskQueue.queue.length == 0) {
  1054. Dobby.updateStatistics(oldXp);
  1055. Dobby.setCookies();
  1056. Dobby.prepareJobRun(jobIndex);
  1057. return;
  1058. }
  1059. if(!Dobby.isRunning || Dobby.isHealthBelowLimit()) {
  1060. break;
  1061. }
  1062. await new Promise(r => setTimeout(r, 1));
  1063. }
  1064. Dobby.statistics.jobsInSession -= TaskQueue.queue.length;
  1065. Dobby.statistics.totalJobs -= TaskQueue.queue.length;
  1066. Dobby.updateStatistics(oldXp);
  1067. Dobby.setCookies();
  1068. Dobby.cancelJobs();
  1069.  
  1070. };
  1071. Dobby.cancelJobs = function() {
  1072. if(TaskQueue.queue.length > 0)
  1073. TaskQueue.cancelAll();
  1074. };
  1075. Dobby.setCookies = function() {
  1076. var expiracyDateTemporary = new Date();
  1077. var hour = expiracyDateTemporary.getHours();
  1078. expiracyDateTemporary.setHours(2,0,0);
  1079. if(hour > 2)
  1080. expiracyDateTemporary.setDate(expiracyDateTemporary.getDate() + 1);
  1081. var temporaryObject ={
  1082. addedJobs:Dobby.addedJobs,
  1083. travelSet:Dobby.travelSet,
  1084. jobSet:Dobby.jobSet,
  1085. healthSet:Dobby.healthSet,
  1086. currentJob:Dobby.currentJob
  1087. };
  1088. var expiracyDatePernament = new Date();
  1089. expiracyDatePernament.setDate(expiracyDatePernament.getDate() + 360000);
  1090. var pernamentObject = {
  1091. settings:Dobby.settings,
  1092. totalJobs:Dobby.statistics.totalJobs,
  1093. totalXp:Dobby.statistics.totalXp
  1094. };
  1095. var jsonTemporary = JSON.stringify(temporaryObject);
  1096. var jsonPernament = JSON.stringify(pernamentObject);
  1097. document.cookie = "dobby2temporary=" + jsonTemporary + ";expires=" + expiracyDateTemporary.toGMTString() + ";";
  1098. document.cookie = "dobby2pernament=" + jsonPernament + ";expires=" + expiracyDatePernament.toGMTString() + ";";
  1099. };
  1100. Dobby.getCookies = function() {
  1101. var cookie = document.cookie.split("=");
  1102. for(var i = 0; i < cookie.length;i++) {
  1103. if(cookie[i].includes("dobby2temporary")) {
  1104. var obj = cookie[i+1].split(";");
  1105. var tempObject = JSON.parse(obj[0]);
  1106. var tmpAddedJobs = tempObject.addedJobs;
  1107. for(var j = 0 ; j < tmpAddedJobs.length;j++) {
  1108. var jobP = new JobPrototype(tmpAddedJobs[j].x,tmpAddedJobs[j].y,tmpAddedJobs[j].id);
  1109. jobP.setSilver(tmpAddedJobs[j].silver);
  1110. jobP.distance = tmpAddedJobs[j].distance;
  1111. jobP.setExperience(tmpAddedJobs[j].experience);
  1112. jobP.setMoney(tmpAddedJobs[j].money);
  1113. jobP.setMotivation(tmpAddedJobs[j].motivation);
  1114. jobP.setStopMotivation(tmpAddedJobs[j].stopMotivation);
  1115. jobP.setSet(tmpAddedJobs[j].set);
  1116. Dobby.addedJobs.push(jobP);
  1117. }
  1118. Dobby.travelSet = tempObject.travelSet;
  1119. Dobby.jobSet = tempObject.jobSet;
  1120. Dobby.healthSet = tempObject.healthSet;
  1121. Dobby.currentJob = tempObject.currentJob;
  1122. Dobby.setSetForAllJobs();
  1123. }
  1124. if(cookie[i].includes("dobby2pernament")) {
  1125. var obj = cookie[i+1].split(";");
  1126. var pernamentObject = JSON.parse(obj[0]);
  1127. Dobby.settings = pernamentObject.settings;
  1128. Dobby.statistics.totalJobs = pernamentObject.totalJobs;
  1129. Dobby.statistics.totalXp = pernamentObject.totalXp;
  1130. }
  1131. }
  1132. };
  1133. Dobby.createWindow = function() {
  1134. var window = wman.open("dobby").setResizeable(false).setMinSize(650, 480).setSize(650, 480).setMiniTitle("Dobby2");
  1135. var content = $('<div class=\'dobby2window\'/>');
  1136. var tabs = {
  1137. "jobs":"Jobs",
  1138. "choosenJobs":"Choosen jobs",
  1139. "sets":"Sets",
  1140. "consumables":"Consumables",
  1141. "stats":"Statistics",
  1142. "settings":"Settings"
  1143. };
  1144. var tabLogic = function(win,id) {
  1145. var content = $('<div class=\'dobby2window\'/>');
  1146. switch(id) {
  1147. case "jobs":
  1148. Dobby.loadJobData(function(){
  1149. Dobby.removeActiveTab(this);
  1150. Dobby.removeWindowContent();
  1151. Dobby.addActiveTab("jobs",this);
  1152. content.append(Dobby.createJobsTab());
  1153. Dobby.window.appendToContentPane(content);
  1154. Dobby.addJobTableCss();
  1155. $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css({"top":Dobby.jobTablePosition.content});
  1156. $(".dobby2window .tw2gui_scrollbar_pulley").css({"top":Dobby.jobTablePosition.scrollbar});
  1157. Dobby.addEventsHeader();
  1158. });
  1159. break;
  1160. case "choosenJobs":
  1161. Dobby.removeActiveTab(this);
  1162. Dobby.removeWindowContent();
  1163. Dobby.addActiveTab("choosenJobs",this);
  1164. content.append(Dobby.createAddedJobsTab());
  1165. Dobby.window.appendToContentPane(content);
  1166. $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css({"top":Dobby.addedJobTablePosition.content});
  1167. $(".dobby2window .tw2gui_scrollbar_pulley").css({"top":Dobby.addedJobTablePosition.scrollbar});
  1168. Dobby.addAddedJobsTableCss();
  1169. break;
  1170. case "consumables":
  1171. Dobby.removeActiveTab(this);
  1172. Dobby.removeWindowContent();
  1173. Dobby.addActiveTab("consumables",this);
  1174. Dobby.findAllConsumables();
  1175. content.append(Dobby.createConsumablesTable());
  1176. Dobby.window.appendToContentPane(content);
  1177. $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css({"top":Dobby.consumableTablePosition.content});
  1178. $(".dobby2window .tw2gui_scrollbar_pulley").css({"top":Dobby.consumableTablePosition.scrollbar});
  1179. Dobby.addConsumableTableCss();
  1180. break;
  1181. case "sets":
  1182. Dobby.loadSets(function() {
  1183. Dobby.removeActiveTab(this);
  1184. Dobby.removeWindowContent();
  1185. Dobby.addActiveTab("sets",this);
  1186. content.append(Dobby.createSetGui())
  1187. Dobby.window.appendToContentPane(content);
  1188. });
  1189. break;
  1190. case "stats":
  1191. Dobby.removeActiveTab(this);
  1192. Dobby.removeWindowContent();
  1193. Dobby.addActiveTab("stats",this);
  1194. content.append(Dobby.createStatisticsGui());
  1195. Dobby.window.appendToContentPane(content);
  1196. break;
  1197. case "settings":
  1198. Dobby.removeActiveTab(this);
  1199. Dobby.removeWindowContent();
  1200. Dobby.addActiveTab("settings",this);
  1201. content.append(Dobby.createSettingsGui());
  1202. Dobby.window.appendToContentPane(content);
  1203. break;
  1204. }
  1205. }
  1206. for(var tab in tabs) {
  1207. window.addTab(tabs[tab],tab,tabLogic);
  1208. }
  1209. Dobby.window = window;
  1210. Dobby.selectTab("jobs");
  1211. };
  1212. Dobby.selectTab = function(key) {
  1213. Dobby.window.tabIds[key].f(Dobby.window,key);
  1214. };
  1215. Dobby.removeActiveTab = function(window) {
  1216. $('div.tw2gui_window_tab', window.divMain).removeClass('tw2gui_window_tab_active');
  1217. };
  1218. Dobby.addActiveTab = function(key,window) {
  1219. $('div._tab_id_' + key, window.divMain).addClass('tw2gui_window_tab_active');
  1220. };
  1221. Dobby.removeWindowContent = function() {
  1222. $(".dobby2window").remove();
  1223. };
  1224. Dobby.addJobTableCss = function() {
  1225. $(".dobby2window .jobIcon").css({"width":"80px"});
  1226. $(".dobby2window .jobName").css({"width":"150px"});
  1227. $(".dobby2window .jobXp").css({"width":"40px"});
  1228. $(".dobby2window .jobMoney").css({"width":"40px"});
  1229. $(".dobby2window .jobMotivation").css({"width":"40px"});
  1230. $(".dobby2window .jobDistance").css({"width":"100px"});
  1231. $(".dobby2window .row").css({"height":"60px"});
  1232. $('.dobby2window').find('.tw2gui_scrollpane').css('height', '250px');
  1233. };
  1234. Dobby.addAddedJobsTableCss = function() {
  1235. $(".dobby2window .jobIcon").css({"width":"80px"});
  1236. $(".dobby2window .jobName").css({"width":"130px"});
  1237. $(".dobby2window .jobStopMotivation").css({"width":"110px"});
  1238. $(".dobby2window .jobRemove").css({"width":"105px"});
  1239. $(".dobby2window .jobSet").css({"width":"100px"});
  1240. $(".dobby2window .row").css({"height":"60px"});
  1241. $('.dobby2window').find('.tw2gui_scrollpane').css('height', '250px');
  1242. };
  1243. Dobby.addConsumableTableCss = function() {
  1244. $(".dobby2window .consumIcon").css({"width":"80px"});
  1245. $(".dobby2window .consumName").css({"width":"120px"});
  1246. $(".dobby2window .consumCount").css({"width":"70px"});
  1247. $(".dobby2window .consumEnergy").css({"width":"70px"});
  1248. $(".dobby2window .consumMotivation").css({"width":"70px"});
  1249. $(".dobby2window .consumHealth").css({"width":"70px"});
  1250. $(".dobby2window .row").css({"height":"80px"});
  1251. $('.dobby2window').find('.tw2gui_scrollpane').css('height', '250px');
  1252. };
  1253. Dobby.addEventsHeader = function() {
  1254. $(".dobby2window .jobXp").click(function() {
  1255. if(Dobby.sortJobTableXp == 0) {
  1256. Dobby.sortJobTableXp = 1;
  1257. }else {
  1258. (Dobby.sortJobTableXp == 1) ? Dobby.sortJobTableXp = -1 : Dobby.sortJobTableXp = 1;
  1259. }
  1260. Dobby.sortJobTableDistance = 0;
  1261. Dobby.selectTab("jobs");
  1262. });
  1263. $(".dobby2window .jobDistance").click(function() {
  1264. if(Dobby.sortJobTableDistance == 0) {
  1265. Dobby.sortJobTableDistance = 1;
  1266. }else {
  1267. (Dobby.sortJobTableDistance == 1) ? Dobby.sortJobTableDistance = -1 : Dobby.sortJobTableDistance = 1;
  1268. }
  1269. Dobby.sortJobTableXp = 0;
  1270. Dobby.selectTab("jobs");
  1271. });
  1272. };
  1273. Dobby.createJobsTab = function() {
  1274. var htmlSkel = $("<div id = \'jobs_overview'\></div>");
  1275. var html = $("<div class = \'jobs_search'\ style=\'position:relative;'\><div id=\'jobFilter'\style=\'position:absolute;top:10px;left:15px'\></div><div id=\'job_only_silver'\style=\'position:absolute;top:10px;left:200px;'\></div><div id=\'job_no_silver'\style=\'position:absolute;top:10px;left:270px;'\></div><div id=\'job_center'\style=\'position:absolute;top:10px;left:350px;'\></div><div id=\'button_filter_jobs'\style=\'position:absolute;top:5px;left:450px;'\></div></div>");
  1276. var table = new west.gui.Table();
  1277. var xpIcon = '<img src="/images/icons/star.png">';
  1278. var dollarIcon = '<img src="/images/icons/dollar.png">';
  1279. var motivationIcon = '<img src="/images/icons/motivation.png">';
  1280. var arrow_desc = '&nbsp;<img src="../images/window/jobs/sortarrow_desc.png"/>';
  1281. var arrow_asc = '&nbsp;<img src="../images/window/jobs/sortarrow_asc.png"/>';
  1282. var uniqueJobs = Dobby.getAllUniqueJobs();
  1283. table.addColumn("jobIcon","jobIcon").addColumn("jobName","jobName").addColumn("jobXp","jobXp").addColumn("jobMoney","jobMoney").addColumn("jobMotivation","jobMotivation").addColumn("jobDistance","jobDistance").addColumn("jobAdd","jobAdd");
  1284. table.appendToCell("head","jobIcon","Job icon").appendToCell("head","jobName","Job name").appendToCell("head","jobXp",xpIcon + (Dobby.sortJobTableXp == 1 ? arrow_asc : Dobby.sortJobTableXp == -1 ? arrow_desc : "")).appendToCell("head","jobMoney",dollarIcon).appendToCell("head","jobMotivation",motivationIcon).appendToCell("head","jobDistance","Distance " + (Dobby.sortJobTableDistance == 1 ? arrow_asc : Dobby.sortJobTableDistance == -1 ? arrow_desc : "")).appendToCell("head","jobAdd","");
  1285. for(var job = 0 ; job < uniqueJobs.length;job++) {
  1286. table.appendRow().appendToCell(-1,"jobIcon",Dobby.getJobIcon(uniqueJobs[job].silver,uniqueJobs[job].id,uniqueJobs[job].x,uniqueJobs[job].y)).appendToCell(-1,"jobName",Dobby.getJobName(uniqueJobs[job].id)).appendToCell(-1,"jobXp",uniqueJobs[job].experience).appendToCell(-1,"jobMoney",uniqueJobs[job].money).appendToCell(-1,"jobMotivation",uniqueJobs[job].motivation).appendToCell(-1,"jobDistance",uniqueJobs[job].distance.formatDuration()).appendToCell(-1,"jobAdd",Dobby.createAddJobButton(uniqueJobs[job].x,uniqueJobs[job].y,uniqueJobs[job].id));
  1287. }
  1288. var textfield = new west.gui.Textfield("jobsearch").setPlaceholder("Select job name");
  1289. if(Dobby.jobFilter.filterJob != "") {
  1290. textfield.setValue(Dobby.jobFilter.filterJob);
  1291. }
  1292. var checkboxOnlySilver = new west.gui.Checkbox();
  1293. checkboxOnlySilver.setLabel("Silvers");
  1294. checkboxOnlySilver.setSelected(Dobby.jobFilter.filterOnlySilver);
  1295. checkboxOnlySilver.setCallback(function() {
  1296. if(this.isSelected()) {
  1297. Dobby.jobFilter.filterOnlySilver = true;
  1298. }else {
  1299. Dobby.jobFilter.filterOnlySilver = false;
  1300. }
  1301. });
  1302. var checkboxNoSilver = new west.gui.Checkbox();
  1303. checkboxNoSilver.setLabel("No silvers");
  1304. checkboxNoSilver.setSelected(Dobby.jobFilter.filterNoSilver);
  1305. checkboxNoSilver.setCallback(function() {
  1306. if(this.isSelected()) {
  1307. Dobby.jobFilter.filterNoSilver = true;
  1308. }else {
  1309. Dobby.jobFilter.filterNoSilver = false;
  1310. }
  1311. });
  1312. var checkboxCenterJobs = new west.gui.Checkbox();
  1313. checkboxCenterJobs.setLabel("Center jobs");
  1314. checkboxCenterJobs.setSelected(Dobby.jobFilter.filterCenterJobs);
  1315. checkboxCenterJobs.setCallback(function() {
  1316. if(this.isSelected()) {
  1317. Dobby.jobFilter.filterCenterJobs = true;
  1318. }else {
  1319. Dobby.jobFilter.filterCenterJobs = false;
  1320. }
  1321. });
  1322. var buttonFilter = new west.gui.Button("Filter",function() {
  1323. Dobby.jobFilter.filterJob = textfield.getValue();
  1324. Dobby.jobTablePosition.content = "0px";
  1325. Dobby.jobTablePosition.scrollbar = "0px";
  1326. Dobby.selectTab("jobs");
  1327. });
  1328. htmlSkel.append(table.getMainDiv());
  1329. $('#jobFilter', html).append(textfield.getMainDiv());
  1330. $("#job_only_silver",html).append(checkboxOnlySilver.getMainDiv());
  1331. $("#job_no_silver",html).append(checkboxNoSilver.getMainDiv());
  1332. $("#job_center",html).append(checkboxCenterJobs.getMainDiv());
  1333. $("#button_filter_jobs",html).append(buttonFilter.getMainDiv());
  1334. htmlSkel.append(html);
  1335. return htmlSkel;
  1336. };
  1337. Dobby.createAddJobButton = function(x,y,id) {
  1338. var buttonAdd = new west.gui.Button("Add new job",function() {
  1339. Dobby.addJob(x,y,id);
  1340. Dobby.jobTablePosition.content = $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css("top");
  1341. Dobby.jobTablePosition.scrollbar = $(".dobby2window .tw2gui_scrollbar_pulley").css("top");
  1342. Dobby.selectTab("jobs");
  1343. });
  1344. buttonAdd.setWidth(100);
  1345. return buttonAdd.getMainDiv();
  1346. };
  1347. Dobby.createAddedJobsTab = function() {
  1348. var htmlSkel = $("<div id=\'added_jobs_overview'\></div>");
  1349. var footerHtml = $("<div id=\'start_dobby2'\ style=\'position:relative;'\><span class =\'dobby_state'\ style=\' position:absolute;left:20px; top:10px; font-family: Arial, Helvetica, sans-serif; font-size: 15px;font-weight: bold;'\> Current state:"+ Dobby.states[Dobby.currentState] +"</span><div class = \'dobby_run'\ style = \'position:absolute; left:350px; top:20px;'\></div></div>");
  1350. var table = new west.gui.Table();
  1351. table.addColumn("jobIcon","jobIcon").addColumn("jobName","jobName").addColumn("jobStopMotivation","jobStopMotivation").addColumn("jobSet","jobSet").addColumn("jobRemove","jobRemove");
  1352. table.appendToCell("head","jobIcon","Job icon").appendToCell("head","jobName","Job name").appendToCell("head","jobStopMotivation","Stop motivation").appendToCell("head","jobSet","Job set").appendToCell("head","jobRemove","");
  1353. for(var job = 0; job < Dobby.addedJobs.length;job++) {
  1354. table.appendRow().appendToCell(-1,"jobIcon",Dobby.getJobIcon(Dobby.addedJobs[job].silver,Dobby.addedJobs[job].id,Dobby.addedJobs[job].x,Dobby.addedJobs[job].y)).appendToCell(-1,"jobName",Dobby.getJobName(Dobby.addedJobs[job].id)).appendToCell(-1,"jobStopMotivation",Dobby.createMinMotivationTextfield(Dobby.addedJobs[job].x,Dobby.addedJobs[job].y,Dobby.addedJobs[job].id,Dobby.addedJobs[job].stopMotivation)).appendToCell(-1,"jobSet",Dobby.createComboxJobSets(Dobby.addedJobs[job].x,Dobby.addedJobs[job].y,Dobby.addedJobs[job].id)).appendToCell(-1,"jobRemove",Dobby.createRemoveJobButton(Dobby.addedJobs[job].x,Dobby.addedJobs[job].y,Dobby.addedJobs[job].id));
  1355. }
  1356. var buttonStart = new west.gui.Button("Start",function() {
  1357. var parseSuccesfull = Dobby.parseStopMotivation();
  1358. if(parseSuccesfull) {
  1359. Dobby.createRoute();
  1360. Dobby.isRunning = true;
  1361. Dobby.setCookies();
  1362. Dobby.run();
  1363. }else {
  1364. new UserMessage("Wrong format of set stop motivation", UserMessage.TYPE_ERROR).show();
  1365. }
  1366. });
  1367. var buttonStop = new west.gui.Button("Stop",function() {
  1368. Dobby.isRunning = false;
  1369. Dobby.currentState = 0;
  1370. Dobby.selectTab("choosenJobs");
  1371. });
  1372. htmlSkel.append(table.getMainDiv());
  1373. $(".dobby_run",footerHtml).append(buttonStart.getMainDiv());
  1374. $(".dobby_run",footerHtml).append(buttonStop.getMainDiv());
  1375. htmlSkel.append(footerHtml);
  1376. return htmlSkel;
  1377. };
  1378. Dobby.createMinMotivationTextfield = function(x,y,id,placeholder) {
  1379. var componentId = "x-" + x + "y-" +y + "id-" + id;
  1380. var textfield = new west.gui.Textfield();
  1381. textfield.setId(componentId);
  1382. textfield.setWidth(40);
  1383. textfield.setValue(placeholder);
  1384. return textfield.getMainDiv();
  1385. };
  1386. Dobby.createRemoveJobButton = function(x,y,id) {
  1387. var buttonRemove = new west.gui.Button("Remove job",function() {
  1388. Dobby.removeJob(x,y,id);
  1389. Dobby.addedJobTablePosition.content = $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css("top");
  1390. Dobby.addedJobTablePosition.scrollbar = $(".dobby2window .tw2gui_scrollbar_pulley").css("top");
  1391. Dobby.selectTab("choosenJobs");
  1392. });
  1393. buttonRemove.setWidth(100);
  1394. return buttonRemove.getMainDiv();
  1395. };
  1396. Dobby.createComboxJobSets = function(x,y,id) {
  1397. var combobox = new west.gui.Combobox();
  1398. Dobby.addComboboxItems(combobox);
  1399. combobox = combobox.select(Dobby.getJobSet(x,y,id));
  1400. combobox.setWidth(60);
  1401. combobox.addListener(function(value) {
  1402. Dobby.setJobSet(x,y,id,value);;
  1403. Dobby.selectTab("choosenJobs");
  1404. });
  1405. return combobox.getMainDiv();
  1406. };
  1407. Dobby.addComboboxItems = function(combobox) {
  1408. combobox.addItem(-1,"None");
  1409. for(var i = 0 ; i < Dobby.sets.length;i++) {
  1410. combobox.addItem(i.toString(),Dobby.sets[i].name);
  1411. }
  1412. };
  1413. Dobby.createSetGui = function() {
  1414. if(Dobby.sets.length == 0) {
  1415. return $("<span style=\'font-size:20px'\>No sets available</span>");
  1416. }
  1417. var htmlSkel = $("<div id =\'dobby2_sets_window'\ style=\'display:block;position:relative;width:650px;height:430px;'\><div id=\'dobby2_sets_left' style=\'display:block;position:absolute;width:250px;height:430px;top:0px;left:0px'\></div><div id=\'dobby2_sets_right' style=\'display:block;position:absolute;width:300px;height:410px;top:0px;left:325px'\></div></div>");
  1418. var combobox = new west.gui.Combobox("combobox_sets");
  1419. Dobby.addComboboxItems(combobox);
  1420. combobox = combobox.select(Dobby.selectedSet);
  1421. combobox.addListener(function(value) {
  1422. Dobby.selectedSet = value;
  1423. Dobby.selectTab("sets");
  1424. });
  1425. var buttonSelectTravelSet = new west.gui.Button("Select travel set",function() {
  1426. Dobby.travelSet = Dobby.selectedSet;
  1427. Dobby.selectTab("sets");
  1428. });
  1429. var buttonSelectJobSet = new west.gui.Button("Select job set",function() {
  1430. Dobby.jobSet = Dobby.selectedSet;
  1431. Dobby.setSetForAllJobs();
  1432. Dobby.selectTab("sets");
  1433. });
  1434. var buttonSelectHealthSet = new west.gui.Button("Select health set",function() {
  1435. Dobby.healthSet = Dobby.selectedSet;
  1436. Dobby.selectTab("sets");
  1437. });
  1438. var buttonSelectRegenerationSet = new west.gui.Button("Select regeneration set",function() {
  1439. Dobby.regenerationSet = Dobby.selectedSet;
  1440. Dobby.selectTab("sets");
  1441. });
  1442. var travelSetText = "None";
  1443. if(Dobby.travelSet != -1) {
  1444. travelSetText = Dobby.sets[Dobby.travelSet].name;
  1445. }
  1446. var jobSetText = "None";
  1447. if(Dobby.jobSet != -1) {
  1448. jobSetText = Dobby.sets[Dobby.jobSet].name;
  1449. }
  1450. var healthSetText = "None";
  1451. if(Dobby.healthSet != -1) {
  1452. healthSetText = Dobby.sets[Dobby.healthSet].name;
  1453. }
  1454. var regenerationSetText = "None";
  1455. if(Dobby.regenerationSet != -1) {
  1456. regenerationSetText = Dobby.sets[Dobby.regenerationSet].name;
  1457. }
  1458. var left = $("<div></div>").append(new west.gui.Groupframe().appendToContentPane($("<span>Sets</span><br><br>")).appendToContentPane(combobox.getMainDiv()).appendToContentPane($("<br><br><span>Travel set:"+ travelSetText +"</span><br><br>")).appendToContentPane(buttonSelectTravelSet.getMainDiv()).appendToContentPane($("<br><br><span>Job set:"+ jobSetText +"</span><br><br>")).appendToContentPane(buttonSelectJobSet.getMainDiv()).appendToContentPane($("<br><br><span>Health set:"+ healthSetText +"</span><br><br>")).appendToContentPane(buttonSelectHealthSet.getMainDiv()).appendToContentPane($("<br><br><span>Regeneration set:"+ regenerationSetText +"</span><br><br>")).appendToContentPane(buttonSelectRegenerationSet.getMainDiv()).getMainDiv());
  1459. var right = $("<div style=\'display:block;position:relative;width:300px;height:410px;'\></div>");
  1460. //head div
  1461. right.append("<div class=\'wear_head wear_slot'\ style=\'display:block;position:absolute;left:30px;top:1px;width:93px;height:94px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position: -95px 0;'\></div>");
  1462. //chest div
  1463. right.append("<div class=\'wear_body wear_slot'\ style=\'display:block;position:absolute;left:30px;top:106px;width:95px;height:138px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:0 0;'\></div>");
  1464. //pants div
  1465. right.append("<div class=\'wear_pants wear_slot'\ style=\'display:block;position:absolute;left:30px;top:258px;width:93px;height:138px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:0 0;'\></div>");
  1466. //neck div
  1467. right.append("<div class=\'wear_neck wear_slot'\ style=\'display:block;position:absolute;left:-47px;top:1px;width:74px;height:74px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:-189px 0;'\></div>");
  1468. //right arm div
  1469. right.append("<div class=\'wear_right_arm wear_slot'\ style=\'display:block;position:absolute;left:-64px;top:79px;width:95px;height:138px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:0 0;'\></div>");
  1470. //animal div
  1471. right.append("<div class=\'wear_animal wear_slot'\ style=\'display:block;position:absolute;left:-64px;top:223px;width:93px;height:94px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:-95px 0;'\></div>");
  1472. //yield div
  1473. right.append("<div class=\'wear_yield wear_slot'\ style=\'display:block;position:absolute;left:-47px;top:321px;width:74px;height:74px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:-189px 0;'\></div>");
  1474. //left arm div
  1475. right.append("<div class=\'wear_left_arm wear_slot'\ style=\'display:block;position:absolute;left:127px;top:52px;width:95px;height:138px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:0 0;'\></div>");
  1476. //belt div
  1477. right.append("<div class=\'wear_belt wear_slot'\ style=\'display:block;position:absolute;left:127px;top:200px;width:93px;height:94px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:-95px 0;'\></div>");
  1478. //boots div
  1479. right.append("<div class=\'wear_foot wear_slot'\ style=\'display:block;position:absolute;left:127px;top:302px;width:93px;height:94px;background:url(https://westzz.innogamescdn.com/images/window/wear/bg_sprite.png) 0 0 no-repeat;background-position:-95px 0;'\></div>");
  1480. var keys = ["head","body","pants","neck","right_arm","animal","yield","left_arm","belt","foot"];
  1481. if(Dobby.selectedSet != -1)
  1482. Dobby.insertSetImages(right,keys);
  1483. $("#dobby2_sets_left",htmlSkel).append(left);
  1484. $("#dobby2_sets_right",htmlSkel).append(right);
  1485. return htmlSkel;
  1486. };
  1487. Dobby.getImageSkel = function() {
  1488. return $("<img src=\''\>");
  1489. };
  1490. Dobby.insertSetImages = function(html,keys) {
  1491. for(var i = 0 ; i < keys.length;i++) {
  1492. if(Dobby.sets[Dobby.selectedSet][keys[i]] != null) {
  1493. $(".wear_"+keys[i],html).append(Dobby.getImageSkel().attr("src",Dobby.getItemImage(Dobby.sets[Dobby.selectedSet][keys[i]])));
  1494. }
  1495. }
  1496. return html;
  1497. };
  1498. Dobby.createConsumablesTable = function() {
  1499. var htmlSkel = $("<div id=\'consumables_overview'\></div>");
  1500. var html = $("<div class = \'consumables_filter'\ style=\'position:relative;'\><div id=\'energy_consumables'\style=\'position:absolute;top:10px;left:15px;'\></div><div id=\'motivation_consumables'\style=\'position:absolute;top:10px;left:160px;'\></div><div id=\'health_consumables'\style=\'position:absolute;top:10px;left:320px;'\></div><div id=\'button_filter_consumables'\style=\'position:absolute;top:5px;left:460px;'\></div></div>");
  1501. var table = new west.gui.Table();
  1502. var consumableList = Dobby.filterConsumables(Dobby.consumableSelection.energy,Dobby.consumableSelection.motivation,Dobby.consumableSelection.health);
  1503. table.addColumn("consumIcon","consumIcon").addColumn("consumName","consumName").addColumn("consumCount","consumCount").addColumn("consumEnergy","consumEnergy").addColumn("consumMotivation","consumMotivation").addColumn("consumHealth","consumHealth").addColumn("consumSelected","consumSelected");
  1504. table.appendToCell("head","consumIcon","Image").appendToCell("head","consumName","Name").appendToCell("head","consumCount","Count").appendToCell("head","consumEnergy","Energy").appendToCell("head","consumMotivation","Motivation").appendToCell("head","consumHealth","Health").appendToCell("head","consumSelected","Use");
  1505. for(var i = 0 ; i < consumableList.length;i++ ) {
  1506. var checkbox = new west.gui.Checkbox();
  1507. checkbox.setSelected(consumableList[i].selected);
  1508. checkbox.setId(consumableList[i].id);
  1509. checkbox.setCallback(function() {
  1510. Dobby.changeConsumableSelection(parseInt(this.divMain.attr("id")),this.isSelected());
  1511. Dobby.consumableTablePosition.content = $(".dobby2window .tw2gui_scrollpane_clipper_contentpane").css("top");;
  1512. Dobby.consumableTablePosition.scrollbar = $(".dobby2window .tw2gui_scrollbar_pulley").css("top");
  1513. Dobby.selectTab("consumables");
  1514. Dobby.setCookies();
  1515. });
  1516. table.appendRow().appendToCell(-1,"consumIcon",Dobby.getConsumableIcon(consumableList[i].image)).appendToCell(-1,"consumName",consumableList[i].name).appendToCell(-1,"consumCount",consumableList[i].count).appendToCell(-1,"consumEnergy",consumableList[i].energy).appendToCell(-1,"consumMotivation",consumableList[i].motivation).appendToCell(-1,"consumHealth",consumableList[i].health).appendToCell(-1,"consumSelected",checkbox.getMainDiv());
  1517. }
  1518. var buttonSelect = new west.gui.Button("Select all",function() {
  1519. Dobby.changeSelectionAllConsumables(true);
  1520. Dobby.selectTab("consumables");
  1521. Dobby.setCookies();
  1522. });
  1523. var buttonDeselect = new west.gui.Button("Deselect all",function() {
  1524. Dobby.changeSelectionAllConsumables(false);
  1525. Dobby.selectTab("consumables");
  1526. Dobby.setCookies();
  1527. });
  1528. table.appendToFooter("consumEnergy",buttonSelect.getMainDiv());
  1529. table.appendToFooter("consumHealth",buttonDeselect.getMainDiv());
  1530. htmlSkel.append(table.getMainDiv());
  1531. var checkboxEnergyConsumes = new west.gui.Checkbox();
  1532. checkboxEnergyConsumes.setLabel("Energy consumables");
  1533. checkboxEnergyConsumes.setSelected(Dobby.consumableSelection.energy);
  1534. checkboxEnergyConsumes.setCallback(function() {
  1535. Dobby.consumableSelection.energy = this.isSelected();
  1536. });
  1537. var checkboxMotivationConsumes = new west.gui.Checkbox();
  1538. checkboxMotivationConsumes.setLabel("Motivation consumables");
  1539. checkboxMotivationConsumes.setSelected(Dobby.consumableSelection.motivation);
  1540. checkboxMotivationConsumes.setCallback(function() {
  1541. Dobby.consumableSelection.motivation = this.isSelected();
  1542. });
  1543. var checkboxHealthConsumes = new west.gui.Checkbox();
  1544. checkboxHealthConsumes.setLabel("Health consumables");
  1545. checkboxHealthConsumes.setSelected(Dobby.consumableSelection.health);
  1546. checkboxHealthConsumes.setCallback(function() {
  1547. Dobby.consumableSelection.health = this.isSelected();
  1548. });
  1549. var buttonFilter = new west.gui.Button("Select",function() {
  1550. Dobby.selectTab("consumables");
  1551. });
  1552. $("#energy_consumables",html).append(checkboxEnergyConsumes.getMainDiv());
  1553. $("#motivation_consumables",html).append(checkboxMotivationConsumes.getMainDiv());
  1554. $("#health_consumables",html).append(checkboxHealthConsumes.getMainDiv());
  1555. $("#button_filter_consumables",html).append(buttonFilter.getMainDiv());
  1556. htmlSkel.append(html);
  1557. return htmlSkel;
  1558. };
  1559.  
  1560. Dobby.addSleepPlacesItems = function(combobox) {
  1561. combobox.addItem(-2,"None");
  1562. if(Dobby.homeTown != null) {
  1563. combobox.addItem(-1,Dobby.homeTown.name);
  1564. }
  1565. for(var i = 0 ; i < Dobby.forts.length;i++) {
  1566. var type = (Dobby.forts[i].type == 0) ? "Small" : (Dobby.forts[i].type == 1)? "Medium" : "Large";
  1567. combobox.addItem(i.toString(),Dobby.forts[i].name + " - " + type );
  1568. }
  1569. }
  1570.  
  1571. Dobby.createSettingsGui = function() {
  1572. var htmlSkel = $("<div id=\'settings_overview'\ style = \'padding:10px;'\></div>");
  1573. var checkboxAddEnergy = new west.gui.Checkbox();
  1574. checkboxAddEnergy.setLabel("Add energy");
  1575. checkboxAddEnergy.setSelected(Dobby.settings.addEnergy);
  1576. checkboxAddEnergy.setCallback(function() {
  1577. Dobby.settings.addEnergy = !Dobby.settings.addEnergy;
  1578. });
  1579. var checkboxAddMotivation = new west.gui.Checkbox();
  1580. checkboxAddMotivation.setLabel("Add motivation");
  1581. checkboxAddMotivation.setSelected(Dobby.settings.addMotivation);
  1582. checkboxAddMotivation.setCallback(function() {
  1583. Dobby.settings.addMotivation = !Dobby.settings.addMotivation;
  1584. });
  1585. var checkboxAddHealth = new west.gui.Checkbox();
  1586. checkboxAddHealth.setLabel("Add health");
  1587. checkboxAddHealth.setSelected(Dobby.settings.addHealth);
  1588. checkboxAddHealth.setCallback(function() {
  1589. Dobby.settings.addHealth = !Dobby.settings.addHealth;
  1590. });
  1591. var htmlHealthStop = $("<div></div>");
  1592. htmlHealthStop.append("<span> Stoppage health percent value </span>");
  1593. var healthStopTextfiled = new west.gui.Textfield("healthStop");
  1594. healthStopTextfiled.setValue(Dobby.settings.healthStop);
  1595. healthStopTextfiled.setWidth(100);
  1596. htmlHealthStop.append(healthStopTextfiled.getMainDiv());
  1597. var htmlSetWearDelay = $("<div></div>");
  1598. htmlSetWearDelay.append("<span> Job set equip delay </span>");
  1599. var setWearDelayTextfiled = new west.gui.Textfield("setWearDelay");
  1600. setWearDelayTextfiled.setValue(Dobby.settings.setWearDelay);
  1601. setWearDelayTextfiled.setWidth(100);
  1602. htmlSetWearDelay.append(setWearDelayTextfiled.getMainDiv());
  1603.  
  1604. var htmlJobDelay = $("<div></div>");
  1605. htmlJobDelay.append("<span> Random delay between jobs(seconds)</span>");
  1606. var jobDelayTextFieldMin = new west.gui.Textfield("jobDelay");
  1607. jobDelayTextFieldMin.setValue(Dobby.settings.jobDelayMin);
  1608. jobDelayTextFieldMin.setWidth(50);
  1609. var jobDelayTextFieldMax = new west.gui.Textfield("jobDelay");
  1610. jobDelayTextFieldMax.setValue(Dobby.settings.jobDelayMax);
  1611. jobDelayTextFieldMax.setWidth(50);
  1612.  
  1613. htmlJobDelay.append(jobDelayTextFieldMin.getMainDiv());
  1614. htmlJobDelay.append("<span> - </span>");
  1615. htmlJobDelay.append(jobDelayTextFieldMax.getMainDiv());
  1616.  
  1617. var htmlRegeneration = $("<div></div>");
  1618. var checkboxEnableRegeneration = new west.gui.Checkbox();
  1619. checkboxEnableRegeneration.setLabel("Enable regeneration");
  1620. checkboxEnableRegeneration.setSelected(Dobby.settings.enableRegeneration);
  1621. checkboxEnableRegeneration.setCallback(function() {
  1622. Dobby.settings.enableRegeneration = !Dobby.settings.enableRegeneration;
  1623. if(Dobby.settings.enableRegeneration) {
  1624. $("#regeneration_choices_container").css('visibility','visible');
  1625. }else {
  1626. $("#regeneration_choices_container").css('visibility','hidden');
  1627. }
  1628. });
  1629.  
  1630. var sleepPlacesCombobox = new west.gui.Combobox("sleep_places");
  1631. Dobby.addSleepPlacesItems(sleepPlacesCombobox);
  1632. sleepPlacesCombobox = sleepPlacesCombobox.select(Dobby.selectedSleepPlace);
  1633. sleepPlacesCombobox.addListener(function(value) {
  1634. Dobby.selectedSleepPlace = value;
  1635. Dobby.selectTab("settings");
  1636. });
  1637.  
  1638. var htmlRegenerationChoices = $("<div id='regeneration_choices_container'></div>");
  1639. htmlRegenerationChoices.css({'display':'inline-block','padding-left':'10px','visibility':(Dobby.settings.enableRegeneration)?'visible':"hidden"});
  1640. htmlRegenerationChoices.append($("<span>Sleep place: </span>"));
  1641. htmlRegenerationChoices.append(sleepPlacesCombobox.getMainDiv());
  1642.  
  1643. htmlRegeneration.append(checkboxEnableRegeneration.getMainDiv());
  1644. htmlRegeneration.append(htmlRegenerationChoices);
  1645.  
  1646.  
  1647.  
  1648. var buttonApply = new west.gui.Button("Apply",function() {
  1649. Dobby.settings.addEnergy = checkboxAddEnergy.isSelected();
  1650. Dobby.settings.addMotivation = checkboxAddMotivation.isSelected();
  1651. Dobby.settings.addHealth = checkboxAddHealth.isSelected();
  1652. if(Dobby.isNumber(healthStopTextfiled.getValue())) {
  1653. var healthStop = parseInt(healthStopTextfiled.getValue());
  1654. healthStop = Math.min(30,healthStop);
  1655. Dobby.settings.healthStop = healthStop;
  1656. }
  1657. if(Dobby.isNumber(setWearDelayTextfiled.getValue())) {
  1658. var setWearDelay = parseInt(setWearDelayTextfiled.getValue());
  1659. setWearDelay = Math.min(10,setWearDelay);
  1660. Dobby.settings.setWearDelay = setWearDelay;
  1661. }
  1662. if(Dobby.isNumber(jobDelayTextFieldMin.getValue())) {
  1663. var jobDelayTimeMin = parseInt(jobDelayTextFieldMin.getValue());
  1664. Dobby.settings.jobDelayMin = jobDelayTimeMin;
  1665. }else {
  1666. Dobby.settings.jobDelayMin = 0;
  1667. Dobby.settings.jobDelayMax = 0;
  1668. new UserMessage("Wrong format of delay job min value. Please set a number.", UserMessage.TYPE_ERROR).show();
  1669. }
  1670. if(Dobby.isNumber(jobDelayTextFieldMax.getValue())) {
  1671. var jobDelayTimeMax = parseInt(jobDelayTextFieldMax.getValue());
  1672. Dobby.settings.jobDelayMax = jobDelayTimeMax;
  1673. }else {
  1674. Dobby.settings.jobDelayMin = 0;
  1675. Dobby.settings.jobDelayMax = 0;
  1676. new UserMessage("Wrong format of delay job max value. Please set a number.", UserMessage.TYPE_ERROR).show();
  1677. }
  1678. Dobby.selectTab("settings");
  1679. })
  1680.  
  1681. htmlSkel.append(checkboxAddEnergy.getMainDiv());
  1682. htmlSkel.append("<br>");
  1683. htmlSkel.append(checkboxAddMotivation.getMainDiv());
  1684. htmlSkel.append("<br>");
  1685. htmlSkel.append(checkboxAddHealth.getMainDiv());
  1686. htmlSkel.append("<br>");
  1687. htmlSkel.append(htmlHealthStop);
  1688. htmlSkel.append("<br>");
  1689. htmlSkel.append(htmlSetWearDelay);
  1690. htmlSkel.append("<br>");
  1691. htmlSkel.append(htmlJobDelay);
  1692. htmlSkel.append("<br>");
  1693. htmlSkel.append(htmlRegeneration);
  1694. htmlSkel.append("<br>");
  1695. htmlSkel.append(buttonApply.getMainDiv());
  1696. return htmlSkel;
  1697. };
  1698. Dobby.createStatisticsGui = function() {
  1699. var htmlSkel = $("<div id=\'statistics_overview'\></div>");
  1700. htmlSkel.append($("<span>Job count in this session: " + Dobby.statistics.jobsInSession + "</span><br>"));
  1701. htmlSkel.append($("<span>Xp count in this session: " + Dobby.statistics.xpInSession + "</span><br>"));
  1702. htmlSkel.append($("<span>Job count total: " + Dobby.statistics.totalJobs + "</span><br>"));
  1703. htmlSkel.append($("<span>Xp count total: " + Dobby.statistics.totalXp + "</span><br>"));
  1704. return htmlSkel;
  1705. };
  1706. Dobby.createMenuIcon = function() {
  1707. var menuimage = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAAZABoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACggJ/8QAMBAAAQQBAgMGBAcBAAAAAAAABAECAwUGBxEACBIJExQVITEjM3a1NzlCUXFzsrT/xAAXAQADAQAAAAAAAAAAAAAAAAAFBgcE/8QAJhEAAgICAgEEAQUAAAAAAAAAAQIDBAUREiEGABMiMRQHFSNBgf/aAAwDAQACEQMRAD8ABeNE2KNOlN3ORrlVf1LtuiL6+yb7Jtt6cLU5AtEcSyDlVw/K4haG6mq8RxYSwJsfAl5Q5+SqO+sDhHkBlOnqVL8UAJ4J0gtbEPBEW4fZHyksVywpHIquRqNYxWpsiMVVT4jt1Tbb0avp6b8Jz7Ijn2zDTzRVukxddIMzGPN8bwPIYgxyBz4DTJr6Mc6aVGtrY6q3NiCktSZGjd2SOxrp54Ih2o3m1a1YxUZqu6vFajZgkvsllIIPz4u3+KN98uwujWP0e80PhXkdm+KOJu/l4yaqf3jHTZOtF8klDLViu0gJGdECyPKeI2q8S/NcSO0Jxeix3m51krMZoQ8cAgtaUmWnroIxQorIvGqee5mFGi2jhQyzUk6SGJGx+KJKfExrXsYkR9Lk92uRf2VFRU/lF9uEm88HZ42Ot93qDr1gOfxG6pSQgFXOBW0ckoWYOAogGjxYvYwo/wAkPjEjQCOOykloiSh+6WerVJZuDy2WL5PVWNhWWeL5EDY1ppQFgETSWDCAzQ55ByxSGIO5GTDzxyRSt6l6ZGOTddt+CuCyVe9RhSOb3Z6sMEFoMSHWZYlDH58WdWI2sgHFh/fIEBJ8qhmmzmSyTUFo18tfuZGrBBr8eKK3ZeZYIQrNwWEOI1jbTKoH2NMag1F5H+ZLTXQ5+vWaYI6o0+V+M7mvsA5jGVuVQQ+XW84bXpKPDFZTi0NlXkthuALMwaR4MlfI42O1+Q3OtO6LSasa6Ssly3HkzI6UGymjhQrJJDXS1gayLu6KQqqlj8m60Vs5TV7pFnGb0aE87P5d+Y/QuF/eMd4Pny1/NufrTTL7xZcDZppcvhbTzssTwW/iYVZQVUKoVgzsd6mOyCNlVIA7B0xVosXlaiQc2WxTR2DsNqZFDtxIUdbTXYJ0T3vv08nT6soCOWO0sLTB2YtluQWGN5EMHdFADW2OY8tKPEgKgsIfKZJKTDHCQ0ds3g4UcpKxLKvVlcbmukimFqun2UFqpU6qXLWBJIUqyv3IkR27kfMvxHo5VcjnKiqq8WcX+Hth9Lxf9AnGcs3zZf7H/wCl4meHokPdkWd0LzkHiGHS6IGxJs9No7J3rfRPqj+UWljiw8aQIQKQctJxckssW9/xqN/Z2B9n6H16/9k=';
  1708. var div = $('<div class="ui_menucontainer" />');
  1709. var link = $('<div id="Menu" class="menulink" onclick=Dobby.loadJobs(); title="Dobby 2" />').css('background-image', 'url(' + menuimage + ')');
  1710. $('#ui_menubar').append((div).append(link).append('<div class="menucontainer_bottom" />'));
  1711. };
  1712. $(document).ready(function() {
  1713. try{
  1714. Dobby.loadLanguage();
  1715. Dobby.loadSets(function(){});
  1716. Dobby.getCookies();
  1717. Dobby.createMenuIcon();
  1718. }catch(e) {
  1719. console.log("exception occured");
  1720. }
  1721. });
  1722. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址