martysama 5.9 dx11 x64 altyapı server files

  • Konuyu açan Konuyu açan hasanmacit
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 83
  • Gösterim Gösterim 2K
ışık hüzmeleri ve güneş eklendi. imguide eklemiş oldum güneşi göremiyordum yoksa. bütün ışıklarıda güneşe göre ayarladım eski sistemi değiştirmemiştik şimdi değiştirdim.


bu ne olm dünyanın son anlarımı, güneş tarafından yutulacak mı birazdan
 
tamamen gerçekçi dinamik gölgelendirme getirildi. yani ışığın süzdüğü yerden karakter ışık alıyor. tamamen gölgedeyse tamamen gölge oluyor yoksa ışık geliyorsa ağaç dallarından felan o ışığı alabiliyor üstüne. ayrıca görüntü ve efektler daha da iyileştirildi.

imagedd02693aefb56313.png
Ekran-goruntusu-2026-08-21-234235.png
Ekran-goruntusu-2026-08-21-234132.png
Ekran-goruntusu-2026-08-21-234226.png

tamamen gerçekçi bir su yapıldı. yansıtması ıvırı zıvırı mis gibi oldu.
32039 eklentisini görüntüle32038 eklentisini görüntüle32037 eklentisini görüntüle

ışık hüzmeleri ve güneş eklendi. imguide eklemiş oldum güneşi göremiyordum yoksa. bütün ışıklarıda güneşe göre ayarladım eski sistemi değiştirmemiştik şimdi değiştirdim.


Muhteşem muhteşem muhteşeeeem
 
ışık hüzmeleri ve güneş eklendi. imguide eklemiş oldum güneşi göremiyordum yoksa. bütün ışıklarıda güneşe göre ayarladım eski sistemi değiştirmemiştik şimdi değiştirdim.


Hasanım, adananın fotosunu çekmiş. 😂😂😂

 
speedtreeyi de 4.1 sürümüne çıkardım tekrar. bazı özellikleri de tekrar aktif ettik. şöyle güzel ağaçlar bulabilirsem onlarında nimetlerinden faydalanacağım inşallah.
0823_194437.webp
0823_194440.webp
 
giriş seviyesi bir gece gündüz ayarı yaptım. etrafın ona göre ışık alması felan. aslında güzel haritalar felan olsa elimde mis gibi olacak ama yok.
0825_000315.webp

0825_000447.webp
 
mutlu noellerrrr :D bizim @Kaiser 'i çok kıskandığım için yerde karakterde ve binalarda kar birikmesi yaptım. ayrıca dinamik hava da yaptım bulutlar felan. videoda çok gösteremesem de her şeyi bunlar zaten beta aşamaları. bence hoş duruyor geliştirilirse çok daha iyi olabilir. sevgiler saygılar.

 
bayadır yorum atmıyordum. hem optimizasyonlarla uğraşıyor hem de jettyxin mapleri dızlıyordum. jettyxin mapleri görsel olarak göze orjinalden daha çok hitap etse de bana çok hitap etmiyor bu yüzden ortak köy arayışındayım. ya ortak köyü kendim yapacağım ya da bir yerden güzel bir ortak köy bulacağım. videoda diğer yapılan optimizasyonlardan pek bahsedemesem de yazı olarak bahsedeyim.

1- shaderları önbelleğe aldım bu şekilde eğer bir değişiklik olmazsa oyunun ilk başında shaderlar tekrar derlenmeyecekler derlenmiş yedeklerden devam edecekler bu sayede her oyun başı pc özelliklerine göre shader derlenmesi beklenmeyecek.
2- herkesin malumunda olan karakterlerin hareket ederken diğer clientte aynı senkron şekilde hareket etmemesi düzeltildi (videolardaki gözükenler onlar)
3- playersettings module tüm içeriğiyle client sourceye taşındı. (valla bak aşağıya bırakayım) bu sayede mapler arası geçişler aynı haritada yer değiştirmeler ve oyuna girişte daha hızlandırıldı.
4- bazı yaptığım değişiklikleri geri aldım ileride daha sağlam şekilde getirebilmek için geri aldım (mesela dinamik gece gündüz döngüsü, karlı zemin vb.)

