g4 를 g5 로 업그레이드 문의

g4 를 g5 로 업그레이드 문의

QA

g4 를 g5 로 업그레이드 문의

본문

타자게임 https://sir.kr/g4_plugin/14522를 사용하려고 하는데요.

나름대로 g4를 g5로 변경하고 DB생성도 안되는 걸

직접 쿼리문 날려서DB도 생성시키고

이리저리 해봤는데

타자를 치면 DB와 연동이 안되네요.

파일이 몇개 되지 않아서 (관련파일은 3-4개정도)

고수님들이 보시면 금방 아실 것 같은데

저는 초보중의 초보라 어떻게 해야 할지 모르겠습니다.

아래에 소스를 올려드리오니

잘 아시는 분이 도와주시면 정말 감사하겠습니다.

---------------------------------------------------------

다음은 ajax_post.php라는 이름의 파일입니다.

<?php
include_once("./_common.php");
include_once("./config.php");

if ($_POST['mb_id'] == "")
    die("-8888");

// 오늘의 횟수를 체크
$sql = " select count(*) as cnt from taja where mb_id = '$_POST[mb_id]' and taja_datetime like '$G5[time_ymd]%' ";
$result = sql_fetch($sql);
if ($result['cnt'] > $today_max) {
    die("-9999");
}

$prnSpeedCur = (int) $_POST['prnSpeedCur'];
$prnAccuracyCur = (int) $_POST['prnAccuracyCur'];

// 최대 타자수를 넘으면 포인트를 기본만 준다. 그러기 위해 저속으로 타자 속도를 변경.
if ($prnSpeedCur >= $max_speed)
    $prnSpeedCur = 10;

taja = $G5['table_prefix'] . "taja";

// 회원의 최고 타자점수를 찾는다
$sql = " select max(taja_point) as max_point from taja where mb_id = '$member[mb_id]' ";

$result = sql_fetch($sql);

// 최고 타자포인트보다 높으면 20 포인트를, 아니면 그냥 포인트 10를 준다
if ($prnSpeedCur > $result['max_point'])
    $point = 20;
else
    $point = 10;

$point = (int) ($point * $prnAccuracyCur / 100);

// function insert_point($mb_id, $point, $content='', $rel_table='', $rel_id='', $rel_action='')
insert_point($_POST[mb_id], $point, "게임 - 타자하기", "taja", "$G5[server_time]", "타자하기");

$sql = " insert into taja set taja_point = '$prnSpeedCur', taja_datetime='$G5[time_ymdhis]', mb_id = '$_POST[mb_id]' ";
sql_query($sql);

echo "$point";
?>

 

다음은 실제 실행파일인 taja2.php입니다.

 

<?php
include_once("./_common.php");
include_once("./config.php");

$G5[title] = "타자연습";
include_once("$G5_path/_head.php");

