Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Tutorial]Wszystko O Serwerach Prywatnych


Rekomendowane odpowiedzi

Opublikowano

Tworzenie/edycja serwerów:

Zacznijmy od tworzenia serwera dam VideoTUTa ale narazie opisze

1sposób:

 

Wypakowywujemy pliki serwerowe na jakieś miejsce w komputerze w moim przypadku będzie to D:\Program Files\Pliki Serwerowe\mt2 (najlepiej tą ostatni folder(w moim przypadku mt2) zmienić jego nazwe na nazwe priva...Teraz wchodzicie tam gdzie wypakowaliście... i macie komputerek i dysk zmieniacie ich nazwe na mt2 jak zmieniliście otwieracie komputerek w notaniku i szukacie linijki 48-50(gdzieś tak) i tam powinno być C:\Chinskie znaki\chinskie znaki ( coś takiego) teraz tak to C:\Chinskie znaki\chinskie znaki zmieniacie na lokalizacje plików czyli moja scieżka to :  D:\Program Files\Pliki Serwerowe\mt2 i na koncu dopisujecie mt2 czyli  D:\Program Files\Pliki Serwerowe\mt2\mt2 a niżej powinny być tylko chinskie znaki(zmieniacie na mt2) teraz zamykacie. No teraz 1 spobobem... Otwieracie VPC(virtual PC) i klikacie new...>next>1opcja(lub 3) to nie robi różnicy next>nazwa serwera>next>System(Najlepiej wybrać other)>next>adjusting the ram>dajecie ram na serwer>next>an exiting>next>pliki serwerowe(lokalizacja)>i tu jeśli wybraliście 1 opcje klikacie enable a jeśli 3 nie klikacie...next>finish klikacie settings tu interesuje nas karta sieciowa(hamachi) klikacie networking i tam zmieniacie na hamachi network...Teraz klikamy start.... i czekamy aż poprosi o login i hasło login:root hasło : mcncc.com teraz sysinstall i przechodzimy w configure>networking>interfaces>de0 teraz IPv4 Getway IP hamachi Ipv4 addres ip hamachi konc 100 czyli np. 5.142.34.100 Netmask : 255.0.0.0 teraz canel>canel>canel>exit install i czekacie aż pojawi się #Mcncc wpisujecie /etc/rc.d/netif restart i czekacie aż znowu pojawi się #Mcncc i wpisujecie ./start macie serwer 

 

2sposób:

 

Wypakowywujemy pliki serwerowe na jakieś miejsce w komputerze w moim przypadku będzie to D:\Program Files\Pliki Serwerowe\mt2 (najlepiej tą ostatni folder(w moim przypadku mt2) zmienić jego nazwe na nazwe priva...Teraz wchodzicie tam gdzie wypakowaliście... i macie komputerek i dysk zmieniacie ich nazwe na mt2 jak zmieniliście otwieracie komputerek w notaniku i szukacie linijki 48-50(gdzieś tak) i tam powinno być C:\Chinskie znaki\chinskie znaki ( coś takiego) teraz tak to C:\Chinskie znaki\chinskie znaki zmieniacie na lokalizacje plików czyli moja scieżka to :  D:\Program Files\Pliki Serwerowe\mt2 i na koncu dopisujecie mt2 czyli  D:\Program Files\Pliki Serwerowe\mt2\mt2 a niżej powinny być tylko chinskie znaki(zmieniacie na mt2) teraz zamykacie i 2x klik na komputerek wyskoczy wam okno takie zamykacie je (biorąc turn off) i klikacie settings tu interesuje nas karta sieciowa(hamachi) klikacie networking i tam zmieniacie na hamachi network... i jeszcze  memory(ram na serwer) jesli pozmienialiście klikacie start i czekamy aż poprosi o login i hasło login:root hasło : mcncc.com teraz sysinstall i przechodzimy w configure>networking>interfaces>de0 teraz IPv4 Getway IP hamachi Ipv4 addres ip hamachi konc 100 czyli np. 5.142.34.100 Netmask : 255.0.0.0 teraz canel>canel>canel>exit install i czekacie aż pojawi się #Mcncc wpisujecie /etc/rc.d/netif restart i czekacie aż znowu pojawi się #Mcncc i wpisujecie ./start macie serwer 

 

VideoTUT:

Jutro dam Edita i będzie Video ;)

 

Edycje serwera:

Baza Mysql

1.Baza Navicat ? Co i jak?

Najpierw trzeba skonfigurować navicat pobieracie go i uruchamacie... klikacie połączenie/connections

I tak jak na screenie:

http://img155.imageshack.us/i/afafafafaf.png/

OK teraz od czego jest dana zakładka:

account:Konta

Commond: Pliki gry , dawanie GM

Player: Wszystko dotyczące gry na serwerze

Reszty niewiem xD

Zakładka Account:

2.Jak stworzyć konto?

wchodzimy w account.... i klkikamy na tabela account i klikamy strzalka w dól i tak 1. kolejny numer 2.login 3.password 4.12345 5.1234567 teraz opracowanie hasła jeśli chcemy zwykłe kopiujemy od Rain'a(wtedy będzie 12345) a jeśli chcemy swoje w google piszemy hasch generator(coś takiego) i tam w 1 rubryce wpisujemy hasło potem zjeżdżamy niżej i szukamy tam Mysql5 kopiujemy i otwieramy notanik w notaniku wklejamy to i zmieniamy małe litery na duże i dodajemy * przed tym kodem potem wklejamy to do password i mamy hasło....

Jak zbanować konto?

Wchodzimy w account(zakładka account) szukamy tam status powinno pisać OK jeśli chcemy zbanować piszemy BLOCK potem możemy odblokować wpisując OK UWAGA! Ważne jest pisanie dużymi literami(tego BLOCK i OK)

Zakładka Common:

3.Jak dać GM postaci? - Powyżej nauczyliscie się zrobić konto a jak dać GM na to konto ? Tutaj odpowiedź :)

tworzymy postać na naszym koncie i otwieramy navicat wchodzimy w common GMhost tam wpisujemy swoje IP hamachi GMlist tam klikamy strzałke 2 dól i tak kolejny numer czyli to 2będzie login nick i na koncu IP hamachi (to co w GMhost) zapisujecie reset serwera i się bawicie GM'em ....

4.Pliki English wchodzicie w locale(w zakładce common) i tam macie hongkong zmieniacie na english ( potem podam jak to spolszczyć ;) )

Zakładka Player:

1.Jak zrobić kowala na 100% i za 0yang oraz bez ulepszaczy? - Odpowiedź poniżej

Jak zrobić kowala za 0yang bez ulepszaczy i na 100% wchodzimy w refine_proto i teraz tak count1 vnum1 count2 vnum2 count3 vnum3 i count4 i vnum4 cost to koszt ulepszenia a prob to na ile % będzie ulepszanie...

2. Edycja Moba :

Dziki pies lub inny mob sam atakuje:

Wchodzimy w mob_proto(zakladka player) i szukamy ai_flag tam piszemy :Aggr albo wybieramy nie pamiętam...

Mob ma 1hp i inne staty na 1 albo więcej:

Szukamy tam np. hp i tam ustawiamy na 1 będzie miał 1hp tak robimy z wszystkimi....

dx-zręcznośc

ht(albo hp)-życie

st-siła

iq-energia(inteligencja)

3.Edycja postaci:

Jak dać staty?

Wchodzimy w player(zakładka player) i szukamy np. st(zwiększymy sile) wpisujemy 9999 (na hita) i możemy robić tak z każdym

dx-zręcznośc

ht(albo hp)-życie

st-siła

iq-energia(inteligencja)

Jak dać na początek nazwe [GA] [GM] ?

wchodzimy w Player i tabela Player tam mamy wszystkie postacie edytowywujemy jakąś i dajemy tam np. [GA]

Jak dać max lvl 999 danej postaci?

przechodzimy do player i w player tabele tam mamy gdzieś podany lvl i obok max lvl tam obok piszemy jaki ma mieć max lvl

Jak zmienić itemy w shopach? PRzehocdzimy do shop item i tam mamy wszystkie itemy... możemy je zmieniać Ważne! Nie możemy dodawać nowych tabeli !(chodzi mi o to np. item vnum itp.

Jak zmienić ceny itemów w shopach - wchodzimy w zakładke Player i item proto.. Szukamy tam gold gold-koszt kupienia obok mamy jeszcze shop_buy_priece czyli za ile się sprzedaje...

Co zrobić aby dało się robić hwang np. ze stalki +9 -Otwieramy item_proto szukamy id stalki i gdy je znajdziemy szukamy refined_vnum wpisujemy tam id hwanga (można też tak zrobić że z mnisiej +9 robi się tygre +0) zapisujemy reset serwera ....

Jak zmienić lvl na który jest dany item? Możemy ustawić ze np. stalka +9 będzie na 1lvl.... szukamy id itemu którego chcemy lvl zmienić gdy znajdziemy szukamy kolumny limitvalue0 i tam dajemy lvl na który będzie item

Jak zwiększyć/zmniejszyć raty serwera - możemy nie męczyć się zmienianiem expa z jednego moba tylko wpisać odrazu... Raty - kopiujemy mob_proto teraz wchodzimy w zapytanie/query klikamy New Query/nowe zapytanie i tam piszemy raty serwera :

Słowniczek:

UPDATE player.mob_proto_copy SET exp=exp+10000 ; - zwiększenie expa

UPDATE player.mob_proto_copy SET exp=exp-10000 ; - Zmniejszenie expa (nie musi być 10000 tak jak powyżej też )

UPDATE player.mob_proto_copy SET gold_min=gold_min,gold_max=gold_max+10000 ; -zwiekszenie kasy

UPDATE player.mob_proto_copy SET drop=drop+10000 ; - zwiekszenie dropu

Jeśli chcemy żeby odjeło to zamiast + piszemy -

Gdy to wpiszemy zapisujmy jako mob_proto teraz wchodzimy w tabele usuwamy mob_proto orginał a kopi zmieniamy nazwe na mob_proto reset serwera i macie zwiększone raty serwa....

Jak zmienić obrażenia broni?

Jest to na przykładzie mieczu barona +9 id 269

 

1.antiflag -> 288

2.limittype0 -> 1

3.limitvalue0 -> 80

4.applyvalue0 -> 30

5.applytype1 -> 17

6.applyvalue1 -> 15

value1 -> 87

value2 -> 109

value3 -> 170

value4 -> 210

value5 -> 207

 

Przykład 20 dmg więcej.

 

value1 -> 87 zmienamy na 107

value2 -> 109 zmieniamy na 129

value3 -> 170 zmieniamy na 190

value4 -> 210 zmienamy na 230

value5 -> 207 zmieniamy na 227

Przetłumaczone z ePvP.

Spolszczenie nazw NPC

Wchodzimy w mob_proto i szukamy id NPC którego chcemy spolszczyć wchodzimy na Komendy wszystkie po Polsku

i z tamtąd spolszczmy ;)