öncesi


sonrası


playersettingmodule:
Genişlet Daralt Kopyala
import chr
import chrmgr
import skill
import net
import item
import player
import effect
import constInfo
import localeInfo
import emotion

import app

JOB_WARRIOR        = 0
JOB_ASSASSIN    = 1
JOB_SURA        = 2
JOB_SHAMAN        = 3
if app.ENABLE_WOLFMAN_CHARACTER:
    JOB_WOLFMAN        = 4

RACE_WARRIOR_M    = 0
RACE_ASSASSIN_W    = 1
RACE_SURA_M        = 2
RACE_SHAMAN_W    = 3
RACE_WARRIOR_W    = 4
RACE_ASSASSIN_M    = 5
RACE_SURA_W        = 6
RACE_SHAMAN_M    = 7
if app.ENABLE_WOLFMAN_CHARACTER:
    RACE_WOLFMAN_M    = 8

COMBO_TYPE_1 = 0
COMBO_TYPE_2 = 1
COMBO_TYPE_3 = 2

COMBO_INDEX_1 = 0
COMBO_INDEX_2 = 1
COMBO_INDEX_3 = 2
COMBO_INDEX_4 = 3
COMBO_INDEX_5 = 4
COMBO_INDEX_6 = 5

HORSE_SKILL_WILDATTACK = chr.MOTION_SKILL+121
HORSE_SKILL_CHARGE = chr.MOTION_SKILL+122
HORSE_SKILL_SPLASH = chr.MOTION_SKILL+123

GUILD_SKILL_DRAGONBLOOD = chr.MOTION_SKILL+101
GUILD_SKILL_DRAGONBLESS = chr.MOTION_SKILL+102
GUILD_SKILL_BLESSARMOR = chr.MOTION_SKILL+103
GUILD_SKILL_SPPEDUP = chr.MOTION_SKILL+104
GUILD_SKILL_DRAGONWRATH = chr.MOTION_SKILL+105
GUILD_SKILL_MAGICUP = chr.MOTION_SKILL+106

PASSIVE_GUILD_SKILL_INDEX_LIST = ( 151, )
ACTIVE_GUILD_SKILL_INDEX_LIST = ( 152, 153, 154, 155, 156, 157, )

NEW_678TH_SKILL_ENABLE = constInfo.NEW_678TH_SKILL_ENABLE
SKILL_INDEX_DICT = []

