Jump to content

Recommended Posts

Hey all , 
well i want to compile quest using pre_qc with make command sh make_locale i get this error 

Spoiler

make_locale: import: not found
make_locale: import: not found
make_locale: 5: Syntax error: word unexpected (expecting ")")

my Pre_qc is 

Spoiler

# -*- coding: 949 -*-
# 말 그대로 pre qc.
# 우리 퀘스트 언어에는 지역 변수만이 있고,
# state나, 심지어 when, function을 아우르는 전역 변수를 사용할 수 없다.
# 전역 '변수'의 사용은 언어의 구조상 사용이 불가하고, 별 의미가 없다.
# 하지만 전역 '상수'의 사용은 퀘스트 view 상으로 꼭 필요하기 때문에,
# fuction setting () 과 같은 함수를 이용하여, 
# 매번 테이블을 생성하여 전역 상수를 흉내내어 사용하였다.
# 이는 매우 비효율적이므로,
# c의 preprocesser와 같이 pre qc를 만들어 전역 상수를 사용할 수 있도록 하였다.
# 퀘스트를 qc로 컴파일 하기 전에 pre_qc.py를 통과하면,
# pre_qc.py는 define 구문을 처리하고, 그 결과를
# pre_qc/filename에 저장한다.

import sys

def split_by_quat (buf):
    p = False
    l = list (buf)
    l.reverse()
    s = ""
    res = []
    while l:
        c = l.pop()
        if c == '"':
            if p == True:
                s += c
                res +=
                s = ""
            else:
                if len (s) != 0:
                    res +=
                s = '"'
            p = not p
        elif c == "\\" and l[0] == '"':
            s += c
            s += l.pop()
        else:
            s += c
    
    if len (s) != 0:
        res +=
    return res

def AddSepMiddleOfElement (l, sep):
    l.reverse()
    new_list = [l.pop()]
    while l:
        new_list.append (sep)
        new_list.append (l.pop())
    return new_list

def my_split_with_seps(s, seps):
    res =
    for sep in seps:
        new_res = []
        for r in res:
            sp = r.split (sep)
            sp = AddSepMiddleOfElement (sp, sep)
            new_res += sp
        res = new_res
    new_res = []
    for r in res:
        if r != '':
            new_res.append (r)
    return new_res

def my_split(s, seps):
    res =
    for sep in seps:
        new_res = []
        for r in res:
            sp = r.split (sep)
            new_res += sp
        res = new_res
    new_res = []
    for r in res:
        if r != '':
            new_res.append (r)
    return new_res
def MultiIndex (list, key):
    l = []
    i = 0
    for s in list:
        if s == key:
            l.append (i)
        i = i + 1
    return l

def Replace (lines, parameter_table, keys):
    r = []
    for string in lines:
        l = split_by_quat (string)
        for s in l:
            if s[0] == '"':
                r +=
            else:
                tokens = my_split_with_seps (s, ["\t", ",", " ", "=", "[", "]",'-','<','>','~','!','.','(',')'])
                for key in keys:
                    try:
                        idices = MultiIndex(tokens, key)
                        for i in idices:
                            tokens = parameter_table[key][0]
                    except:
                        pass
                r += tokens
    return r

def MakeParameterTable(lines, parameter_table, keys):
    names = []
    values = []
    group_names = []
    group_values = []
    idx = 0
    for line in lines:
        idx += 1
        line = line.strip("\n")
        if (-1 != line.find("--")):
            line = line[0:line.find("--")]
        
        tokens = my_split(line, ["\t", ",", " ", "=", "[", "]", "\r", "\n"])
        if len(tokens) == 0:
            continue
        if cmp (tokens[0], "quest") == 0:
            start = idx
            break
        if cmp (tokens[0], "define") == 0:
            if cmp (tokens[1],  "group") == 0:
                group_value = []
                for value in tokens[3:]:
                    if parameter_table.get(value, 0) != 0:
                        value = prameter_table[value]
                    group_value.append (value)
                parameter_table [tokens[2]] = group_value
                keys.append(tokens[2])
            elif len(tokens) > 5:
                print "%d %s" % (idx, "Invalid syntax")
                print "define [name] = [value]"
                print "define group [name] = \"[\"[v0],[v1], ... \"]\""
            else :
                if tokens[1] == "rgd_kill_num":
                    print "mybad"
                value = tokens[2]
                if parameter_table.get(value, 0) != 0:
                    value = prameter_table[value]
                parameter_table[tokens[1]] = [value]
                keys.append (tokens[1])
    parameter_table = dict (zip (group_names, group_values))
    return start

def run(filename):
    parameter_table = dict()
    keys = []

    filename = filename.strip("\n")
    if filename == "":
        return
    lines = open (filename).readlines()
    start = MakeParameterTable (lines, parameter_table, keys)
    if len (keys) == 0:
        return False

    lines = lines [start-1:]
    r = Replace (lines, parameter_table, keys)
    f = file ("pre_qc/"+filename, "w")
    for s in r:
         f.write(s)
    return True
 


my make_locale

Spoiler

#!/usr/local/bin/python
import pre_qc
import os
import sys
os.system('rm -rf object')
os.system('mkdir object')
#os.system('rm -rf pre_qc')
os.system('mkdir pre_qc')
os.system('chgrp quest object')
for line in file('locale_list'):
    r = pre_qc.run (line)
    if r == True:
        filename = 'pre_qc/'+line
    else:
        filename = line

    if os.system('./qc '+filename):
        print 'Error occured on compile ' + line
        os.system('chmod -R 770 object')
        import sys
        sys.exit(-1)

os.system('chmod -R 770 object')

Thanks in Advance

Link to comment
https://metin2.dev/topic/10829-errorcompile-using-pre_qc/
Share on other sites

  • 4 weeks later...
  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Don't use any images from : imgur, turkmmop, freakgamers, inforge, hizliresim... Or your content will be deleted without notice...
Use : https://metin2.download/media/add/

Please use https://metin2.download/ when uploading files smaller than 100MB, otherwise the approval will take longer due to manual upload.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.