Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Shoutbox i obiekty vars


Rekomendowane odpowiedzi

Witam,

Chciałem dla Shoutbox dodać pewną sugestię. Chodzi o to, że jeżeli użytkownik ma jakiekolwiek % zwiększa mu o 100% czas Flood. Oto kod:

 function _check_warn_status()
{
/* Alowed to use the shoutbox? */
if ( $this->ipsclass->member['id'] AND $this->ipsclass->member['g_shoutbox_use'] )
{
/* Init */
$time = 0;
$max = $this->ipsclass->vars['warn_max'];
$warn_level = $this->ipsclass->member['warn_level'];
$percents = intval( $warn_level * 100 / $max );
$count = intval( $percents / 10 );

if( $percents != 0 )
{
/* Count % points! */
for( $i = 0; $i < $count; $i++ )
{
$time += $this->ipsclass->vars['shoutbox_flood_limit'];
}

/* Add time to our member. */
$this->ipsclass->vars['shoutbox_flood_limit'] += $time;
}
}
}

Dlaczego globalny obiekt nie działa na takich userów? Przecież ten obiekt zostaje zmieniony na czas działania skryptu dla danego użytkownika. Wiele razy widziałem jak w IP.Board np. nadpisuję się zmienną systemową dotyczącą czasu nieaktywności.

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj,

OK, działa już. Znalazłem powód - warn_level. On nie jest ładowany w load_member() :-) Oto poprawny kod:

 function _check_warn_status()
{
/* Alowed to use the shoutbox? */
if ( $this->ipsclass->member['id'] AND $this->ipsclass->member['g_shoutbox_use'] )
{
/* Init */
$flood = ( $this->ipsclass->vars['shoutbox_flood_limit'] ) ? $this->ipsclass->vars['shoutbox_flood_limit'] : 10;
$time = 0;
$max = $this->ipsclass->vars['warn_max'];
$member = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'warn_level', 'from' => 'members', 'where' => 'id='.$this->ipsclass->member['id'] ) );
$percents = intval( $member['warn_level'] * 100 / $max );
$count = intval( $percents / 10 );

if( $percents != 0 )
{
/* Count % points! */
for( $i = 0; $i < $count; $i++ )
{
$time += $flood;
}

/* Add time to our member! */
$this->ipsclass->vars['shoutbox_flood_limit'] = $time;
}
}
}

PS. Zapodaj pomysł dla twórców IP.Shoutbox i z pełną możliwością wykorzystaj mój kod!

Pozdrawiam,

Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

OK, działa już. Znalazłem powód - warn_level. On nie jest ładowany w load_member() :-) Oto poprawny kod:

To go tam załaduj i nie dodawaj dodatkowego zapytania (!). ;)

Twój kod jest poprawny, ale jak widać prostym sposobem można go zoptymalizować.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Witaj,

Posłuchałem Cię i dodałem. Dziękuje za uwagę, myślałem o tym, ale poprawiłem. Pojawił się nam ze znajomym inny problem. Kiedy użytkownik nie ma %, to nic się nie dzieje, ma normalny Flooding. Ale kiedy są np. 2 osoby z % Flooding zmienia się zależnie od ich aktywności na SB. Czy da się zablokować obiekt na jednego użytkownika? Czy zostaje jedynie pole w bazie danych i sprawdzanie tam wszystkiego?

Pozdrawiam,

Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Jak nie ma % to ma warn_level na 0, a tutaj:

$percents = intval( $member['warn_level'] * 100 / $max );

Zero razy coś równa się zero. ;)

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

 function _check_warn_status()
{
/* Alowed to use the shoutbox? */
if ( $this->ipsclass->member['id'] == '392' AND $this->ipsclass->member['g_shoutbox_use'] )
{
/* Init */
$flood = ( $this->ipsclass->vars['shoutbox_flood_limit'] ) ? $this->ipsclass->vars['shoutbox_flood_limit'] : 10;
$time = 0;
$max = $this->ipsclass->vars['warn_max'];
$warn_level = $this->ipsclass->member['warn_level'];
$percents = intval( $warn_level ) ? intval( $warn_level * 100 / $max ) : 0;

if( $percents != 0 )
{
/* Prepare iteration! BugFix: 10% and intvaled to 0. */
$count = ( $warn_level != 1 ) ? intval( $percents / 10 ) : 1;

/* Count % points! */
for( $i = 0; $i <= $count; $i++ )
{
$time += $flood;
}

/* Add time to our member! */
$this->ipsclass->vars['shoutbox_flood_limit'] += $time;
}
}
}

Wiele poprawiłem problem w tym, że zmienna $this->ipsclass->vars['shoutbox_flood_limit'], niekiedy aktualizuje się z innymi osobami. Da się temu zaradzić czy muszę robić Flood per użytkowników?

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Wszelkie dane z vars są zapisane w cache. Nie rozumiem jak się mogą te wartości zmieniać skoro nie zmieniasz tego w ACP.. ;)

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Wszelkie dane z vars są zapisane w cache. Nie rozumiem jak się mogą te wartości zmieniać skoro nie zmieniasz tego w ACP.. ;)

Witaj,

Wiesz, teoretycznie jeżeli użytkownik nie ma ostrzeżeń to nie ma możliwości zmiany ustawienia. Ale jeżeli ma ktoś ostrzeżenia to zmieniam siłą woli ustawienia. Bo jako czas floodingu podaję ilość sekund pomnożą w zależności od ilości ostrzeżeń. Możliwe, że cache się mieszają kiedy jest 2 użytkowników z ostrzeżeniami i aktualizuje podczas odświeżania. Próbowałem, ale tylko chwilkę z polami klasy, aby dziedziczyły czas i jeżeli istnieje ten czas to niech najpierw w ajax.php brał pod uwagę odziedziczone pole. Mógłbyś sprawdzić mój tok myślenia? Chyba, że masz lepszą propozycję rozwiązania tej sytuacji?

PS. Wiem już! Kiedy użytkownik z % wejdzie naliczy mu czas za to. Dopóki nikt inny nie zaktualizuje tego wartość dla tego użytkownika będzie poprawna. Ale jeżeli w międzyczasie wejdzie kolejna to wartość znowu się zmieni dla dwóch osób. Chyba jedynym wyjściem z tej sytuacji to odziedziczone pole i po nim w skrypcie sprawdzać poprawność?

Pozdrawiam,

Largo

Edytowane przez Largo

Jeżeli Ci pomogłem, nie zapomnij proszę o kliknięciu - add.png

Możesz liczyć na moją pomoc z zakresu: PHP5, MySQL, JavaScript i Ajax | W trakcie nauki CSS i xHTML!

W sprawie pomocy z zakresu IP.Board służę pomocą w dziale Zaawansowane programowanie IP.Board

Proszę o nie wysyłanie próśb PW o prywatną pomoc - pomagam JEDYNIE na forum lub na zlecenie!

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.