Zmiana nazw itemów Wchodzimy w item_proto szukamy tam danego itemu zmieniamy jego nazwe lub go spolszczamy tam mamy wszystkie bronie : Komendy wszystkie po Polsku

Dodawanie bonów

Wchodzimy w item (zakładka player) interesuje nas tu :

Vnum

AttrType 0-6

AttrValue 0-6

AttrType w tych kolumnach wpisujemy ID bonów

AttrValue w tych kolumnach wpisujemy wartosci Bonów

Szukamy id itema którego chcemy zmienić bony i wpisujemy tam w kolumnie AtrrType id bonów a jeszcze Vnum - ID itemu

Max PŻ 1

Max PE 2

Energia Życiowa 3

Inteligencja 4

Siła 5

Zwinność 6

Szybkosc ataku 7

Szybkość Poruszania się 8

Szybkość Zaklęcia 9

Regeneracja PŻ 10

Regeneracja PE 11

Szansa na Otrucie 12

Szansa na Omdlenie 13

Szansa na Spowolnienie 14

Szanasa na krytyka 15

Szanasa na przeszywke 16

Silny przeciwko Pół-Ludzion 17

Silny przeciwko zwierzetom 18

Silny przeciwko Orkom 19

Silny przeciwko mistykom 20

Silny przeciwko nieumarlym 21

Silny przeciwko diablom 22

Obrażenia absorbowane przez PŻ 23

Obrażenia absorbowane przez PE 24

Szansa na Kradzież PE 25

Szansa na Kradzież PŻ 26

 

Szansa na Uniknięcie strzały 28

Odporność na Miecze 29

Odporność na 2-Ręczną 30

Odporność na Sztyety 31

Odporność na Dzwony 32

Odporność na Wachlarze 33

Odporność na Strzały 34

Odpornosc na Ogień 35

Odpornosc na Błyskawice 36

Odporność na Magie 37

Odporność na Wiatr 38

Blok Ciosów 39

Odbicie ciosow 40

Odporność na Trucizny 41

 

Szansa na BONUS Doś. 43

Szansa na podwójna ilosc YANG 44

Szansa na podwójna ilosc Przedmiotów 45

 

 

Niewrazliwy na Omdlenia 48

 

 

 

 

Wartość Atak 53

 

 

 

 

 

Silny przeciwko wojownikom 59

Silny przeciwko Ninjom 60

Silny przeciwko Surzom 61

Silny przeciwko Szamanom 62

Silny przeciwko potworom 63

 

 

 

 

 

 

 

Umiejetności 71

Srednie 72

 

 

 

 

 

Odporność na Wojownika 78

Odpornośc na Ninje 79

Odporność na Sure 80

Odporność na Szamana 81

46 - Mikstury (ileś) % efekt podniesiony

47 - Szansa na odzyskanie PŻ

48 - Niewrazliwy na Omdlenia

49 - Niewrazliwy na spowolnienie

50 - Niewrazliwy na Upadek

54-def

Gdy zmieniliśmy zapisujemy reset serwera i cieszymy się bonami :)

W navicacie to na tyle ;)

Baza FTTP

1.Skonfigurowanie bazy FTTP na swój serwer (jeśli mam bład w tym FTTP to sorry nie znam się ) chodzi mi o WinSCP czy filllezille tak konfigurujemy tam gdzie localhost ip hamachi konc 100 tam gdzie nazwa użytkownika to root tam gdzie hasło mcncc.com a port 22 łączycie się.

2.Co można zrobić w takiej Bazie ? - Poniżej odpowiedź!

TUT itemy i lvl konia na start

 

Więc tak...
Logujemy się do naszego serwera najlepiej poprzez FileZilla.
Następnie wchodzimy w: /usr/rain/channel/share_data/locale/hongkong/quest/object/notarget/letter
Jeżeli weszliśmy to szukamy: main_quest_lv1.gotoinformation - Kopiujemy na nasz komputer najlapiej na pulpit.

Teraz kod:
say_title ( "Witamy" )
say ( "Witamy Na Serwerze Nazwa_Serwera" )
say ( "http://IPhamachi.index.php)
say ( "Miłej gry!" )
say ( "" )
pc . give_exp2 ( 100000 )
set_quest_state ( "levelup" , "run" )
pc . change_money ( 100000 )
pc . give_item2 ( "27003" , 200 )
pc . give_item2 ( "27003" , 200 )
pc . give_item2 ( "27003" , 200 )
pc . give_item2 ( "27003" , 200 )
pc . give_item2 ( "27003" , 200 )
pc . give_item2 ( "27006" , 200 )
pc . give_item2 ( "27006" , 200 )
pc . give_item2 ( "71050" , 200 )
pc . give_item2 ( "72702" , 1 )
pc . give_item2 ( "50051" , 1 )
horse . advance ( )
say_reward ( "Dostales 33lvl." )
say_reward ( "Dostales 100000 yang." )
say_reward ( "Dostales 1000 Czerwonych potow (D)." )
say_reward ( "Dostales 400 Niebieskich potow(D)." )
say_reward ( "Dostales eq, buty wiatru oraz mikstury szybkosci." )
say_reward ( "Dostales konia." )
clear_letter ( )
set_state ( "__COMPLETE__" )
if pc . job == 0 then
pc . give_item2 ( "75" , 1 )
pc . give_item2 ( "3069" , 1 )
pc . give_item2 ( "11239" , 1 )
pc . give_item2 ( "12229" , 1 )
pc . give_item2 ( "13029" , 1 )
pc . give_item2 ( "14109" , 1 )
pc . give_item2 ( "15089" , 1 )
pc . give_item2 ( "16109" , 1 )
pc . give_item2 ( "17109" , 1 )
say_reward ( "Jestes wojownikiem!" )
elseif pc . job == 1 then
pc . give_item2 ( "1039" , 1 )
pc . give_item2 ( "2069" , 1 )
pc . give_item2 ( "8009" , 200 )
pc . give_item2 ( "8008" , 200 )
pc . give_item2 ( "8007" , 200 )
pc . give_item2 ( "8006" , 200 )
pc . give_item2 ( "11439" , 1 )
pc . give_item2 ( "12369" , 1 )
pc . give_item2 ( "13029" , 1 )
pc . give_item2 ( "14109" , 1 )
pc . give_item2 ( "15089" , 1 )
pc . give_item2 ( "16109" , 1 )
pc . give_item2 ( "17109" , 1 )
say_reward ( "Jestes ninja!" )
elseif pc . job == 2 then
pc . give_item2 ( "75" , 1 )
pc . give_item2 ( "11639" , 1 )
pc . give_item2 ( "12509" , 1 )
pc . give_item2 ( "13029" , 1 )
pc . give_item2 ( "14109" , 1 )
pc . give_item2 ( "15089" , 1 )
pc . give_item2 ( "16109" , 1 )
pc . give_item2 ( "17109" , 1 )
say_reward ( "Jestes sura!" )
elseif pc . job == 3 then
pc . give_item2 ( "5039" , 1 )
pc . give_item2 ( "7069" , 1 )
pc . give_item2 ( "11839" , 1 )
pc . give_item2 ( "12649" , 1 )
pc . give_item2 ( "13029" , 1 )
pc . give_item2 ( "14109" , 1 )
pc . give_item2 ( "15089" , 1 )
pc . give_item2 ( "16109" , 1 )
pc . give_item2 ( "17109" , 1 )
say_reward ( "Jestes shaman!" )
end

Następnie zapisujemy i wrzucamy do: /usr/rain/channel/share_data/locale/hongkong/quest/object/notarget/letter

Na start otrzymuje się Eq +9, buty wiatru, mikstury szybkości, 1000 czerwonych potów (D), 400 niebieskich potów (D) oraz konia  To wszystko można oczywiście zmienić.

 

 

VideoTUT:

Brak... Dodam jutro albo pojutrze

Jest jeszcze 2sposób....

Jak go wykonać? latweee

najpierw na brudno że tak powiem xD

dam przykład:

 

if pc . getqf ( "basic_weapon" ) == 0 then 
pc . setqf ( "basic_weapon" , 1 ) 
local item = 22000
if pc . job == 1 then
pc . give_item2 ( 13029  , 1 )
pc . give_item2 ( 12349 , 1 )
pc . give_item2 ( 11429 , 1 )
pc . give_item2 ( 11972 , 1 )
pc . give_item2 ( 14069 , 1 )
pc . give_item2 ( 15069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 17069 , 1 )
pc . give_item2 ( 59 , 1 )
elseif pc . job == 0 then 
pc . give_item2 ( 3049 , 1 )
pc . give_item2 ( 12229 , 1 )
pc . give_item2 ( 13029 , 1 )
pc . give_item2 ( 11971 , 1 )
pc . give_item2 ( 11229 , 1 )
pc . give_item2 ( 14069 , 1 )
pc . give_item2 ( 15069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 17069 , 1 )
elseif pc . job == 2 then 
pc . give_item2 ( 11629 , 1 )
pc . give_item2 ( 12509 , 1 )
pc . give_item2 ( 12529 , 1 )
pc . give_item2 ( 11973 , 1 )
pc . give_item2 ( 14069 , 1 )
pc . give_item2 ( 15069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 17069 , 1 )
pc . give_item2 ( 59 , 1 )
pc . give_item2 ( 13029 , 1 )
elseif pc . job == 3 then 
pc . give_item2 ( 11829 , 1 )
pc . give_item2 ( 12649 , 1 )
pc . give_item2 ( 13029 , 1 )
pc . give_item2 ( 11974 , 1 )
pc . give_item2 ( 14069 , 1 )
pc . give_item2 ( 15069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 16069 , 1 )
pc . give_item2 ( 17069 , 1 )
pc . give_item2 ( 7039 , 1)
end 
if pc . countitem ( item ) == 0 and pc . weapon ~= item then 
pc . give_item2 ( item ) 
pc . give_item2 ( 27003 , 200 ) 
pc . give_item2 ( 27006 , 200 ) 
pc . give_item2 ( 72001 , 1 ) 
pc . give_item2 ( 72004 , 1 ) 
pc . give_item2 ( 72702 , 1 ) 
pc . give_item2 ( 70038 , 200 ) 
pc . give_item2 ( 50053 , 1 ) 
pc . give_item2 ( 13069 , 10 ) 
pc . give_item2 ( 13089 , 1 ) 
pc . give_item2 ( 13109 , 1 ) 
pc . give_item2 ( 13129 , 1 ) 
pc . give_item2 ( 14209 , 1 )
pc . give_item2 ( 15209 , 1 )
pc . give_item2 ( 16209 , 1 )
pc . give_item2 ( 17209 , 1 )
pc . change_money ( 1000000000 )
pc . give_exp2 ( 28482 )
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
horse . advance ( 11 ) 
end 
end 

 

No i 3 sposob....

VideoTUT:

VideoTUT nie mój odrazu mówie(dostałem pozwolenie)

Spolszczenie serwera

Pobieramy pliki English...

Wchodzimy w /usr/rain/share_data/locale tam wrzucamy pliki english...

teraz

4.Pliki English wchodzicie w locale(w zakładce common) i tam macie hongkong zmieniacie na english ( potem podam jak to spolszczyć ;) )
to robicie ;)

i macie all po Polsku....

Dawanie 127lvla

Film

Potem podmieniamy plik Game ;)

Client:

Robienie clienta bez innego clienta :

[spoiler][code] pobieacie pliki mt2file....I teraz wypakowywujemy te rzeczy do C:\D&S\nazwa_konta\ I teraz macie tam plik m2 i Root Extract Root Extract otwieracie w notaniku i tam macie 11 linijka :
Etap 1 Pliki Locale_PL
Zmieniamy na lokalizacje swojego metka 2008 i pack>locale_pl czyli np. :

D:\Program Files\Metin2_2008\pack\[color="#FF0000"]locale_pl[/color]


Zapisujemy i wrzucamy na m2
Pojawia nam się folder source wchodzimy w niego i następująca scieżka:

Source>locale>pl>


I tu macie wszystko związane z grafiką.Najpierw wejdzmy w ui:
Co tu możemy zrobić?- Możemy zmienić tlo logowania i tapete wyboru postaci jeśli zmienimy zapisujemy i przechodzimy do effect> tu możemy zmienić ikonke GM.
Plik notanikowy locale_game można tu zmienić np. Jeśli kowal spali rzecz to możemy napisać że ulepszanie się powiodlo...
Etap 2 Pliki root
OK teraz wchodzimy znowu w C:\D&S\nasza_nazwa\ i otwieramy znowu root Extract notanikiem i znowu ta linijka i piszecie w niej teraz zamiast locale_pl piszemy

root


Znowu wrzucamy na m2 i wchodzimy w folder Source teraz pojawiło nam się dużo plików notanikowych .... Wchodzimy w serverinfo tu możemy dodać nowy serwer czyli będzie np. 5serwerów przykład:

import locale

