Otóż mój problem polega na tym, iż chcę zmodyfikować moduł do mojej strony internetowej tak, by po wykonaniu operacji tego modułu został dodatkowo dodany wpis do kolumny w wybranej tabeli. Jest to skrypt resetu postaci w grze MuOnline, gdzie to postać po osiągnięciu maksymalnego poziomu może wykonać tzw reset czyli zresetować statystyki + bonus statystyk za reset. Chciałbym by ten skrypt dodawał "kredyty" (waluta do webshopa, gdzie gracz może sobie kupić przedmioty) za każdym razem kiedy zrobi reset- a konkretnie 25 kredytów za reset.
Oto część kodu modułu reset_character, o którym mowa:
Kod
$load_reset_settings = simplexml_load_file('engine/config_mods/reset_character_settings.xml');
$active = trim($load_reset_settings->active);
if ($active == '0') {
echo msg('0', text_sorry_feature_disabled);
} else {
$reset_level = trim($load_reset_settings->level);
$reset_zen = trim($load_reset_settings->zen);
$reset_points = trim($load_reset_settings->bpoints);
$reset_points_formula = trim($load_reset_settings->bpoints_formula);
$reset_clear_skills = trim($load_reset_settings->clear_skills);
$reset_clear_inv = trim($load_reset_settings->clear_inv);
$reset_stats = trim($load_reset_settings->reset_stats);
$reset_limit = trim($load_reset_settings->reset_limit);
if (isset($_GET['rid'])) {
echo '<div style="margin-top: 10px;">';
$id = safe_input($_GET['rid'], '');
if (empty($id) || !is_numeric($id)) {
header('Location: ' . $core_run_script . '');
exit();
} else {
if (character_and_account($id, $user_auth_id) === false) {
header('Location: ' . $core_run_script . '');
exit();
} else {
if (account_online($user_auth_id) === true) {
echo msg('0', text_resetcharacter_t1);
} else {
$select_req = $core_db->Execute("select clevel,money,resetcount,leveluppoint from character where mu_id=? and accountid=?", array(
$id,
$user_auth_id
));
if ($select_req->fields[0] < $reset_level) {
echo msg('0', str_replace("{levels}", ($reset_level - $select_req->fields[0]), text_resetcharacter_t2));
$no_reset = 1;
}
if ($select_req->fields[1] < $reset_zen) {
echo msg('0', str_replace("{zen}", number_format($reset_zen - $select_req->fields[1]), text_resetcharacter_t3));
$no_reset = 1;
}
if ($select_req->fields[2] >= $reset_limit) {
echo msg('0', str_replace("{resets_limit}", number_format($reset_limit), text_resetcharacter_t4));
$no_reset = 1;
}
if ($no_reset != '1') {
$new_money = $select_req->fields[1] - $reset_zen;
switch ($reset_points_formula) {
case '0':
$new_bpoints = ($select_req->fields[3] + $reset_points);
break;
case '1':
$new_bpoints = ($reset_points * ($select_req->fields[2] + 1));
break;
}
switch ($reset_stats) {
case '1':
if ($reset_clear_inv == '1' and $reset_clear_skills == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140',[inventory]=CONVERT(varbinary(1080), null),[magiclist]=CONVERT(varbinary(180), null) where mu_id=?";
} elseif ($reset_clear_inv == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140',[inventory]=CONVERT(varbinary(1080), null) where mu_id=?";
} elseif ($reset_clear_skills == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140',[magiclist]=CONVERT(varbinary(180), null) where mu_id=?";
} elseif ($reset_clear_inv == '0' and $reset_clear_skills == '0') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140' where mu_id=?";
}
break;
case '0':
if ($reset_clear_inv == '1' and $reset_clear_skills == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[inventory]=CONVERT(varbinary(1080), null),[magiclist]=CONVERT(varbinary(180), null) where mu_id=?";
} elseif ($reset_clear_inv == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[inventory]=CONVERT(varbinary(1080), null) where mu_id=?";
} elseif ($reset_clear_skills == '1') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[magiclist]=CONVERT(varbinary(180), null) where mu_id=?";
} elseif ($reset_clear_inv == '0' and $reset_clear_skills == '0') {
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=? where mu_id=?";
}
break;
}
Ten kod już czyta jedną tabelę i ją aktualizuje ale chciałbym dodać by czytał i aktualizował jeszcze jedną.
Tabela z kredytami nosi nazwę MEMB_CREDITS a kolumna, którą ma aktualizować o 25 za każdy reset to kolumna "credits". Wszystko byłoby fajnie gdyby nie to, że skrypt musi wiedzieć komu dodać te kredyty a kolumna, która to definiuje to "memb___id" - ta sama kolumna jest w tabeli MEMB_STAT, gdzie każde konto ma swoje id.
Kod, który znalazłem w necie, zmodyfikowałem i próbuję dodać to:
Kod
Update character set [resetcount]=(resetcount+1),[clevel]='1',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140' where mu_id=?; ---- to jest bazowo w module a ja dodaję jedynie kolejne polecenie:
UPDATE MEMB_CREDITS SET [credits]=(credits+25) FROM MEMB_CREDITS JOIN MEMB_STAT ON MEMB_CREDITS.memb___id = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI WHERE [ConnectStat]='0'";
UPDATE MEMB_CREDITS SET [credits]=(credits+25) FROM MEMB_CREDITS JOIN MEMB_STAT ON MEMB_CREDITS.memb___id = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI WHERE [ConnectStat]='0'";
Proszę o wskazówki, co w kodzie dodanym przeze mnie jest nie tak, bo cały skrypt się nie uruchamia.
EDIT:
Ok udało mi się doprowadzić skrypt do ładu i się wykonuje, ale.. z tym kodem dodaje kredyty nie tylko dla konta, na którym postać się resetuje ale także innym. Co teraz?
Tutaj kod który dodałem:
Kod
$reset_formula = "Update character set [resetcount]=(resetcount+1),[clevel]='400',[experience]='0',[leveluppoint]=?,[money]=?,[strength]='25',[dexterity]='25',[vitality]='25',[energy]='25',[Leadership]='25',[MapNumber]='0',[MapPosX]='150',[MapPosY]='140' where mu_id=?;";
$reset_formula.= "UPDATE MEMB_CREDITS SET [credits]=(credits+25) FROM MEMB_CREDITS JOIN MEMB_STAT ON MEMB_CREDITS.memb___id = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI WHERE ConnectStat='0';";
$reset_formula.= "UPDATE MEMB_CREDITS SET [credits]=(credits+25) FROM MEMB_CREDITS JOIN MEMB_STAT ON MEMB_CREDITS.memb___id = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI WHERE ConnectStat='0';";
W tym przypadku kredyt dostaje konto, na którym jest reset i jeszcze jedno, które nie bierze w niczym udziału(?).
Proszę o pomoc.