Beispiel #1
0
def submit_game_settings_by_excel(request):
    data = {}
    config_name = str(request.GET.get('config_name'))
    subarea_default = request.POST.get('subarea_default')
    data['config_name'] = config_name

    str_subareas_confname = config_list.get_configname_by_subarea('subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        subareas_conf = Config.create(str_subareas_confname)
    subareas_conf_dict = eval(subareas_conf.data)
    return_subareas_conf = []
    for key in sorted(subareas_conf_dict.keys()):
        return_subareas_conf.append((key, subareas_conf_dict[key]))

    if not config_name in canuse_config_list:
        data['config_value'] = make_config(request, config_name)
    else:
        x_func = eval(config_name.capitalize() +'()')
        files = request.FILES.get('xls', None)
        if not files:
            data['config_value'] = 'Miss files!'
        else:
            data['config_value'] = x_func.make_config(files, config_name)
    str_config_description = config_list.get_description(config_name)
    data['config_title'] = str_config_description
    data['subareas_conf'] = return_subareas_conf
    data['saved'] = False
    data['submit_game_settings_by_excel'] = True
    data['subarea_default'] = subarea_default

    return 'admin/game_setting.html', data
Beispiel #2
0
def sync_conf_to_subarea(request):
    config_name = request.GET.get('config_name')
    current_subarea = request.GET.get('current_subarea')
    subarea_list = request.GET.getlist('subarea_list')

    current_config_data = Config.get(config_name + '_' + current_subarea).data
    for sa in subarea_list:
        c = Config.get(config_name + '_' + sa)
        if not c:
            c = Config.create(config_name + '_' + sa)
        c.data = current_config_data
        c.put()


    str_subareas_confname = config_list.get_configname_by_subarea('subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        subareas_conf = Config.create(str_subareas_confname)
    subareas_conf_dict = eval(subareas_conf.data)
    subarea_id_name_list = []
    for s in subarea_list:
        subarea_id_name_list += [ u'分区' + s + ': ' + subareas_conf_dict[s] ]


    data = {
            'config_name': config_name,
            'config_description': config_list.get_description(config_name),
            'subarea': current_subarea,
            'subarea_id_name_list': subarea_id_name_list,
            }
    return 'admin/sync_subarea_done.html', data
Beispiel #3
0
def sync_conf_to_subarea(request):
    config_name = request.GET.get('config_name')
    current_subarea = request.GET.get('current_subarea')
    subarea_list = request.GET.getlist('subarea_list')

    current_config_data = Config.get(config_name + '_' + current_subarea).data
    for sa in subarea_list:
        c = Config.get(config_name + '_' + sa)
        if not c:
            c = Config.create(config_name + '_' + sa)
        c.data = current_config_data
        c.put()

    str_subareas_confname = config_list.get_configname_by_subarea(
        'subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        subareas_conf = Config.create(str_subareas_confname)
    subareas_conf_dict = eval(subareas_conf.data)
    subarea_id_name_list = []
    for s in subarea_list:
        subarea_id_name_list += [u'分区' + s + ': ' + subareas_conf_dict[s]]

    data = {
        'config_name': config_name,
        'config_description': config_list.get_description(config_name),
        'subarea': current_subarea,
        'subarea_id_name_list': subarea_id_name_list,
    }
    return 'admin/sync_subarea_done.html', data
Beispiel #4
0
 def __init__(self):
     str_subareas_confname = config_list.get_configname_by_subarea('subareas_conf', '1')
     subareas_conf = Config.get(str_subareas_confname)
     if not subareas_conf:
         subareas_conf = Config.create(subareas_conf)
     self.configs[str_subareas_confname] = eval(subareas_conf.data)
     self.subareas_confname = str_subareas_confname
def check_missing_monster():
    ''' Check various config, to see, if there is any monster_id,
        not in monster_config

        ##_##_##_monster
    '''

    #check '1' for now, do other subarea later

    monster_related_configs = [ 'normal_dungeon_config', 
            ]

    good_monster_numbers = [mid[:-8] for mid in eval(Config.get('monster_config_1').data)]
    if not good_monster_numbers:
        return {}

    wrong_dict = {}

    for config_name in monster_related_configs:
        #print '#### missing_monster: config_name=', config_name

        #config = eval('game_config.' + config_name )
        config_obj = Config.get(config_name + '_1' )
        if not config_obj:
            continue

        tmp = config_obj.data.split('_monster')
        if len(tmp) <= 1:
            continue

        #print '#### total _monster=', len(tmp)-1

        #special python technique to speed up, 
        #since now slow on 32-bit ubuntu 12.04
        #list(set(list)) to get unique, C is faster then Python

        unique_monster_num = []
        for i in range(len(tmp)-1):
            if tmp[i+1][0] not in ('"', "'"):
                continue
            iQuote = tmp[i].rfind( tmp[i+1][0] )
            if iQuote >= 0:
                monster_num = tmp[i][iQuote+1:]
                unique_monster_num += [monster_num]

        del tmp #free large memory ?

        unique_monster_num = set(unique_monster_num)  #unique
        #print '#### unique _monster=', len(unique_monster_num)

        wrong_monster_numbers = [ m_num for m_num in unique_monster_num 
                if m_num not in good_monster_numbers 
                    and m_num.replace('_', '').isdigit() ]


        if wrong_monster_numbers:
            wrong_dict[config_name] = wrong_monster_numbers

    return wrong_dict
Beispiel #6
0
 def __init__(self):
     str_subareas_confname = config_list.get_configname_by_subarea(
         'subareas_conf', '1')
     subareas_conf = Config.get(str_subareas_confname)
     if not subareas_conf:
         subareas_conf = Config.create(subareas_conf)
     self.configs[str_subareas_confname] = eval(subareas_conf.data)
     self.subareas_confname = str_subareas_confname
Beispiel #7
0
def generate_backup():
    ''' 一天只备份一次, 在最早的一次发生(任何)配置变更后。

    每天的第一次配置改动后,触发 config reload_all,备份一次改动后的所有区的内容.

    每天第一次备份全部分区的全部配置时,可能会要花些时间,
    但实际测试显示是很快的, 基本在1秒内全备份完成。 

    如果 redis 重启了,要从mongo中调出所有的配置,再备份,则可能略花点时间。
    只要不是redis重启,实测速度基本可以接受。
    '''

    today_str = str( datetime.datetime.now().date() )

    #need put into redis, or when program restarted, it will re-backup
    conf_backup_date = RedisTool.get('conf_backup_date')  #is a string

    if today_str == conf_backup_date:
        return

    #conf_with_multi_area = [ c['name'] for c in g_lConfig if c['use_subarea'] ]

    subarea_conf_obj = Config.get('subareas_conf_1')
    if not subarea_conf_obj:
        subarea_conf_obj = Config.create('subareas_conf_1')
    subarea_conf = eval(subarea_conf_obj.data)
    subarea_ids = subarea_conf.keys()

#   print '#### in backup, subarea_config.data=', subarea_conf
#   print '#### in backup, subarea_ids=', subarea_ids

    subarea_ids.sort() #put 1 as first

    for area_id in subarea_ids:    
        all_config_name_list = get_game_config_name_list(area_id)
        for conf_name in all_config_name_list:
            full_conf_name = conf_name + '_' + area_id
            print '##### in config backup,', full_conf_name, '@', datetime.datetime.now()

            #need backup conf_obj.data, which has comments "# ... "
            conf_obj = Config.get(full_conf_name)
            if not conf_obj:
                continue

            #conf_bk = Config.get(full_conf_name + '_' + today_str)
            #if conf_bk is None:
            conf_bk = Config.create(full_conf_name + '_' + today_str)
            conf_bk.data = conf_obj.data
            conf_bk.put()
            
            
            #delete old backups
            old_conf_obj = Config.get(full_conf_name + '_' + conf_backup_date)
            if not old_conf_obj:
                continue
            old_conf_obj.delete()

    RedisTool.set('conf_backup_date', today_str) # str
Beispiel #8
0
def generate_backup():
    ''' 一天只备份一次, 在最早的一次发生(任何)配置变更后。

    每天的第一次配置改动后,触发 config reload_all,备份一次改动后的所有区的内容.

    每天第一次备份全部分区的全部配置时,可能会要花些时间,
    但实际测试显示是很快的, 基本在1秒内全备份完成。 

    如果 redis 重启了,要从mongo中调出所有的配置,再备份,则可能略花点时间。
    只要不是redis重启,实测速度基本可以接受。
    '''

    today_str = str(datetime.datetime.now().date())

    #need put into redis, or when program restarted, it will re-backup
    conf_backup_date = RedisTool.get('conf_backup_date')  #is a string

    if today_str == conf_backup_date:
        return

    #conf_with_multi_area = [ c['name'] for c in g_lConfig if c['use_subarea'] ]

    subarea_conf_obj = Config.get('subareas_conf_1')
    if not subarea_conf_obj:
        subarea_conf_obj = Config.create('subareas_conf_1')
    subarea_conf = eval(subarea_conf_obj.data)
    subarea_ids = subarea_conf.keys()

    #   print '#### in backup, subarea_config.data=', subarea_conf
    #   print '#### in backup, subarea_ids=', subarea_ids

    subarea_ids.sort()  #put 1 as first

    for area_id in subarea_ids:
        all_config_name_list = get_game_config_name_list(area_id)
        for conf_name in all_config_name_list:
            full_conf_name = conf_name + '_' + area_id
            print '##### in config backup,', full_conf_name, '@', datetime.datetime.now(
            )

            #need backup conf_obj.data, which has comments "# ... "
            conf_obj = Config.get(full_conf_name)
            if not conf_obj:
                continue

            #conf_bk = Config.get(full_conf_name + '_' + today_str)
            #if conf_bk is None:
            conf_bk = Config.create(full_conf_name + '_' + today_str)
            conf_bk.data = conf_obj.data
            conf_bk.put()

            #delete old backups
            old_conf_obj = Config.get(full_conf_name + '_' + conf_backup_date)
            if not old_conf_obj:
                continue
            old_conf_obj.delete()

    RedisTool.set('conf_backup_date', today_str)  # str
Beispiel #9
0
 def get_game_config(self, config_name, subarea):
     #config_name, 配置名; subarea, 分区号
     if not subarea:
         subarea = '1'
     subarea_config_name = self._get_subarea_config_name(config_name, subarea)        
     if subarea_config_name not in self.configs:
         config_obj = Config.get(subarea_config_name) or Config.create(subarea_config_name)
         config_dict = eval(config_obj.data)
         if not config_dict and subarea != '1':
             # 若此分区当前配置为空, 尝试读取 1 区 配置
             return self.get_game_config(config_name, '1')
         self.configs[subarea_config_name] = config_dict
     return self.configs[subarea_config_name]
Beispiel #10
0
 def get_game_config(self, config_name, subarea):
     #config_name, 配置名; subarea, 分区号
     if not subarea:
         subarea = '1'
     subarea_config_name = self._get_subarea_config_name(
         config_name, subarea)
     if subarea_config_name not in self.configs:
         config_obj = Config.get(subarea_config_name) or Config.create(
             subarea_config_name)
         config_dict = eval(config_obj.data)
         if not config_dict and subarea != '1':
             # 若此分区当前配置为空, 尝试读取 1 区 配置
             return self.get_game_config(config_name, '1')
         self.configs[subarea_config_name] = config_dict
     return self.configs[subarea_config_name]
Beispiel #11
0
def show_config_backup(config_name='', subarea='1', date_str=''):
    if not subarea:
        subarea = '1'
    conf= Config.get(config_name + '_' + subarea + '_' + date_str)
    if not conf or not conf.data:
        return ''
    return conf.data
Beispiel #12
0
def show_config_backup(config_name='', subarea='1', date_str=''):
    if not subarea:
        subarea = '1'
    conf = Config.get(config_name + '_' + subarea + '_' + date_str)
    if not conf or not conf.data:
        return ''
    return conf.data
Beispiel #13
0
def config_md5sum(request):
    config_name = request.GET.get('config_name')
    subarea = request.GET.get('subarea')

    config_value = None
    if config_name:
        sconfig_name = config_list.get_configname_by_subarea(config_name,subarea)
        config = Config.get(sconfig_name)
        if config:
            config_value = config.data
    if config_value:
        return HttpResponse(hashlib.md5( config_value.strip().encode('utf-8') ).hexdigest())
Beispiel #14
0
 def reload_config(self):
     #print '#### self.configs.keys()=', self.configs.keys()
     #so only backup, when config changed, need reload. Backup only once 
     #a day.
     generate_backup()   #每天的第一次配置改动前,备份一次改动前的内容。
     if self.reload_time > config_version.get_config_version('1', config_name="ALL_config"):
         return
     for subarea_config_name in self.configs:
         if not subarea_config_name.startswith('ruby_skill_params_config'):
             conf_obj = Config.get(subarea_config_name)
             if conf_obj:
                 self.configs[subarea_config_name] = eval(conf_obj.data)
     self.reload_time = int(time.time())
Beispiel #15
0
def config_diff(request):
    '''
    config difference (most time, same config in different areas)
    config1, area1, config2, area2 are required parameters
    '''

    config1 = request.GET.get('config1')
    area1 = request.GET.get('area1')
    config2 = request.GET.get('config2')
    area2 = request.GET.get('area2')

    conf1_obj = Config.get(config1 + '_' + area1)
    if not conf1_obj:
        return HttpResponse(config1 + ', ' + area1 + u'区, 不存在.')

    conf2_obj = Config.get(config2 + '_' + area2)
    if not conf2_obj:
        return HttpResponse(config2 + ', ' + area2 + u'区, 不存在.')

    diffs = diff_2_str(conf1_obj.data, conf2_obj.data)
    #   print '#### diffs="' + diffs + '", total length=', len(diffs)

    return HttpResponse(diffs, content_type="text/plain; charset=UTF8")
Beispiel #16
0
 def reload_config(self):
     #print '#### self.configs.keys()=', self.configs.keys()
     #so only backup, when config changed, need reload. Backup only once
     #a day.
     generate_backup()  #每天的第一次配置改动前,备份一次改动前的内容。
     if self.reload_time > config_version.get_config_version(
             '1', config_name="ALL_config"):
         return
     for subarea_config_name in self.configs:
         if not subarea_config_name.startswith('ruby_skill_params_config'):
             conf_obj = Config.get(subarea_config_name)
             if conf_obj:
                 self.configs[subarea_config_name] = eval(conf_obj.data)
     self.reload_time = int(time.time())
Beispiel #17
0
def config_md5sum(request):
    config_name = request.GET.get('config_name')
    subarea = request.GET.get('subarea')

    config_value = None
    if config_name:
        sconfig_name = config_list.get_configname_by_subarea(
            config_name, subarea)
        config = Config.get(sconfig_name)
        if config:
            config_value = config.data
    if config_value:
        return HttpResponse(
            hashlib.md5(config_value.strip().encode('utf-8')).hexdigest())
Beispiel #18
0
def config_diff(request):
    '''
    config difference (most time, same config in different areas)
    config1, area1, config2, area2 are required parameters
    '''

    config1 = request.GET.get('config1')
    area1 = request.GET.get('area1')
    config2 = request.GET.get('config2')
    area2 = request.GET.get('area2')

    conf1_obj = Config.get(config1 + '_' + area1)
    if not conf1_obj:
        return HttpResponse(config1 + ', ' +  area1 + u'区, 不存在.')

    conf2_obj = Config.get(config2 + '_' + area2)
    if not conf2_obj:
        return HttpResponse(config2 + ', ' +  area2 + u'区, 不存在.')

    diffs = diff_2_str(conf1_obj.data, conf2_obj.data)
#   print '#### diffs="' + diffs + '", total length=', len(diffs)
    
    return HttpResponse( diffs, content_type="text/plain; charset=UTF8" )
Beispiel #19
0
def setting_backup_diff(request):
    ''' config backup difference from today's config
    '''
    config_name = request.GET.get('conf')
    subarea = request.GET.get('area')
    date_str = request.GET.get('date')

    bk_data = show_config_backup(config_name=config_name,
            subarea=subarea, date_str=date_str)
#   if bk_contents in ('', None):
#       return HttpResponse('Backup of ' + date_str + 'does not exist.')

    conf = Config.get(config_name + '_' + subarea)
    if not conf:
        return HttpResponse(config_name + ' does not exist.')

    diffs = diff_2_str(conf.data, bk_data)
#   print '#### diffs="' + diffs + '", total length=', len(diffs)
    
    return HttpResponse( diffs, content_type="text/plain; charset=UTF8" )
Beispiel #20
0
def setting_backup_diff(request):
    ''' config backup difference from today's config
    '''
    config_name = request.GET.get('conf')
    subarea = request.GET.get('area')
    date_str = request.GET.get('date')

    bk_data = show_config_backup(config_name=config_name,
                                 subarea=subarea,
                                 date_str=date_str)
    #   if bk_contents in ('', None):
    #       return HttpResponse('Backup of ' + date_str + 'does not exist.')

    conf = Config.get(config_name + '_' + subarea)
    if not conf:
        return HttpResponse(config_name + ' does not exist.')

    diffs = diff_2_str(conf.data, bk_data)
    #   print '#### diffs="' + diffs + '", total length=', len(diffs)

    return HttpResponse(diffs, content_type="text/plain; charset=UTF8")
def check_missing_monster():
    ''' Check various config, to see, if there is any monster_id,
        not in monster_config

        ##_##_##_monster
    '''

    #check '1' for now, do other subarea later

    monster_related_configs = [
        'normal_dungeon_config',
    ]

    good_monster_numbers = [
        mid[:-8] for mid in eval(Config.get('monster_config_1').data)
    ]
    if not good_monster_numbers:
        return {}

    wrong_dict = {}

    for config_name in monster_related_configs:
        #print '#### missing_monster: config_name=', config_name

        #config = eval('game_config.' + config_name )
        config_obj = Config.get(config_name + '_1')
        if not config_obj:
            continue

        tmp = config_obj.data.split('_monster')
        if len(tmp) <= 1:
            continue

        #print '#### total _monster=', len(tmp)-1

        #special python technique to speed up,
        #since now slow on 32-bit ubuntu 12.04
        #list(set(list)) to get unique, C is faster then Python

        unique_monster_num = []
        for i in range(len(tmp) - 1):
            if tmp[i + 1][0] not in ('"', "'"):
                continue
            iQuote = tmp[i].rfind(tmp[i + 1][0])
            if iQuote >= 0:
                monster_num = tmp[i][iQuote + 1:]
                unique_monster_num += [monster_num]

        del tmp  #free large memory ?

        unique_monster_num = set(unique_monster_num)  #unique
        #print '#### unique _monster=', len(unique_monster_num)

        wrong_monster_numbers = [
            m_num for m_num in unique_monster_num
            if m_num not in good_monster_numbers
            and m_num.replace('_', '').isdigit()
        ]

        if wrong_monster_numbers:
            wrong_dict[config_name] = wrong_monster_numbers

    return wrong_dict
Beispiel #22
0
import apps.settings as settings

from django.core.management import setup_environ
setup_environ(settings)

this_config_name = ''
config_path = ''
assert len(sys.argv) >= 2, 'no config_file'
config_path = os.path.join(cur_dir, sys.argv[1])
assert os.path.exists(config_path), '!!!Can find COnfigfile!!'
if len(sys.argv) == 3:
    this_config_name = sys.argv[2]

from apps.models.config import Config

config_dict = ast.literal_eval(open(config_path, "r").read())

for sconfig_name in config_dict:
    print "*Find config ", sconfig_name, "*This_config", this_config_name
    if this_config_name and this_config_name != sconfig_name:
        continue
    print "** load  :", sconfig_name
    config = Config.get(sconfig_name)
    if not config:
        config = Config.create(sconfig_name)
    config_value = config_dict[sconfig_name]
    config.data = config_value
    config.put()

print "****** load config  Success!!"
def check_missing_card():
    ''' Check various config, to see, if there is any card_id,
        not in card_config

        ####_card
        'drop_card_lv'

    '''
    #check '1' for now, do other subarea later


    card_related_configs = ['gacha_config', \
         'monster_config', 'user_init_config',
         ]

    good_card_numbers = [
        cid[:-5] for cid in eval(Config.get('card_config_1').data)
    ]

    #something wrong
    if good_card_numbers == []:
        return {}

    wrong_dict = {}

    for config_name in card_related_configs:
        #print '#### missing_card: config_name=', config_name
        config_obj = Config.get(config_name + '_1')
        if not config_obj:
            continue

        tmp = config_obj.data.split('_card')
        if len(tmp) <= 1:
            continue

        #print '#### total _card=', len(tmp)-1

        #special python technique to speed up,
        #since now slow on 32-bit ubuntu 12.04
        #list(set(list)) to get unique, C is faster then Python

        unique_card_num = []
        for i in range(len(tmp) - 1):
            if tmp[i + 1][0] not in ('"', "'"):
                continue
            iQuote = tmp[i].rfind(tmp[i + 1][0])
            if iQuote >= 0:
                card_num = tmp[i][iQuote + 1:]
                unique_card_num += [card_num]

        del tmp  #free large memory ?
        unique_card_num = set(unique_card_num)  #unique
        #print '#### unique _card=', len(unique_card_num)

        wrong_card_numbers = [
            c_num for c_num in unique_card_num
            if c_num not in good_card_numbers and c_num.isdigit()
        ]

        if wrong_card_numbers:
            wrong_dict[config_name] = wrong_card_numbers

    return wrong_dict
Beispiel #24
0
from  django.core.management import setup_environ
setup_environ(settings)


this_config_name = ''
config_path = ''
assert len(sys.argv) >= 2, 'no config_file'
config_path = os.path.join(cur_dir, sys.argv[1])
assert os.path.exists(config_path), '!!!Can find COnfigfile!!'
if len(sys.argv) == 3:
	this_config_name = sys.argv[2]


from apps.models.config import Config

config_dict = ast.literal_eval(open(config_path, "r").read())

for sconfig_name in config_dict:
    print "*Find config ", sconfig_name,  "*This_config", this_config_name
    if this_config_name and this_config_name != sconfig_name:
        continue
    print "** load  :", sconfig_name
    config = Config.get(sconfig_name)
    if not config:
        config = Config.create(sconfig_name)
    config_value = config_dict[sconfig_name]
    config.data = config_value
    config.put()

print "****** load config  Success!!"
Beispiel #25
0
#-*- coding: utf-8 -*-
import importlib
import datetime, traceback, os
import ast
import sys
sys.path.insert(0, '/data/sites/op/qz')
import apps.settings_dev as settings
from django.core.management import setup_environ
setup_environ(settings)
from apps.models.config import Config
from apps.oclib import app
from apps.oclib.storage import StorageRedis
#op_redis_store = StorageRedis([{'host':'10.200.55.32','port':6394,'db':'0'}])
from apps.config import config_list

config_f = open('config_file.txt', 'w')
d = {}
for info in config_list.g_lConfig:
    config_name = info['name'] + '_1'
    c = Config.get(config_name)
    print config_name, len(c.data)
    d[config_name] = c.data if c else {}
config_f.write(str(d))
Beispiel #26
0
#-*- coding: utf-8 -*-
import importlib
import datetime,traceback,os
import ast
import sys
sys.path.insert(0, '/data/sites/op/qz')
import apps.settings_dev as settings
from django.core.management import setup_environ
setup_environ(settings)
from apps.models.config import Config
from apps.oclib import app
from apps.oclib.storage import StorageRedis
#op_redis_store = StorageRedis([{'host':'10.200.55.32','port':6394,'db':'0'}])
from apps.config import config_list

config_f = open('config_file.txt', 'w')
d = {}
for info in config_list.g_lConfig:
    config_name = info['name'] + '_1'
    c = Config.get(config_name)
    print config_name, len(c.data)
    d[config_name] = c.data if c else {}
config_f.write(str(d))
Beispiel #27
0
def game_setting(request,request_info=None, return_dict=False):
    """游戏配置
    """
    if not request_info:
        request_info = request.REQUEST
    data = {}
    subarea = request_info.get('subarea')
    categories = config_list.get_conflist_by_subarea(subarea)
    config_name = request_info.get('config_name')
    saved = False

    sconfig_name = config_list.get_configname_by_subarea(config_name,subarea)
    str_subareas_confname = config_list.get_configname_by_subarea('subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        subareas_conf = Config.create(str_subareas_confname)

    subareas_conf_dict = eval(subareas_conf.data)

    return_subareas_conf = []
    for key in sorted(subareas_conf_dict.keys()):
        return_subareas_conf.append((key, subareas_conf_dict[key]))
    data['config_title'] = config_list.get_description(config_name)
    data['config_title'] += '__%s' % config_name
    if sconfig_name:
        #修改具体的一个
        config = Config.get(sconfig_name)
        if not config:
            config = Config.create(sconfig_name)
        config_value = config.data
        if request.method == 'POST':
            before_config = config_value
            if not return_dict:
                config_md5sum_from_web = request.POST['config_md5sum'] #before this update
                if type( config_value ) == unicode:
                    config_md5sum_calculated = hashlib.md5( config_value.strip().encode('utf-8') ).hexdigest()
                else:
                    config_md5sum_calculated = hashlib.md5( config_value.strip() ).hexdigest()

                if config_md5sum_from_web !=  config_md5sum_calculated:
                    return HttpResponse('<script>alert("配置内容, 已被别人修改过. 请重新刷新,再作修改。");</script>')

            config_value = request_info['config_value'].encode('utf-8').replace('\r','').strip()
            config.data = config_value
            if config_name != 'ruby_skill_params_config':
                verify_info = verify_game_config(config_name, eval(config_value))
            # 通过ruby的配置  简化技能的配置
            else:
                verify_info = _config_skill_params_by_ruby(config_value, request)
            if verify_info != '':
                return HttpResponse('<script>alert("%s");history.go(-1)</script>' % verify_info)
            config.put()
            config_update(subarea, config_name)

            moderator = apps.admin.auth.get_moderator_by_request(request)
            username,date,subarea,configname,REMOTE_ADDR = moderator.username,datetime.datetime.now(),subarea, data['config_title'], request.META["REMOTE_ADDR"]
            UpdateConfRecord.record(username, date, subarea, configname, REMOTE_ADDR)
            saved = True

            
            log_data = {}
            diff_result = diff_2_str(config_value, before_config)
            if diff_result:
                log_data['diff'] = diff_result
                log_data['subarea'] = subarea
                log_data['config_name'] = config_name
                log_data['before_config'] = before_config
                log_data['after_config'] = config_value
                log_data["username"] =  moderator.username
                ConfigHistory.set_log(**log_data)


            #多分区,保存配置后,要允许运营同学 同步到其它分区。
            config_use_subarea = False 
            for g in config_list.g_lConfig:
                if g['name'] == config_name and g['use_subarea']:
                    config_use_subarea = True 
                    break

            if config_use_subarea:
                #本配置, 不同的分区,有差别, 要同步到其它分区
                same_contents_subareas = {}
                diff_contents_subareas = {}
                for other_subarea_id, other_subarea_name in subareas_conf_dict.items():
                    if other_subarea_id == subarea:
                        continue

                    other_subarea = Config.get(config_name + '_' + other_subarea_id)
                    if not other_subarea:
                        other_subarea = Config.create(config_name + '_' + other_subarea_id)
                    #print '#### other_subarea.data=', other_subarea.data.encode('utf8')
                    #print '#### config_value=', config_value
                    #print '#### other_subarea.data == config_value ', other_subarea.data == config_value
                    if other_subarea.data == config_value or other_subarea.data.encode('utf8') == config_value:
                        same_contents_subareas[other_subarea_id] = other_subarea_name
                    else:
                        diff_contents_subareas[other_subarea_id] = other_subarea_name

                data = {'subarea': subarea, 'config_name': config_name}
                data['config_description'] = config_list.get_description(config_name)
                data['subarea_name'] = subareas_conf_dict[subarea]
                data['same_contents_subareas'] = same_contents_subareas
                data['diff_contents_subareas'] = diff_contents_subareas
                return 'admin/sync_conf_to_subarea.html', data

    else:
        #显示所有
        config_value = None
    data['subarea'] = subarea
    data['subareas_conf'] = return_subareas_conf
    #data['g_l_config'] = g_l_config
    data['categories'] = categories
    data['config_name'] = config_name
    data['config_value'] = beautify_config_value (config_value)
    data['saved'] = saved
    data['updateconfrecord'] = UpdateConfRecord.infos()['infos_list']
    if return_dict:
        return data

    data['config_error'] = ''
    if subarea == '1' and not config_name:
        data['config_error'] = check_config_error()

    #print '#### data[config_error]=', data['config_error']

    if config_value:
        if type( config_value ) == unicode:
            config_md5sum_calculated = hashlib.md5( config_value.strip().encode('utf-8') ).hexdigest()
        else:
            config_md5sum_calculated = hashlib.md5( config_value.strip() ).hexdigest()
        data['config_md5sum'] = config_md5sum_calculated

    #data['app_name'] = settings.APP_NAME
    #data['environment_type'] = settings.ENVIRONMENT_TYPE

    #show config backup
    conf_backup_date = RedisTool.get('conf_backup_date')

    data['conf_backup_date'] = conf_backup_date
    data['backup_diff_from_now'] = {}
    data['changed_from_today'] = []    #from today's early morning backup

    if config_name: #display one specific config (in certain subarea)
        old_conf_data = show_config_backup(config_name=config_name, 
               subarea=subarea, date_str=conf_backup_date)

        if old_conf_data in ('', None): #never backed up yet
            data['backup_diff_from_now'] = ''
        elif Config.get(config_name + '_' + subarea):
            if old_conf_data == Config.get(config_name + '_' + subarea).data:
                data['backup_diff_from_now'] = ''
            else:
                data['backup_diff_from_now'] = 'Yes'

    else: #display overview of all config
      if subarea:
        for conf_name in config_list.get_game_config_name_list(subarea=subarea):
            conf_obj = Config.get(conf_name + '_' + subarea)
            if not conf_obj:
                continue

            morning_conf_data = show_config_backup( config_name=conf_name, 
                                subarea=subarea, date_str=conf_backup_date)
            if morning_conf_data:   #if '', i.e. not exist/backed up yet, 
                                    #don't display
                if conf_obj.data != morning_conf_data:
                    data['changed_from_today'] += [
                         '<a href="/admin/game_setting/?config_name=' + 
                         conf_name + '&subarea=' + subarea + '">' + conf_name + '(' + subarea + ')</a>' ]
        data['changed_from_today'] = ', '.join(data['changed_from_today'])

    return 'admin/game_setting.html', data
Beispiel #28
0
def game_setting(request, request_info=None, return_dict=False):
    """游戏配置
    """
    if not request_info:
        request_info = request.REQUEST
    data = {}
    subarea = request_info.get('subarea')
    categories = config_list.get_conflist_by_subarea(subarea)
    config_name = request_info.get('config_name')
    saved = False

    sconfig_name = config_list.get_configname_by_subarea(config_name, subarea)
    str_subareas_confname = config_list.get_configname_by_subarea(
        'subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        subareas_conf = Config.create(str_subareas_confname)

    subareas_conf_dict = eval(subareas_conf.data)

    return_subareas_conf = []
    for key in sorted(subareas_conf_dict.keys()):
        return_subareas_conf.append((key, subareas_conf_dict[key]))
    data['config_title'] = config_list.get_description(config_name)
    data['config_title'] += '__%s' % config_name
    if sconfig_name:
        #修改具体的一个
        config = Config.get(sconfig_name)
        if not config:
            config = Config.create(sconfig_name)
        config_value = config.data
        if request.method == 'POST':
            before_config = config_value
            if not return_dict:
                config_md5sum_from_web = request.POST[
                    'config_md5sum']  #before this update
                if type(config_value) == unicode:
                    config_md5sum_calculated = hashlib.md5(
                        config_value.strip().encode('utf-8')).hexdigest()
                else:
                    config_md5sum_calculated = hashlib.md5(
                        config_value.strip()).hexdigest()

                if config_md5sum_from_web != config_md5sum_calculated:
                    return HttpResponse(
                        '<script>alert("配置内容, 已被别人修改过. 请重新刷新,再作修改。");</script>'
                    )

            config_value = request_info['config_value'].encode(
                'utf-8').replace('\r', '').strip()
            config.data = config_value
            if config_name != 'ruby_skill_params_config':
                verify_info = verify_game_config(config_name,
                                                 eval(config_value))
            # 通过ruby的配置  简化技能的配置
            else:
                verify_info = _config_skill_params_by_ruby(
                    config_value, request)
            if verify_info != '':
                return HttpResponse(
                    '<script>alert("%s");history.go(-1)</script>' %
                    verify_info)
            config.put()
            config_update(subarea, config_name)

            moderator = apps.admin.auth.get_moderator_by_request(request)
            username, date, subarea, configname, REMOTE_ADDR = moderator.username, datetime.datetime.now(
            ), subarea, data['config_title'], request.META["REMOTE_ADDR"]
            UpdateConfRecord.record(username, date, subarea, configname,
                                    REMOTE_ADDR)
            saved = True

            log_data = {}
            diff_result = diff_2_str(config_value, before_config)
            if diff_result:
                log_data['diff'] = diff_result
                log_data['subarea'] = subarea
                log_data['config_name'] = config_name
                log_data['before_config'] = before_config
                log_data['after_config'] = config_value
                log_data["username"] = moderator.username
                ConfigHistory.set_log(**log_data)

            #多分区,保存配置后,要允许运营同学 同步到其它分区。
            config_use_subarea = False
            for g in config_list.g_lConfig:
                if g['name'] == config_name and g['use_subarea']:
                    config_use_subarea = True
                    break

            if config_use_subarea:
                #本配置, 不同的分区,有差别, 要同步到其它分区
                same_contents_subareas = {}
                diff_contents_subareas = {}
                for other_subarea_id, other_subarea_name in subareas_conf_dict.items(
                ):
                    if other_subarea_id == subarea:
                        continue

                    other_subarea = Config.get(config_name + '_' +
                                               other_subarea_id)
                    if not other_subarea:
                        other_subarea = Config.create(config_name + '_' +
                                                      other_subarea_id)
                    #print '#### other_subarea.data=', other_subarea.data.encode('utf8')
                    #print '#### config_value=', config_value
                    #print '#### other_subarea.data == config_value ', other_subarea.data == config_value
                    if other_subarea.data == config_value or other_subarea.data.encode(
                            'utf8') == config_value:
                        same_contents_subareas[
                            other_subarea_id] = other_subarea_name
                    else:
                        diff_contents_subareas[
                            other_subarea_id] = other_subarea_name

                data = {'subarea': subarea, 'config_name': config_name}
                data['config_description'] = config_list.get_description(
                    config_name)
                data['subarea_name'] = subareas_conf_dict[subarea]
                data['same_contents_subareas'] = same_contents_subareas
                data['diff_contents_subareas'] = diff_contents_subareas
                return 'admin/sync_conf_to_subarea.html', data

    else:
        #显示所有
        config_value = None
    data['subarea'] = subarea
    data['subareas_conf'] = return_subareas_conf
    #data['g_l_config'] = g_l_config
    data['categories'] = categories
    data['config_name'] = config_name
    data['config_value'] = beautify_config_value(config_value)
    data['saved'] = saved
    data['updateconfrecord'] = UpdateConfRecord.infos()['infos_list']
    if return_dict:
        return data

    data['config_error'] = ''
    if subarea == '1' and not config_name:
        data['config_error'] = check_config_error()

    #print '#### data[config_error]=', data['config_error']

    if config_value:
        if type(config_value) == unicode:
            config_md5sum_calculated = hashlib.md5(
                config_value.strip().encode('utf-8')).hexdigest()
        else:
            config_md5sum_calculated = hashlib.md5(
                config_value.strip()).hexdigest()
        data['config_md5sum'] = config_md5sum_calculated

    #data['app_name'] = settings.APP_NAME
    #data['environment_type'] = settings.ENVIRONMENT_TYPE

    #show config backup
    conf_backup_date = RedisTool.get('conf_backup_date')

    data['conf_backup_date'] = conf_backup_date
    data['backup_diff_from_now'] = {}
    data['changed_from_today'] = []  #from today's early morning backup

    if config_name:  #display one specific config (in certain subarea)
        old_conf_data = show_config_backup(config_name=config_name,
                                           subarea=subarea,
                                           date_str=conf_backup_date)

        if old_conf_data in ('', None):  #never backed up yet
            data['backup_diff_from_now'] = ''
        elif Config.get(config_name + '_' + subarea):
            if old_conf_data == Config.get(config_name + '_' + subarea).data:
                data['backup_diff_from_now'] = ''
            else:
                data['backup_diff_from_now'] = 'Yes'

    else:  #display overview of all config
        if subarea:
            for conf_name in config_list.get_game_config_name_list(
                    subarea=subarea):
                conf_obj = Config.get(conf_name + '_' + subarea)
                if not conf_obj:
                    continue

                morning_conf_data = show_config_backup(
                    config_name=conf_name,
                    subarea=subarea,
                    date_str=conf_backup_date)
                if morning_conf_data:  #if '', i.e. not exist/backed up yet,
                    #don't display
                    if conf_obj.data != morning_conf_data:
                        data['changed_from_today'] += [
                            '<a href="/admin/game_setting/?config_name=' +
                            conf_name + '&subarea=' + subarea + '">' +
                            conf_name + '(' + subarea + ')</a>'
                        ]
            data['changed_from_today'] = ', '.join(data['changed_from_today'])

    return 'admin/game_setting.html', data
Beispiel #29
0
def save_game_settings(request):
    '''
    保存配置, 多个分区的 subarea_list
    '''
    data = {}
    config_value = ''
    config_name = request.GET.get('config_name', '')

    subarea_list = request.POST.getlist('subarea_list')
    if not subarea_list:
        subarea_default_save = request.POST.get('subarea_default_save')
        subarea_list.append(subarea_default_save)
    u_config_description = config_list.get_description(config_name)
    data['config_title'] = u_config_description

    str_subareas_confname = config_list.get_configname_by_subarea(
        'subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        #subareas_conf = Config.create(sconfig_name)
        subareas_conf = Config.create(str_subareas_confname)

    subareas_conf_dict = eval(subareas_conf.data)
    return_subareas_conf = []
    for key in sorted(subareas_conf_dict.keys()):
        return_subareas_conf.append((key, subareas_conf_dict[key]))

    for subarea in subarea_list:
        sconfig_name = config_list.get_configname_by_subarea(
            config_name, subarea)
        config = Config.get(sconfig_name)
        if not config:
            config = Config.create(sconfig_name)
        before_config_data = config.data

        config_value = request.POST['config_value'].encode('utf-8').replace(
            '\r', '').strip()
        config.data = config_value
        if config_name != 'ruby_skill_params_config':
            verify_info = verify_game_config(config_name, eval(config_value))
        #通过ruby的配置  简化技能的配置
        else:
            verify_info = _config_skill_params_by_ruby(config_value, request)
        config.put()
        config_update(subarea, config_name)

        moderator = apps.admin.auth.get_moderator_by_request(request)

        log_data = {}
        diff_result = diff_2_str(config.data, before_config_data)
        if diff_result:
            log_data['diff'] = diff_result
            log_data['subarea'] = subarea
            log_data['config_name'] = config_name
            log_data['before_config'] = before_config_data
            log_data['after_config'] = config_value
            log_data["username"] = moderator.username
            ConfigHistory.set_log(**log_data)

    data['config_value'] = config_value
    data['config_title'] = u_config_description
    data['subareas_conf'] = return_subareas_conf
    data['saved'] = True
    data['submit_game_settings_by_excel'] = True
    return render_to_response('admin/game_setting.html',
                              data,
                              context_instance=RequestContext(request))
def check_missing_card():
    ''' Check various config, to see, if there is any card_id,
        not in card_config

        ####_card
        'drop_card_lv'

    '''
    #check '1' for now, do other subarea later


    card_related_configs = ['gacha_config', \
         'monster_config', 'user_init_config', 
         ] 

    good_card_numbers = [cid[:-5] for cid in eval(Config.get('card_config_1').data)]

    #something wrong
    if good_card_numbers == []:
        return {}    

    wrong_dict = {}

    for config_name in card_related_configs:
        #print '#### missing_card: config_name=', config_name
        config_obj = Config.get(config_name + '_1')
        if not config_obj:
            continue

        tmp = config_obj.data.split('_card')
        if len(tmp) <= 1:
            continue


        #print '#### total _card=', len(tmp)-1

        #special python technique to speed up, 
        #since now slow on 32-bit ubuntu 12.04
        #list(set(list)) to get unique, C is faster then Python

        unique_card_num = []
        for i in range(len(tmp)-1):
            if tmp[i+1][0] not in ('"', "'"):
                continue
            iQuote = tmp[i].rfind( tmp[i+1][0] )
            if iQuote >= 0:
                card_num = tmp[i][iQuote+1:]
                unique_card_num += [card_num]

        del tmp #free large memory ?
        unique_card_num = set(unique_card_num)  #unique
        #print '#### unique _card=', len(unique_card_num)

        wrong_card_numbers = [ c_num for c_num in unique_card_num 
                if c_num not in good_card_numbers 
                    and c_num.isdigit() ]

        if wrong_card_numbers:
            wrong_dict[config_name] = wrong_card_numbers

    return wrong_dict
Beispiel #31
0
def save_game_settings(request):
    '''
    保存配置, 多个分区的 subarea_list
    '''
    data = {}
    config_value = ''
    config_name = request.GET.get('config_name','')

    subarea_list = request.POST.getlist('subarea_list')
    if not subarea_list:
        subarea_default_save = request.POST.get('subarea_default_save')
        subarea_list.append(subarea_default_save)
    u_config_description = config_list.get_description(config_name)
    data['config_title'] = u_config_description
   
    str_subareas_confname = config_list.get_configname_by_subarea('subareas_conf', '1')
    subareas_conf = Config.get(str_subareas_confname)
    if not subareas_conf:
        #subareas_conf = Config.create(sconfig_name)
        subareas_conf = Config.create(str_subareas_confname)

    subareas_conf_dict = eval(subareas_conf.data)
    return_subareas_conf = []
    for key in sorted(subareas_conf_dict.keys()):
        return_subareas_conf.append((key, subareas_conf_dict[key]))

    for subarea in subarea_list:
        sconfig_name = config_list.get_configname_by_subarea(config_name,subarea)
        config = Config.get(sconfig_name)
        if not config:
            config = Config.create(sconfig_name)
        before_config_data = config.data

        config_value = request.POST['config_value'].encode('utf-8').replace('\r','').strip()
        config.data = config_value
        if config_name != 'ruby_skill_params_config':
            verify_info = verify_game_config(config_name, eval(config_value))
        #通过ruby的配置  简化技能的配置
        else:
            verify_info = _config_skill_params_by_ruby(config_value, request)
        config.put()
        config_update(subarea, config_name)

        moderator = apps.admin.auth.get_moderator_by_request(request)

        log_data = {}
        diff_result = diff_2_str(config.data, before_config_data)
        if diff_result:
            log_data['diff'] = diff_result
            log_data['subarea'] = subarea
            log_data['config_name'] = config_name
            log_data['before_config'] = before_config_data
            log_data['after_config'] = config_value
            log_data["username"] =  moderator.username
            ConfigHistory.set_log(**log_data)

    data['config_value'] = config_value
    data['config_title'] = u_config_description
    data['subareas_conf'] = return_subareas_conf
    data['saved'] = True
    data['submit_game_settings_by_excel'] = True
    return render_to_response('admin/game_setting.html',data,context_instance = RequestContext(request))