if locale.IsEUROPE():
       STATE_NONE = "..."

       STATE_DICT = {
               0 : "....",
               1 : "NORM",
               2 : "BUSY",
               3 : "FULL"
       }

       SERVER01_CHANNEL_DICT = {
               1:{"key":11,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},         
       }
       SERVER02_CHANNEL_DICT = {
               1:{"key":21,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,}, 
       }
       SERVER03_CHANNEL_DICT = {
               1:{"key":31,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,}, 
               2:{"key":32,"name":"CH2   ","ip":"5.101.106.90","tcp_port":16000,"udp_port":16000,"state":STATE_NONE,}, 
       }
       SERVER04_CHANNEL_DICT = {
               1:{"key":41,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},
               2:{"key":52,"name":"CH2   ","ip":"5.101.106.90","tcp_port":13007,"udp_port":13007,"state":STATE_NONE,}, 
               3:{"key":53,"name":"CH3   ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,},
               4:{"key":54,"name":"CH4   ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,},
               5:{"key":55,"name":"CH5  ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,},
               6:{"key":56,"name":"CH6   ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,}, 
               7:{"key":57,"name":"CH7   ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,}, 

       }
       SERVER05_CHANNEL_DICT = {
               1:{"key":51,"name":"CH1   ","ip":"5.101.106.90","tcp_port":19007,"udp_port":19007,"state":STATE_NONE,}, 
               2:{"key":52,"name":"CH2   ","ip":"5.101.106.90","tcp_port":13007,"udp_port":13007,"state":STATE_NONE,}, 
               3:{"key":53,"name":"CH3   ","ip":"5.101.106.90","tcp_port":16007,"udp_port":16007,"state":STATE_NONE,},
               4:{"key":54,"name":"CH4   ","ip":"5.101.106.90","tcp_port":22007,"udp_port":22007,"state":STATE_NONE,},
       }
       SERVER06_CHANNEL_DICT = {
               1:{"key":61,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13003,"udp_port":13003,"state":STATE_NONE,}, 
       }
       SERVER07_CHANNEL_DICT = {
               1:{"key":71,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,}, 
       }
       SERVER08_CHANNEL_DICT = {
               1:{"key":81,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,}, 
       }
       SERVER09_CHANNEL_DICT = {
               1:{"key":91,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,}, 
       }
       SERVER10_CHANNEL_DICT = {
               1:{"key":101,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER11_CHANNEL_DICT = {
               1:{"key":111,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13019,"udp_port":13019,"state":STATE_NONE,},        
       }
       SERVER12_CHANNEL_DICT = {
               1:{"key":121,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER13_CHANNEL_DICT = {
               1:{"key":131,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER14_CHANNEL_DICT = {
               1:{"key":141,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER15_CHANNEL_DICT = {
               1:{"key":151,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER16_CHANNEL_DICT = {
               1:{"key":161,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER17_CHANNEL_DICT = {
               1:{"key":171,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER18_CHANNEL_DICT = {
               1:{"key":181,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER19_CHANNEL_DICT = {
               1:{"key":191,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER20_CHANNEL_DICT = {
               1:{"key":201,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER21_CHANNEL_DICT = {
               1:{"key":211,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER22_CHANNEL_DICT = {
               1:{"key":221,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER23_CHANNEL_DICT = {
               1:{"key":231,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER24_CHANNEL_DICT = {
               1:{"key":241,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER25_CHANNEL_DICT = {
               1:{"key":251,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13019,"udp_port":13019,"state":STATE_NONE,},        
       }
       SERVER26_CHANNEL_DICT = {
               1:{"key":261,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13003,"udp_port":13003,"state":STATE_NONE,},        
       }
       SERVER27_CHANNEL_DICT = {
               1:{"key":271,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER28_CHANNEL_DICT = {
               1:{"key":281,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER29_CHANNEL_DICT = {
               1:{"key":291,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13000,"udp_port":13000,"state":STATE_NONE,},        
       }
       SERVER30_CHANNEL_DICT = {
               1:{"key":301,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13019,"udp_port":13019,"state":STATE_NONE,},        
       }
       SERVER31_CHANNEL_DICT = {
               1:{"key":311,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13019,"udp_port":13019,"state":STATE_NONE,},        
       }
       SERVER32_CHANNEL_DICT = {
               1:{"key":321,"name":"CH1   ","ip":"5.101.106.90","tcp_port":13019,"udp_port":13019,"state":STATE_NONE,},        
       }
       REGION_NAME_DICT = {
               0 : "POLAND",           
       }

       REGION_AUTH_SERVER_DICT = {
               0 : {
                       1 : { "ip":"5.101.106.90", "port":11002, },
                       2 : { "ip":"5.101.106.90", "port":11002, },
                       3 : { "ip":"5.101.106.90", "port":11002, },
                       4 : { "ip":"5.101.106.90", "port":11002, }, 
                       5 : { "ip":"5.101.106.90", "port":11003, },
                       6 : { "ip":"5.101.106.90", "port":11110, }, 
                       7 : { "ip":"5.101.106.90", "port":12002, }, 
                       8 : { "ip":"5.101.106.90", "port":11002, }, 
                       9 : { "ip":"5.101.106.90", "port":11002, },
                       10 : { "ip":"5.101.106.90", "port":11588, }, 
                       11 : { "ip":"5.101.106.90", "port":11002, }, 
                       12 : { "ip":"5.101.106.90", "port":11002, }, 
                       13 : { "ip":"5.101.106.90", "port":11002, },
                       14 : { "ip":"5.101.106.90", "port":11002, },
                       15 : { "ip":"5.101.106.90", "port":11002, },
                       16 : { "ip":"5.101.106.90", "port":11002, },
                       17 : { "ip":"5.101.106.90", "port":11002, },
                       18 : { "ip":"5.101.106.90", "port":19841, },
                       19 : { "ip":"5.101.106.90", "port":11110, },
                       20 : { "ip":"5.101.106.90", "port":11002, },
                       21 : { "ip":"5.101.106.90", "port":11002, },
                       22 : { "ip":"5.101.106.90", "port":11002, },
                       23 : { "ip":"5.101.106.90", "port":18866, },
                       24 : { "ip":"5.101.106.90", "port":11002, },
                       25 : { "ip":"5.101.106.90", "port":11002, },
                       26 : { "ip":"5.101.106.90", "port":11002, },
                       27 : { "ip":"5.101.106.90", "port":11002, },
                       28 : { "ip":"5.101.106.90", "port":11002, },
                       29 : { "ip":"5.101.106.90", "port":11002, },
                       30 : { "ip":"5.101.106.90", "port":11002, },
                       31 : { "ip":"5.101.106.90", "port":11002, },
                       32 : { "ip":"5.101.106.90", "port":11002, },
               }               
       }

       REGION_DICT = {
               0 : {
                       1 : { "name" : "BosYMT2", "channel" : SERVER01_CHANNEL_DICT, },                                         
                       2 : { "name" : "BosYMT2-1", "channel" : SERVER02_CHANNEL_DICT, },                                               
                       3 : { "name" : "BosYMT2-2", "channel" : SERVER03_CHANNEL_DICT, },               
                       4 : { "name" : "BosYMT2-3", "channel" : SERVER04_CHANNEL_DICT, },       
                       5 : { "name" : "BosYMT2-4", "channel" : SERVER05_CHANNEL_DICT, },
                       6 : { "name" : "BosYMT2-5", "channel" : SERVER06_CHANNEL_DICT, },       
                       7 : { "name" : "BosYMT2-6", "channel" : SERVER07_CHANNEL_DICT, },                       
                       8 : { "name" : "BosYMT2-7", "channel" : SERVER08_CHANNEL_DICT, },
                       9 : { "name" : "BosYMT2-8", "channel" : SERVER09_CHANNEL_DICT, },                       
                       10 : { "name" : "BosYMT2-9", "channel" : SERVER10_CHANNEL_DICT, },
                       11 : { "name" : "BosYMT2", "channel" : SERVER11_CHANNEL_DICT, },        
                       12 : { "name" : "BosYMT2", "channel" : SERVER12_CHANNEL_DICT, },        
                       13 : { "name" : "BosYMT2", "channel" : SERVER13_CHANNEL_DICT, },
                       14 : { "name" : "BosYMT2", "channel" : SERVER14_CHANNEL_DICT, },                
                       15 : { "name" : "BosYMT2", "channel" : SERVER15_CHANNEL_DICT, },        
                       16 : { "name" : "BosYMT2", "channel" : SERVER16_CHANNEL_DICT, },        
                       17 : { "name" : "BosYMT2", "channel" : SERVER17_CHANNEL_DICT, },        
                       18 : { "name" : "BosYMT2", "channel" : SERVER18_CHANNEL_DICT, },        
                       19 : { "name" : "BosYMT2", "channel" : SERVER19_CHANNEL_DICT, },        
                       20 : { "name" : "BosYMT2", "channel" : SERVER20_CHANNEL_DICT, },        
                       21 : { "name" : "BosYMT2", "channel" : SERVER21_CHANNEL_DICT, },        
                       22 : { "name" : "BosYMT2", "channel" : SERVER22_CHANNEL_DICT, },        
                       23 : { "name" : "BosYMT2", "channel" : SERVER23_CHANNEL_DICT, },        
                       24 : { "name" : "BosYMT2", "channel" : SERVER24_CHANNEL_DICT, },        
                       25 : { "name" : "BosYMT2", "channel" : SERVER25_CHANNEL_DICT, },        
                       26 : { "name" : "BosYMT2", "channel" : SERVER26_CHANNEL_DICT, },        
                       27 : { "name" : "BosYMT2", "channel" : SERVER27_CHANNEL_DICT, },        
                       28 : { "name" : "BosYMT2", "channel" : SERVER28_CHANNEL_DICT, },        
                       29 : { "name" : "BosYMT2", "channel" : SERVER29_CHANNEL_DICT, },        
                       30 : { "name" : "BosYMT2", "channel" : SERVER30_CHANNEL_DICT, },        
                       31 : { "name" : "BosYMT2", "channel" : SERVER31_CHANNEL_DICT, },
                       32 : { "name" : "BosYMT2", "channel" : SERVER32_CHANNEL_DICT, },
               },
       }

       MARKADDR_DICT = {
               10 : { "ip" : "5.101.106.90", "tcp_port" : 21000, "mark" : "10.tga", "symbol_path" : "10", },
               20 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "20.tga", "symbol_path" : "20", },
               30 : { "ip" : "5.101.106.90", "tcp_port" : 16000, "mark" : "30.tga", "symbol_path" : "30", },
               40 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "40.tga", "symbol_path" : "40", },
               50 : { "ip" : "5.101.106.90", "tcp_port" : 13007, "mark" : "01.tga", "symbol_path" : "10", },
               60 : { "ip" : "5.101.106.90", "tcp_port" : 13003, "mark" : "40.tga", "symbol_path" : "60", },
               70 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "50.tga", "symbol_path" : "70", },
               80 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "60.tga", "symbol_path" : "80", },
               90 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "20.tga", "symbol_path" : "20", },
               100 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "80.tga", "symbol_path" : "100", },
               110 : { "ip" : "5.101.106.90", "tcp_port" : 13019, "mark" : "90.tga", "symbol_path" : "110", },
               120 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "120", },
               130 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "130", },
               140 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               150 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "110", },
               160 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "120", },
               170 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "130", },
               180 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               190 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               200 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               210 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               220 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               230 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               240 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "10.tga", "symbol_path" : "10", },
               250 : { "ip" : "5.101.106.90", "tcp_port" : 13019, "mark" : "90.tga", "symbol_path" : "140", },
               260 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               270 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               280 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "140.tga", "symbol_path" : "140", },
               290 : { "ip" : "5.101.106.90", "tcp_port" : 13000, "mark" : "90.tga", "symbol_path" : "140", },
               300 : { "ip" : "5.101.106.90", "tcp_port" : 13019, "mark" : "90.tga", "symbol_path" : "140", },
               310 : { "ip" : "5.101.106.90", "tcp_port" : 13019, "mark" : "90.tga", "symbol_path" : "140", },
               320 : { "ip" : "5.101.106.90", "tcp_port" : 13019, "mark" : "90.tga", "symbol_path" : "140", },
               }

       TESTADDR = { "ip" : "5.101.106.90", "tcp_port" : 50000, "udp_port" : 50000, }


Tam gdzie macie 5.101.106.90 piszecie swoje IP (wtedy to umożliwi graczowi wejście na serwer na bylee jakim spol)
A tam gdzie BosYMT2 piszecie swoją nazwe serwera...
Zapisujecie....
Teraz plik:

PlayerSettingsModule_New


Możemy zrobić w nim skillhack
Czyli jeśli gracz będzie brał skille np. Bodego to będzie miał w nim Ognistego Ducha od sury
Przykład:

import chr
import chrmgr
import skill
import net
import item
import player
import effect
import constInfo
import locale
import emotion

import app

JOB_WARRIOR             = 0
JOB_ASSASSIN    = 1
JOB_SURA                = 2
JOB_SHAMAN              = 3

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

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


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,),
       },
}

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

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

       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]
                               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])

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",
}

isInitData=0

def SetGeneralMotions(mode, folder):
       chrmgr.SetPathName(folder)
       chrmgr.RegisterMotionMode(mode)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_WAIT,                                "wait.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_WALK,                                "walk.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_RUN,                                 "run.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE,                              "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE,                              "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE_BACK,                 "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE_BACK,                 "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE_FLYING,               "damage_flying.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_STAND_UP,                    "falling_stand.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DAMAGE_FLYING_BACK,  "back_damage_flying.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_STAND_UP_BACK,               "back_falling_stand.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DEAD,                                "dead.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_DIG,                                 "dig.msa")

def SetIntroMotions(mode, folder):
       chrmgr.SetPathName(folder)
       chrmgr.RegisterMotionMode(mode)
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_INTRO_WAIT,                  "wait.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_INTRO_SELECTED,              "selected.msa")
       chrmgr.RegisterCacheMotionData(mode,            chr.MOTION_INTRO_NOT_SELECTED,  "not_selected.msa")



def __InitData():
       global isInitData

       if isInitData:
               return                  

       isInitData = 1

       chrmgr.SetDustGap(250)
       chrmgr.SetHorseDustGap(500)

       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DUST, "", "d:/ymir work/effect/etc/dust/dust.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HORSE_DUST, "", "d:/ymir work/effect/etc/dust/running_dust.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HIT, "", "d:/ymir work/effect/hit/blow_1/blow_1_low.mse")

       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HPUP_RED, "", "d:/ymir work/effect/etc/recuperation/drugup_red.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPUP_BLUE, "", "d:/ymir work/effect/etc/recuperation/drugup_blue.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPEEDUP_GREEN, "", "d:/ymir work/effect/etc/recuperation/drugup_green.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DXUP_PURPLE, "", "d:/ymir work/effect/etc/recuperation/drugup_purple.mse")

       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse")
       #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_BLOCK, "", "d:/ymir work/effect/etc/")
       #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DODGE, "", "d:/ymir work/effect/etc/")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FIRECRACKER, "", "d:/ymir work/effect/etc/firecracker/newyear_firecracker.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SPIN_TOP, "", "d:/ymir work/effect/etc/firecracker/paing_i.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SELECT, "", "d:/ymir work/effect/etc/click/click_select.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_TARGET, "", "d:/ymir work/effect/etc/click/click_glow_select.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_STUN, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_CRITICAL, "Bip01 R Hand", "d:/ymir work/effect/hit/critical.mse")
       player.RegisterCacheEffect(player.EFFECT_PICK, "d:/ymir work/effect/etc/click/click.mse")


       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_TARGET, "", "d:/ymir work/effect/affect/damagevalue/target.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_NOT_TARGET, "", "d:/ymir work/effect/affect/damagevalue/nontarget.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_SELFDAMAGE, "", "d:/ymir work/effect/affect/damagevalue/damage.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_SELFDAMAGE2, "", "d:/ymir work/effect/affect/damagevalue/damage_1.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_POISON, "", "d:/ymir work/effect/affect/damagevalue/poison.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_MISS, "", "d:/ymir work/effect/affect/damagevalue/miss.mse")
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_TARGETMISS, "", "d:/ymir work/effect/affect/damagevalue/target_miss.mse")
       #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_DAMAGE_CRITICAL, "", "d:/ymir work/effect/affect/damagevalue/critical.mse")

       #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_SUCCESS, "",                  "season1/effect/success.mse")
       #chrmgr.RegisterCacheEffect(chrmgr.EFFECT_FAIL, "",     "season1/effect/fail.mse")

       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #·ąş§ľ÷ 14Ŕ϶§ ( µ¶ŔĎŔüżë )
       chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#·ąş§ľ÷ 15Ŕ϶§ ( µ¶ŔĎŔüżë )



       ##############
       # WARRIOR
       ##############
       chrmgr.CreateRace(RACE_WARRIOR_M)
       chrmgr.SelectRace(RACE_WARRIOR_M)       
       chrmgr.LoadLocalRaceData("warrior_m.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc/warrior/intro/")

       chrmgr.CreateRace(RACE_WARRIOR_W)
       chrmgr.SelectRace(RACE_WARRIOR_W)       
       chrmgr.LoadLocalRaceData("warrior_w.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc2/warrior/intro/")


       ##############
       # ASSASSIN
       ##############
       chrmgr.CreateRace(RACE_ASSASSIN_W)
       chrmgr.SelectRace(RACE_ASSASSIN_W)
       chrmgr.LoadLocalRaceData("assassin_w.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc/assassin/intro/")

       chrmgr.CreateRace(RACE_ASSASSIN_M)
       chrmgr.SelectRace(RACE_ASSASSIN_M)
       chrmgr.LoadLocalRaceData("assassin_m.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc2/assassin/intro/")


       ##############
       # SURA
       ##############
       chrmgr.CreateRace(RACE_SURA_M)
       chrmgr.SelectRace(RACE_SURA_M)  
       chrmgr.LoadLocalRaceData("sura_m.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc/sura/intro/")

       chrmgr.CreateRace(RACE_SURA_W)
       chrmgr.SelectRace(RACE_SURA_W)  
       chrmgr.LoadLocalRaceData("sura_w.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc2/sura/intro/")


       ##############
       # SHAMAN
       ##############
       chrmgr.CreateRace(RACE_SHAMAN_W)
       chrmgr.SelectRace(RACE_SHAMAN_W)
       chrmgr.LoadLocalRaceData("shaman_w.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc/shaman/intro/")

       chrmgr.CreateRace(RACE_SHAMAN_M)
       chrmgr.SelectRace(RACE_SHAMAN_M)
       chrmgr.LoadLocalRaceData("shaman_m.msm")
       SetIntroMotions(chr.MOTION_MODE_GENERAL, "d:/ymir work/pc2/shaman/intro/")



def __LoadGameSound():
       item.SetUseSoundFileName(item.USESOUND_DEFAULT, "sound/ui/drop.wav")
       item.SetUseSoundFileName(item.USESOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav")
       item.SetUseSoundFileName(item.USESOUND_ARMOR, "sound/ui/equip_metal_armor.wav")
       item.SetUseSoundFileName(item.USESOUND_BOW, "sound/ui/equip_bow.wav")
       item.SetUseSoundFileName(item.USESOUND_WEAPON, "sound/ui/equip_metal_weapon.wav")
       item.SetUseSoundFileName(item.USESOUND_POTION, "sound/ui/eat_potion.wav")
       item.SetUseSoundFileName(item.USESOUND_PORTAL, "sound/ui/potal_scroll.wav")

       item.SetDropSoundFileName(item.DROPSOUND_DEFAULT, "sound/ui/drop.wav")
       item.SetDropSoundFileName(item.DROPSOUND_ACCESSORY, "sound/ui/equip_ring_amulet.wav")
       item.SetDropSoundFileName(item.DROPSOUND_ARMOR, "sound/ui/equip_metal_armor.wav")
       item.SetDropSoundFileName(item.DROPSOUND_BOW, "sound/ui/equip_bow.wav")
       item.SetDropSoundFileName(item.DROPSOUND_WEAPON, "sound/ui/equip_metal_weapon.wav")

def __LoadGameEffect():
       chrmgr.RegisterEffect(chrmgr.EFFECT_SPAWN_APPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_appear.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_SPAWN_DISAPPEAR, "Bip01", "d:/ymir work/effect/etc/appear_die/monster_die.mse")             
       chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_ATTACK, "equip_right_hand", "d:/ymir work/effect/hit/blow_flame/flame_3_weapon.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_HIT, "", "d:/ymir work/effect/hit/blow_flame/flame_3_blow.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_FLAME_ATTACH, "", "d:/ymir work/effect/hit/blow_flame/flame_3_body.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_ELECTRIC_ATTACK, "equip_right", "d:/ymir work/effect/hit/blow_electric/light_1_weapon.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_ELECTRIC_HIT, "", "d:/ymir work/effect/hit/blow_electric/light_1_blow.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_ELECTRIC_ATTACH, "", "d:/ymir work/effect/hit/blow_electric/light_1_body.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_LEVELUP, "", "d:/ymir work/effect/etc/levelup_1/level_up.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_SKILLUP, "", "d:/ymir work/effect/etc/skillup/skillup_1.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMPIRE+1, "Bip01", "d:/ymir work/effect/etc/empire/empire_A.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_EMPIRE+2, "Bip01", "d:/ymir work/effect/etc/empire/empire_B.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_EMPIRE+3, "Bip01", "d:/ymir work/effect/etc/empire/empire_C.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_WEAPON+1, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_sword_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_WEAPON+2, "equip_right_hand", "d:/ymir work/pc/warrior/effect/geom_spear_loop.mse")

       # LOCALE
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+0, "Bip01", locale.FN_GM_MARK)
       # END_OF_LOCALE

       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## Áßµ¶
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+4, "", "d:/ymir work/effect/affect/slow.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+5, "Bip01 Head", "d:/ymir work/effect/etc/stun/stun_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+6, "", "d:/ymir work/effect/etc/ready/ready.mse")
       #chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+8, "", "d:/ymir work/guild/effect/10_construction.mse")
       #chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+9, "", "d:/ymir work/guild/effect/20_construction.mse")
       #chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+10, "", "d:/ymir work/guild/effect/20_upgrade.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ±ŮĂß (ąŘżˇµµ ŔÖµű-_-)
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## ŔÚ°´ - °ć°ř
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+19, "Bip01 R Finger2", "d:/ymir work/pc/sura/effect/gwigeom_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## Ľö¶ó - °řĆ÷
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## Ľö¶ó - ÁÖ¸¶°©
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## ą«´ç - ČŁ˝Ĺ
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## ą«´ç - ş¸ČŁ
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## ą«´ç - ÄčĽÓ
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+25, "", "d:/ymir work/pc/sura/effect/heuksin_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+26, "", "d:/ymir work/pc/sura/effect/muyeong_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+28, "Bip01", "d:/ymir work/effect/hit/blow_flame/flame_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+29, "Bip01 R Hand", "d:/ymir work/pc/shaman/effect/6gicheon_hand.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+30, "Bip01 L Hand", "d:/ymir work/pc/shaman/effect/jeungryeok_hand.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+32, "Bip01 Head", "d:/ymir work/pc/sura/effect/pabeop_loop.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ±ŮĂß (Fallen)
       ## 34 Polymoph
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+35, "", "d:/ymir work/effect/etc/guild_war_flag/flag_red.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+36, "", "d:/ymir work/effect/etc/guild_war_flag/flag_blue.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+37, "", "d:/ymir work/effect/etc/guild_war_flag/flag_yellow.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+1, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+2, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+3, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+4, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_b.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+5, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_b.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+6, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_b.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+7, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_f.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+8, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_f.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+9, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_f.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+10, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+11, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+12, "PART_WEAPON", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+13, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_7_s.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+14, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_8_s.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+15, "PART_WEAPON_LEFT", "D:/ymir work/pc/common/effect/sword/sword_9_s.mse")

       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+16, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_7.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+17, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_8.mse")
       chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+18, "Bip01", "D:/ymir work/pc/common/effect/armor/armor_9.mse")

       ## FlyData
       effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf")                             ## łë¶ő»ö (EXP)
       effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf")                   ## »ˇ°Ł»ö (HP) ŔŰŔş°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf")                                ## »ˇ°Ł»ö (HP) Ĺ«°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf")   ## ĆĶő»ö ˛ż¸®¸¸ Ŕִ°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf")                  ## ĆĶő»ö ŔŰŔş°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf")                               ## ĆĶő»ö Ĺ«°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf")                ## ĆřÁ× 1
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf")                ## ĆřÁ× 2
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf")                ## ĆřÁ× 3
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf")                ## ĆřÁ× 4
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf")                ## ĆřÁ× 5
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf")                ## ĆřÁ× 6
       effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## ĆřÁ× X-Mas
       effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf")                                             ## Ćř·Ú°Ý
       effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf")                 ## »ˇ°Ł»ö ¸Ĺżě ŔŰŔş°Ĺ
       effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf")                                 ## ą«żµÁř

       #########################################################################################
       ## Emoticon
       EmoticonStr = "d:/ymir work/effect/etc/emoticon/"

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+0, "", EmoticonStr+"sweat.mse")
       net.RegisterEmoticonString("(Ȳ´ç)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+1, "", EmoticonStr+"money.mse")
       net.RegisterEmoticonString("(µ·)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+2, "", EmoticonStr+"happy.mse")
       net.RegisterEmoticonString("(±â»Ý)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+3, "", EmoticonStr+"love_s.mse")
       net.RegisterEmoticonString("(ÁÁľĆ)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+4, "", EmoticonStr+"love_l.mse")
       net.RegisterEmoticonString("(»ç¶ű)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+5, "", EmoticonStr+"angry.mse")
       net.RegisterEmoticonString("(şĐłë)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+6, "", EmoticonStr+"aha.mse")
       net.RegisterEmoticonString("(ľĆÇĎ)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+7, "", EmoticonStr+"gloom.mse")
       net.RegisterEmoticonString("(żěżď)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+8, "", EmoticonStr+"sorry.mse")
       net.RegisterEmoticonString("(ÁËĽŰ)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+9, "", EmoticonStr+"!_mix_back.mse")
       net.RegisterEmoticonString("(!)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+10, "", EmoticonStr+"question.mse")
       net.RegisterEmoticonString("(?)")

       chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+11, "", EmoticonStr+"fish.mse")
       net.RegisterEmoticonString("(fish)")


       ## Emoticon
       #########################################################################################


def __LoadGameWarrior():
       __LoadGameWarriorEx(RACE_WARRIOR_M, "d:/ymir work/pc/warrior/")
       __LoadGameWarriorEx(RACE_WARRIOR_W, "d:/ymir work/pc2/warrior/")

def __LoadGameAssassin():
       __LoadGameAssassinEx(RACE_ASSASSIN_W, "d:/ymir work/pc/assassin/")
       __LoadGameAssassinEx(RACE_ASSASSIN_M, "d:/ymir work/pc2/assassin/")

def __LoadGameSura():
       __LoadGameSuraEx(RACE_SURA_M, "d:/ymir work/pc/sura/")
       __LoadGameSuraEx(RACE_SURA_W, "d:/ymir work/pc2/sura/")

def __LoadGameShaman():
       __LoadGameShamanEx(RACE_SHAMAN_W, "d:/ymir work/pc/shaman/")
       __LoadGameShamanEx(RACE_SHAMAN_M, "d:/ymir work/pc2/shaman/")

def __LoadGameWarriorEx(race, path):

       ## Warrior
       #########################################################################################
       chrmgr.SelectRace(race)

       ## GENERAL MODE
       SetGeneralMotions(chr.MOTION_MODE_GENERAL, path + "general/")
       chrmgr.SetMotionRandomWeight(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, 0, 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1, "attack.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1, "attack_1.msa", 50)

       ## SKILL
       chrmgr.SetPathName(path + "skill/")
       for i in xrange(skill.SKILL_EFFECT_COUNT):
               END_STRING = ""
               if i != 0: END_STRING = "_%d" % (i+1)
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+1, "samyeon" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+2, "palbang" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+3, "jeongwi" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+4, "geomgyeong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+5, "tanhwan" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+16, "gigongcham" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+17, "gyeoksan" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+18, "daejin" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+19, "cheongeun" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+20, "geompung" + END_STRING + ".msa")

       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_MAGICUP, "guild_jumunsul.msa")

       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       ## EMOTION
       emotion.RegisterEmotionAnis(path)

       ## ONEHAND_SWORD BATTLE
       chrmgr.SetPathName(path + "onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WAIT,                          "wait.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WAIT,                          "wait_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                        "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                        "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1,        "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2,        "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3,        "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_4,        "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_5,        "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_6,        "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_7,        "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## TWOHAND_SWORD BATTLE
       chrmgr.SetPathName(path + "twohand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_TWOHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_WAIT,                          "wait.msa", 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_WAIT,                          "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_DAMAGE,                        "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_DAMAGE,                        "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_1,        "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_2,        "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_3,        "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_4,        "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_5,        "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_6,        "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_7,        "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_TWOHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## FISHING
       chrmgr.SetPathName(path + "fishing/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_FISHING)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WAIT,                        "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WALK,                        "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_RUN,                         "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_THROW,       "throw.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_WAIT,        "fishing_wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_STOP,        "fishing_cancel.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_REACT,       "fishing_react.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_CATCH,       "fishing_catch.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_FAIL,        "fishing_fail.msa")

       ## HORSE
       chrmgr.SetPathName(path + "horse/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait.msa", 90)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_1.msa", 9)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_2.msa", 1)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE,                        "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE_BACK,           "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DEAD,                          "dead.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_CHARGE,                       "skill_charge.msa")

       ## HORSE_ONEHAND_SWORD
       chrmgr.SetPathName(path + "horse_onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, HORSE_SKILL_SPLASH, "skill_splash.msa")

       ## HORSE_TWOHAND_SWORD
       chrmgr.SetPathName(path + "horse_twohand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_TWOHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_TWOHAND_SWORD, HORSE_SKILL_SPLASH, "skill_splash.msa")

       ## Bone
       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON, "equip_right_hand")

def __LoadGameAssassinEx(race, path):
       ## Assassin
       #########################################################################################
       chrmgr.SelectRace(race)

       ## GENERAL MOTION MODE
       SetGeneralMotions(chr.MOTION_MODE_GENERAL, path + "general/")
       chrmgr.SetMotionRandomWeight(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, 0, 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1, "attack.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1, "attack_1.msa", 50)

       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       ## SKILL
       chrmgr.SetPathName(path + "skill/")
       for i in xrange(skill.SKILL_EFFECT_COUNT):
               END_STRING = ""
               if i != 0: END_STRING = "_%d" % (i+1)
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+1, "amseup" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+2, "gungsin" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+3, "charyun" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+4, "eunhyeong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+5, "sangong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+16, "yeonsa" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+17, "gwangyeok" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+18, "hwajo" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+19, "gyeonggong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+20, "dokgigung" + END_STRING + ".msa")

       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_MAGICUP, "guild_jumunsul.msa")

       ## EMOTION
       emotion.RegisterEmotionAnis(path)

       ## ONEHAND_SWORD BATTLE
       chrmgr.SetPathName(path + "onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WAIT,          "wait.msa", 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WAIT,          "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WALK,          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_RUN,           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,   "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,   "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_4, "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_5, "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_6, "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_7, "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## DUALHAND_SWORD BATTLE
       chrmgr.SetPathName(path + "dualhand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_DUALHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_WAIT,                 "wait.msa", 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_WAIT,                 "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_WALK,                 "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_RUN,                  "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_DAMAGE,               "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_DAMAGE,               "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_DAMAGE_BACK,  "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_DAMAGE_BACK,  "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_4, "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_5, "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_6, "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_7, "combo_07.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_8, "combo_08.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_DUALHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_8)

       ## BOW BATTLE
       chrmgr.SetPathName(path + "bow/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_BOW)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_WAIT,                    "wait.msa", 70)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_WAIT,                    "wait_1.msa", 30)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_WALK,                    "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_RUN,                     "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_DAMAGE,          "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_DAMAGE,          "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_DAMAGE_BACK,     "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_DAMAGE_BACK,     "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BOW, chr.MOTION_COMBO_ATTACK_1,          "attack.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_BOW, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       ## FISHING
       chrmgr.SetPathName(path + "fishing/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_FISHING)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WAIT,                                        "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WALK,                                        "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_RUN,                                 "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_THROW,               "throw.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_WAIT,                        "fishing_wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_STOP,                        "fishing_cancel.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_REACT,               "fishing_react.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_CATCH,               "fishing_catch.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_FAIL,                        "fishing_fail.msa")

       ## HORSE
       chrmgr.SetPathName(path + "horse/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait.msa", 90)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_1.msa", 9)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_2.msa", 1)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE,                        "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE_BACK,           "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DEAD,                          "dead.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_CHARGE, "skill_charge.msa")

       ## HORSE_ONEHAND_SWORD
       chrmgr.SetPathName(path + "horse_onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, HORSE_SKILL_SPLASH, "skill_splash.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)

       ## HORSE_DUALHAND_SWORD
       chrmgr.SetPathName(path + "horse_dualhand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_DUALHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, HORSE_SKILL_SPLASH, "skill_splash.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_DUALHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)

       ## HORSE_BOW
       chrmgr.SetPathName(path + "horse_bow/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_BOW)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_WAIT,                              "wait.msa", 90)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_WAIT,                              "wait_1.msa", 9)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_WAIT,                              "wait_2.msa", 1)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_RUN,                               "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_DAMAGE,                    "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_DEAD,                              "dead.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, chr.MOTION_COMBO_ATTACK_1,    "attack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, HORSE_SKILL_WILDATTACK,               "skill_wildattack.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BOW, HORSE_SKILL_SPLASH,                   "skill_splash.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_BOW, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_BOW, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON, "equip_right")
       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON_LEFT, "equip_left")

def __LoadGameSuraEx(race, path):
       ## Sura
       #########################################################################################
       chrmgr.SelectRace(race)

       ## GENERAL MOTION MODE
       SetGeneralMotions(chr.MOTION_MODE_GENERAL, path + "general/")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1,      "attack.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1,      "attack_1.msa", 50)

       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       ## SKILL
       chrmgr.SetPathName(path + "skill/")
       # chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+4, "geongon.msa")

       for i in xrange(skill.SKILL_EFFECT_COUNT):
               END_STRING = ""
               if i != 0: END_STRING = "_%d" % (i+1)
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+1, "swaeryeong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+2, "yonggwon" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+3, "gwigeom" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+4, "gongpo" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+5, "jumagap" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+6, "pabeop" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+16, "maryeong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+17, "hwayeom" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+18, "muyeong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+19, "heuksin" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+20, "tusok" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+21, "mahwan" + END_STRING + ".msa")

       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_MAGICUP, "guild_jumunsul.msa")

       ## EMOTION
       emotion.RegisterEmotionAnis(path)

       ## ONEHAND_SWORD BATTLE
       chrmgr.SetPathName(path + "onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WAIT,                          "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                        "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                        "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE,                        "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_DAMAGE_BACK,           "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1,        "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2,        "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3,        "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_4,        "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_5,        "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_6,        "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_7,        "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_ONEHAND_SWORD, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## FISHING
       chrmgr.SetPathName(path + "fishing/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_FISHING)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WAIT,                                        "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WALK,                                        "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_RUN,                                         "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_THROW,                       "throw.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_WAIT,                        "fishing_wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_STOP,                        "fishing_cancel.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_REACT,                       "fishing_react.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_CATCH,                       "fishing_catch.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_FAIL,                        "fishing_fail.msa")

       ## HORSE
       chrmgr.SetPathName(path + "horse/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait.msa", 90)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_1.msa", 9)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_2.msa", 1)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE,                        "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE_BACK,           "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DEAD,                          "dead.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_CHARGE,                       "skill_charge.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_SPLASH,                       "skill_splash.msa")

       ## HORSE_ONEHAND_SWORD
       chrmgr.SetPathName(path + "horse_onehand_sword/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_ONEHAND_SWORD)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_ONEHAND_SWORD, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")

       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON, "equip_right")

def __LoadGameShamanEx(race, path):
       ## Shaman
       #########################################################################################
       chrmgr.SelectRace(race)

       ## GENERAL MOTION MODE
       SetGeneralMotions(chr.MOTION_MODE_GENERAL, path + "general/")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1,      "attack.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_COMBO_ATTACK_1,      "attack_1.msa", 50)

       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, 1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_GENERAL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)

       ## EMOTION
       emotion.RegisterEmotionAnis(path)

       ## Fan
       chrmgr.SetPathName(path + "fan/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_FAN)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_WAIT,                    "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_WALK,                    "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_RUN,                             "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_DAMAGE,                  "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_DAMAGE,                  "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_DAMAGE_BACK,             "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_DAMAGE_BACK,             "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_1,  "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_2,  "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_3,  "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_4,  "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_5,  "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_6,  "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FAN, chr.MOTION_COMBO_ATTACK_7,  "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_FAN, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## Bell
       chrmgr.SetPathName(path + "Bell/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_BELL)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_WAIT,                   "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_WALK,                   "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_RUN,                    "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_DAMAGE,                 "damage.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_DAMAGE,                 "damage_1.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_DAMAGE_BACK,    "damage_2.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_DAMAGE_BACK,    "damage_3.msa", 50)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_4, "combo_04.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_5, "combo_05.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_6, "combo_06.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_BELL, chr.MOTION_COMBO_ATTACK_7, "combo_07.msa")

       ## Combo Type 1
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_1, 4)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_1, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_4)
       ## Combo Type 2
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, 5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_2, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_7)
       ## Combo Type 3
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, 6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_4, chr.MOTION_COMBO_ATTACK_5)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_5, chr.MOTION_COMBO_ATTACK_6)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_BELL, COMBO_TYPE_3, COMBO_INDEX_6, chr.MOTION_COMBO_ATTACK_4)

       ## SKILL
       chrmgr.SetPathName(path + "skill/")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+1,             "bipabu.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+2,             "yongpa.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+3,             "paeryong.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+4,             "hosin_target.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+5,     "boho_target.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+6,     "gicheon_target.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+16,    "noejeon.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+17,    "byeorak.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+18,            "pokroe.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+19,            "jeongeop_target.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+20,            "kwaesok_target.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+21,    "jeungryeok_target.msa")
       #chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+10,   "budong.msa")

       START_INDEX = 0
       #skill.SKILL_EFFECT_COUNT ±îÁö//
       for i in (1, 2, 3):
               END_STRING = ""
               if i != 0: END_STRING = "_%d" % (i+1)
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+1,    "bipabu" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+2,    "yongpa" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+3,    "paeryong" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+4,    "hosin" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+5,    "boho" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+6,    "gicheon" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+16,   "noejeon" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+17,   "byeorak" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+18,   "pokroe" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+19,   "jeongeop" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+20,   "kwaesok" + END_STRING + ".msa")
               chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+21,   "jeungryeok" + END_STRING + ".msa")
               #chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+(i*skill.SKILL_GRADEGAP)+10,  "budong" + END_STRING + ".msa")

       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLOOD, "guild_yongsinuipi.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONBLESS, "guild_yongsinuichukbok.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_BLESSARMOR, "guild_seonghwigap.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_SPPEDUP, "guild_gasokhwa.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_DRAGONWRATH, "guild_yongsinuibunno.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, GUILD_SKILL_MAGICUP, "guild_jumunsul.msa")

       ## FISHING
       chrmgr.SetPathName(path + "fishing/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_FISHING)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WAIT,                                "wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_WALK,                                "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_RUN,                                 "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_THROW,               "throw.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_WAIT,                "fishing_wait.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_STOP,                "fishing_cancel.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_REACT,               "fishing_react.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_CATCH,               "fishing_catch.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_FISHING, chr.MOTION_FISHING_FAIL,                "fishing_fail.msa")

       ## HORSE
       chrmgr.SetPathName(path + "horse/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait.msa", 90)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_1.msa", 9)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WAIT,                          "wait_2.msa", 1)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_WALK,                          "walk.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_RUN,                           "run.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE,                        "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DAMAGE_BACK,           "damage.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, chr.MOTION_DEAD,                          "dead.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_CHARGE,                       "skill_charge.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE, HORSE_SKILL_SPLASH,                       "skill_splash.msa")

       ## HORSE_FAN
       chrmgr.SetPathName(path + "horse_fan/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_FAN)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_FAN, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_FAN, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_FAN, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_FAN, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_FAN, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_FAN, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")

       ## HORSE_BELL
       chrmgr.SetPathName(path + "horse_bell/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_HORSE_BELL)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BELL, chr.MOTION_COMBO_ATTACK_1, "combo_01.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BELL, chr.MOTION_COMBO_ATTACK_2, "combo_02.msa")
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BELL, chr.MOTION_COMBO_ATTACK_3, "combo_03.msa")
       chrmgr.ReserveComboAttackNew(chr.MOTION_MODE_HORSE_BELL, COMBO_TYPE_1, 3)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_1, chr.MOTION_COMBO_ATTACK_1)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_2, chr.MOTION_COMBO_ATTACK_2)
       chrmgr.RegisterComboAttackNew(chr.MOTION_MODE_HORSE_BELL, COMBO_TYPE_1, COMBO_INDEX_3, chr.MOTION_COMBO_ATTACK_3)
       chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_HORSE_BELL, HORSE_SKILL_WILDATTACK, "skill_wildattack.msa")

       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON, "equip_right")
       chrmgr.RegisterAttachingBoneName(chr.PART_WEAPON_LEFT, "equip_left")


def __LoadGameSkill():

       try:
               skill.LoadSkillData()
       except:
               import exception
               exception.Abort("__LoadGameSkill")

def __LoadGameEnemy():
       pass

def __LoadGameNPC():
       try:
               lines = pack_open("npclist.txt", "r").readlines()
       except IOError:
               import dbg
               dbg.LogBox("LoadLocaleError(%(srcFileName)s)" % locals())
               app.Abort()

       for line in lines:
               tokens = line[:-1].split("\t")
               if len(tokens) == 0 or not tokens[0]:
                       continue

               try:
                       vnum = int(tokens[0])
               except ValueError:
                       import dbg
                       dbg.LogBox("LoadGameNPC() - %s - line #%d: %s" % (tokens, lines.index(line), line))
                       app.Abort()                     

               try:
                       if vnum:
                               chrmgr.RegisterRaceName(vnum, tokens[1].strip())
                       else:
                               chrmgr.RegisterRaceSrcName(tokens[1].strip(), tokens[2].strip())
               except IndexError:
                       import dbg
                       dbg.LogBox("LoadGameNPC() - %d, %s - line #%d: %s " % (vnum, tokens, lines.index(line), line))
                       app.Abort()


# 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), 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

               ## GuildSymbol Ŕş ŔĎąÝ NPC µé°ú ÇÔ˛˛ µî·ĎÇŃ´Ů.
               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

loadGameDataDict={
       "INIT" : __InitData,
       "SOUND" : __LoadGameSound,
       "EFFECT" : __LoadGameEffect,
       "WARRIOR" : __LoadGameWarrior,
       "ASSASSIN" : __LoadGameAssassin,
       "SURA" : __LoadGameSura,
       "SHAMAN" : __LoadGameShaman,
       "SKILL" : __LoadGameSkill,
       "ENEMY" : __LoadGameEnemy,
       "NPC" : __LoadGameNPC,
}

def LoadGameData(name):
       global loadGameDataDict

       load=loadGameDataDict.get(name, 0)
       if load:
               loadGameDataDict[name]=0
               try:
                       load()
               except:
                       print name
                       import exception
                       exception.Abort("LoadGameData")
                       raise


## NPC

def SetMovingNPC(race, name):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)

       ## RESERVED
       chrmgr.SetPathName("d:/ymir work/npc/" + name + "/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WALK, "walk.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_RUN, "run.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DEAD, "die.msa")
       chrmgr.LoadRaceData(name + ".msm")

def SetOneNPC(race, name):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)

       ## RESERVED
       chrmgr.SetPathName("d:/ymir work/npc/" + name + "/")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait.msa")
       chrmgr.LoadRaceData(name + ".msm")

def SetGuard(race, name):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)

       ## Script Data
       chrmgr.SetPathName("d:/ymir work/npc/" + name + "/")
       chrmgr.LoadRaceData(name + ".msm")

       ## GENERAL
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SPAWN,            "00.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT,                     "00.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_RUN,                      "03.msa")

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE,           "30.msa", 50)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE,           "30_1.msa", 50)

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE_BACK,      "34.msa", 50)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE_BACK,      "34_1.msa", 50)

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE_FLYING,"32.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_STAND_UP,         "33.msa")

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DAMAGE_FLYING_BACK,       "35.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_STAND_UP_BACK,            "36.msa")

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DEAD,                                     "31.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DEAD_BACK,                        "37.msa")

       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_NORMAL_ATTACK,            "20.msa")

       ## Attacking Data
       chrmgr.RegisterNormalAttack(chr.MOTION_MODE_GENERAL, chr.MOTION_NORMAL_ATTACK)

def SetWarp(race):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)

       chrmgr.SetPathName("d:/ymir work/npc/warp/")
       chrmgr.LoadRaceData("warp.msm")

       ## GENERAL
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "wait.msa")

def SetDoor(race, name):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)
       chrmgr.SetPathName("d:/ymir work/npc/"+name+"/")
       chrmgr.LoadRaceData(name + ".msm")
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_WAIT, "close_wait.msa")
       chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DEAD, "open.msa")

def SetGuildBuilding(race, name, grade):
       chrmgr.CreateRace(race)
       chrmgr.SelectRace(race)
       chrmgr.SetPathName("d:/ymir work/guild/building/%s/" % name)
       chrmgr.LoadRaceData("%s%02d.msm" % (name, grade))
       chrmgr.RegisterMotionMode(chr.MOTION_MODE_GENERAL)
       #chrmgr.RegisterMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_DEAD, name + "_destruction.msa")

def OLD_SetNPC():
       SetOneNPC(9001, "arms")
       SetOneNPC(9002, "defence")
       SetOneNPC(9003, "goods")
       SetOneNPC(9004, "bank")
       SetOneNPC(9005, "hotel_grandfa")
       SetOneNPC(9006, "hotel_grandma")
       SetOneNPC(9007, "arms")
       SetOneNPC(9008, "defence")
       SetOneNPC(9009, "sailor")

       SetMovingNPC(20001, "alchemist")
       SetMovingNPC(20002, "auntie")
       SetMovingNPC(20003, "baby_and_mom")
       SetMovingNPC(20004, "beggar")
       SetMovingNPC(20005, "ceramist")
       SetMovingNPC(20006, "girl_lost_elder_brother")
       SetMovingNPC(20007, "hotel_grandfa")
       SetMovingNPC(20008, "mr_restaurant")
       SetMovingNPC(20009, "oldster")
       SetMovingNPC(20010, "peddler")
       SetMovingNPC(20011, "plant_researcher")
       SetMovingNPC(20012, "rice_cake_seller")
       SetMovingNPC(20013, "sailor")
       SetMovingNPC(20014, "timid_boy")
       SetMovingNPC(20015, "woodcutter")
       SetMovingNPC(20016, "blacksmith")
       SetMovingNPC(20017, "musician")
       SetMovingNPC(20018, "doctor")
       SetMovingNPC(20019, "hunter")
       SetMovingNPC(20020, "old_pirate")
       SetMovingNPC(20021, "widow")
       SetMovingNPC(20022, "young_merchant")
       SetMovingNPC(20023, "bookworm")
       SetMovingNPC(20024, "yu_hwa_rang")
       SetMovingNPC(20041, "beggar")
       SetMovingNPC(20042, "peddler")

       SetGuard(20300, "sinsu_patrol_spear")
       SetGuard(20301, "sinsu_patrol_spear")
       SetGuard(20302, "sinsu_patrol_spear")
       SetGuard(20303, "sinsu_patrol_spear")
       SetGuard(20304, "sinsu_patrol_spear")
       SetGuard(20305, "sinsu_patrol_spear")
       SetGuard(20306, "sinsu_patrol_spear")
       SetGuard(20307, "sinsu_patrol_spear")

       SetGuard(20320, "gangyo_patrol_spear")
       SetGuard(20321, "gangyo_patrol_spear")
       SetGuard(20322, "gangyo_patrol_spear")
       SetGuard(20323, "gangyo_patrol_spear")
       SetGuard(20324, "gangyo_patrol_spear")
       SetGuard(20325, "gangyo_patrol_spear")
       SetGuard(20326, "gangyo_patrol_spear")
       SetGuard(20327, "gangyo_patrol_spear")

       SetGuard(20340, "jinno_patrol_spear")
       SetGuard(20341, "jinno_patrol_spear")
       SetGuard(20342, "jinno_patrol_spear")
       SetGuard(20343, "jinno_patrol_spear")
       SetGuard(20344, "jinno_patrol_spear")
       SetGuard(20345, "jinno_patrol_spear")
       SetGuard(20346, "jinno_patrol_spear")
       SetGuard(20347, "jinno_patrol_spear")

       ## Warp
       for i in xrange(18):
               SetWarp(10001 + i)

       SetGuard(11000, "gangyo_patrol_spear")
       SetGuard(11001, "gangyo_patrol_bow")
       SetGuard(11002, "jinno_patrol_spear")
       SetGuard(11003, "jinno_patrol_bow")
       SetGuard(11004, "sinsu_patrol_spear")
       SetGuard(11005, "sinsu_patrol_bow")

       ## Campfire (Bonfire)
       chrmgr.CreateRace(12000)
       chrmgr.SelectRace(12000)
       chrmgr.SetPathName("d:/ymir Work/npc/campfire/")
       chrmgr.LoadRaceData("campfire.msm")

       ## Door
       SetDoor(13000, "wooden_door")
       SetDoor(13001, "stone_door")