def DefineSkillIndexDict():
    global NEW_678TH_SKILL_ENABLE
    global SKILL_INDEX_DICT

    if NEW_678TH_SKILL_ENABLE:
        SKILL_INDEX_DICT = {
            JOB_WARRIOR : {
                1 : (1, 2, 3, 4, 5, 6, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (16, 17, 18, 19, 20, 21, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_ASSASSIN : {
                1 : (31, 32, 33, 34, 35, 36, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                2 : (46, 47, 48, 49, 50, 51, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_SURA : {
                1 : (61, 62, 63, 64, 65, 66, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (76, 77, 78, 79, 80, 81, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_SHAMAN : {
                1 : (91, 92, 93, 94, 95, 96, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (106, 107, 108, 109, 110, 111, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
        }
    else:
        SKILL_INDEX_DICT = {
            JOB_WARRIOR : {
                1 : (1, 2, 3, 4, 5, 0, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (16, 17, 18, 19, 20, 0, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_ASSASSIN : {
                1 : (31, 32, 33, 34, 35, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                2 : (46, 47, 48, 49, 50, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_SURA : {
                1 : (61, 62, 63, 64, 65, 66, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (76, 77, 78, 79, 80, 81, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_SHAMAN : {
                1 : (91, 92, 93, 94, 95, 96, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (106, 107, 108, 109, 110, 111, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
        }
    if app.ENABLE_WOLFMAN_CHARACTER:
        SKILL_INDEX_DICT.update({
            JOB_WOLFMAN : {
                1 : (170, 171, 172, 173, 174, 175, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
        })

def RegisterSkill(race, group, empire=0):

    DefineSkillIndexDict()

    job = chr.RaceToJob(race)

    ## Character Skill
    if SKILL_INDEX_DICT.has_key(job):
        if SKILL_INDEX_DICT[job].has_key(group):

            activeSkillList = SKILL_INDEX_DICT[job][group]

            for i in xrange(len(activeSkillList)):
                skillIndex = activeSkillList[i]

                if i != 6 and i != 7:
                    player.SetSkill(i+1, skillIndex)

            supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]

            for i in xrange(len(supportSkillList)):
                player.SetSkill(i+100+1, supportSkillList[i])

    ## Language Skill
    if 0 != empire:
        languageSkillList = []
        for i in xrange(3):
            if (i+1) != empire:
                languageSkillList.append(player.SKILL_INDEX_LANGUAGE1+i)
        for i in xrange(len(languageSkillList)):
            player.SetSkill(107+i, languageSkillList[i])

    ## Guild Skill
    for i in xrange(len(PASSIVE_GUILD_SKILL_INDEX_LIST)):
        player.SetSkill(200+i, PASSIVE_GUILD_SKILL_INDEX_LIST[i])

    for i in xrange(len(ACTIVE_GUILD_SKILL_INDEX_LIST)):
        player.SetSkill(210+i, ACTIVE_GUILD_SKILL_INDEX_LIST[i])

def RegisterSkillAt(race, group, pos, num):

    DefineSkillIndexDict()

    job = chr.RaceToJob(race)
    tmp = list(SKILL_INDEX_DICT[job][group])
    tmp[pos] = num
    SKILL_INDEX_DICT[job][group] = tuple(tmp)
    player.SetSkill(pos+1, num)

FACE_IMAGE_DICT = {
    RACE_WARRIOR_M    : "d:/ymir work/ui/game/windows/face_warrior.sub",
    RACE_ASSASSIN_W    : "d:/ymir work/ui/game/windows/face_assassin.sub",
    RACE_SURA_M        : "d:/ymir work/ui/game/windows/face_sura.sub",
    RACE_SHAMAN_W    : "d:/ymir work/ui/game/windows/face_shaman.sub",
}

# GUILD_BUILDING
def LoadGuildBuildingList(filename):
    import uiGuild
    uiGuild.BUILDING_DATA_LIST = []

    handle = app.OpenTextFile(filename)
    count = app.GetTextFileLineCount(handle)
    for i in xrange(count):
        line = app.GetTextFileLine(handle, i)
        tokens = line.split("\t")

        TOKEN_VNUM = 0
        TOKEN_TYPE = 1
        TOKEN_NAME = 2
        TOKEN_LOCAL_NAME = 3
        NO_USE_TOKEN_SIZE_1 = 4
        NO_USE_TOKEN_SIZE_2 = 5
        NO_USE_TOKEN_SIZE_3 = 6
        NO_USE_TOKEN_SIZE_4 = 7
        TOKEN_X_ROT_LIMIT = 8
        TOKEN_Y_ROT_LIMIT = 9
        TOKEN_Z_ROT_LIMIT = 10
        TOKEN_PRICE = 11
        TOKEN_MATERIAL = 12
        TOKEN_NPC = 13
        TOKEN_GROUP = 14
        TOKEN_DEPEND_GROUP = 15
        TOKEN_ENABLE_FLAG = 16
        LIMIT_TOKEN_COUNT = 17

        if not tokens[TOKEN_VNUM].isdigit():
            continue

        if len(tokens) < LIMIT_TOKEN_COUNT:
            import dbg
            dbg.TraceError("Strange token count [%d/%d] [%s]" % (len(tokens), LIMIT_TOKEN_COUNT, line))
            continue

        ENABLE_FLAG_TYPE_NOT_USE = False
        ENABLE_FLAG_TYPE_USE = True
        ENABLE_FLAG_TYPE_USE_BUT_HIDE = 2

        if ENABLE_FLAG_TYPE_NOT_USE == int(tokens[TOKEN_ENABLE_FLAG]):
            continue

        vnum = int(tokens[TOKEN_VNUM])
        type = tokens[TOKEN_TYPE]
        name = tokens[TOKEN_NAME]
        localName = tokens[TOKEN_LOCAL_NAME]
        xRotLimit = int(tokens[TOKEN_X_ROT_LIMIT])
        yRotLimit = int(tokens[TOKEN_Y_ROT_LIMIT])
        zRotLimit = int(tokens[TOKEN_Z_ROT_LIMIT])
        price = tokens[TOKEN_PRICE]
        material = tokens[TOKEN_MATERIAL]

        folderName = ""
        if "HEADQUARTER" == type:
            folderName = "headquarter"
        elif "FACILITY" == type:
            folderName = "facility"
        elif "OBJECT" == type:
            folderName = "object"
        elif "WALL" == type:
            folderName = "fence"

        materialList = ["0", "0", "0"]
        if material:
            if material[0] == "\"":
                material = material[1:]
            if material[-1] == "\"":
                material = material[:-1]
            for one in material.split("/"):
                data = one.split(",")
                if 2 != len(data):
                    continue
                itemID = int(data[0])
                count = data[1]

                if itemID == uiGuild.MATERIAL_STONE_ID:
                    materialList[uiGuild.MATERIAL_STONE_INDEX] = count
                elif itemID == uiGuild.MATERIAL_LOG_ID:
                    materialList[uiGuild.MATERIAL_LOG_INDEX] = count
                elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
                    materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count

        import chrmgr
        chrmgr.RegisterRaceSrcName(name, folderName)
        chrmgr.RegisterRaceName(vnum, name)

        appendingData = { "VNUM":vnum,
                          "TYPE":type,
                          "NAME":name,
                          "LOCAL_NAME":localName,
                          "X_ROT_LIMIT":xRotLimit,
                          "Y_ROT_LIMIT":yRotLimit,
                          "Z_ROT_LIMIT":zRotLimit,
                          "PRICE":price,
                          "MATERIAL":materialList,
                          "SHOW" : True }

        if ENABLE_FLAG_TYPE_USE_BUT_HIDE == int(tokens[TOKEN_ENABLE_FLAG]):
            appendingData["SHOW"] = False

        uiGuild.BUILDING_DATA_LIST.append(appendingData)

    app.CloseTextFile(handle)

# END_OF_GUILD_BUILDING

def LoadGameData(name):
    chrmgr.LoadGameData(name)
 
bayadır yorum atmıyordum. hem optimizasyonlarla uğraşıyor hem de jettyxin mapleri dızlıyordum. jettyxin mapleri görsel olarak göze orjinalden daha çok hitap etse de bana çok hitap etmiyor bu yüzden ortak köy arayışındayım. ya ortak köyü kendim yapacağım ya da bir yerden güzel bir ortak köy bulacağım. videoda diğer yapılan optimizasyonlardan pek bahsedemesem de yazı olarak bahsedeyim.

1- shaderları önbelleğe aldım bu şekilde eğer bir değişiklik olmazsa oyunun ilk başında shaderlar tekrar derlenmeyecekler derlenmiş yedeklerden devam edecekler bu sayede her oyun başı pc özelliklerine göre shader derlenmesi beklenmeyecek.
2- herkesin malumunda olan karakterlerin hareket ederken diğer clientte aynı senkron şekilde hareket etmemesi düzeltildi (videolardaki gözükenler onlar)
3- playersettings module tüm içeriğiyle client sourceye taşındı. (valla bak aşağıya bırakayım) bu sayede mapler arası geçişler aynı haritada yer değiştirmeler ve oyuna girişte daha hızlandırıldı.
4- bazı yaptığım değişiklikleri geri aldım ileride daha sağlam şekilde getirebilmek için geri aldım (mesela dinamik gece gündüz döngüsü, karlı zemin vb.)

öncesi


sonrası


playersettingmodule:
Genişlet Daralt Kopyala
import chr
import chrmgr
import skill
import net
import item
import player
import effect
import constInfo
import localeInfo
import emotion

import app

JOB_WARRIOR        = 0
JOB_ASSASSIN    = 1
JOB_SURA        = 2
JOB_SHAMAN        = 3
if app.ENABLE_WOLFMAN_CHARACTER:
    JOB_WOLFMAN        = 4

RACE_WARRIOR_M    = 0
RACE_ASSASSIN_W    = 1
RACE_SURA_M        = 2
RACE_SHAMAN_W    = 3
RACE_WARRIOR_W    = 4
RACE_ASSASSIN_M    = 5
RACE_SURA_W        = 6
RACE_SHAMAN_M    = 7
if app.ENABLE_WOLFMAN_CHARACTER:
    RACE_WOLFMAN_M    = 8

COMBO_TYPE_1 = 0
COMBO_TYPE_2 = 1
COMBO_TYPE_3 = 2

COMBO_INDEX_1 = 0
COMBO_INDEX_2 = 1
COMBO_INDEX_3 = 2
COMBO_INDEX_4 = 3
COMBO_INDEX_5 = 4
COMBO_INDEX_6 = 5

HORSE_SKILL_WILDATTACK = chr.MOTION_SKILL+121
HORSE_SKILL_CHARGE = chr.MOTION_SKILL+122
HORSE_SKILL_SPLASH = chr.MOTION_SKILL+123

GUILD_SKILL_DRAGONBLOOD = chr.MOTION_SKILL+101
GUILD_SKILL_DRAGONBLESS = chr.MOTION_SKILL+102
GUILD_SKILL_BLESSARMOR = chr.MOTION_SKILL+103
GUILD_SKILL_SPPEDUP = chr.MOTION_SKILL+104
GUILD_SKILL_DRAGONWRATH = chr.MOTION_SKILL+105
GUILD_SKILL_MAGICUP = chr.MOTION_SKILL+106

PASSIVE_GUILD_SKILL_INDEX_LIST = ( 151, )
ACTIVE_GUILD_SKILL_INDEX_LIST = ( 152, 153, 154, 155, 156, 157, )

NEW_678TH_SKILL_ENABLE = constInfo.NEW_678TH_SKILL_ENABLE
SKILL_INDEX_DICT = []

def DefineSkillIndexDict():
    global NEW_678TH_SKILL_ENABLE
    global SKILL_INDEX_DICT

    if NEW_678TH_SKILL_ENABLE:
        SKILL_INDEX_DICT = {
            JOB_WARRIOR : {
                1 : (1, 2, 3, 4, 5, 6, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (16, 17, 18, 19, 20, 21, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_ASSASSIN : {
                1 : (31, 32, 33, 34, 35, 36, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                2 : (46, 47, 48, 49, 50, 51, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_SURA : {
                1 : (61, 62, 63, 64, 65, 66, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (76, 77, 78, 79, 80, 81, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
            JOB_SHAMAN : {
                1 : (91, 92, 93, 94, 95, 96, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (106, 107, 108, 109, 110, 111, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131, 0, 0,),
            },
        }
    else:
        SKILL_INDEX_DICT = {
            JOB_WARRIOR : {
                1 : (1, 2, 3, 4, 5, 0, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (16, 17, 18, 19, 20, 0, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_ASSASSIN : {
                1 : (31, 32, 33, 34, 35, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                2 : (46, 47, 48, 49, 50, 0, 0, 0, 137, 0, 138, 0, 139, 0, 140,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_SURA : {
                1 : (61, 62, 63, 64, 65, 66, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (76, 77, 78, 79, 80, 81, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
            JOB_SHAMAN : {
                1 : (91, 92, 93, 94, 95, 96, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (106, 107, 108, 109, 110, 111, 0, 0, 137, 0, 138, 0, 139, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
        }
    if app.ENABLE_WOLFMAN_CHARACTER:
        SKILL_INDEX_DICT.update({
            JOB_WOLFMAN : {
                1 : (170, 171, 172, 173, 174, 175, 0, 0, 137, 0, 138, 0, 139, 0,),
                2 : (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,),
                "SUPPORT" : (122, 123, 121, 124, 125, 129, 0, 0, 130, 131,),
            },
        })

def RegisterSkill(race, group, empire=0):

    DefineSkillIndexDict()

    job = chr.RaceToJob(race)

    ## Character Skill
    if SKILL_INDEX_DICT.has_key(job):
        if SKILL_INDEX_DICT[job].has_key(group):

            activeSkillList = SKILL_INDEX_DICT[job][group]

            for i in xrange(len(activeSkillList)):
                skillIndex = activeSkillList[i]

                if i != 6 and i != 7:
                    player.SetSkill(i+1, skillIndex)

            supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]

            for i in xrange(len(supportSkillList)):
                player.SetSkill(i+100+1, supportSkillList[i])

    ## Language Skill
    if 0 != empire:
        languageSkillList = []
        for i in xrange(3):
            if (i+1) != empire:
                languageSkillList.append(player.SKILL_INDEX_LANGUAGE1+i)
        for i in xrange(len(languageSkillList)):
            player.SetSkill(107+i, languageSkillList[i])

    ## Guild Skill
    for i in xrange(len(PASSIVE_GUILD_SKILL_INDEX_LIST)):
        player.SetSkill(200+i, PASSIVE_GUILD_SKILL_INDEX_LIST[i])

    for i in xrange(len(ACTIVE_GUILD_SKILL_INDEX_LIST)):
        player.SetSkill(210+i, ACTIVE_GUILD_SKILL_INDEX_LIST[i])

def RegisterSkillAt(race, group, pos, num):

    DefineSkillIndexDict()

    job = chr.RaceToJob(race)
    tmp = list(SKILL_INDEX_DICT[job][group])
    tmp[pos] = num
    SKILL_INDEX_DICT[job][group] = tuple(tmp)
    player.SetSkill(pos+1, num)

FACE_IMAGE_DICT = {
    RACE_WARRIOR_M    : "d:/ymir work/ui/game/windows/face_warrior.sub",
    RACE_ASSASSIN_W    : "d:/ymir work/ui/game/windows/face_assassin.sub",
    RACE_SURA_M        : "d:/ymir work/ui/game/windows/face_sura.sub",
    RACE_SHAMAN_W    : "d:/ymir work/ui/game/windows/face_shaman.sub",
}

# GUILD_BUILDING
def LoadGuildBuildingList(filename):
    import uiGuild
    uiGuild.BUILDING_DATA_LIST = []

    handle = app.OpenTextFile(filename)
    count = app.GetTextFileLineCount(handle)
    for i in xrange(count):
        line = app.GetTextFileLine(handle, i)
        tokens = line.split("\t")

        TOKEN_VNUM = 0
        TOKEN_TYPE = 1
        TOKEN_NAME = 2
        TOKEN_LOCAL_NAME = 3
        NO_USE_TOKEN_SIZE_1 = 4
        NO_USE_TOKEN_SIZE_2 = 5
        NO_USE_TOKEN_SIZE_3 = 6
        NO_USE_TOKEN_SIZE_4 = 7
        TOKEN_X_ROT_LIMIT = 8
        TOKEN_Y_ROT_LIMIT = 9
        TOKEN_Z_ROT_LIMIT = 10
        TOKEN_PRICE = 11
        TOKEN_MATERIAL = 12
        TOKEN_NPC = 13
        TOKEN_GROUP = 14
        TOKEN_DEPEND_GROUP = 15
        TOKEN_ENABLE_FLAG = 16
        LIMIT_TOKEN_COUNT = 17

        if not tokens[TOKEN_VNUM].isdigit():
            continue

        if len(tokens) < LIMIT_TOKEN_COUNT:
            import dbg
            dbg.TraceError("Strange token count [%d/%d] [%s]" % (len(tokens), LIMIT_TOKEN_COUNT, line))
            continue

        ENABLE_FLAG_TYPE_NOT_USE = False
        ENABLE_FLAG_TYPE_USE = True
        ENABLE_FLAG_TYPE_USE_BUT_HIDE = 2

        if ENABLE_FLAG_TYPE_NOT_USE == int(tokens[TOKEN_ENABLE_FLAG]):
            continue

        vnum = int(tokens[TOKEN_VNUM])
        type = tokens[TOKEN_TYPE]
        name = tokens[TOKEN_NAME]
        localName = tokens[TOKEN_LOCAL_NAME]
        xRotLimit = int(tokens[TOKEN_X_ROT_LIMIT])
        yRotLimit = int(tokens[TOKEN_Y_ROT_LIMIT])
        zRotLimit = int(tokens[TOKEN_Z_ROT_LIMIT])
        price = tokens[TOKEN_PRICE]
        material = tokens[TOKEN_MATERIAL]

        folderName = ""
        if "HEADQUARTER" == type:
            folderName = "headquarter"
        elif "FACILITY" == type:
            folderName = "facility"
        elif "OBJECT" == type:
            folderName = "object"
        elif "WALL" == type:
            folderName = "fence"

        materialList = ["0", "0", "0"]
        if material:
            if material[0] == "\"":
                material = material[1:]
            if material[-1] == "\"":
                material = material[:-1]
            for one in material.split("/"):
                data = one.split(",")
                if 2 != len(data):
                    continue
                itemID = int(data[0])
                count = data[1]

                if itemID == uiGuild.MATERIAL_STONE_ID:
                    materialList[uiGuild.MATERIAL_STONE_INDEX] = count
                elif itemID == uiGuild.MATERIAL_LOG_ID:
                    materialList[uiGuild.MATERIAL_LOG_INDEX] = count
                elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
                    materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count

        import chrmgr
        chrmgr.RegisterRaceSrcName(name, folderName)
        chrmgr.RegisterRaceName(vnum, name)

        appendingData = { "VNUM":vnum,
                          "TYPE":type,
                          "NAME":name,
                          "LOCAL_NAME":localName,
                          "X_ROT_LIMIT":xRotLimit,
                          "Y_ROT_LIMIT":yRotLimit,
                          "Z_ROT_LIMIT":zRotLimit,
                          "PRICE":price,
                          "MATERIAL":materialList,
                          "SHOW" : True }

        if ENABLE_FLAG_TYPE_USE_BUT_HIDE == int(tokens[TOKEN_ENABLE_FLAG]):
            appendingData["SHOW"] = False

        uiGuild.BUILDING_DATA_LIST.append(appendingData)

    app.CloseTextFile(handle)

# END_OF_GUILD_BUILDING

def LoadGameData(name):
    chrmgr.LoadGameData(name)

bu 3. dediğin psm sistemimi oluyor roottaki playersettingmoduleyi client src ye taşımak yani bu etki ediyormu ilk login loading ve oyun içi örnek
 
sisi geri getirdim tüm shaderlara da uyarlandı. bence baya iyi duruyor.
0829_142628.webp
 
Geri
Üst