// 오늘의 횟수를 체크
$sql = " select count(*) as cnt from taja where mb_id = '$member[mb_id]' and taja_datetime like '$G5[time_ymd]%' ";
$result = sql_fetch($sql);
if ($result['cnt'] > $today_max) {
    alert("오늘의 횟수 $today_max 를 초과하셨습니다. 과도한 게임은 서버의 건강에 좋지 않습니다.");
}
?>
<div <? echo isset($G5['body_script']) ? $G5['body_script'] : "";?> <? if (!$member[mb_level] < 9) { ?>oncontextmenu='return false' onderagstart='return false' onselectstart='return false'<? } ?>>
<link type="text/css" rel="stylesheet" media="all" href="css/style.css" />
    <div class="top-summary">
    <h2>타자게임 이란?</h2>
    <div class="content">
        <ul>
            <li>타 프로그램의 타자속도 및 통상적인 타자속도와 다르므로 착오없으시기 바랍니다.</li>
            <li>과도한 게임은 서버의 CPU 건강에 좋지 않습니다. CPU 건강을 위해 하루 <? echo $today_max?> 회로 제한 됩니다.</li>
            <li>타자 정확도의 백분율에 따라 포인트가 차감 됩니다 (예: 80% 정확도*10포인트= 8포인트지급)</li>
            <li>1번 게임에 <? echo $p1?> 포인트, 본인의 기록을 갱신하면 <? echo $p2?> 포인트를 지급 합니다.</li>
            <li>비회원은 포인트가 지급되지 않으며, 비정상적 타수(<? echo $max_speed?> 타 이상)는 기본 포인트만 지급 됩니다.</li>
      <?
        $sql = " select max(taja_point) as max_point from taja";
        $result = sql_fetch($sql);
        $max_taja = $result['max_point'];
        $sql = " select mb_id from taja where taja_point = '$max_taja' ";
        $result = sql_fetch($sql);
        $mb = get_member($result['mb_id']);
        $max_nick = $mb['mb_nick'];
      ?>
        <li><? echo $config[cf_title]?> 최고기록은 <b><? echo $max_nick?></b>님의 <b><? echo number_format($max_taja)?> 타</b> 입니다.</li>
      <? 
      if ($member[mb_id]) { 
            $sql = " select max(taja_point) as max_point from taja where mb_id = '$member[mb_id]' ";
            $result = sql_fetch($sql);
            $max_mb_taja = $result['max_point'];
      ?>
                <li><? echo $member[mb_nick]?>님의 최고기록은 <? echo number_format($max_mb_taja)?> 타 입니다.</li>
            <? } ?>
            </ul>
    </div>
</div>

<body onload="http.setHttp()">
    <div id="httpBox">

        <div id="exString" class="smallBox">타자 연습도 하고~ 타자 왕도 되고~</div>
        <div class="ph"></div>
        <div class="smallBox">
            <input class="textbox" id="httpInputString" onkeypress="return http.keyUp()" onkeyup="http.chkMiss()" onkeydown="http.chkTime()" onpaste="javascript:return false;" type="text">
        </div>

        <div class="ph"></div>
        
        <div id="status" class="smallBox">
            <table width="100%">
                <colgroup><col width="80">
                <col width="">
                <col width="80">
                </colgroup>
                <tbody>
                <tr>
                    <th>정확도</th>
                    <td>
                        <div class="barBgcolor">
                            <div id="barAccuracyCur" class="bar" style="background-color: rgb(51, 204, 255); width: 88%;"></div>
                        </div>
                    </td>
                    <td class="nums">
                        <span id="prnAccuracyCur">88</span>%
                    </td>
                </tr>
                <tr>
                    <th>평균 정확도</th>
                    <td>
                        <div class="barBgcolor">
                            <div id="barAccuracyTotal" class="bar" style="background-color: rgb(51, 153, 204); width: 88%;"></div>
                        </div>
                    </td>
                    <td class="nums">
                        <span id="prnAccuracyTotal">88</span>%
                    </td>
                </tr>
                <tr>
                    <th>현재 속도</th>
                    <td>
                        <div class="barBgcolor">
                            <div id="barSpeedCur" class="bar" style="background-color: rgb(255, 204, 51); width: 11.3%;"></div>
                        </div>
                    </td>
                    <td class="nums">
                        <span id="prnSpeedCur">113</span>타/분
                    </td>
                </tr>
                <tr>
                    <th>최고 속도</th>
                    <td>
                        <div class="barBgcolor">
                            <div id="barSpeedMax" class="bar" style="background-color: rgb(204, 153, 51); width: 11.3%;"></div>
                        </div>
                    </td>
                    <td class="nums">
                        <span id="prnSpeedMax">113</span>타/분
                    </td>
                </tr>
            </tbody></table></div></div>
            </div>

