[FAQ] How to create a new premium package?

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

  • [FAQ] How to create a new premium package?

    Hello guys who I want to make in the database two new Bonus Premium which I are stored in Tech.php I get this error
    Images
    • 1.PNG

      8.3 kB, 1,654×232, viewed 354 times
    • 2PNG.PNG

      394.14 kB, 1,471×422, viewed 326 times
    • 3.PNG

      12.01 kB, 439×243, viewed 371 times
  • ogamem.com/index.php?ref=1

    old ogame interface Design hosting domain for sale belongs to you Take a look if you like you can dm me There is no bug in the game, but there is a lack of words in different languages, I could not do it completely because I do not know different languages

    sven wrote:

    Hello guys who I want to make in the database two new Bonus Premium which I are stored in Tech.php I get this error
  • [FAQ] How to edit buildings/fleet/defense/research/abilities?
    Вы должны его добавить в uni_vars и смежные таблицы, которые связаны с этой таблицей + добавить куда будет записываться время премиума, т.е. добавить ячейку с названием этого премиума в таблицу uni1_users.
  • Das oben ist total kacke programmiert, sowas gehört nicht in die vars tabelle.

    Mach eine neue tabelle wie uni1_premiums mit 4 feldern (id, name, costPerPercentage oder costFactor, maxPercentage), so dann machste ne neue Datei, holst dir die Daten aus der Datenbank mit Database::get()->select(); und dann dann benutzt du einfach foreach(), machst es in vars_assign rein. Gehst in tpl datei, machst ein simples design, dann {foreach $deineVariable as $premiums}{/foreach} und da machste dann einfach... {$LNG.{$premiums.name}} zum beispiel für den Namen in der jeweiligen sprach, der name von der Datenbank ist dann dein key im $LNG array. Und joa, entweder machste halt feste Werte oder mit javascript/jQuery dynamische mit Inputs.
  • Ок, если этот код "kacke", не используете его. Спасибо за внимание.

    p.s. если можете лучше, так напишите и покажите. Не понимаю таких претензий. Вы не первый кто это говорит, но обычно все заканчивается на словах, тогда, уж, может хотя бы мою просьбу выполнить? И не надо мне указаний "как сделать", я тоже много знаю "как", вы лучше сделайте.
  • Yaro2709 wrote:

    Ок, если этот код "kacke", не используете его. Спасибо за внимание.

    p.s. если можете лучше, так напишите и покажите. Не понимаю таких претензий. Вы не первый кто это говорит, но обычно все заканчивается на словах, тогда, уж, может хотя бы мою просьбу выполнить? И не надо мне указаний "как сделать", я тоже много знаю "как", вы лучше сделайте.
    Das war nicht böse gemeint, trotzdem ist es extrem ineffektiv. Und ja, hier ist ein ganz simples Beispiel wie es "besser" gemacht werden kann.

    PHP Source Code

    1. <?
    2. // hier ist ein einfacher Weg, das ist der SQL Teil.
    3. CREATE TABLE `uni1_premium_calc` (
    4. `id` int NOT NULL,
    5. `name` text NOT NULL,
    6. `cost` int UNSIGNED NOT NULL DEFAULT '0',
    7. `factor` float UNSIGNED NOT NULL DEFAULT '0',
    8. `factorone` int UNSIGNED NOT NULL DEFAULT '0',
    9. `rangevalue` int UNSIGNED NOT NULL DEFAULT '0',
    10. `rangevalueone` int UNSIGNED NOT NULL DEFAULT '0',
    11. `factortwo` smallint NOT NULL DEFAULT '0'
    12. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    13. ALTER TABLE `uni1_premium_calc`
    14. ADD PRIMARY KEY (`id`);
    15. COMMIT;
    16. // So, hier kannst du verschiedene Premium Optionen einfügen, dann kommt der PHP Teil um die Optionen anzuzeigen in der show() funktion.
    17. $db = Database::get();
    18. $config = Config::get();
    19. $sql = "SELECT * FROM uni1_premium_calc;";
    20. $PremiumResult = $db->select($sql, []);
    21. $PremiumList = array();
    22. foreach ($PremiumResult as $PremiumRow) {
    23. $PremiumList[] = array(
    24. 'name' => $PremiumRow['name'],
    25. 'rangevalueone' => $PremiumRow['rangevalueone'],
    26. 'rangevalue' => $PremiumRow['rangevalue'],
    27. 'isActive' => $USER[strtolower($PremiumRow['name'])."_days"] > TIMESTAMP ? 1 : 0,
    28. 'countDown' => $USER[strtolower($PremiumRow['name'])."_days"] > TIMESTAMP ? $USER[strtolower($PremiumRow['name'])."_days"] - TIMESTAMP : 0,
    29. 'countBonus' => $USER[strtolower($PremiumRow['name'])],
    30. );
    31. }
    32. $this->tplObj->assign_vars(array(
    33. 'PremiumList' => $PremiumList,
    34. ));
    35. // So und dann kannst du den PremiumList teil benutzen für dein template:
    36. {foreach $PremiumList as $listItem}
    37. <div class="premium-feature-item" data-feature-type="{$listItem.name}" data-active-amount="0">
    38. <div class="btnExpand"></div>
    39. <div class="feature-title">
    40. <span class="btnHelp tooltip" data-tooltip-position="top" data-tooltip-content="<div style='font-size:11px;'>{$LNG.{$listItem.name|cat:'_1'}}</div>"></span>
    41. {$LNG.{$listItem.name}}
    42. {if $listItem.isActive == 1}
    43. <div style="color:#ffd700;font-size:11px;float:right;margin-right:30px;">
    44. <span>+ {$listItem.countBonus}% | </span>
    45. <span class="x-time" data-remaining-seconds="{$listItem.countDown}"></span>
    46. </div>
    47. {/if}
    48. </div>
    49. <div style="float:left;width:100%;margin-top:5px;padding-top:10px;border-top:2px groove #222;">
    50. <div style="float:left;width:20%;">
    51. <span>+ % </span>
    52. <input class="x-perc-input" value="0" min-value="0" max-value="200">
    53. </div>
    54. <div style="float:left;width:20%;">
    55. <input class="x-days-input" value="1" min-value="0" max-value="30"> {$LNG.shopDays}
    56. </div>
    57. <div style="float: left;text-align: right;width: 30%;height: 22px;line-height: 22px;">
    58. <span class="x-dm-amount">0</span> {$LNG.tech.921} <br>
    59. </div>
    60. <div style="float:left;width:30%;text-align:right;padding-right:10px;">
    61. <a href="#" class="premium-purchase-btn">Buy</a>
    62. </div>
    63. </div>
    64. </div>
    65. {/foreach}
    66. // Für fast alle Bonis brauchst du 2 Werte in der Datenbank (User oder Planets Tabelle), und zwar value und finish_time als timestamp). Für spezifische Sachen könntest du auch einfach eine 2. Tabelle machen und dort einzeln einfügen, auch mit userId, value, finish_time einfach.
    Display All
  • Явно не лучше. Вы обходите генеральный обработчик бонусов, во-вторых в коде придется писать кучу велосипедов вида "if(time){}", в-третьих, создание еще одной таблицы, которая не имеет смысла, т.к. для этого есть uni1_vars.
    Смысл разъединять сущности, который имеют одинаковый шаблон? Притом придется писать новый cache, либо дописывать.
  • Naja, bitte erkläre mir warum du in die uni1_vars tabelle 10-15 Einträge reinpackst obwohl du diese 10-15 Einträge in höchstens 15-20 Funktionen brauchst? Damit verlangsamst du 1. die Ladezeit bei JEDEM Klick und zudem ist es einfach total unnötig, da es keinen "Handler" gibt. Warum lädst du alle Premium Einträge bei JEDEM Klick neu, obwohl du diese Einträge in 15-20 Funktionen nur brauchst? Das ist einfach ineffektiv. Wenn du das noch mit anderen Features machst, dann haste irgendwann 300-500 Einträge in der uni1_vars die bei JEDEM Klick angefragt wird. Das verlangsamt dein Spiel, es ist zwar nur eine geringe Zeitspanne aber es ist einfach ineffektiv um es nochmal zu sagen, lieber die Tabellen aufteilen in einzelne kleinere - vorallem bei Features die du nur in ganz wenigen Funktionen überhaupt verwendest. Also standardmäßig solltest du schon locker 80-160ms pro Neuladen erreichen.

    Ich kenne keinen aktiven New Star Server aber du solltest schon unter 200-250ms pro Neuladen bleiben.
  • 1. Солидарен с мыслью, она имеет верный вектор, но между выбором захламления кода и его производительностью я выбрал первое.
    2. Картинка снизу про скорость загрузки. PHP и Smarty тратят меньше 0.01 секунды для загрузки данных. Но стоит, безусловно, отображение, которое зависит от подгружаемых стилей и скриптов и других факторов, которые мне не хочется перечислять.
    3. Это проблема глобальных переменных, с таким же выводом стоит и кинуть камень в $LNG.
    4. Проблема, которое лежит на мне, это то, что в определённое время я не выполнил сегментацию кода и не переосмыслил структуру двжика, поэтому это вылилось в то, что вылилось. Любая хорошая идея, хороша только в определенном промежутке.
    5. В class.PlanetRessUpdate.php все равно все бы вызвалось после каждого клика.
    6. Вызов все равно был бы остался на постоянной основе в $USERS и даже, если это не так, то пришлось бы делить абилки не те, которые всегда нужны и которые вызываются в определённый момент, т.е. получилось бы усложнение кода и в какой-то момент у вас бы получилось достаточно большое количество SELECT запросов в местах, где бонус действительно нужен (хотя вроде бы они тоже загружаются очень быстро, сам лично не проверял) ну или другая альтернатива, которая все равно бы пришла к тому, что я описал выше.
    В общем, резюмирую: вы правы по этому поводу. Но, решив одни проблемы, появились бы другие. Поэтому не ясно, что лучше бы отразилось на движке. Может быть в одной из экспериментальной ветке, я попробую реализовать то, о чем вы говорите. И спасибо за замечания.
    Images
    • Без названия (9).png

      35.83 kB, 868×521, viewed 182 times
  • Sagst es ja selbst, die Idee an sich ist schon richtig. Daher darfst du das mir auch nicht böse nehmen, wenn ich sage dass das kacke/ineffektiv ist - was meinst du bei 6. jedoch mit dem "Aber durch das Lösen einiger Probleme würden andere erscheinen" ?