Помоги найти ошибку

Тема в разделе "Как сделать...", создана пользователем linpc, 1 сен 2013.

  1. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Добрый день, уважаемые форумчане.
    Переписываю онлайн игру, делая под себя, возник такой вопрос при одевании любой она одевается несколько раз. Именно во второй слот, где должен быть щит.
    Вызов функции:
    PHP:
    <input type=button class=invbut onclick="location=\'main.php?get_id=57&act=1&wid='.$ITEM['id_item'].'&vcode='.scode().'\'" value="Надеть" />
    $ITEM['id_item']-ID вещи
    Код вызова:
    PHP:
    if (isset($_GET['get_id']) && intval($_GET['get_id']) == '57' and in_array($_GET['vcode'],$_SESSION['secur'])){ //-- Работа с вещами
        
    save_hp();
            
    $items mysql_fetch_assoc(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype  WHERE id_item='".$_GET['wid']."' and pl_id='".$player['id']."' LIMIT 1;"));
    switch(isset(
    $_GET['act'])){
            case
    '1':
                        if(
    $items['slot']==and $items['2w']==and mysql_num_rows(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE curslot='3' and pl_id='".$player['id']."'"))>0){
            
    $items['slot']=13;
        }
        if(
    $items['slot']==14 and mysql_num_rows(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE curslot='14' and pl_id='".$player['id']."'"))>0){
            
    $items['slot']=15;
        }
        if(
    $plstt[3]==and $items['slot']==5){
            
    $act=-1;
            
    $items['slot']=5;
        }
        if(
    $plstt[3]>and $items['slot']==and mysql_num_rows(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE curslot='5' and pl_id='".$player['id']."'"))>0){
            
    $items['slot']=6;
        }
        if(
    $plstt[3]>and $items['slot']==and mysql_num_rows(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE curslot='6' and pl_id='".$player['id']."'"))>0){
            
    $items['slot']=7;
        }
        if(
    mysql_num_rows(mysql_query("SELECT invent.*, items.* FROM items INNER JOIN invent ON items.id = invent.protype WHERE curslot='".$items['slot']."' and pl_id='".$player['id']."'"))>0){
            
    $act=2;
        }
                        break;
    }
    updateslot($_GET['act'],$_GET['wid'],$player['id'],$items['slot']);
    calcstat($player['id']);
    testcompl();

            }
    Использующие функции:
    PHP:
    function testcompl() {
        
    $pl player();
        
    $st allparam($pl);
        
    $testcompl mysql_query("SELECT invent.*, items.* FROM `items` INNER JOIN `invent` ON `items`.id = `invent`.protype WHERE `used`='1' and `pl_id`='".$pl[id]."' ORDER BY slot");
        while (
    $row mysql_fetch_assoc($testcompl)) {
            
    $it explode("|"$row['i_need']);
            if (
    $row['slot'] == 5) {
                
    $el+=1;
            }
            if (
    $row['slot'] == and $el $st[3]) {
                
    updateslot(0$row['id_item'], $pl['id'], 0);
                continue;
            }
            foreach (
    $it as $value) {
                
    $stat explode("@"$value);
                if (
    $stat[0] == 72) {
                    
    $stat[1] = $row['level'];
                }
                if (
    $st[$stat[0]] < $stat[1]) {
                    if (
    $row['slot'] == 4) {
                        
    $st[3] = 0;
                    }
    $s[] = "id_item='".$row['id_item']."'";
                }
            }
        }
        if (
    $s != '') {
            
    $s implode(" or "$s);
            
    mysql_query("UPDATE invent SET `used`='0', `curslot`='0' WHERE '".$s."' and `pl_id`='".$pl[id]."'");
            
    calcstat($pl[id]);
            
    testcompl();
        }
        if (
    $pl['fight'] == 0) {
            
    save_hp();
        }
        
    calchp();
    }

    function 
    updateslot($act$item$pid$slot) { //--Одевание вещей
        
    switch ($act) {
            case 
    0:
                
    mysql_query("UPDATE invent SET used='0', curslot='0' WHERE id_item='" $item "' and pl_id='" $pid "'");
                break;
            case 
    1:
                
    mysql_query("UPDATE invent SET used='1', curslot='" $slot "' WHERE id_item='" $item "' and pl_id='" $pid "'");
                break;
            case 
    2:
                
    mysql_query("UPDATE invent SET used='0', curslot='0' WHERE curslot='$slot' and pl_id='" $pid "'");
                
    mysql_query("UPDATE invent SET used='1', curslot='" $slot "' WHERE id_item='" $item "' and pl_id='" $pid "'");
                break;
            case 
    3:
                
    mysql_query("UPDATE `invent` SET `used`='0', `curslot`='0' WHERE pl_id='" $pid "'");
                break;
        }
    }
    Помогите найти ошибку
     
  2. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    Одевается несколько раз = 1 вещь попадает в несколько слотов?
    Слоту щита какой ID-шник соответствует?

    p.s. Код, конечно.. слегка неудобен для восприятия..
     
    Шумадан нравится это.
  3. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    1 вещь попадает всегда в один слот 13
     
  4. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    1 конкретная вещь? или любая 1 вещь падает в 13 слот? Если 13 слот занят, эта вещь попадает в другой слот? Она должна попасть не в 13 слот?

    p.s. 13 слот только в 1 месте заполняется.. когда он изначально 3 и 2w (что это?) выставлено.
     
    Шумадан нравится это.
  5. z!m3r

    z!m3r

    Регистр.:
    17 июн 2006
    Сообщения:
    240
    Симпатии:
    213
    Добрый вечер, дико извиняюсь что не по теме, не хотел дублировать темы ошибок.

    Нуждаюсь в помоще, установил скипт, все работает кроме 1 раздела
    выдает ошибку
    Код:
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ']' in /home/public_html/gmu/include/Template.inc(370) : eval()'d code on line 1
    в строке 370
    Код:
            // выполняем шаблон
            echo trim (eval (' ?>' . $compileTmpl . '<?php '));
    подскажите, как решить проблему? Спасибо
     
  6. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    Синтаксическая ошибка, смотри что выводит $compileTmpl
     
    z!m3r нравится это.
  7. z!m3r

    z!m3r

    Регистр.:
    17 июн 2006
    Сообщения:
    240
    Симпатии:
    213
    в программировании нуб, но поиском во всем движке, нашел такие вот строки.
    Код:
       Search "$compileTmpl" (11 hits in 1 file) /home/public_html/gmu/include/Template.inc 
    
        Line 336:        $compileTmpl = '';
        Line 340:            $compileTmpl .= '<!-- START TEMPLATE  "' . $tmplName . '" GROUP "' . $tmplGroup . '" -->';
        Line 345:            $compileTmpl .= $this->_compiledCode[ $tmplGroup ][ $tmplName ];
        Line 347:        } elseif (! $this->_isNeedRecompile ($tmplName, $tmplGroup) && $compileTmpl = fs_getFileContent ($this->_compileBaseDir . $tmplGroup . '/' . $tmplName . '.' . $this->_tmplExtension)) {
        Line 349:            $this->_compiledCode[ $tmplGroup ][ $tmplName ] = $compileTmpl;
        Line 353:            $compileTmpl .= $this->_compileTmpl ($tmplName, $tmplGroup);
        Line 359:            $compileTmpl .= '<!-- STOP TEMPLATE  "' . $tmplName . '" GROUP "' . $tmplGroup . '" -->';
        Line 363:        if (! $debugInfo || strpos ($compileTmpl, '<!DOCTYPE ') > 0) {
        Line 365:            $compileTmpl = preg_replace ('#^(<!--[\sa-zA-Z"]*?-->)+?#sui', '', $compileTmpl);
        Line 365:            $compileTmpl = preg_replace ('#^(<!--[\sa-zA-Z"]*?-->)+?#sui', '', $compileTmpl);
        Line 370:        echo trim (eval (' ?>' . $compileTmpl . '<?php '));
    и все это поиск выдал в одном файле Template.inc
    /home/public_html/gmu/include/Template.inc
     
  8. linpc

    linpc

    Регистр.:
    6 апр 2012
    Сообщения:
    178
    Симпатии:
    52
    честно не вижу, возможно лучше меня Вам дадут консультацию.
     
  9. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    а посути, что бы там $compileTmpl не значил, строка, которая будет идти на евал
    Код:
    ?>
    какойто там код
    <?php 
    а должна быть
    Код:
    <?php
    какойто там код
    ?>
    тоесть
    Код:
            // выполняем шаблон
            echo trim (eval (' <?php ' . $compileTmpl . ' ?>'));
     
    linpc и z!m3r нравится это.
  10. z!m3r

    z!m3r

    Регистр.:
    17 июн 2006
    Сообщения:
    240
    Симпатии:
    213
    Спасибо. Попробовал заменить, как вы указали, теперь выдает такую ошибку и ничего больше
    Код:
    Parse error: syntax error, unexpected '<' in /home/public_html/gmu/kernel/include/Template.inc(370) : eval()'d code on line 1