<script type="text/javascript">
//<![CDATA[
        
        var http = new Http();
        
        function Http(){
            this.arrStrs = new Array(
          <?
          for ($i=0; $i < count($typo); $i++) {
              if ( $i != 0 )
                  $strMake .= ",";
             $strMake .= "'". $typo[$i] . "'";
          }
          echo $strMake;
          ?>
      );

            this.exString="";
            this.inputString="";
            this.speedCur=0;
            this.speedMax=0;
            
            this.accuracyTotal=0; //정확도
            this.accuracyCur=0; //정확도

            this.lengthTotal=0; //전체 글자수
            this.lengthTotalTrue=0; //전체 맞은 글자수
            this.lengthCurTrue=0; //현재 맞은 글자수
            
            this.timerInt;
            this.timerStopped=true;
            this.timerSec=0;

            this.setHttp=function(){
                /*** 임의 문장 선택 ***/
                var idx = Math.floor(Math.random(1)*this.arrStrs.length);
                this.exString = this.arrStrs[idx];
                
                /*** 문장/입력 객체 가져오기***/
                var objInputString = this.obj("httpInputString");
                var objExString = this.obj("exString");
                
                /*** 타이머 초기화 ***/
                this.timerStopped=true;
                this.timerInt=window.clearInterval(http.timerInt);
                this.timerSec=0;

                /*** 문장 초기화 ***/
                objExString.innerHTML=this.exString;
                objInputString.value="";
                objInputString.focus();
            }
            this.keyUp=function(){
                var objInputString = this.obj("httpInputString");
                
                this.chkMiss();

                /*** 다른 문장으로 넘김 ***/
                if(this.exString.length<=objInputString.value.length){
                    
                    /*** 정확도 계산/출력 ***/
                    this.lengthTotal += this.exString.length;
                    this.lengthTotalTrue += this.lengthCurTrue;
                    
                    this.accuracyCur = Math.floor(this.lengthCurTrue/this.exString.length*100);
                    this.accuracyTotal = Math.floor(this.lengthTotalTrue/this.lengthTotal*100);
                    this.obj("prnAccuracyCur").innerHTML=this.accuracyCur;
                    this.obj("prnAccuracyTotal").innerHTML=this.accuracyTotal;
                    this.obj("barAccuracyCur").style.width=this.accuracyCur+"%";
                    this.obj("barAccuracyTotal").style.width=this.accuracyTotal+"%";
                    
                    /*** 속도 계산/출력 ***/
                    this.speedCur = Math.floor(this.lengthCurTrue / this.timerSec * 6000);
                    if(this.speedMax<this.speedCur)this.speedMax = this.speedCur;
                    this.obj("prnSpeedCur").innerHTML = this.speedCur;
                    this.obj("prnSpeedMax").innerHTML = this.speedMax;
                    this.obj("barSpeedCur").style.width=this.speedCur/10+"%";
                    this.obj("barSpeedMax").style.width=this.speedMax/10+"%";

          /** 결과를 ajax로 저장 ***/
          $.ajax({
            type: 'POST',
            url: G5_path+'/plugin/taja2/ajax_post.php',
            data: {
                'mb_id': encodeURIComponent('<? echo $member[mb_id]?>'),
                'prnAccuracyCur' : this.obj('prnAccuracyCur').innerHTML,
                'prnSpeedCur' : this.obj('prnSpeedCur').innerHTML
            },
            cache: false,
            async: false,
            success: function(result) {
                    if (result == '-9999') {
                        alert('오늘의 횟수를 초과 하셨습니다')
                        location.href = '../../index.php';
                    } else if (result == '-8888') {
                        alert( ' 회원가입 하시면 포인트 적립이 가능 합니다' );
                    } else {
                        alert( result + ' 포인트를 획득하셨습니다' );
                    }
                }
          });
                    this.setHttp();

                    return false;
                }
                return true;
            }
            this.obj=function(id){
                return document.getElementById(id);
            }
            this.chkMiss=function(){
                var result="";
                this.lengthCurTrue=0;

                var objInputString = this.obj("httpInputString");
                this.inputString = objInputString.value;

                for(var i=0;i<this.exString.length;i++){
                    if(this.exString.substring(i,i+1)!=this.inputString.substring(i,i+1) && i<this.inputString.length)
                        result+="<font color=red>"+this.exString.substring(i,i+1)+"</font>";
                    else{
                        result+=this.exString.substring(i,i+1);
                        this.lengthCurTrue++;
                    }
                }
                var objExString = this.obj("exString");
                objExString.innerHTML=result;
            }
            this.chkTime=function(){
                if(this.timerStopped){
                    this.timerStopped=false;
                    this.timerSec=0;
                    this.timerInt=window.setInterval("http.addSec()",10);
                }
            }
            this.addSec=function(){
                this.timerSec++;
            }
        }

    </script>

