Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Kupony SM (C++)

Featured Replies

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:

Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto
Opublikowano
  • Autor
W dniu 13.08.2024 o 17:33, 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):

CKod został skopiowany
    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
W dniu 14.08.2024 o 06:20, 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
W dniu 14.08.2024 o 09:42, 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

  • 11 miesięcy temu...
Opublikowano

Można też dać w taki sposób w formie questa.

LuaKod został skopiowany
 quest kuponsm begin    state start begin        function GetVoucherValue(item_vnum)            local values = {                [80014] = 100,                [80015] = 500,                [80016] = 1000,                [80017] = 50            };            return values[item_vnum]        end         when 80014.use or 80015.use or 80016.use or 80017.use begin            local item_vnum = item.get_vnum();            pc.remove_item(item_vnum, 1);             local voucher_value = kuponsm.GetVoucherValue(item_vnum);            query(string.format("UPDATE `account`.`account` SET `cash` = `cash` + %d WHERE `id` = %d;", voucher_value, pc.get_account_id()))            syschat(string.format("Właśnie dodano %d SM na twoje konto!", voucher_value))        end    endend

  • 1 miesiąc temu...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.