Job Warrior 1 to body Job Warrior 2 to mental Job Sura 1 to BM itd.
Etap 3 plik BGM
Tu nie ma co zadużo opisywać...
Poprostu otwieracie RootExtract notanikiem znowu ta linijka zamiast root biszecie BGM wrzucacie na m2 Teraz Source>BGM>i możecie podmienić muze....
UWAGA TEN PLIK TEŻ JEST WYMAGANY!
Etap 4 plik ETC
Też nie ma co zadużo opisywać wogóle w tym pliku nic nie zmieniacie robicie tak jak z BGM RootExtract>Notanik> linijka i zamiast BGM piszecje ETC wrzucacie na m2 W tym pliku nic nie zmieniacie....
UWAGA TEN PLIK TEŻ JEST WYMAGANY!
Etap 5 plik Icon
Tak jak z ETC tylko tu już możecie coś pozmieniać.... RootExtract>Notanik> linijka i zamiast ETC piszecie icon wrzucacie na m2 wchodzicie w Source macie folder ICON tu możecie zmieniać ikony różnych itemow...
Etap 6 plik Effect
Też tu nic nie zmieniacie.... Robicie tak jak zwykle...
UWAGA TEN PLIK TEŻ JEST WYMAGANY!
Etap 7 plik guild
Tak jak zwykle jeśli to zrobiliście..... Pobieracie GrannyViever http://www.radgameto...iewer_setup.exe
I np. Jeśli jest ten kowal kupiony przez gildie i zanim są takie budynki to można edytować je za pomocą GrannyVievera
Etap 8 plik indoordeviltower1
Tu jak zawsze i nic tu nie zmieniacie...
OK jak zawuważyliście większości plików sie nie zmienia teraz wymienie wam te pliki które się zmienia i te co nie:
Pliki do zmienienia:

root


locale_pl


icon


pc

(skille)

pc2

(skille)

item

(wygląd broni)

NPC

(jeśli chcecie zmienić/dodać NPC

NPC2

(jeśli chcecie zmienić/dodać NPC

monster

(jeśli chcecie zmienić/dodać nowego potwora

Monster2

(jeśli chcecie zmienić/dodać nowego potwora

Sound

(jeśli chcecie zmienić głos np. Atakującego potwora

Sound2

(jeśli chcecie zmienić głos np. Atakującej postaci
Pliki które się nie zmienia:
Reszta plików folderu pack z metin'a 2008
Te pliki które wymienilem też te co się nic nie zmienia wypakowywujecie czyli RootExtract> zamiast tam niewiem ETC chyba czy guild wpisujecie np. PC i wam wypakowuwuje (chyba już macie wypakowane kilka plików icon,locale_pl,root itd.)
Ostatni etap budowanie clienta:
Gdy już to wszystko macie przechodzimy do pakery.
I jeśli macie np. tam folder BGM i wnim macie plik RootPackGen kopiujecie go wrzucacie go tam gdzie macie m2 itd. teraz wrzucacie go na m2 i macie 2 pliki BGM.epc i BGM.eix tworzycie folder pack i je tam wrzucacie.... i robicie tak z kazdym...Teraz locale.... Tworzycie folder locale a wnim pl i do tego folderu pl wrzucacie to wszystko z tych plików locale co na początku było z tymi tapetami itp.
i macie locale....
Teraz folder BGM tworzycie go i wrzucacie do niego tą muze co zmienialiście też tam gdzieś na początku.... foler mark: wrzucacie do niego pliki takie co na metku 2008
Folder miles wrzucacie to co macie na metku 2008...
Folder lib z metka 2008....
Folder pactkshin czy jakoś....
metek 2008.....
I te pliki .ddl czyli np. devil.ddl itd. też z metka 2008
Teraz pliki z root ... czyli co mieliscie tak dużo plików notanikowych to kopiujecie je i wrzucacie.

 

Przerobienie clienta:

Pobieracie jakiegoś clienta i go przerabacie... Tak jak macie wyżej

Stronka serwera

robienie stronki....

VideoTUT TUT nie moj !

Bony na początek!

Musicie pobrać xamppa i teraz robicie tak:

Wchodzimy w folder xampp

 

Otwieramy plik z notatnika account_create.php

 

Schodzimy do 38 linijki , zobaczycie cos podobnego :

 

$gold_expire='Y-m-d H:i:s'

 

 

 

Jak Zmodyfikowac?

 

Legenda :

 

Y - Lata

M - miesiace

D - dni

H,i,s - Godziny , minuty ,sekundy

 

Modyfikujemy np :

 

$gold_expire='2012-12-20 16:00:00';

 

 

 

ale takze mozecie dodac wszystkie bonusy :) np :

 

$gold_expire='2012-12-21 16:00:00';

$silver_expire='2012-12-21 16:00:00';

$safebox_expire='2012-12-21 16:00:00';

$autoloot_expire='2012-12-21 16:00:00';

$fish_mind_expire='2012-12-21 16:00:00';

$marriage_fast_expire='2012-12-21 16:00:00';

$money_drop_rate_expire='2012-12-21 16:00:00';

Inne:

Patch:

FIlm

Spol:

Pobieracie MT2connectchanger i podstawowe spol otwieracie mt2connect changer klikacie file > open tam wybieracie podstawowe spol i teraz wpisujecie IPhamachi swoje jeśli zostanie miejsce musicie dobić spacjami...

Film:

Uwaga nie mój!

To na tyle jeśli coś nowego będe wiedział dodam Edita!

 

[size="6"][color="#FF0000"]Download:[/color][/size]
Pliki Serwerowe:
Pliki Serwerowe up by Merkon:
http://www.megaupload.com/?d=QES8WTX1
Pliki Serwerowe Up By Le0Punish3r
http://www.megaupload.com/?d=9H1AB4WA
Pliki Serwerowe  Hasło: www.mpcforum.pl Up By backe57
http://www.storage.to/get/tAzKJVgd/InstantServer_Uploaded_by_backe57.rar
Pliki Serwerowe zedytowane By SuicideRlz  Up By TraDeus
http://www.megaupload.com/?d=7CFC29FN
Komputerek VMC:
Plik VMC Up By Siera
http://www.4shared.com/file/187525392/f585c7b5/Mc2.html
http://rapidshare.com/files/329853097/Mc2.vmc.html
http://rapidshare.de/files/48937755/Mc2.vmc.html
http://www.sendspace.pl/file/2b9de0fe8f7f965f20b5c0d
http://www.megaupload.com/?d=RTD7VAP6
Skan:
http://www.virustotal.com/pl/analisis/e16775fcb9546b7b97666fc74e8b7a653c32b7802701b84482df0ce2bf9813be-1257881110
Navicat:
http://download.chip.eu/pl/Navicat-MySQL_921969.html
Navicat 8.0 FULL Up By patryk1653
http://www.speedyshare.com/files/21088407/Nacicat_8_Full.rar
http://www.virustotal.com/pl/analisis/dfdff1bcacdc6f403ea47bdc7b0c520b4fc414cec22d15dc00fcdeb5791f142a-1266880165
Connect Changer:
http://www.4shared.com/file/209777318/48ff1e7e/Metin2_Connect_Changer_up_by_G.html
skan:
http://www.virustotal.com/pl/analisis/99c7befbd947ef10ee2a5fb41014f91a767b5dc61a9292528cd7ab39f1f61672-1264686800
Patch:
http://www.storage.to/get/ftmeWYcO/patcherbyimer.rar
Znajdziecie tez na filmiku
Launcher:
http://www.megaupload.com/?d=1361QI78
Pliki Pakery:
http://www.speedyshare.com/files/22561146/Pakery_For_MPCforum_by_GameMenel.rar
Metin2FileExtractor:
http://www.speedyshare.com/files/22452961/Metin2FileExtractor.rar

 

To na tyle licze na + ;)

A i jeszcze jak coś będe wiedział to dodam ;)

reymysterio-sygnatura-psdcopy.png?t=1258734964
  • 4 miesiące temu...
  • 3 tygodnie później...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...