<?
include_once("$G5_path/_tail.php");
?>

 

다음은 config.php입니다.

 

<?
// 테이블을 정의
$taja = $G5['table_prefix']."taja";         // 타자게임

// 하루에 할 수 있는 최대 게임 횟수
$today_max = 100;

// 이동할 메뉴가 있다면?
$qstr = "currentId=89";

// 최대타수
$max_speed = 800;

$p1 = 10;
$p2 = 50;

// 타자문구
$typo = array(
                //라이센스입니다. 삭제하시면안됩니다.
                "버스팡은 대리점에서 공구 수수료를 받지 않는다",
                "최신폰은 버스팡에서 사는게 맞다",
                "네이버에 버스팡 검색! 호갱탈출 버스팡 커뮤니티",
                //라이센스 끝
                "출석체크 연승연무연패시 사은품지급됩니다.",
                "호갱이란 대리점에서 폰을 사는 영혼없는 그들을 뜻한다.",
                "스나이퍼종족은 자신보다 싼 업체를 신고하여 판매중지을 일컫는 종족",
                "버스팡",
                "뽐뿌를 가지 않는 이유는 수수료를 받기 때문이다.",
                "네이버카페 가입하고 버스팡 활동하자",
                "버스팡에서 중고폰을 매각하면 고장 및 손실 등은 감안해준다.",
                "이벤트 당첨시 관리자에게 주소이름연락처를 보내면 사은품이 온다.",
                "회원가입은 무료이며 개인정보를 받지 않아서 좋다.",
                "공구 신청할때는 민증 앞뒷장 복사본이 있으면 된다.",
                "가난도 비단 가난",
                "가래장부는 본고을 좌수도 몰라본다",
                "가랑잎이 솔잎더러 바스락거린다고 한다",
                "고기 새끼 하나 보고 가마솥 부신다",
                "그 아버지에 그 아들",
                "급하면 바늘허리에 실 매어 쓸까",
                "나 많은 말이 콩 마다할까",
                "나는 새에게 여기 앉아라 저기 앉아라 할 수 없다",
                "누구네 제사날 기다리다가 사흘 굶은 거지 굶어 죽었다",
                "눈을 떠도 코 베어 간다",
                "눈이 아무리 밝아도 제 코는 안 보인다",
                "달기는 엿집 할머니 손가락이라",
                "달아나는 노루 보고 얻은 토끼를 놓았다",
                "두 손뼉이 맞아야 소리가 난다",
                "뒷집 짓고 앞집 뜯어 내란다",
                "아가리 마구 난 창구멍인가",
                "아는 걸 보니 소강절의 똥구멍에 움막 짓고 살았겠다",
                "아직 이도 나기 전에 갈비를 뜯는다",
                "자기 늙은 것은 몰라도 남 자라는 것은 안다",
                "자식을 낳기보다 부모 되기가 더 어렵다",
                "자식을 보기엔 아비만 한 눈이 없고 제자를 보기엔 스승만 한 눈이 없다",
                "잔치는 잘 먹은 놈 잘 차렸다 하고 못 먹은 놈 못 차렸다 한다",
                "잘 싸우는 장수에게는 내버릴 병사가 없고 글 잘 쓰는 사람에게는 내버릴 글자가 없다",
                "칼치가 제 꼬리 베 먹는다",
                "추어주면 엉뎅이 나가는 줄 모른다",
                "자식 과년하면 부모가 반중매쟁이 된다",
                "잔치 보러 왔다가 초상 본다" 
        );
?>
 

이 질문에 댓글 쓰기 :

답변 1

답변을 작성하시기 전에 로그인 해주세요.
전체 123,644 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT