1.12.7 i starsze - Quack! Bone 1.0.0
Polaczek - 12-08-2010, 20:43
Linki poprawione
[ Dodano: 12-08-2010, 22:54 ]
W 30% realizuję prośbę użytkownika emiloski94.
Dlaczego 30%? Nie ma jeszcze:
- Limitu na 2 razy dziennie
- Nie ma automatycznego dodania do grupy
- Wiadomość widoczna tylko dla tego użytkownika, który ją wysłał
Ale zawsze zarys jakiś jest.
Nie działa z AJAX'owym SB!
shoutbox_view.php
znajdź:
Kod: | $msg_id = $db->sql_nextid();
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . str_replace("\'", "''", $msg) . "', '" . CR_TIME . "')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
} |
zamień na:
Kod: | if($msg === 'losuj') {
$msg_id = $db->sql_nextid();
$quack_bone_min = 0; /* Minimalna wartość */
$quack_bone_max = 10; /* Maksymalna wartość */
$quack_bone_ok = 5; /* Wartość, po której wylosowaniu otrzymuje się dostęp do grupy */
$quack_bone_rand = rand($quack_bone_min, $quack_bone_max);
if($quack_bone_rand === $quack_bone_ok) {
$quack_bone_gen_msg = 'Gratulacje! Udało Ci się wylosować rangę V.I.P.';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} else {
$quack_bone_gen_msg = 'Niestety nie udało się wylosować rangi V.I.P.';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
}
} else {
$msg_id = $db->sql_nextid();
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . str_replace("\'", "''", $msg) . "', '" . CR_TIME . "')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} |
I gotowe.
Konfiguracja przez 3 zmienne:
Kod: | $quack_bone_min = 0; /* Minimalna wartość */
$quack_bone_max = 10; /* Maksymalna wartość */
$quack_bone_ok = 5; /* Wartość, po której wylosowaniu otrzymuje się dostęp do grupy */ |
Im większy przedział wartości (mam na myśli dwie pierwsze zmienne) tym szanse na wylosowanie danej liczby są mniejsze.
Istnieje możliwość zdefiniowania kilku wartości, po których wylosowaniu otrzymuje się dostęp do grupy zmieniając:
na
Kod: | $quack_bone_ok = array(5,10,15,20); |
Nic jednak nie zostało przetestowane.
sebul00000 - 13-08-2010, 03:22
W instrukcji jest mały błąd A mianowicie teraz jest
Kod: | $quack_bone_gen_msg = $userdata['username'] . ' rzucił(a) ścmi i wylosował(a) ' . $quack_bone_rand . '!'; |
a powinno być
Kod: | $quack_bone_gen_msg = $userdata['username'] . ' rzucił(a) kośćmi i wylosował(a) ' . $quack_bone_rand . '!'; |
Polaczek - 13-08-2010, 13:47
sebul00000, dzięki poprawiam już.
sebul00000 - 13-08-2010, 14:59
Hmmm... trochę nie za bardzo tego ogarniam, więc mam pytanie Jak zrobić ograniczenie do tego losowania? Tak jak to jest w tym losowaniu vipa. Zauważyłem, że trzeba zapytanie dodać, ale nie bardzo wiem który jeszcze kod trzeba dodać...
Polaczek - 13-08-2010, 15:09
SQL:
Kod: | ALTER TABLE `phpbb_users`
ADD `quack_bone_date` INT NOT NULL |
shoutbox_view.php
Kod: | if($msg === 'losuj') {
$sql = "SELECT quack_bone_date FROM " . USERS_TABLE . " WHERE user_id = " . $userdata['user_id'];
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
if(time() - 3600 * 24 > $row['quack_bone_date']) {
$sql = "UPDATE " . USERS_TABLE . "
SET quack_bone_date = " . CR_TIME . "
WHERE user_id = " . $userdata['user_id'];
if(!($result == $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not update Quack! Bone V.I.P. row', '', __LINE__, __FILE__, $sql);
}
$msg_id = $db->sql_nextid();
$quack_bone_min = 0; /* Minimalna wartość */
$quack_bone_max = 10; /* Maksymalna wartość */
$quack_bone_rand = rand($quack_bone_min, $quack_bone_max);
$quack_bone_gen_msg = $userdata['username'] . ' rzucił(a) koścmi i wylosował(a) ' . $quack_bone_rand . '!';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} else {
$msg_id = $db->sql_nextid();
$quack_bone_gen_msg = 'Co za dużo to niezdrowo. :) Możesz losować tylko raz na 24 godziny.';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
}
} else {
$msg_id = $db->sql_nextid();
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . str_replace("\'", "''", $msg) . "', '" . CR_TIME . "')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} |
sebul00000 - 13-08-2010, 18:02
No i gitara Dzięki.
Wyszła optymalizacja do Quack! Bone V.I.P. 1.0.1, więc teraz jak dać ten anty flood tutaj? Tak samo jak w tamtej poprawce? Czy trochę inaczej?
Polaczek - 13-08-2010, 20:02
o tak:
Kod: | if($msg === 'losuj') {
if(time() - 3600 * 24 > $userdata['quack_bone_date']) {
$sql = "UPDATE " . USERS_TABLE . "
SET quack_bone_date = " . CR_TIME . "
WHERE user_id = " . $userdata['user_id'];
if(!($result == $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not update Quack! Bone V.I.P. row', '', __LINE__, __FILE__, $sql);
}
$msg_id = $db->sql_nextid();
$quack_bone_min = 0; /* Minimalna wartość */
$quack_bone_max = 10; /* Maksymalna wartość */
$quack_bone_rand = rand($quack_bone_min, $quack_bone_max);
$quack_bone_gen_msg = $userdata['username'] . ' rzucił(a) koścmi i wylosował(a) ' . $quack_bone_rand . '!';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} else {
$msg_id = $db->sql_nextid();
$quack_bone_gen_msg = 'Co za dużo to niezdrowo. :) Możesz losować tylko raz na 24 godziny.';
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . $quack_bone_gen_msg . "', '" . CR_TIME . "')";
if(!($result = $db->sql_query($sql))) {
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
}
} else {
$msg_id = $db->sql_nextid();
$sql = "INSERT INTO " . SHOUTBOX_TABLE . "
VALUES($msg_id, $sb_user_id, '" . str_replace("\'", "''", $msg) . "', '" . CR_TIME . "')";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not insert shoutbox message', '', __LINE__, __FILE__, $sql);
}
} |
Misiek [PL] - 18-08-2010, 19:43
Polaczek, możesz napisać instrukcje do finalnej wersji ShoutBox'a w jQuery? (ta wersja gdzie jest limit użycia losuj na dzień).
sebul00000 - 31-08-2010, 12:08
Mam taki pomysł co do tego ograniczenia dziennego (czy jakiego tam się chce), równie dobrze mógłbym napisać to w temacie z vipem, ale tutaj też może być. Dało radę by zrobić, że zamiast tego tekstu "już nie możesz losować" był by licznik ile zostało sekund/godzin/dni do końca ograniczenia? Też wydaje mi się, że dobrym pomysłem była by jakaś dodatkowa tabelka z wynikami, kto ile wylosował z np. top10 userów z największym wynikiem, no i żeby była jakaś możliwość ustawienia kasacji wyników automatycznie co jakiś czas, albo ręcznie (natychmiastowo po naciśnięciu jakiegoś przycisku).
Polaczek - 31-08-2010, 12:48
sebul00000, mogę zrobić przy generowaniu wiadomości obliczenie ile zostało czasu.
Co do top10 to będzie kolejne zapytanie do bazy, a wiec może trochę obciążyć. Ale trochę, zobaczymy
Kasacja byłaby wtedy możliwa przez przycisk dla administratora w SB (przy odśwież etc)
sebul00000 - 23-09-2010, 21:23
Nie to że jestem jakiś natarczywy, itp. ale czy trwają jeszcze jakieś prace nad tym modem? I czy będzie ta tabelka o której pisałem?
Jeszcze jest inny pomysł co do tego losowania... bo teraz można go łatwo podrobić, więc czy można zrobić jakoś tak, że gdy ktoś wpisałby do sb tekst który wyświetla się po losowaniu, to wtedy taki wpis nie wyświetlił by się, albo coś w tym stylu. Wiem, że pewnie wtedy sb stanie się bardziej obciążone, ale przecież zawsze będzie można to sobie usunąć.
Polaczek - 23-09-2010, 22:39
sebul00000, nie mam czasu kiedy tym się zająć.
Co do Twojego pomysłu:
shoutbox_view.php
Kod: | } else {
$msg_id = $db->sql_nextid(); |
dodaj przed:
Kod: | } elseif(preg_match('rzucił(a) kośćmi i wylosował(a)', $msg)) {
$msg_id = $db->sql_nextid();
$sql = "insert into {$table_prefix}shoutbox values($msg_id, $sb_user_id, 'Nie fałszuj wiadomości!', '" . CR_TIME . "')";
if(!$result = $db->sql_query($sql)) {
message_die(GENERAL_ERROR, 'Nie mogę wysłać wiadomości do ShoutBoxa');
} |
sebul00000 - 23-09-2010, 23:57
Próbowałem na wszelkie sposoby i coś nie działa to... albo ja coś nie tak robię, albo może to po czasie dopiero zadziała?
Polaczek - 24-09-2010, 21:02
a spróbuj tak zrobić ten preg_match():
Kod: | preg_match('/kośćmi i wylosował/', $msg) |
sebul00000 - 24-09-2010, 21:29
hmmm też nie działa... Ten kod daje przed pierwszym
Kod: | } else {
$msg_id = $db->sql_nextid(); |
Bo jak daje przed drugim to wyskakuje błąd.
|
|
|