Skocz do zawartości
Opublikowano

Siema!
Podrzucam wam system kuponow SM.
Trochę ubogi ale zawsze cos 😛 (przynajmniej nie quest)

Aktualnie jest pod 4 kupony ale nic nie stoi na przeszkodzie dodać sobie większa ilosc.
(system nie zawiera kuponów jako sam itemek, wiec takowe musicie dodać se indywidualnie)

Pobieralnia:

🔐 Ukryta Treść 🔐

Featured Replies

Opublikowano

Kojarzysz czyj to system? Może dorwę film pokazowy na guglu

Opublikowano
  • Autor
4 minuty temu, ExoCarossa napisał(a):

Kojarzysz czyj to system? Może dorwę film pokazowy na guglu

Moge na szybko dodac i podeslac ale dopiero po 22.
Po prostu klikasz prawym na kupon i ci przyznaje smy + info na chacie o dokladnej ilosci.

A czyj system? w sumie nie wiem nawet, na necie znalazlem i troche przerobiłem.

Edytowane przez ARK

Opublikowano
  • Programista

Jest to strasznie złe rozwiązanie, bardzo dużo powtarzającego się kodu (boilerplate), zabieranie kuponu dopiero po nadaniu SM, możliwe wycieki pamięci.

Napisałem na szybko nową wersję, trochę ją udokumentowałem, może się połapiecie (teraz wystarczy ustawić w bazie w value0 ilość SM):

    switch (item->GetVnum()) {
      case 80014: // To też jest bez sensu, subtype sprawdziłby się lepiej.
      case 80015:
      case 80016:
      case 80017: {
        // Check possible actions
        if (GetExchange())
          return false;

        if (GetShopOwner())
          return false;

        if (IsOpenSafebox())
          return false;

        // ...
        // Prepare string with query
        auto query = std::format(
          "UPDATE account.account SET cash = cash + {} WHERE id = {}",
          item->GetValue(1),
          GetAID());

        // Remove coupon from player's inventory
        // and do it before give action (important)
        item->SetCount(item->GetCount() - 1);

        // When everything is ok (probably), run query
        const std::unique_ptr<SQLMsg> query_main =
          DBManager::instance().DirectQuery(query.c_str());

#ifdef ENABLE_REFRESH_SENDING
        // Update below query variable with new string
        query = std::format("SELECT cash FROM account.account WHERE id = {}",
                            GetAID());

        // Again, when everything is ok, send query to database
        const std::unique_ptr<SQLMsg> query_refresh =
          DBManager::instance().DirectQuery(query.c_str());

        // Get data from refresh query and send to client using command
        const auto row = mysql_fetch_row(query_refresh->Get()->pSQLResult);
        ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Cash %s", row[0]);
#endif
      } break;

      default: {
        break;
      }
    }

// ...
#define ENABLE_COINS_TICKETS

#if defined(ENABLE_COINS_TICKETS)
  // #define ENABLE_REFRESH_SENDING
#endif

W gruncie rzeczy mając takie funkcje questowe jak np. charge_cash, nie widzę sensu robienia takich wydziwień tutaj, lepiej użyć lekkiego LUA, serio.

Edytowane przez Thorek

Opublikowano

takie rzeczy robi sie jako quescik zeby nie robic sobie smietnika w source.

silniku gry tylko powinny byc systemy bez zadnych id itp bo to tylko syf sobie wiekszy robisz i musisz pozniej edytowac i kompilowac za kazdym razem

Edytowane przez Kaszalotpospolity

Opublikowano

Swoją drogą, ciekawi mnie czemu większość osób wszystko chce przenosić do src uważając to za lepsze rozwiązanie. Trzeba pamiętać, że nakładka w lua została zaprojektowana między innymi do takich celów. O ile mnie pamięć nie myli jak kolega wyżej pisał istnieje oryginalnie zaprojektowana taka funkcja do przydzielania SM. 

Opublikowano
  • Autor
3 godziny temu, Sevence napisał(a):

Swoją drogą, ciekawi mnie czemu większość osób wszystko chce przenosić do src uważając to za lepsze rozwiązanie. Trzeba pamiętać, że nakładka w lua została zaprojektowana między innymi do takich celów. O ile mnie pamięć nie myli jak kolega wyżej pisał istnieje oryginalnie zaprojektowana taka funkcja do przydzielania SM. 

Pewnie chodzi o performance, c++ bezpośrednio wykonywany, wiec pod względem surowej prędkości  ma przewagę nad questem.
Chodź w tym przypadku pewnie marginalna różnica jest.

Ale fakt faktem bez sensu interpretować id kuponów w src, juz lepiej wyszlo by dorobienie odczytu z osobnego pliki gdzie będzie definiowane id itemka i wartość sm + komenda reload żeby nie kompilować co chwile game albo właśnie jak wyżej Thorek, ciągnęło z proto.

Edytowane przez ARK

Opublikowano
  • Programista
6 godzin temu, ARK napisał(a):

Pewnie chodzi o performance, c++ bezpośrednio wykonywany, wiec pod względem surowej prędkości  ma przewagę nad questem.
Chodź w tym przypadku pewnie marginalna różnica jest.

Ale fakt faktem bez sensu interpretować id kuponów w src, juz lepiej wyszlo by dorobienie odczytu z osobnego pliki gdzie będzie definiowane id itemka i wartość sm + komenda reload żeby nie kompilować co chwile game albo właśnie jak wyżej Thorek, ciągnęło z proto.

Nie wiem czemu wszyscy uwzieli się na te questy, LUA jest szybsze jeśli chodzi o callback do C niż chociażby Python.

Tyle, że nikt z jakiegoś powodu nie zaczyna przepisywać UI do C++ (może za trudne?)

Edytowane przez Thorek

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...