Пластичность функционала (php)

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Пластичность функционала (php)

      ВНИМАНИЕ! Это статья предназначен только для тех, кто хорошо знает движок, всем остальным не советую читать (Вам будет сложно это понять)

      Вообщем, решил на днях посмотреть, что из себя представляет 1.8.git. Честно - это ужас! Поясню: до этого долгое время работал на 1.7.х, и добился довольно хороших результатов. Я очень надеялся, что в 1.8.git были исправлены недочеты, но к сожалению нет. (не говорю о V2.0 - там изменения в стилях)
      По этой теме я разберу часть кода class.PlanetRessUpdate.
      ПРИМЕР №1



      PHP Source Code: class.PlanetRessUpdate - storage - 1.8

      1. $Hash[] = $this->PLANET[$resource[22]];
      2. $Hash[] = $this->PLANET[$resource[23]];
      3. $Hash[] = $this->PLANET[$resource[24]];


      PHP Source Code: class.PlanetRessUpdate - storage - new

      1. //class.PlanetRessUpdate
      2. foreach($storageList as $storage) {
      3. $Hash[] = $this->PLANET[$resource[$storage]];
      4. }
      5. //vars.php
      6. $storageList = array(22,23,24); //просто хранилища
      ПРИМЕР №2

      Source Code: class.PlanetRessUpdate - ExecCalc - 1.8

      1. $MaxMetalStorage = $this->PLANET['metal_max'] * $this->config->max_overflow;
      2. $MaxCristalStorage = $this->PLANET['crystal_max'] * $this->config->max_overflow;
      3. $MaxDeuteriumStorage = $this->PLANET['deuterium_max'] * $this->config->max_overflow;
      4. $MetalTheoretical = $this->ProductionTime * (($this->config->metal_basic_income * $this->config->resource_multiplier) + $this->PLANET['metal_perhour']) / 3600;
      5. if($MetalTheoretical < 0)
      6. {
      7. $this->PLANET['metal'] = max($this->PLANET['metal'] + $MetalTheoretical, 0);
      8. }
      9. elseif ($this->PLANET['metal'] <= $MaxMetalStorage)
      10. {
      11. $this->PLANET['metal'] = min($this->PLANET['metal'] + $MetalTheoretical, $MaxMetalStorage);
      12. }
      13. $CristalTheoretical = $this->ProductionTime * (($this->config->crystal_basic_income * $this->config->resource_multiplier) + $this->PLANET['crystal_perhour']) / 3600;
      14. if ($CristalTheoretical < 0)
      15. {
      16. $this->PLANET['crystal'] = max($this->PLANET['crystal'] + $CristalTheoretical, 0);
      17. }
      18. elseif ($this->PLANET['crystal'] <= $MaxCristalStorage )
      19. {
      20. $this->PLANET['crystal'] = min($this->PLANET['crystal'] + $CristalTheoretical, $MaxCristalStorage);
      21. }
      22. $DeuteriumTheoretical = $this->ProductionTime * (($this->config->deuterium_basic_income * $this->config->resource_multiplier) + $this->PLANET['deuterium_perhour']) / 3600;
      23. if ($DeuteriumTheoretical < 0)
      24. {
      25. $this->PLANET['deuterium'] = max($this->PLANET['deuterium'] + $DeuteriumTheoretical, 0);
      26. }
      27. elseif($this->PLANET['deuterium'] <= $MaxDeuteriumStorage)
      28. {
      29. $this->PLANET['deuterium'] = min($this->PLANET['deuterium'] + $DeuteriumTheoretical, $MaxDeuteriumStorage);
      30. }
      31. $this->PLANET['metal'] = max($this->PLANET['metal'], 0);
      32. $this->PLANET['crystal'] = max($this->PLANET['crystal'], 0);
      33. $this->PLANET['deuterium'] = max($this->PLANET['deuterium'], 0);
      Display All

      Source Code: class.PlanetRessUpdate - ExecCalc - new

      1. foreach($reslist['resstype'][1] as $resP) //проверка всего масива элементов
      2. {
      3. $MaxStorage = $this->PLANET[''.$resource[$resP].'_max'] * $this->config->max_overflow;
      4. $Theoretical = $this->ProductionTime * (($this->config->{$resource[$resP].'_basic_income'} * $this->config->resource_multiplier) + $this->PLANET[''.$resource[$resP].'_perhour']) / 3600;
      5. if($Theoretical < 0)
      6. {
      7. $this->PLANET[''.$resource[$resP].''] = max($this->PLANET[''.$resource[$resP].''] + $Theoretical, 0);
      8. }
      9. elseif ($this->PLANET[''.$resource[$resP].''] <= $MaxStorage)
      10. {
      11. $this->PLANET[''.$resource[$resP].''] = min($this->PLANET[''.$resource[$resP].''] + $Theoretical, $MaxStorage);
      12. }
      13. $this->PLANET[''.$resource[$resP].''] = max($this->PLANET[''.$resource[$resP].''], 0);
      14. }
      Display All
      ПРИМЕР №3

      Source Code: class.PlanetRessUpdate - temp - 1.8

      1. $temp = array(
      2. 901 => array(
      3. 'max' => 0,
      4. 'plus' => 0,
      5. 'minus' => 0,
      6. ),
      7. 902 => array(
      8. 'max' => 0,
      9. 'plus' => 0,
      10. 'minus' => 0,
      11. ),
      12. 903 => array(
      13. 'max' => 0,
      14. 'plus' => 0,
      15. 'minus' => 0,
      16. ),
      17. 911 => array(
      18. 'plus' => 0,
      19. 'minus' => 0,
      20. )
      21. );
      Display All

      Source Code: class.PlanetRessUpdate - temp - new

      1. include('includes/subclasses/subclass.Temp.php');


      PHP Source Code: includes/subclasses/subclass.Temp.php

      1. <?php
      2. $temp = array();
      3. foreach($reslist['resstype'][1] as $resP) //проверка всего масива элементов
      4. {
      5. $temp += array(
      6. $resP => array(
      7. 'max' => 0,
      8. 'plus' => 0,
      9. 'minus' => 0,
      10. )
      11. );
      12. }
      13. foreach($reslist['resstype'][2] as $resS) //проверка всего масива элементов
      14. {
      15. $temp += array(
      16. $resS => array(
      17. 'plus' => 0,
      18. 'minus' => 0,
      19. )
      20. );
      21. }
      Display All
      ПРИМЕР №4


      Source Code: class.PlanetRessUpdate - databasa - 1.8

      1. $sql = 'UPDATE %%PLANETS%% as p,%%USERS%% as u SET
      2. p.metal = :metal,
      3. p.crystal = :crystal,
      4. p.deuterium = :deuterium,
      5. p.eco_hash = :ecoHash,
      6. p.last_update = :lastUpdateTime,
      7. p.b_building = :b_building,
      8. p.b_building_id = :b_building_id,
      9. p.field_current = :field_current,
      10. p.b_hangar_id = :b_hangar_id,
      11. p.metal_perhour = :metal_perhour,
      12. p.crystal_perhour = :crystal_perhour,
      13. p.deuterium_perhour = :deuterium_perhour,
      14. p.metal_max = :metal_max,
      15. p.crystal_max = :crystal_max,
      16. p.deuterium_max = :deuterium_max,
      17. p.energy_used = :energy_used,
      18. p.energy = :energy,
      19. p.b_hangar = :b_hangar,
      20. u.darkmatter = :darkmatter,
      21. u.b_tech = :b_tech,
      22. u.b_tech_id = :b_tech_id,
      23. u.b_tech_planet = :b_tech_planet,
      24. u.b_tech_queue = :b_tech_queue
      25. '.implode("\n", $buildQueries).'
      26. WHERE p.id = :planetId AND u.id = :userId;';
      Display All

      Source Code: class.PlanetRessUpdate - databasa - new

      1. $sql = 'UPDATE %%PLANETS%% as p,%%USERS%% as u SET
      2. p.eco_hash = :ecoHash,
      3. p.last_update = :lastUpdateTime,
      4. p.b_building = :b_building,
      5. p.b_building_id = :b_building_id,
      6. p.field_current = :field_current,
      7. p.b_hangar_id = :b_hangar_id,
      8. p.b_hangar = :b_hangar,
      9. u.b_tech = :b_tech,
      10. u.b_tech_id = :b_tech_id,
      11. u.b_tech_planet = :b_tech_planet,
      12. u.b_tech_queue = :b_tech_queue
      13. '.implode("\n", $buildQueries).'
      14. WHERE p.id = :planetId AND u.id = :userId;';
      15. foreach($reslist['resstype'][1] as $resP) //проверка всего масива элементов
      16. {
      17. $sql .= 'UPDATE %%PLANETS%% as p,%%USERS%% as u SET
      18. p.'.$resource[$resP].' = :'.$resource[$resP].',
      19. p.'.$resource[$resP].'_perhour = :'.$resource[$resP].'_perhour,
      20. p.'.$resource[$resP].'_max = :'.$resource[$resP].'_max
      21. WHERE p.id = :planetId AND u.id = :userId;';
      22. }
      23. foreach($reslist['resstype'][2] as $resS) //проверка всего масива элементов
      24. {
      25. $sql .= 'UPDATE %%PLANETS%% as p,%%USERS%% as u SET
      26. p.'.$resource[$resS].'_used = :'.$resource[$resS].'_used,
      27. p.'.$resource[$resS].' = :'.$resource[$resS].'
      28. WHERE p.id = :planetId AND u.id = :userId;';
      29. }
      30. foreach($reslist['resstype'][3] as $resU) //проверка всего масива элементов
      31. {
      32. $sql .= 'UPDATE %%PLANETS%% as p,%%USERS%% as u SET
      33. u.'.$resource[$resU].' = :'.$resource[$resU].'
      34. WHERE p.id = :planetId AND u.id = :userId;';
      35. }
      Display All
      КОНЕЦ

      Я не все выложил, но я думал, что такого на 1.8 не будет. Жду критики, ответом и рассуждений.
      Пришла пора не писать что-то новое, а модернизировать старое, и делать код более пластичным. :thumbup:

      The post was edited 2 times, last by Yaro2709 ().

    • зачем эти не нужные телодвижения? местами бесполезные, а местами наоборот хуже сделал.
      например в execalc если придется/захочется поменять калькуляцию определенного реса, надо будет писать условия для каждого реса в переборе массива.
    • Kaizoku wrote:

      зачем эти не нужные телодвижения? местами бесполезные, а местами наоборот хуже сделал.
      например в execalc если придется/захочется поменять калькуляцию определенного реса, надо будет писать условия для каждого реса в переборе массива.
      1. Это игра или движок? Как знаю движок, значит, он должен быть пластичен, как пластилин.
      2. Клонирование - это нормально?
      3. А если завтра придет новая технология, а если завтра будет апокалипсис... да я с такой логикой ни чего бы и не написал.
    • Yaro2709 wrote:

      Kaizoku wrote:

      зачем эти не нужные телодвижения? местами бесполезные, а местами наоборот хуже сделал.
      например в execalc если придется/захочется поменять калькуляцию определенного реса, надо будет писать условия для каждого реса в переборе массива.
      1. Это игра или движок? Как знаю движок, значит, он должен быть пластичен, как пластилин.2. Клонирование - это нормально?
      3. А если завтра придет новая технология, а если завтра будет апокалипсис... да я с такой логикой ни чего бы и не написал.
      0. Никто разумный не будет юзать сырой двиг скаченный "с интернетов". А не сырой, без фокусов, во фри, вряд ли кто-то кинет в сеть.
      1. Пластичной должна быть дама в постели.
      2. Клонирование имеет место быть - Нормально.
      3. Смотреть в будущее, планировать, рассчитывать и просчитывать - Нормально.

      Тебе, всё-таки, явно необходим чупик, без него мыслительный функционал страдает...
    • 0. Сырой, но интересный.
      1. Запятые забыл, купи учебник по русскому.
      2. Клонирование нормально на НАЧАЛЬНЫХ этапах - дальше это переходит все грани культуры, понимания и понятия "Чистого кода"
      3. Планировать и т.д. нужно в плане разумного, а не в плане: завтра может упасть метеор и мы все умрем; тогда вообще теряется смысл любого действия.

      Про тебя уже забыл, но как обычно: появляешься не откуда, делаешь не понятно что, и улетаешь не понятно куда.

      The post was edited 2 times, last by Yaro2709 ().

    • Yaro2709 wrote:

      0. Сырой, но интересный.
      1. Запятые забыл, купи учебник по русскому.
      2. Клонирование нормально на НАЧАЛЬНЫХ этапах - дальше это переходит все грани культуры, понимания и понятия "Чистого кода"
      3. Планировать и т.д. нужно в плане разумного, а не в плане: завтра может упасть метеор и мы все умрем; тогда вообще теряется смысл любого действия.

      Про тебя уже забыл, но как обычно: появляешься не откуда, делаешь не понятно что, и улетаешь не понятно куда.
      При простом общении, без официоза, юзаю знаки препинания так, как мне удобно, условно говоря - я ставлю их так, как примерно говорил бы в формате аудио. То есть запятая там, где я задумался, или тупо желаю выдержать небольшую паузу. Ну да ладно. Ярику что-либо пояснять гнилая идея - У него одни чупики на уме, во рту, в ан....

      Кста, как я тебе уже писал в небезызвестном чатике - Глупый чупосос может сумничать, а 'умный' гад может сглупить. Перефразировал, для твоего понимания)) Синк эбаут ит, Вась.
    • Write your own!

      Describe your knowledge !
      I can you order for example ajax data update, or 3d ships in 3d max with import for WebGL to your project ?
      How can I view Your project?
      - and your price!
      Why programmers like UNIX == unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.

      The post was edited 3 times, last by ZeroNull ().

    • Логичный ответ.
      Оцениваю свои знания в виде: пишу моды, исправляю баги и помогаю в недочетах.

      Ajax@3d - не занимаюсь.
    • Зависит какое понятие вы вкладываете в "системный-бот"

      Прошу продолжить тему в ЛС (опишите подробнее что вы хотите) и не засоряйте тему, предназначенную для другого, заранее спасибо.
    • I suspect that you do not have the knowledge to teach others!
      Did I ask you a question?
      It will also be useful for others to know at what level If you can work ..
      I am ready to pay you 150 EUR

      Repeat that! Okay? prnt.sc/prygw2
      Why programmers like UNIX == unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.
    • Yes, Qwa ! I'm going to buy it from you!
      But it’s interesting for me to check a person’s knowledge is he cool, or pretends to be :)
      Why programmers like UNIX == unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.
    • Тебе тоже задан вопрос - ответа нет, а решений я вижу много.
      Напишешь нормально ТЗ - напишу код нормально, а пока хз, что ты там просишь.

      Вижу в-первый раз тут, так что иди агрится в другое место.
    • Russians are all so aggressive?
      1) auto creation from 1 to 500.
      2) the development of science, navy, defense and all actions randomly.
      3) attack and spying on other players.
      4) building alliances.
      5) primitive answers and communication.
      6) development after espionage of a player - there must be randomness - the goal is to become better
      I write from 4 living in Canada + make money.

      p.s . Thanks for your help in the code hope
      Why programmers like UNIX == unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep.