Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Różnica w sposobie zapisywania


Najlepsza odpowiedź GwynBleidD, 07.12.2013 22:42

Ogólnie oba sposoby są złe. Prawidłowy byłby taki:

new usermoney = cs_get_user_money(id)
if(usermoney+kasa>16000)
    cs_set_user_money(id, 16000, 0)
else
    cs_set_user_money(id, usermoney+kasa, 0)
1 optymalizacja (w stosunku do obu wersji z 1 postu): używamy cs_get_user_money tylko raz. Dostęp do cs_get_user_money poprzez funkcję trwa ciut dłużej, gdy się często to wykonuje, ma to pewne znaczenie.

2 optymalizacja (w stosunku do 1 wersji z 1 postu): używamy cs_set_user_money tylko raz.

Można to zapisać też tak, jeśli lubisz:
new usermoney = cs_get_user_money(id)
cs_set_user_money(id, usermoney+kasa>16000?16000:usermoney+kasa, 0)
Lub nawet tak:

cs_set_user_money(id, min(16000, cs_get_user_money(id)+kasa), 0)
W tej wersji nie potrzebujemy zapisywać chwilowo wartości kasy użytkownika w zmiennej, cs_get_user_money zostanie wywołana tylko raz. Przejdź do postu


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.12.2013 18:11

Cześć,

czy jest jakaś różnica między tym, że napisze sobie w kodzie coś takiego:

cs_set_user_money(id, cs_get_user_money(id)+kasa, 1)
    if(cs_get_user_money(id) > 16000) cs_set_user_money(id, 16000, 0)

a takiego?

cs_get_user_money(id) > 16000 ? cs_set_user_money(id, 16000, 0) : cs_set_user_money(id, cs_get_user_money(id)+kasa, 1)

(usunąłem if'a, moje niedopatrzenie przy kopiowaniu 1 funkcji :D)

 

Chodzi mi raczej o obciążenie serwera, szybkość funkcji etc.

Osobiście wolę używać drugiego sposobu, ale może to właśnie źle jest?


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 07.12.2013 19:11

To drugie nie zadziała. Kiedy używasz "x ? y : z", zapomnij o zapisie "if".


  • +
  • -
  • 1

#3 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 07.12.2013 19:11

Cześć,

czy jest jakaś różnica między tym, że napisze sobie w kodzie coś takiego:

cs_set_user_money(id, cs_get_user_money(id)+kasa, 1)
    if(cs_get_user_money(id) > 16000) cs_set_user_money(id, 16000, 0)

a takiego?

if(cs_get_user_money(id) > 16000 ? cs_set_user_money(id, 16000, 0) : cs_set_user_money(id, cs_get_user_money(id)+kasa, 1))

Chodzi mi raczej o obciążenie serwera, szybkość funkcji etc.

Osobiście wolę używać drugiego sposobu, ale może to właśnie źle jest?

Drugie jest w ogóle źle zapisane, ale wiadomo o co Ci chodzi.

 

No jest drobna różnica kod drugi wygląda tak:

if(cs_get_user_money(id) > 16000)
cs_set_user_money(id, 16000, 0)
else
cs_set_user_money(id, cs_get_user_money(id)+kasa, 1))

Porównaj z pierwszym ;)


Droso (07.12.2013 19:13):
Jakbyś nie widział różnicy to w drugim kasa może być większa niż 16000 jeśli kasa jest równa np. 15999, a dodajesz np. 2 :)

Ogólnie to po co ustawiać 16000 jak więcej nie da się mieć - chyba, że oddzielnym pluginem z natywami?

  • +
  • -
  • 2

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#4 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.12.2013 19:22

Ee mój błąd, w tym drugim nie patrzcie na ifa, zapomniałem usunąć :P

 

Ok widzę różnicę. A 16k+ można mieć w 1 rundzie, w nowej się zawsze zmieni na 16k, sprawdzane bardzo dawno temu na codmodach/diablo modach i itemach na odradzanie :P

 

A coś takiego?

cs_get_user_money(id)+kasa > 16000 ? cs_set_user_money(id, 16000, 0) : cs_set_user_money(id, cs_get_user_money(id)+kasa, 1)

ps. kasa = random_num(100,6000)

 

ps2. Nadal nie otrzymałem odpowiedzi, bo chyba wiecie o co mi chodzi w zapisie, ale nie przeczytaliście pytania :P


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#5 Droso

    Dawniej HubertTM

  • Support Team

Reputacja: 1 291
Godlike

  • Postów:2 371
  • Steam:steam
  • Imię:Hubert
  • Lokalizacja:Wrocław
Offline

Napisano 07.12.2013 22:14

Lepiej używać pierwszego sposobu - bo 'money' nie przekroczy nigdy 16k.

 

Drugi sposób też jest ok - tylko bardziej takiego sposobu używa się winnych sytuacjach ;)


  • +
  • -
  • 2

Piszę pluginy pod: AMX MOD X oraz SOURCE MOD!

Na zlecenie i bez zlecenia zresztą też!


#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 07.12.2013 22:42   Najlepsza odpowiedź

Ogólnie oba sposoby są złe. Prawidłowy byłby taki:

new usermoney = cs_get_user_money(id)
if(usermoney+kasa>16000)
    cs_set_user_money(id, 16000, 0)
else
    cs_set_user_money(id, usermoney+kasa, 0)
1 optymalizacja (w stosunku do obu wersji z 1 postu): używamy cs_get_user_money tylko raz. Dostęp do cs_get_user_money poprzez funkcję trwa ciut dłużej, gdy się często to wykonuje, ma to pewne znaczenie.

2 optymalizacja (w stosunku do 1 wersji z 1 postu): używamy cs_set_user_money tylko raz.

Można to zapisać też tak, jeśli lubisz:
new usermoney = cs_get_user_money(id)
cs_set_user_money(id, usermoney+kasa>16000?16000:usermoney+kasa, 0)
Lub nawet tak:

cs_set_user_money(id, min(16000, cs_get_user_money(id)+kasa), 0)
W tej wersji nie potrzebujemy zapisywać chwilowo wartości kasy użytkownika w zmiennej, cs_get_user_money zostanie wywołana tylko raz.
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych