MRMJ-1: Messenger & Skills fixes

This commit is contained in:
Mind Rapist
2025-12-14 05:05:08 +02:00
parent d6365aafa2
commit b0e8c0bb2b
26 changed files with 624 additions and 214 deletions

View File

@@ -30,7 +30,7 @@
16 WARRIOR Průraz Tlaková vlna Útok Tsunami Napadáš nepřítele frontálně. Čelní prorážecí útok ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Prudká rána Prudká tygří rána Prudká dračí rána Napadáš nepřítele frontálně Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Hodnota útoku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Dupnutí Dupnutí lva Dupnutí nosorožce Poval několik nepřátel Prorážecí útok Šance na bezvědomí ATTACK_SKILL|STANDING_SKILL daejin 18 4 Hodnota útoku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Šance na bezvědomí: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Silné tělo Tělo ze železa Tělo z oceli Tvoje obrana se dočasně zlepší a nebudeš padat k zemi. Obrana se zlepší Snižuje rychlost pohybu Neskácet se STANDING_SKILL cheongeun 19 4 Obrana: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rychlost pohybů: -%.0f 1 + 9*SkillPoint
19 WARRIOR Silné tělo Tělo ze železa Tělo z oceli Tvoje obrana se dočasně zlepší a nebudeš padat k zemi. Obrana se zlepší Snižuje rychlost pohybu Neskácet se STANDING_SKILL cheongeun 19 4 Obrana: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rychlost pohybů: -%.0f -(0.375*SkillPoint)
2 WARRIOR Smršť meče Šavlový tanec Cyklón Rozvíři meč, aby napadl více nepřátel Prorážecí útok Útok na vícero cílů ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Hodnota útoku: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Rána mečem Bodnutí mečem Vrh mečem Napadáš nepřítele frontálně. Útok na dálku Útok na vícero cílů Bezvědomí převrhne cíl ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Hodnota útoku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Šance na bezvědomí: %.0f%% (100+k*1000/6)/10
3 WARRIOR Bojové zuření Vztek Zběsilost Soustředíš se pouze na útočení. Rychlost útoku se zvyšuje Zvyšuje rychlost pohybu Zvyšuje náchylnost k poškození STANDING_SKILL jeongwi 3 4 Rychlost útoku +%.0f%% 50 * SkillPoint Rychlost pohybu +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Durchschlag Druckwelle Tsunami-Angriff Du greifst die Feinde frontal an. Frontaler Durchschlag-Angriff ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angriffswert %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Heftiges Schlagen Heftiger Tigerschlag Heftiger Drachenschlag Du greifst die Feinde frontal an. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angriffswert %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Stampfer Löwenstampfer Rhinozerosstampfer Wirf mehrere Feinde um. Durchschlag-Angriff Ohnmachtschance ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angriffswert %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ohnmachtschance %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Starker Körper Körper aus Eisen Körper aus Stahl Deine Verteidigung wird eine Zeit lang besser und du fällst nicht zu Boden. Verteidigung wird verbessert Verringert die Bewegungsgeschwindigkeit Kein Umfallen STANDING_SKILL cheongeun 19 4 Verteidigung: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bewegungsgeschwindigkeit: -%.0f 1 + 9*SkillPoint
19 WARRIOR Starker Körper Körper aus Eisen Körper aus Stahl Deine Verteidigung wird eine Zeit lang besser und du fällst nicht zu Boden. Verteidigung wird verbessert Verringert die Bewegungsgeschwindigkeit Kein Umfallen STANDING_SKILL cheongeun 19 4 Verteidigung: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bewegungsgeschwindigkeit: -%.0f -(0.375*SkillPoint)
2 WARRIOR Schwertwirbel Schwerttanz Zyklon Wirbel das Schwert herum, um mehrere Feinde anzugreifen. Durchschlag-Angriff Angriff auf mehrere Ziele ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angriffswert %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Schwertschlag Schwertstoß Schwertwurf Du greifst die Feinde frontal an. Fern-Angriff Angriff auf mehrere Ziele Ohnmacht Schlägt das Ziel zu Boden ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angriffswert %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ohnmachtschance %.0f%% (100+k*1000/6)/10
3 WARRIOR Kampfrausch Wut Raserei Du konzentrierst dich ausschließlich auf das Angreifen. Angriffsgeschwindigkeit wird erhöht Erhöht die Bewegungsgeschwindigkeit Erhöht die Schadensanfälligkeit STANDING_SKILL jeongwi 3 4 Angriffsgeschwindigkeit +%.0f%% 50 * SkillPoint Bewegungsgeschwindigkeit +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Gennemgående slag Trykbølge Tsunami-angreb Du angriber fjenden frontalt. Frontalt angreb ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Voldsomme stød Voldsomme tigerstød Voldsomme dragestød Du angriber fjenden frontalt Gennembruds angreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Angrebsværdi %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Trampning Løvens trampning Rhinoceros trampning Stød mod flere fjender Gennembruds-angreb Sandsynlighed for besvimelse ATTACK_SKILL|STANDING_SKILL daejin 18 4 Angrebsstyrke %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sandsynlighed for besvimelses %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Stærk krop Krop af jern Krop af stål Dit forsvar forøges, og du kan ikke væltes. Forsvar forøges Bevægelseshastigheden sænkes Ingen væltning STANDING_SKILL cheongeun 19 4 Forsvar: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bevægelseshastighed: -%.0f 1 + 9*SkillPoint
19 WARRIOR Stærk krop Krop af jern Krop af stål Dit forsvar forøges, og du kan ikke væltes. Forsvar forøges Bevægelseshastigheden sænkes Ingen væltning STANDING_SKILL cheongeun 19 4 Forsvar: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Bevægelseshastighed: -%.0f -(0.375*SkillPoint)
2 WARRIOR Sværd-hvirvel Sværd-dans Zyklon Hvirvler omkring med sværdet Gennemslagssangreb Angreb på flere fjender ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Angrebsværdi %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Sværdstødet Forbedret sværdstød Sværdkast Du angriber fjenden frontalt. Distance-angreb Angreb på flere fjender Besvimelse Vælter målet ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Angrebsstyrke %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sandsynlighed for besvimelse: %.0f%% (100+k*1000/6)/10
3 WARRIOR Berserk Vrede Raseri Du koncentrerer dig udelukkende om angrebet Angrebshastigheden forøges Bevægelseshastigheden forøges Forøger modtaget skade STANDING_SKILL jeongwi 3 4 Angrebshastighed +%.0f%% 50 * SkillPoint Bevægelseshastighed +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Pulso Espiritual Onda de Choque Ataque Tsunami Ataca directamente a los enemigos. Ataque frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Golpe Golpe de Tigre Golpe de Dragón Ataca directamente a los enemigos Ataque fuerte Ataque a múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Fuerza de ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Tocón Tocón de Leon Tocón de Rinoceronte Derriba a varios enemigos. Ataque fuerte Probabilidad de desmayo ATTACK_SKILL|STANDING_SKILL daejin 18 4 Fuerza de ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidad de desmayo %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Cuerpo fuerte Cuerpo de hierro Cuerpo de acero Aumenta tu defensa por un período de tiempo y no caes al suelo. Incrementa defensa Disminuye velocidad de movimiento No caes STANDING_SKILL cheongeun 19 4 Defensa : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocidad de movimiento : -%.0f 1 + 9*SkillPoint
19 WARRIOR Cuerpo fuerte Cuerpo de hierro Cuerpo de acero Aumenta tu defensa por un período de tiempo y no caes al suelo. Incrementa defensa Disminuye velocidad de movimiento No caes STANDING_SKILL cheongeun 19 4 Defensa : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocidad de movimiento : -%.0f -(0.375*SkillPoint)
2 WARRIOR Giro de espada Danza de la espada Ciclón Gira la espada para atacar a varios enemigos Ataque frontal Ataque de múltiples objetivos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Fuerza de ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Golpe de espada Rayo de espada Lanzamiento de espada Atacas de frente al enemigo. Ataque de largo alcance Ataque a múltiples objetivos Efecto de desmayo Derriba al objetivo al suelo ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Fuerza de ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidad de desmayo %.0f%% (100+k*1000/6)/10
3 WARRIOR Berserk Furia Frenesí Solo concentración en el ataque Incrementa velocidad de ataque Incrementa velocidad de movimiento Incrementa daño recibido STANDING_SKILL jeongwi 3 4 Velocidad de Ataque +%.0f%% 50 * SkillPoint Velocidad de Movimiento +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Attaque de l'Esprit Onde de choc Attaque Tsunami Attaque directement les ennemis. Attaque frontale violente ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Attaque de la paume Paume du Tigre Paume du Dragon Attaque directement les ennemis. Attaque directe violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Puissance de l'attaque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Charge Charge du lion Charge du rhino Renverse plusieurs ennemis. Attaque directe violente Chance de provoquer un évanouissement ATTACK_SKILL|STANDING_SKILL daejin 18 4 Puissance de l'attaque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Chance d'évanouissament : %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Corps puissant Corps de fer Corps d'acier Augmente temporairement votre défense et empêche que vous soyez renversé Augmente la Défense Diminue la vitesse de déplacement Empêche que vous soyez renversé STANDING_SKILL cheongeun 19 4 Défense : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Vitesse de déplacement : -%.0f 1 + 9*SkillPoint
19 WARRIOR Corps puissant Corps de fer Corps d'acier Augmente temporairement votre défense et empêche que vous soyez renversé Augmente la Défense Diminue la vitesse de déplacement Empêche que vous soyez renversé STANDING_SKILL cheongeun 19 4 Défense : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Vitesse de déplacement : -%.0f -(0.375*SkillPoint)
2 WARRIOR Moulinet à l'épée Danse de l'épée Cyclone Effectue des moulinets de l'épée pour attaquer plusieurs ennemis. Attaque frontale violente Attaque plusieurs cibles ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Puissance de l'attaque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Coup d'épée Coup d'épée foudroyant Jet d'épée Attaque frontalement les ennemis. Attaque à distance Attaque plusieurs cibles Attaque assomante Fait chuter vos ennemis ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valeur d'attaque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Chance d'assomer : %.0f%% (100+k*1000/6)/10
3 WARRIOR Berserk Furie Frénésie Uniquement concentré sur l'attaque. Augmente la vitesse d'attaque Augmente la vitesse de déplacement Augmente les dommages reçus STANDING_SKILL jeongwi 3 4 Vitesse d'attaque +%.0f%% 50 * SkillPoint Vitesse de déplacement +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Πνευματική Επίθεση (W) Κρουστικό Κύμα Επίθεση Tsunami Κατά μέτωπο επίθεση Μετωπική Μαζική Επίθεση ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Δυνατό χτύπημα Δυνατό χτύπημα της Τίγρης Δυνατό χτύπημα του Δράκου Κατά μέτωπο επίθεση Πνευματική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Δύναμη Επίθεσης %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Ποδοπάτημα Ποδοπάτημα του Λέοντα Ποδοπάτημα του Ρινόκερου Ρίξε πολλούς εχθρούς. Ευθεία Μαζική Επίθεση Πιθανότητα λιποθυμίας ATTACK_SKILL|STANDING_SKILL daejin 18 4 Δύναμη Επίθεσης %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Πιθανότητες Λιποθυμίας: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Δυνατό Σώμα Σιδηρούν Σώμα Ατσάλινο Σώμα Αυξάνει την άμυνα και δεν πέφτεις Αυξάνει την άμυνα Μειώνει την ταχύτητα κίνησης Δεν πέφτεις ποτέ STANDING_SKILL cheongeun 19 4 ’μυνα : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Ταχύτητα Κίνησης : -%.0f 1 + 9*SkillPoint
19 WARRIOR Δυνατό Σώμα Σιδηρούν Σώμα Ατσάλινο Σώμα Αυξάνει την άμυνα και δεν πέφτεις Αυξάνει την άμυνα Μειώνει την ταχύτητα κίνησης Δεν πέφτεις ποτέ STANDING_SKILL cheongeun 19 4 ’μυνα : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Ταχύτητα Κίνησης : -%.0f -(0.375*SkillPoint)
2 WARRIOR Στριφογύρισμα σπαθιού Χορός Σπαθιών Κυκλώνας Στριφογύρισμα του σπαθιού για επίθεση σε πολλούς αντιπάλους. Μετωπική Μαζική Επίθεση Επίθεση σε Πολλαπλούς Στόχους ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Δύναμη Επίθεσης %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Χτύπημα Σπαθιού Βίδωμα Σπαθιού Εκτίναξη Σπαθιού Κατά μέτωπο επίθεση. Μακρινή Επίθεση Επίθεση σε Πολλαπλούς Στόχους Λιποθυμία Ρίχνει τον στόχο. ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Δύναμη Επίθεσης %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Πιθανότητες Λιποθυμίας: %.0f%% (100+k*1000/6)/10
3 WARRIOR Έξαλλος Οργισμένος Μανιακός Επικέντρωση στην Επίθεση Αυξάνει την Ταχύτητα της Επίθεσης Αυξάνει την ταχύτητα Κίνησης Αυξάνει την ζημιά που δέχεσε STANDING_SKILL jeongwi 3 4 Ταχύτητα Επίθεσης +%.0f%% 50 * SkillPoint Ταχύτητα Κίνησης +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f 1 + 9*SkillPoint
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f -(0.375*SkillPoint)
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Penetrazione Ondata di pressione Attacco Tsunami Attacchi i nemici frontalmente. Attacco trafiggente frontale ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Colpire duramente Potente colpo di tigre Potente colpo del drago Attacchi i nemici frontalmente. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Valore di attacco %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Pestone Pestone di leone Pestone di rinoceronte Fai cadere più nemici. Attacco trafiggente Possibilità di svenimento ATTACK_SKILL|STANDING_SKILL daejin 18 4 Valore di attacco %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilità di svenimento: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Corpo forte Corpo di ferro Corpo di acciaio La tua difesa migliora temporaneamente e non cadi a terra. La difesa viene migliorata Diminuisce la velocità di movimento Non si cade STANDING_SKILL cheongeun 19 4 Difesa +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocità di movimento -%.0f 1 + 9*SkillPoint
19 WARRIOR Corpo forte Corpo di ferro Corpo di acciaio La tua difesa migliora temporaneamente e non cadi a terra. La difesa viene migliorata Diminuisce la velocità di movimento Non si cade STANDING_SKILL cheongeun 19 4 Difesa +%.0f 7+(40 + 0.2*str + 0.4*con)*k Velocità di movimento -%.0f -(0.375*SkillPoint)
2 WARRIOR Vortice della spada Danza della spada Ciclone Fai girare vorticosamente la spada per attaccare più nemici. Attacco trafiggente Attacco a più bersagli ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Valore di attacco %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Colpo di spada Stoccata di spada Lancio della spada Attacchi i nemici frontalmente. Attacco da lontano Attacco a più bersagli Svenimento Fa cadere il bersaglio ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Valore di attacco %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilità di svenimento: %.0f%% (100+k*1000/6)/10
3 WARRIOR Estasi da combattimento Rabbia Frenesia Ti concentri esclusivamente sull'attaccare Aumenta la velocità d'attacco Aumenta la velocità di movimento Aumenta la vulnerabilità al danno STANDING_SKILL jeongwi 3 4 Velocità di attacco +%.0f%% 50 * SkillPoint Velocità di movimento +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Áthatolás Nyomás hullám Cunami támadás Szemből támadsz az ellenségre. Frontális átütő támadás ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Támadó erő %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Heves csapás Heves tigris csapás Heves sárkány csapás Frontálisan támadsz az ellenségre Átütő támadás Támadás több cél ellen ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Támadó erő %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Dübörgés Oroszlán dübörgés Orrszarvú dübörgés Teríts le több ellenséget. Átütő támadás Ájulás esély ATTACK_SKILL|STANDING_SKILL daejin 18 4 Támadó érték %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Ájulás esély: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f 1 + 9*SkillPoint
19 WARRIOR Erős test Test jégből Test acélból A védekezésed egy időre javul és nem veszítesz. A védekezés javul Csökken a mozgási sebesség Nincs összeomlás STANDING_SKILL cheongeun 19 4 Védekezés : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Mozgási sebesség: -%.0f -(0.375*SkillPoint)
2 WARRIOR Forgó kard Kard tánc Ciklon Forgasd körbe a kardot, hogy több ellenséget támad meg. Átütő támadás Több cél támadása ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Támadó érték %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Kard ütés Kard szúrás Kard dobás Szemből támadsz az ellenségre. Távoli támadás Több cél támadása Ájulás Pusztítsd el a célt ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Támadó érték %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Ájulás esély: %.0f%% (100+k*1000/6)/10
3 WARRIOR Harci mámor Düh Vágtázás Kizárólag a támadásra koncentrálj. Támadó sebesség növekedik Növeli a mozgási sebességet Növeli az elszenvedett veszteségeket STANDING_SKILL jeongwi 3 4 Támadó sebesség +%.0f%% 50 * SkillPoint Mozgási sebesség +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Duchowe Uderzenie Fala Uderzeniowa Atak Tsunami Atakuje centralnie wrogów Frontalny atak rozpryskowy ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Walnięcie Tygrysie walnięcie Smocze Powalenie Atakuje centralnie wrogów Prosty rozpryskowy atak Atak skierowany w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Siła Ataku %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Tąpnięcie Tąpnięcia Lwa Tąpnięcie Nosorożca Zwal z nóg kilku wrogów. Frontalny atak rozpryskowy Szansa na Omdlenie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Siła Ataku %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Szansa na Omdlenie %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Silne Ciało Żelazne Ciało Stalowe Ciało Zwiększa Obronę i pomaga wygrać Zwiększa Obronę Zmniejsza Szybkość Ruchu Nigdy nie upadasz STANDING_SKILL cheongeun 19 4 Obrona: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Szybkość Ruchu: -%.0f 1 + 9*SkillPoint
19 WARRIOR Silne Ciało Żelazne Ciało Stalowe Ciało Zwiększa Obronę i pomaga wygrać Zwiększa Obronę Zmniejsza Szybkość Ruchu Nigdy nie upadasz STANDING_SKILL cheongeun 19 4 Obrona: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Szybkość Ruchu: -%.0f -(0.375*SkillPoint)
2 WARRIOR Wir Miecza Taniec Miecza Cyklon Wiruj mieczem aby atakować wielu przeciwników Frontalny atak rozpryskowy Atak w kilka celów ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Siła Ataku %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Uderzenie Miecza Pchnięcie Miecza Rzut Miecza atakujesz wrogów bezpośrednio Atak z dystansu Atak skierowany na kilka celów Omdlenie Powala cel na ziemię ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Siła Ataku %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Szansa na Omdlenie %.0f%% (100+k*1000/6)/10
3 WARRIOR Berserk Furia Szał Koncentracja tylko na ataku Zwiększa Szybkość Ataku Zwiększa Szybkość Ruchu Zwiększa otrzymywane obrażenia STANDING_SKILL jeongwi 3 4 Szybkość Ataku +%.0f%% 50 * SkillPoint Szybkość Ruchu +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Força do Golpe Onda de Choque Ataque Tsunami Ataca inimigos directamente. Ataque Residual Frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Ataque Destrutivo Garra do Tigre Garra do Dragão Ataca inimigos directamente. Ataque Residual Directo Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Poder de Ataque %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Terramoto Terramoto Leão Terramoto Rinoceronte Derruba vários inimigos. Ataque Residual Directo Probabilidade de Efeito Atordoante ATTACK_SKILL|STANDING_SKILL daejin 18 4 Poder de Ataque %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Probabilidade de Atordoamento %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Corpo Forte Corpo de Ferro Corpo de Aço Aumenta a Defesa e não cais ao chão. Aumenta a Defesa Reduz a Rapidez de Movimento Não cais ao chão STANDING_SKILL cheongeun 19 4 Defesa: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rapidez de Movimento: -%.0f 1 + 9*SkillPoint
19 WARRIOR Corpo Forte Corpo de Ferro Corpo de Aço Aumenta a Defesa e não cais ao chão. Aumenta a Defesa Reduz a Rapidez de Movimento Não cais ao chão STANDING_SKILL cheongeun 19 4 Defesa: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Rapidez de Movimento: -%.0f -(0.375*SkillPoint)
2 WARRIOR Espada Rotativa Espada Dançante Ciclone Gira a espada para atacares vários inimigos. Ataque Residual Frontal Ataque a Múltiplos Alvos ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Poder de Ataque %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Ataque de Espada Raio de Espada Tempestade de Espada Ataca inimigos directamente. Ataque de Longo Alcance Ataque a Múltiplos Alvos Probabilidade de Atordar Atira o alvo ao chão ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Poder de Ataque %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Probabilidade de Atordoar %.0f%% (100+k*1000/6)/10
3 WARRIOR Raiva Fúria Cólera Concentras-te apenas no ataque. Aumenta a Rapidez de Ataque Aumenta a Rapidez de Movimento Aumenta o Dano Recebido STANDING_SKILL jeongwi 3 4 Rapidez de Ataque +%.0f%% 50 * SkillPoint Rapidez de Movimento +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Atacul Spiritului Unda de Soc Atac Tsunami Ataci duşmanii frontal. Atac de pătrundere frontal ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Atac %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Zdrobire Zdrobirea Tigrului Zdrobirea Dragonului Ataci dusmanii frontal. Atac de patrundere Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Atac %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Zdruncinare Zdruncinarea Leului Zdruncinarea Rinocerului Rasturnarea mai multor oponenti. Atac Direct Frontal Sansa de Confuzie ATTACK_SKILL|STANDING_SKILL daejin 18 4 Putere Atac %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Sansa Confuzie %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Corp Rezistent Corp de Fier Corp de Otel Apărarea ta se îmbunătăţeşte pentru un timp iar tu nu cazi la pământ. Îmbunătăţirea apărării Scade viteza de mişcare Nu cazi la pământ STANDING_SKILL cheongeun 19 4 Apărare : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Viteză de mişcare: -%.0f 1 + 9*SkillPoint
19 WARRIOR Corp Rezistent Corp de Fier Corp de Otel Apărarea ta se îmbunătăţeşte pentru un timp iar tu nu cazi la pământ. Îmbunătăţirea apărării Scade viteza de mişcare Nu cazi la pământ STANDING_SKILL cheongeun 19 4 Apărare : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Viteză de mişcare: -%.0f -(0.375*SkillPoint)
2 WARRIOR Vartejul Sabiei Dansul Sabiei Ciclon Învârte sabia pentru a ataca mai mulţi duşmani. Atac pătrunzător Atac asupra mai multor ţinte ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Atac %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Atacul Sabiei Fulgerul Sabiei Traznetul Sabiei Ataca inamicii direct. Atac de Raza Lunga Atac pe tinte multiple Efect de Confuzie Arunca oponentul la pamant ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Putere Atac %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Sansa Confuzie %.0f%% (100+k*1000/6)/10
3 WARRIOR Iures Furie Turbare Te concentrezi doar asupra atacului. Viteza de atac creşte Creşte viteza de mişcare Creşte expunerea la pagube STANDING_SKILL jeongwi 3 4 Viteza de atac +%.0f%% 50 * SkillPoint Viteza de mişcare +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Призрачный удар Силовая волна Цунами Прямая атака врагов. Зональная атака ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Сила атаки:%.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*STR + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*STR + CON)*SkillPoint
17 WARRIOR Сильный удар Сильный удар тигра Сильный удар дракона Прямая атака врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Сила атаки: %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*STR + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*STR + 3*CON)*SkillPoint
18 WARRIOR Удар ногой Львиный удар Удар носорога Сбивает с ног нескольких противников. Прямая зональная атака Шанс на головокружение ATTACK_SKILL|STANDING_SKILL daejin 18 4 Сила атаки %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Шанс на головокружение %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Сильное тело Железное тело Стальное тело Увеличение защиты Увеличение защиты Уменьшение скорости Вас невозможно сбить с ног STANDING_SKILL cheongeun 19 4 Защита: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Скорость передвижения: -%.0f 1 + 9*SkillPoint
19 WARRIOR Сильное тело Железное тело Стальное тело Увеличение защиты Увеличение защиты Уменьшение скорости Вас невозможно сбить с ног STANDING_SKILL cheongeun 19 4 Защита: +%.0f 7+(40 + 0.2*str + 0.4*con)*k Скорость передвижения: -%.0f -(0.375*SkillPoint)
2 WARRIOR Вращающийся меч Танцующий меч Циклон Атака нескольких врагов. Прямая зональная атака Атака нескольких целей ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Сила атаки: %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Взмах мечом Удар мечом Мастерский удар мечом Фронтальная атака. Дальняя атака Атака нескольких целей Головокружение Сбивает противника с ног ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Сила атаки %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Шанс на головокружение %.0f%% (100+k*1000/6)/10
3 WARRIOR Берсерк Ярость Безумие Концентрация на атаке. Увеличение скорости атаки Увеличение скорости передвижения Увеличение получаемых повреждений STANDING_SKILL jeongwi 3 4 Скорость атаки: +%.0f%% 50 * SkillPoint Скорость передвижения: +%.0f%% 20 * SkillPoint

View File

@@ -30,7 +30,7 @@
16 WARRIOR Ruh Vuruşu Şok Dalgası Tsunami-saldırısı Düşmana doğrudan saldırı. Önden Sıçrama Saldırısı ATTACK_SKILL|CAN_CHANGE_DIRECTION|NEED_TARGET|WEAPON_LIMITATION SWORD|TWO_HANDED gigongcham 16 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (MinATK*4 + 4*GÜÇ + CON)*SkillPoint 2.3*MaxATK + (MaxATK*4 + 4*GÜÇ + CON)*SkillPoint
17 WARRIOR Şiddetli Vuruş Kaplan vuruşu Ejderha Vuruşu Düşmana doğrudan saldırı. Güçlü Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED gyeoksan 17 4 Saldırı Gücü %.0f-%.0f 2.3*MinATK + (3*MinATK + 4*GÜÇ + 3*CON)*SkillPoint 2.3*MaxATK + (3*MaxATK + 4*GÜÇ + 3*CON)*SkillPoint
18 WARRIOR Güçlü Vuruş Aslan Vuruşu Rhino Vuruşu Birden çok düşmanı uzaklaştıran vuruş. Güçlü Sıçrama Saldırısı Bayılma olasılığı ATTACK_SKILL|STANDING_SKILL daejin 18 4 Saldırı Gücü %.0f-%.0f 2*MinATK + (2*MinATK + 2*DEX + 2*CON + 4*STR)*SkillPoint 2*MaxATK + (2*MaxATK + 2*DEX + 2*CON + 4*STR)*SkillPoint Bayılma şansı: %.0f%% (100 + 1000*SkillPoint/6)/10
19 WARRIOR Güçlü Beden Demir Beden Çelik Beden Savunmayı arttırır ve kazanırsınız. Savunmayı arttırır Hareket Hızını Düşürür Asla düşmez. STANDING_SKILL cheongeun 19 4 Savunma : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Hareket Hızı : -%.0f 1 + 9*SkillPoint
19 WARRIOR Güçlü Beden Demir Beden Çelik Beden Savunmayı arttırır ve kazanırsınız. Savunmayı arttırır Hareket Hızını Düşürür Asla düşmez. STANDING_SKILL cheongeun 19 4 Savunma : +%.0f 7+(40 + 0.2*str + 0.4*con)*k Hareket Hızı : -%.0f -(0.375*SkillPoint)
2 WARRIOR Kılıç Çevirme Kılıç Dansı Siklon Kılıcı çevirerek birden çok düşmana saldırma. Önden Sıçrama Saldırısı Çoklu Hedefe Saldırı ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED palbang 2 4 Saldırı gücü %.0f-%.0f 3*MinATK + (0.8*MinATK + STR*6 + DEX*2 + CON) * SkillPoint 3*MaxATK + (0.8*MaxATK + STR*6 + DEX*2 + CON) * SkillPoint
20 WARRIOR Kılıç Darbesi Kılıç Yıldırımı Kılıç Fırlatmak Düşmana Doğrudan Saldırı. Uzun Menzilli Saldırı Çoklu Hedefe Saldırı Bayılma Hedefi indirir ATTACK_SKILL|CAN_CHANGE_DIRECTION|WEAPON_LIMITATION SWORD|TWO_HANDED geompung 20 4 Saldırı Gücü %.0f-%.0f 2*minatk + (minatk + dex*3 + str*5 + con)*k 2*maxatk + (maxatk + dex*3 + str*5 + con)*k Bayılma şansı: %.0f%% (100+k*1000/6)/10
3 WARRIOR Öfke Korkunç Öfke Çılgınlık Sadece Saldırıya konsantre olmak. Saldırı Hızını Arttırır Hareket Hızını Arttırır Alınan zararı artırır STANDING_SKILL jeongwi 3 4 Saldırı Hızı +%.0f%% 50 * SkillPoint Hareket Hızı +%.0f%% 20 * SkillPoint

View File

@@ -1016,6 +1016,10 @@ class GameWindow(ui.ScriptWindow):
messengerAddFriendQuestion.SetText2(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2)
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
if app.FIX_MESSENGER_ACTION_SYNC:
messengerAddFriendQuestion.OnPressEscapeKey = ui.__mem_func__(self.OnDenyAddFriend) # ESC → deny
messengerAddFriendQuestion.Open()
messengerAddFriendQuestion.name = name
self.messengerAddFriendQuestion = messengerAddFriendQuestion
@@ -2180,4 +2184,7 @@ class GameWindow(ui.ScriptWindow):
# END_OF_WEDDING
if app.FIX_REFRESH_SKILL_COOLDOWN:
def SkillClearCoolTime(self, slotIndex):
self.interface.SkillClearCoolTime(slotIndex)

View File

@@ -305,10 +305,15 @@ class Interface(object):
self.whisperDialogDict = {}
self.privateShopAdvertisementBoardDict = {}
if app.FIX_MESSENGER_ACTION_SYNC:
self.wndMessenger.InitializeHandler()
self.wndInventory.SetItemToolTip(self.tooltipItem)
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
self.wndSafebox.SetItemToolTip(self.tooltipItem)
self.wndCube.SetItemToolTip(self.tooltipItem)
self.wndCubeResult.SetItemToolTip(self.tooltipItem)
@@ -535,6 +540,11 @@ class Interface(object):
def OnChangeCurrentSkill(self, skillSlotNumber):
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
if app.FIX_REFRESH_SKILL_COOLDOWN:
def SkillClearCoolTime(self, slotIndex):
self.wndCharacter.SkillClearCoolTime(slotIndex)
self.wndTaskBar.SkillClearCoolTime(slotIndex)
def SelectMouseButtonEvent(self, dir, event):
self.wndTaskBar.SelectMouseButtonEvent(dir, event)
@@ -564,7 +574,7 @@ class Interface(object):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.RefreshItemSlot()
def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
def RefreshCharacter(self): ## Character <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, Inventory <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD> <20><><EFBFBD><EFBFBD> Refresh
self.wndCharacter.RefreshCharacter()
self.wndTaskBar.RefreshQuickSlot()
@@ -696,7 +706,7 @@ class Interface(object):
def RemovePartyMember(self, pid):
self.wndParty.RemovePartyMember(pid)
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.__ArrangeQuestButton()
def LinkPartyMember(self, pid, vid):
@@ -711,7 +721,7 @@ class Interface(object):
def ExitParty(self):
self.wndParty.ExitParty()
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.__ArrangeQuestButton()
def PartyHealReady(self):
@@ -874,7 +884,7 @@ class Interface(object):
if True == self.wndChat.IsEditMode():
self.wndChat.CloseChat()
else:
# 웹페이지가 열렸을때는 채팅 입력이 안됨
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ȵ<EFBFBD>
if self.wndWeb and self.wndWeb.IsShow():
pass
else:
@@ -975,7 +985,7 @@ class Interface(object):
else:
self.wndExpandedTaskBar.Close()
# 용혼석
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
def DragonSoulActivate(self, deck):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
@@ -1046,7 +1056,7 @@ class Interface(object):
if True == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.Close()
# 용혼석 끝
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>
def ToggleGuildWindow(self):
if not self.wndGuild.IsShow():
@@ -1096,7 +1106,7 @@ class Interface(object):
def OpenWebWindow(self, url):
self.wndWeb.Open(url)
# 웹페이지를 열면 채팅을 닫는다
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ݴ´<DDB4>
self.wndChat.CloseChat()
# show GIFT
@@ -1124,9 +1134,9 @@ class Interface(object):
def SucceedCubeWork(self, itemVnum, count):
self.wndCube.Clear()
print "큐브 제작 성공! [%d:%d]" % (itemVnum, count)
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! [%d:%d]" % (itemVnum, count)
if 0: # 결과 메시지 출력은 생략 한다
if 0: # <EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
self.wndCubeResult.Open()
@@ -1289,7 +1299,7 @@ class Interface(object):
btn = uiWhisper.WhisperButton()
# QUEST_LETTER_IMAGE
##!! 20061026.levites.퀘스트_이미지_교체
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>ü
import item
if "item"==iconType:
item.SelectItem(int(iconName))
@@ -1336,7 +1346,7 @@ class Interface(object):
screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if self.wndParty.IsShow():
xPos = 100 + 30
else:
@@ -1390,8 +1400,8 @@ class Interface(object):
def __InitWhisper(self):
chat.InitWhisper(self)
## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
## ä<EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> "<22>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
def OpenWhisperDialogWithoutTarget(self):
if not self.dlgWhisperWithoutTarget:
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
@@ -1408,7 +1418,7 @@ class Interface(object):
self.dlgWhisperWithoutTarget.SetTop()
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수
## <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict<EFBFBD><EFBFBD> â<><C3A2> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20>Լ<EFBFBD>
def RegisterTemporaryWhisperDialog(self, name):
if not self.dlgWhisperWithoutTarget:
return
@@ -1427,7 +1437,7 @@ class Interface(object):
self.dlgWhisperWithoutTarget = None
self.__CheckGameMaster(name)
## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수
## ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޴<EFBFBD><DEB4><EFBFBD> 1:1 <20><>ȭ <20>ϱ<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
def OpenWhisperDialog(self, name):
if not self.whisperDialogDict.has_key(name):
dlg = self.__MakeWhisperDialog(name)
@@ -1440,7 +1450,7 @@ class Interface(object):
if 0 != btn:
self.__DestroyWhisperButton(btn)
## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수
## <EFBFBD>ٸ<EFBFBD> ij<><C4B3><EFBFBD>ͷκ<CDB7><CEBA><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20>޾<EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD> <20>δ<EFBFBD> <20>Լ<EFBFBD>
def RecvWhisper(self, name):
if not self.whisperDialogDict.has_key(name):
btn = self.__FindWhisperButton(name)
@@ -1459,7 +1469,7 @@ class Interface(object):
def MakeWhisperButton(self, name):
self.__MakeWhisperButton(name)
## 버튼을 눌렀을때 창을 여는 함수
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
def ShowWhisperDialog(self, btn):
try:
self.__MakeWhisperDialog(btn.name)
@@ -1471,11 +1481,11 @@ class Interface(object):
import dbg
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
## 버튼 초기화
## <EFBFBD><EFBFBD>ư <20>ʱ<EFBFBD>ȭ
self.__DestroyWhisperButton(btn)
## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수
## 창을 최소화 합니다.
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
## â<EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20>մϴ<D5B4>.
def MinimizeWhisperDialog(self, name):
if 0 != name:
@@ -1483,8 +1493,8 @@ class Interface(object):
self.CloseWhisperDialog(name)
## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수
## 창을 지웁니다.
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def CloseWhisperDialog(self, name):
if 0 == name:
@@ -1503,7 +1513,7 @@ class Interface(object):
import dbg
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>Լ<EFBFBD>
def __ArrangeWhisperButton(self):
screenWidth = wndMgr.GetScreenWidth()
@@ -1520,9 +1530,9 @@ class Interface(object):
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
count += 1
## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Whisper <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Լ<EFBFBD>
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
## <EFBFBD>̷<EFBFBD> <20><><EFBFBD><EFBFBD> ToolTip<69><70><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><>ư<EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
def __FindWhisperButton(self, name):
for button in self.whisperButtonList:
if button.name == name:
@@ -1530,7 +1540,7 @@ class Interface(object):
return 0
## 창을 만듭니다.
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def __MakeWhisperDialog(self, name):
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
dlgWhisper.BindInterface(self)
@@ -1542,7 +1552,7 @@ class Interface(object):
return dlgWhisper
## 버튼을 만듭니다.
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def __MakeWhisperButton(self, name):
whisperButton = uiWhisper.WhisperButton()
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")

View File

@@ -105,30 +105,47 @@ def DefineSkillIndexDict():
},
}
def RegisterSkill(race, group, empire=0):
def RegisterSkill(race, group, empire = 0):
DefineSkillIndexDict()
job = chr.RaceToJob(race)
## Character Skill
if SKILL_INDEX_DICT.has_key(job):
# Ensure group 0 exists (horse-only) when cooldown fix is on
if app.FIX_REFRESH_SKILL_COOLDOWN and SKILL_INDEX_DICT.has_key(job):
if not SKILL_INDEX_DICT[job].has_key(0):
# Assassin has 140 as well; others only 137-139
SKILL_INDEX_DICT[job][0] = (0, 0, 0, 0, 0, 0, 0, 0,
137, 0, 138, 0, 139, 0) + ((140,) if job == JOB_ASSASSIN else ())
if SKILL_INDEX_DICT[job].has_key(group):
activeSkillList = SKILL_INDEX_DICT[job][group]
for i in xrange(len(activeSkillList)):
skillIndex = activeSkillList[i]
## 7번 8번 스킬은 여기서 설정하면 안됨
if i != 6 and i != 7:
player.SetSkill(i+1, skillIndex)
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
## Support Skills (Always register regardless of skill group)
if app.FIX_REFRESH_SKILL_COOLDOWN:
if SKILL_INDEX_DICT.has_key(job):
supportSkillList = SKILL_INDEX_DICT[job].get("SUPPORT", ())
for i in xrange(len(supportSkillList)):
player.SetSkill(i+100+1, supportSkillList[i])
player.SetSkill(i + 100 + 1, supportSkillList[i])
## Character Skill
if SKILL_INDEX_DICT.has_key(job):
if SKILL_INDEX_DICT[job].has_key(group):
activeSkillList = SKILL_INDEX_DICT[job][group]
if not app.FIX_REFRESH_SKILL_COOLDOWN:
for i, idx in enumerate(activeSkillList):
if i not in (6, 7): # keep skipping unused slots
player.SetSkill(i + 1, idx)
else:
for i in xrange(len(activeSkillList)):
skillIndex = activeSkillList[i]
## 7<><37> 8<><38> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ<EFBFBD>
if i != 6 and i != 7:
player.SetSkill(i + 1, skillIndex)
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
for i in xrange(len(supportSkillList)):
player.SetSkill(i + 100 + 1, supportSkillList[i])
## Language Skill
if 0 != empire:
@@ -211,20 +228,20 @@ def __InitData():
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")
#자동물약 HP, SP
#<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP, SP
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_HPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_red.mse")
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_AUTO_SPUP, "", "d:/ymir work/effect/etc/recuperation/autodrugup_blue.mse")
#라마단 초승달의 반지(71135) 착용순간 발동 이펙트
#<EFBFBD>󸶴<EFBFBD> <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD>(71135) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_RAMADAN_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item1.mse")
#할로윈 사탕 착용순간 발동 이펙트
#<EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HALLOWEEN_CANDY_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item2.mse")
#행복의 반지 착용순간 발동 이펙트
#<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_HAPPINESS_RING_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item3.mse")
#사랑의 팬던트 착용순간 발동 이펙트
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LOVE_PENDANT_EQUIP, "", "d:/ymir work/effect/etc/buff/buff_item4.mse")
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PENETRATE, "Bip01", "d:/ymir work/effect/hit/gwantong.mse")
@@ -251,8 +268,8 @@ def __InitData():
#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일때 ( 독일전용 )
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_ON_14_FOR_GERMANY, "","season1/effect/paymessage_warning.mse") #<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 14<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_LEVELUP_UNDER_15_FOR_GERMANY, "", "season1/effect/paymessage_decide.mse" )#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 15<31>϶<EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE1, "", "d:/ymir work/effect/hit/percent_damage1.mse")
chrmgr.RegisterCacheEffect(chrmgr.EFFECT_PERCENT_DAMAGE2, "", "d:/ymir work/effect/hit/percent_damage2.mse")
@@ -361,28 +378,28 @@ def __LoadGameEffect():
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+0, "Bip01", localeInfo.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+3, "Bip01", "d:/ymir work/effect/hit/blow_poison/poison_loop.mse") ## <EFBFBD>ߵ<EFBFBD>
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+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>ؿ<EFBFBD><D8BF><EFBFBD> <20>ֵ<EFBFBD>-_-)
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+17, "", "d:/ymir work/pc/assassin/effect/gyeonggong_loop.mse") ## <EFBFBD>ڰ<EFBFBD> - <20><><EFBFBD>
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+20, "", "d:/ymir work/pc/sura/effect/fear_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+21, "", "d:/ymir work/pc/sura/effect/jumagap_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ָ<EFBFBD><D6B8><EFBFBD>
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+22, "", "d:/ymir work/pc/shaman/effect/3hosin_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ȣ<><C8A3>
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+23, "", "d:/ymir work/pc/shaman/effect/boho_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ȣ
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+24, "", "d:/ymir work/pc/shaman/effect/10kwaesok_loop.mse") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>
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)
chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+33, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ## õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (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")
@@ -416,53 +433,53 @@ def __LoadGameEffect():
chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.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") ## 무영진
effect.RegisterIndexedFlyData(effect.FLY_EXP, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_yellow_small2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (EXP)
effect.RegisterIndexedFlyData(effect.FLY_HP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_small.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
effect.RegisterIndexedFlyData(effect.FLY_HP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_big.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP) ū<EFBFBD><EFBFBD>
effect.RegisterIndexedFlyData(effect.FLY_SP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_warrior_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4>
effect.RegisterIndexedFlyData(effect.FLY_SP_MEDIUM, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_small.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
effect.RegisterIndexedFlyData(effect.FLY_SP_BIG, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_blue_big.msf") ## <EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD> ū<><C5AB>
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK1, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_1.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK2, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_2.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK3, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_3.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 3
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK4, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_4.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK5, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_5.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK6, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_6.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6
effect.RegisterIndexedFlyData(effect.FLY_FIREWORK_XMAS, effect.INDEX_FLY_TYPE_FIRE_CRACKER, "d:/ymir work/effect/etc/firecracker/firecracker_xmas.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> X-Mas
effect.RegisterIndexedFlyData(effect.FLY_CHAIN_LIGHTNING, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/pc/shaman/effect/pokroe.msf") ## <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD>
effect.RegisterIndexedFlyData(effect.FLY_HP_SMALL, effect.INDEX_FLY_TYPE_NORMAL, "d:/ymir work/effect/etc/gathering/ga_piece_red_smallest.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
effect.RegisterIndexedFlyData(effect.FLY_SKILL_MUYEONG, effect.INDEX_FLY_TYPE_AUTO_FIRE, "d:/ymir work/pc/sura/effect/muyeong_fly.msf") ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#########################################################################################
## Emoticon
EmoticonStr = "d:/ymir work/effect/etc/emoticon/"
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+0, "", EmoticonStr+"sweat.mse")
net.RegisterEmoticonString("(황당)")
net.RegisterEmoticonString("(Ȳ<EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+1, "", EmoticonStr+"money.mse")
net.RegisterEmoticonString("()")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+2, "", EmoticonStr+"happy.mse")
net.RegisterEmoticonString("(기쁨)")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+3, "", EmoticonStr+"love_s.mse")
net.RegisterEmoticonString("(좋아)")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+4, "", EmoticonStr+"love_l.mse")
net.RegisterEmoticonString("(사랑)")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+5, "", EmoticonStr+"angry.mse")
net.RegisterEmoticonString("(분노)")
net.RegisterEmoticonString("(<EFBFBD>г<EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+6, "", EmoticonStr+"aha.mse")
net.RegisterEmoticonString("(아하)")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+7, "", EmoticonStr+"gloom.mse")
net.RegisterEmoticonString("(우울)")
net.RegisterEmoticonString("(<EFBFBD><EFBFBD><EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+8, "", EmoticonStr+"sorry.mse")
net.RegisterEmoticonString("(죄송)")
net.RegisterEmoticonString("(<EFBFBD>˼<EFBFBD>)")
chrmgr.RegisterEffect(chrmgr.EFFECT_EMOTICON+9, "", EmoticonStr+"!_mix_back.mse")
net.RegisterEmoticonString("(!)")
@@ -1128,7 +1145,7 @@ def __LoadGameShamanEx(race, path):
#chrmgr.RegisterCacheMotionData(chr.MOTION_MODE_GENERAL, chr.MOTION_SKILL+10, "budong.msa")
START_INDEX = 0
#skill.SKILL_EFFECT_COUNT 까지//
#skill.SKILL_EFFECT_COUNT <EFBFBD><EFBFBD><EFBFBD><EFBFBD>//
for i in (1, 2, 3):
END_STRING = ""
if i != 0: END_STRING = "_%d" % (i+1)
@@ -1335,7 +1352,7 @@ def LoadGuildBuildingList(filename):
elif itemID == uiGuild.MATERIAL_PLYWOOD_ID:
materialList[uiGuild.MATERIAL_PLYWOOD_INDEX] = count
## GuildSymbol 은 일반 NPC 들과 함께 등록한다.
## GuildSymbol <EFBFBD><EFBFBD> <20>Ϲ<EFBFBD> NPC <20><><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
import chrmgr
chrmgr.RegisterRaceSrcName(name, folderName)
chrmgr.RegisterRaceName(vnum, name)

View File

@@ -1,6 +1,6 @@
SERVER_NAME = "Metin2"
SERVER_NAME_TEST = "Test"
SERVER_IP = "10.246.140.76"
SERVER_IP = "10.122.201.77"
SERVER_IP_TEST = "127.0.0.1"
CH1_NAME = "CH1"
CH2_NAME = "CH2"

View File

@@ -1385,6 +1385,19 @@ class SlotWindow(Window):
def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
if app.FIX_REFRESH_SKILL_COOLDOWN:
def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0):
wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime)
def RestoreSlotCoolTime(self, key):
wndMgr.RestoreSlotCoolTime(self.hWnd, key)
def TransferSlotCoolTime(self, slotIndex1, slotIndex2):
wndMgr.TransferSlotCoolTime(self.hWnd, slotIndex1, slotIndex2)
def ClearSlotCoolTime(self, slotIndex):
wndMgr.ClearSlotCoolTime(self.hWnd, slotIndex)
def DisableSlot(self, slotIndex):
wndMgr.DisableSlot(self.hWnd, slotIndex)

View File

@@ -50,7 +50,11 @@ class CharacterWindow(ui.ScriptWindow):
SUPPORT_PAGE_SLOT_COUNT = 12
PAGE_SLOT_COUNT = 12
PAGE_HORSE = 2
if app.FIX_HORSE_SKILLS_TAB:
PAGE_HORSE = 3
else:
PAGE_HORSE = 2
SKILL_GROUP_NAME_DICT = {
playerSettingModule.JOB_WARRIOR : { 1 : localeInfo.SKILL_GROUP_WARRIOR_1, 2 : localeInfo.SKILL_GROUP_WARRIOR_2, },
@@ -131,6 +135,10 @@ class CharacterWindow(ui.ScriptWindow):
self.supportSkillPointValue = None
self.skillGroupButton1 = None
self.skillGroupButton2 = None
if app.FIX_HORSE_SKILLS_TAB:
self.skillGroupButton3 = None
self.activeSkillGroupName = None
self.guildNameSlot = None
@@ -178,6 +186,10 @@ class CharacterWindow(ui.ScriptWindow):
self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
if app.FIX_HORSE_SKILLS_TAB:
self.skillGroupButton3 = self.GetChild("Skill_Group_Button_3")
self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
self.tabDict = {
@@ -237,11 +249,12 @@ class CharacterWindow(ui.ScriptWindow):
self.skillGroupButton = (
self.GetChild("Skill_Group_Button_1"),
self.GetChild("Skill_Group_Button_2"),
)
) + ((self.GetChild("Skill_Group_Button_3"),) if app.FIX_HORSE_SKILLS_TAB else ())
global SHOW_ONLY_ACTIVE_SKILL
global HIDE_SUPPORT_SKILL_POINT
if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
self.GetChild("Support_Skill_Point_Label").Hide()
@@ -253,6 +266,7 @@ class CharacterWindow(ui.ScriptWindow):
self.questScrollBar = self.GetChild("Quest_ScrollBar")
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
self.questSlot = self.GetChild("Quest_Slot")
for i in xrange(quest.QUEST_MAX_NUM):
self.questSlot.HideSlotBaseImage(i)
self.questSlot.SetCoverButton(i,\
@@ -264,6 +278,7 @@ class CharacterWindow(ui.ScriptWindow):
self.questNameList = []
self.questLastTimeList = []
self.questLastCountList = []
for i in xrange(quest.QUEST_MAX_NUM):
self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
@@ -284,7 +299,6 @@ class CharacterWindow(ui.ScriptWindow):
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
def __SetEmotionSlot(self):
self.emotionToolTip = uiToolTip.ToolTip()
for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
@@ -302,6 +316,7 @@ class CharacterWindow(ui.ScriptWindow):
emotionIdx = slotIdx
slot = self.soloEmotionSlot
if slotIdx > 50:
slot = self.dualEmotionSlot
@@ -314,16 +329,19 @@ class CharacterWindow(ui.ScriptWindow):
if app.IsPressed(app.DIK_LCONTROL):
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
return
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
def __ClickEmotionSlot(self, slotIndex):
print "click emotion"
if not slotIndex in emotion.EMOTION_DICT:
return
print "check acting"
if player.IsActingEmotion():
return
@@ -336,6 +354,7 @@ class CharacterWindow(ui.ScriptWindow):
if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
import chat
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EMOTION_CHOOSE_ONE)
return
command += " " + chr.GetNameByVID(vid)
@@ -521,7 +540,7 @@ class CharacterWindow(ui.ScriptWindow):
except:
#import exception
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
## 게임이 튕겨 버림
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8> <20><><EFBFBD><EFBFBD>
pass
self.__RefreshStatusPlusButtonList()
@@ -595,25 +614,21 @@ class CharacterWindow(ui.ScriptWindow):
statusPlusButton.Hide()
def SelectSkill(self, skillSlotIndex):
mouseController = mouseModule.mouseController
if False == mouseController.isAttached():
srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
if skill.CanUseSkill(selectedSkillIndex):
if app.IsPressed(app.DIK_LCONTROL):
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
return
mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
else:
mouseController.DeattachObject()
def SelectEmptySlot(self, SlotIndex):
@@ -621,7 +636,6 @@ class CharacterWindow(ui.ScriptWindow):
## ToolTip
def OverInItem(self, slotNumber):
if mouseModule.mouseController.isAttached():
return
@@ -728,6 +742,7 @@ class CharacterWindow(ui.ScriptWindow):
def __GetStatMinusPoint(self):
POINT_STAT_RESET_COUNT = 112
return player.GetStatus(POINT_STAT_RESET_COUNT)
def __OverInStatMinusButton(self, stat):
@@ -761,6 +776,7 @@ class CharacterWindow(ui.ScriptWindow):
def OnPressEscapeKey(self):
self.Close()
return True
def OnUpdate(self):
@@ -771,20 +787,20 @@ class CharacterWindow(ui.ScriptWindow):
global SHOW_LIMIT_SUPPORT_SKILL_LIST
skillPage = self.skillPageDict[name]
startSlotIndex = skillPage.GetStartIndex()
if "ACTIVE" == name:
if self.PAGE_HORSE == self.curSelectedSkillGroup:
startSlotIndex += slotCount
getSkillType=skill.GetSkillType
getSkillIndex=player.GetSkillIndex
getSkillGrade=player.GetSkillGrade
getSkillLevel=player.GetSkillLevel
getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
getSkillMaxLevel=skill.GetSkillMaxLevel
for i in xrange(slotCount+1):
getSkillType = skill.GetSkillType
getSkillIndex = player.GetSkillIndex
getSkillGrade = player.GetSkillGrade
getSkillLevel = player.GetSkillLevel
getSkillLevelUpPoint = skill.GetSkillLevelUpPoint
getSkillMaxLevel = skill.GetSkillMaxLevel
for i in xrange(slotCount + 1):
slotIndex = i + startSlotIndex
skillIndex = getSkillIndex(slotIndex)
@@ -798,7 +814,7 @@ class CharacterWindow(ui.ScriptWindow):
skillLevel = getSkillLevel(slotIndex)
skillType = getSkillType(skillIndex)
## 승마 스킬 예외 처리
## <EFBFBD>¸<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ó<><C3B3>
if player.SKILL_INDEX_RIDING == skillIndex:
if 1 == skillGrade:
skillLevel += 19
@@ -807,48 +823,124 @@ class CharacterWindow(ui.ScriptWindow):
elif 3 == skillGrade:
skillLevel = 40
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel - 1, 0), skillLevel)
skillPage.SetSlotCount(slotIndex, skillLevel)
## ACTIVE
elif skill.SKILL_TYPE_ACTIVE == skillType:
for j in xrange(skill.SKILL_GRADE_COUNT):
realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
skillPage.SetCoverButton(realSlotIndex)
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1):
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
elif (not self.__CanUseSkillNow()) or (skillGrade != j):
skillPage.SetSlotCount(realSlotIndex, 0)
skillPage.DisableCoverButton(realSlotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN:
if not player.IsSkillActive(slotIndex):
skillPage.DeactivateSlot(realSlotIndex)
if player.IsSkillCoolTime(slotIndex) and skillGrade != j:
skillPage.TransferSlotCoolTime(realSlotIndex, self.__GetRealSkillSlot(skillGrade, i))
else:
self.SkillClearCoolTime(realSlotIndex)
else:
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
## 그외
if app.FIX_REFRESH_SKILL_COOLDOWN:
# Check if this is the active slot
# Grade 3 appears in slot 2, so check both conditions
isActiveSlot = (skillGrade == j) or ((skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1))
if player.IsSkillActive(slotIndex) and isActiveSlot:
skillPage.ActivateSlot(realSlotIndex)
else:
skillPage.DeactivateSlot(realSlotIndex)
else:
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
if skill.CanUseSkill(skillIndex):
skillPage.SetCoverButton(realSlotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN:
# Clear storage for horse skills at level 0 BEFORE restore runs
if skillType == skill.SKILL_TYPE_HORSE and skillLevel == 0:
player.ResetHorseSkillCoolTime(skillIndex, realSlotIndex)
skillPage.SetSlotCoolTime(realSlotIndex, 0)
if player.IsSkillActive(slotIndex):
skillPage.ActivateSlot(realSlotIndex)
else:
skillPage.DeactivateSlot(realSlotIndex)
else:
if not player.IsSkillActive(slotIndex):
skillPage.DeactivateSlot(realSlotIndex)
skillPage.RefreshSlot()
if app.FIX_REFRESH_SKILL_COOLDOWN:
self.__RestoreSlotCoolTime(skillPage)
if app.FIX_REFRESH_SKILL_COOLDOWN:
def __RestoreSlotCoolTime(self, skillPage):
restoreType = skill.SKILL_TYPE_NONE
if self.PAGE_HORSE == self.curSelectedSkillGroup:
restoreType = skill.SKILL_TYPE_HORSE
else:
restoreType = skill.SKILL_TYPE_ACTIVE
skillPage.RestoreSlotCoolTime(restoreType)
def __ClearHorseSkillQuickSlots(self):
HORSE_SKILL_SET = (137, 138, 139, 140)
quick_slot_per_page = 8 # two quick_slot windows * 4 slots
quick_page_count = 4 # matches QUICKPAGE_NUMBER_FILENAME
current_page = player.GetQuickPage()
for page in xrange(quick_page_count):
player.SetQuickPage(page)
for local_slot in xrange(quick_slot_per_page):
slotType, position = player.GetLocalQuickSlot(local_slot)
if slotType != player.SLOT_TYPE_SKILL:
continue
skillIndex = player.GetSkillIndex(position)
if skillIndex in HORSE_SKILL_SET:
player.RequestDeleteGlobalQuickSlot(page * quick_slot_per_page + local_slot)
player.SetQuickPage(current_page)
def RefreshSkill(self):
if self.isLoaded==0:
if self.isLoaded == 0:
return
if self.__IsChangedHorseRidingSkillLevel():
if app.FIX_HORSE_SKILLS_TAB:
if not self.__CanUseHorseSkill():
if self.curSelectedSkillGroup == self.PAGE_HORSE:
self.__SelectSkillGroup(0) # fall back to first active tab
self.__ClearHorseSkillQuickSlots() # remove horse skills from taskbar
self.RefreshCharacter()
return
global SHOW_ONLY_ACTIVE_SKILL
if SHOW_ONLY_ACTIVE_SKILL:
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
else:
@@ -858,12 +950,11 @@ class CharacterWindow(ui.ScriptWindow):
self.RefreshSkillPlusButtonList()
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
## 스킬이 있으면
## <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if 0 == skillIndex:
return False
## 레벨업 조건을 만족한다면
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
return False
@@ -871,6 +962,7 @@ class CharacterWindow(ui.ScriptWindow):
def __RefreshSkillPlusButton(self, name):
global HIDE_SUPPORT_SKILL_POINT
if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
return
@@ -878,11 +970,13 @@ class CharacterWindow(ui.ScriptWindow):
slotWindow.HideAllSlotButton()
slotStatType = self.skillPageStatDict[name]
if 0 == slotStatType:
return
statPoint = player.GetStatus(slotStatType)
startSlotIndex = slotWindow.GetStartIndex()
if "HORSE" == name:
startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
@@ -904,7 +998,7 @@ class CharacterWindow(ui.ScriptWindow):
slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
else:
if "SUPPORT" == name:
if "SUPPORT" == name:
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
slotWindow.ShowSlotButton(slotIndex)
@@ -914,7 +1008,6 @@ class CharacterWindow(ui.ScriptWindow):
def RefreshSkillPlusButtonList(self):
if self.isLoaded==0:
return
@@ -933,6 +1026,7 @@ class CharacterWindow(ui.ScriptWindow):
except:
import exception
exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
def RefreshSkillPlusPointLabel(self):
@@ -979,10 +1073,9 @@ class CharacterWindow(ui.ScriptWindow):
mouseModule.mouseController.DeattachObject()
## FIXME : 스킬을 사용했을때 슬롯 번호를 가지고 해당 슬롯을 찾아서 업데이트 한다.
## 매우 불합리. 구조 자체를 개선해야 할듯.
## FIXME : <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
## <EFBFBD>ſ<EFBFBD> <20><><EFBFBD>ո<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>.
def OnUseSkill(self, slotIndex, coolTime):
skillIndex = player.GetSkillIndex(slotIndex)
skillType = skill.GetSkillType(skillIndex)
@@ -996,32 +1089,81 @@ class CharacterWindow(ui.ScriptWindow):
for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex):
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
if app.FIX_REFRESH_SKILL_COOLDOWN:
slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime)
self.__RestoreSlotCoolTime(slotWindow)
else:
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
return
def OnActivateSkill(self, slotIndex):
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN:
skillIndex = player.GetSkillIndex(slotIndex)
skillType = skill.GetSkillType(skillIndex)
## ACTIVE
if skill.SKILL_TYPE_ACTIVE == skillType:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
else:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex):
slotWindow.ActivateSlot(slotIndex)
return
def OnDeactivateSkill(self, slotIndex):
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN:
skillIndex = player.GetSkillIndex(slotIndex)
skillType = skill.GetSkillType(skillIndex)
## ACTIVE
if skill.SKILL_TYPE_ACTIVE == skillType:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
else:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex):
slotWindow.DeactivateSlot(slotIndex)
return
def __ShowJobToolTip(self):
self.toolTipJob.ShowToolTip()
if app.FIX_REFRESH_SKILL_COOLDOWN:
def SkillClearCoolTime(self, slotIndex):
skillIndex = player.GetSkillIndex(slotIndex)
if skillIndex < 1:
return
skillType = skill.GetSkillType(skillIndex)
## ACTIVE
# Map to the correct visual slot based on skill type
if skill.SKILL_TYPE_ACTIVE == skillType:
slotIndex = self.__GetRealSkillSlot(player.GetSkillGrade(slotIndex), slotIndex)
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex):
slotWindow.SetSlotCoolTime(slotIndex, 0)
def __HideJobToolTip(self):
self.toolTipJob.HideToolTip()
@@ -1037,6 +1179,7 @@ class CharacterWindow(ui.ScriptWindow):
jobInfoData=localeInfo.JOBINFO_DATA_LIST[mainJob][subJob]
except IndexError:
print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
return
self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
@@ -1105,18 +1248,20 @@ class CharacterWindow(ui.ScriptWindow):
## GroupName
self.__SetSkillGroupName(race, group)
if app.FIX_REFRESH_SKILL_COOLDOWN:
self.__SetSkillSlotData(race, group, empire)
## Skill
if 0 == group:
self.__SelectSkillGroup(0)
else:
self.__SetSkillSlotData(race, group, empire)
if not app.FIX_REFRESH_SKILL_COOLDOWN:
self.__SetSkillSlotData(race, group, empire)
if self.__CanUseHorseSkill():
self.__SelectSkillGroup(0)
def __SetSkillGroupName(self, race, group):
job = chr.RaceToJob(race)
if not self.SKILL_GROUP_NAME_DICT.has_key(job):
@@ -1127,27 +1272,43 @@ class CharacterWindow(ui.ScriptWindow):
if 0 == group:
self.skillGroupButton1.SetText(nameList[1])
self.skillGroupButton2.SetText(nameList[2])
if app.FIX_HORSE_SKILLS_TAB:
if self.__CanUseHorseSkill():
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
self.skillGroupButton3.Show()
self.skillGroupButton3.SetPosition(95, 2)
else:
self.skillGroupButton3.Hide()
self.skillGroupButton1.Show()
self.skillGroupButton2.Show()
self.activeSkillGroupName.Hide()
else:
if self.__CanUseHorseSkill():
self.activeSkillGroupName.Hide()
self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
self.skillGroupButton1.Show()
self.skillGroupButton2.Show()
if app.FIX_HORSE_SKILLS_TAB:
self.skillGroupButton3.SetText(localeInfo.SKILL_GROUP_HORSE)
self.skillGroupButton1.Show()
self.skillGroupButton2.Hide()
self.skillGroupButton3.Show()
self.skillGroupButton3.SetPosition(50, 2)
else:
self.skillGroupButton2.SetText(localeInfo.SKILL_GROUP_HORSE)
self.skillGroupButton1.Show()
self.skillGroupButton2.Show()
else:
self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
self.activeSkillGroupName.Show()
self.skillGroupButton1.Hide()
self.skillGroupButton2.Hide()
def __SetSkillSlotData(self, race, group, empire=0):
if app.FIX_HORSE_SKILLS_TAB:
self.skillGroupButton3.Hide()
def __SetSkillSlotData(self, race, group, empire=0):
## SkillIndex
playerSettingModule.RegisterSkill(race, group, empire)
@@ -1157,19 +1318,42 @@ class CharacterWindow(ui.ScriptWindow):
## Refresh
self.RefreshSkill()
def __SelectSkillGroup(self, index):
for btn in self.skillGroupButton:
btn.SetUp()
self.skillGroupButton[index].Down()
if app.FIX_HORSE_SKILLS_TAB:
def __SelectSkillGroup(self, pageIndex, (PAGE_SKILL_1, PAGE_SKILL_2, PAGE_SKILL_HORSE) = range(3)):
for pageButton in self.skillGroupButton:
pageButton.SetUp()
if self.__CanUseHorseSkill():
if 0 == index:
index = net.GetMainActorSkillGroup()-1
elif 1 == index:
index = self.PAGE_HORSE
self.skillGroupButton[pageIndex].Down()
self.curSelectedSkillGroup = index
self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
if pageIndex in (PAGE_SKILL_1, PAGE_SKILL_2):
skillGroupIndex = net.GetMainActorSkillGroup()
if bool(skillGroupIndex):
(tmpCurSkillGroup, tmpSkillGroup) = (skillGroupIndex - 1, skillGroupIndex)
else:
(tmpCurSkillGroup, tmpSkillGroup) = (pageIndex, pageIndex + 1)
self.curSelectedSkillGroup = tmpCurSkillGroup
self.__SetSkillSlotData(net.GetMainActorRace(), tmpSkillGroup, net.GetMainActorEmpire())
elif pageIndex == PAGE_SKILL_HORSE and self.__CanUseHorseSkill():
self.curSelectedSkillGroup = self.PAGE_HORSE
self.RefreshSkill()
else:
def __SelectSkillGroup(self, index):
for btn in self.skillGroupButton:
btn.SetUp()
self.skillGroupButton[index].Down()
if self.__CanUseHorseSkill():
if 0 == index:
index = net.GetMainActorSkillGroup() - 1
elif 1 == index:
index = self.PAGE_HORSE
self.curSelectedSkillGroup = index
self.__SetSkillSlotData(net.GetMainActorRace(), index + 1, net.GetMainActorEmpire())
def __CanUseSkillNow(self):
if 0 == net.GetMainActorSkillGroup():
@@ -1178,7 +1362,6 @@ class CharacterWindow(ui.ScriptWindow):
return True
def __CanUseHorseSkill(self):
slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
if not slotIndex:
@@ -1186,12 +1369,33 @@ class CharacterWindow(ui.ScriptWindow):
grade = player.GetSkillGrade(slotIndex)
level = player.GetSkillLevel(slotIndex)
if level < 0:
level *= -1
if grade >= 1 and level >= 1:
return True
return False
if app.FIX_REFRESH_SKILL_COOLDOWN:
# Map to UI-displayed riding level (matches __RefreshSkillPage logic)
# grade 1: base 1..20 shown as 20..39 (offset +19)
# grade 2: base 1..10 shown as 30..39 (offset +29)
# grade 3: shown as 40
effective = 0
if grade >= 3:
effective = 40
elif grade == 2:
effective = level + 29
elif grade == 1:
effective = level + 19
else:
effective = level
# Require displayed riding level >= 21 to enable the horse page
return effective >= 21
else:
if grade >= 1 and level >= 1:
return True
return False
def __IsChangedHorseRidingSkillLevel(self):
ret = False

View File

@@ -13,7 +13,7 @@ import uiRefine
import uiAttachMetin
import uiPickMoney
import uiCommon
import uiPrivateShopBuilder # 개인상점 열동안 ItemMove 방지
import uiPrivateShopBuilder # <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemMove <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
import localeInfo
import constInfo
import ime
@@ -41,7 +41,7 @@ class CostumeWindow(ui.ScriptWindow):
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.wndInventory = wndInventory;
self.wndInventory = wndInventory
self.__LoadWindow()
@@ -113,7 +113,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
ui.ScriptWindow.__init__(self)
self.isLoaded = 0
self.wndInventory = wndInventory;
self.wndInventory = wndInventory
self.wndBeltInventoryLayer = None
self.wndBeltInventorySlot = None
@@ -156,7 +156,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
if localeInfo.IsARABIC() == 0:
self.AdjustPositionAndSize()
## 현재 인벤토리 위치를 기준으로 BASE 위치를 계산, 리턴.. 숫자 하드코딩하기 정말 싫지만 방법이 없다..
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BASE <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD><DAB5>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
def GetBasePosition(self):
x, y = self.wndInventory.GetGlobalPosition()
return x - 148, y + 241
@@ -169,7 +169,7 @@ class BeltInventoryWindow(ui.ScriptWindow):
self.SetSize(self.ORIGINAL_WIDTH, self.GetHeight())
else:
self.SetPosition(bx + 138, by);
self.SetPosition(bx + 138, by)
self.SetSize(10, self.GetHeight())
def __LoadWindow(self):
@@ -251,13 +251,13 @@ class InventoryWindow(ui.ScriptWindow):
sellingSlotNumber = -1
isLoaded = 0
isOpenedCostumeWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 코스츔이 열려있었는지 여부-_-; 네이밍 ㅈㅅ
isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
isOpenedCostumeWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
def __init__(self):
ui.ScriptWindow.__init__(self)
self.isOpenedBeltWindowWhenClosingInventory = 0 # 인벤토리 닫을 때 벨트 인벤토리가 열려있었는지 여부-_-; 네이밍 ㅈㅅ
self.isOpenedBeltWindowWhenClosingInventory = 0 # <EFBFBD>κ<EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-_-; <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
self.__LoadWindow()
@@ -269,11 +269,11 @@ class InventoryWindow(ui.ScriptWindow):
ui.ScriptWindow.Show(self)
# 인벤토리를 닫을 때 코스츔이 열려있었다면 인벤토리를 열 때 코스츔도 같이 열도록 함.
# <EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume:
self.wndCostume.Show()
# 인벤토리를 닫을 때 벨트 인벤토리가 열려있었다면 같이 열도록 함.
# <EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
if self.wndBelt:
self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory)
@@ -439,11 +439,11 @@ class InventoryWindow(ui.ScriptWindow):
self.tooltipItem.HideToolTip()
if self.wndCostume:
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # 인벤토리 창이 닫힐 때 코스츔이 열려 있었는가?
self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
self.wndCostume.Close()
if self.wndBelt:
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가?
self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # <EFBFBD>κ<EFBFBD><EFBFBD>丮 â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20><>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory
self.wndBelt.Close()
@@ -508,7 +508,7 @@ class InventoryWindow(ui.ScriptWindow):
self.dlgPickMoney.SetTitleName(localeInfo.PICK_MONEY_TITLE)
self.dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney))
self.dlgPickMoney.Open(curMoney)
self.dlgPickMoney.SetMax(7) # 인벤토리 990000 제한 버그 수정
self.dlgPickMoney.SetMax(7) # <EFBFBD>κ<EFBFBD><EFBFBD> 990000 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
def OnPickMoney(self, money):
mouseModule.mouseController.AttachMoney(self, player.SLOT_TYPE_INVENTORY, money)
@@ -533,7 +533,7 @@ class InventoryWindow(ui.ScriptWindow):
slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
itemCount = getItemCount(slotNumber)
# itemCount == 0이면 소켓을 비운다.
# itemCount == 0<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if 0 == itemCount:
self.wndItem.ClearSlot(i)
continue
@@ -543,19 +543,19 @@ class InventoryWindow(ui.ScriptWindow):
itemVnum = getItemVNum(slotNumber)
setItemVNum(i, itemVnum, itemCount)
## 자동물약 (HP: #72723 ~ #72726, SP: #72727 ~ #72730) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
## <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (HP: #72723 ~ #72726, SP: #72727 ~ #72730) Ư<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>Կ<EFBFBD> Ȱ<><C8B0>ȭ/<2F><>Ȱ<EFBFBD><C8B0>ȭ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> - [hyo]
if constInfo.IS_AUTO_POTION(itemVnum):
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
# metinSocket - [0] : Ȱ<EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>, [1] : <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, [2] : <EFBFBD>ִ<EFBFBD> <20>
metinSocket = [player.GetItemMetinSocket(slotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
if slotNumber >= player.INVENTORY_PAGE_SIZE:
slotNumber -= player.INVENTORY_PAGE_SIZE
if slotNumber >= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex:
slotNumber -= player.INVENTORY_PAGE_SIZE * self.inventoryPageIndex
isActivated = 0 != metinSocket[0]
if isActivated:
self.wndItem.ActivateSlot(slotNumber)
potionType = 0;
potionType = 0
if constInfo.IS_AUTO_POTION_HP(itemVnum):
potionType = player.AUTO_POTION_TYPE_HP
elif constInfo.IS_AUTO_POTION_SP(itemVnum):
@@ -614,7 +614,7 @@ class InventoryWindow(ui.ScriptWindow):
def SellItem(self):
if self.sellingSlotitemIndex == player.GetItemIndex(self.sellingSlotNumber):
if self.sellingSlotitemCount == player.GetItemCount(self.sellingSlotNumber):
## 용혼석도 팔리게 하는 기능 추가하면서 인자 type 추가
## <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȸ<EFBFBD><C8B8><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD> <20>߰<EFBFBD><DFB0>ϸ鼭 <20><><EFBFBD><EFBFBD> type <EFBFBD>߰<EFBFBD>
net.SendShopSellPacketNew(self.sellingSlotNumber, self.questionDialog.count, player.INVENTORY)
snd.PlaySound("sound/ui/money.wav")
self.OnCloseQuestionDialog()
@@ -764,10 +764,10 @@ class InventoryWindow(ui.ScriptWindow):
else:
#snd.PlaySound("sound/ui/drop.wav")
## 이동시킨 곳이 장착 슬롯일 경우 아이템을 사용해서 장착 시킨다 - [levites]
## <EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2> - [levites]
if player.IsEquipmentSlot(dstItemSlotPos):
## 들고 있는 아이템이 장비일때만
## <EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
if item.IsEquipmentVID(srcItemVID):
self.__UseItem(srcItemSlotPos)
@@ -786,7 +786,7 @@ class InventoryWindow(ui.ScriptWindow):
self.sellingSlotitemCount = itemCount
item.SelectItem(itemIndex)
## 안티 플레그 검사 빠져서 추가
## <EFBFBD><EFBFBD>Ƽ <20>÷<EFBFBD><C3B7><EFBFBD> <20>˻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
## 20140220
if item.IsAntiFlag(item.ANTIFLAG_SELL):
popup = uiCommon.PopupDialog()
@@ -932,7 +932,7 @@ class InventoryWindow(ui.ScriptWindow):
def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos):
"다른 아이템에 사용할 수 있는 아이템인가?"
"<EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?"
if item.IsRefineScroll(srcItemVNum):
return True
@@ -951,7 +951,7 @@ class InventoryWindow(ui.ScriptWindow):
return False
def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos):
"대상 아이템에 사용할 수 있는가?"
"<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ°<D6B4>?"
if srcSlotPos == dstSlotPos:
return False
@@ -992,7 +992,7 @@ class InventoryWindow(ui.ScriptWindow):
return True
elif "USE_PUT_INTO_ACCESSORY_SOCKET" == useType:
if self.__CanPutAccessorySocket(dstSlotPos, srcItemVNum):
return TRUE;
return TRUE
elif "USE_PUT_INTO_BELT_SOCKET" == useType:
dstItemVNum = player.GetItemIndex(dstSlotPos)
print "USE_PUT_INTO_BELT_SOCKET", srcItemVNum, dstItemVNum
@@ -1158,7 +1158,7 @@ class InventoryWindow(ui.ScriptWindow):
self.OnCloseQuestionDialog()
def __SendUseItemToItemPacket(self, srcSlotPos, dstSlotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
return
@@ -1166,7 +1166,7 @@ class InventoryWindow(ui.ScriptWindow):
net.SendItemUseToItemPacket(srcSlotPos, dstSlotPos)
def __SendUseItemPacket(self, slotPos):
# 개인상점 열고 있는 동안 아이템 사용 방지
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.USE_ITEM_FAILURE_PRIVATE_SHOP)
return
@@ -1174,7 +1174,7 @@ class InventoryWindow(ui.ScriptWindow):
net.SendItemUsePacket(slotPos)
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):
# 개인상점 열고 있는 동안 아이템 사용 방지
# <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.MOVE_ITEM_FAILURE_PRIVATE_SHOP)
return

View File

@@ -42,6 +42,7 @@ class MessengerItem(ui.Window):
def SetName(self, name):
self.name = name
if name:
self.text.SetText(name)
self.SetSize(20 + 6*len(name) + 4, 16)
@@ -377,6 +378,16 @@ class MessengerWindow(ui.ScriptWindow):
self.__AddGroup()
messenger.RefreshGuildMember()
if app.FIX_MESSENGER_ACTION_SYNC:
# NEW: Separate initialization from visibility
def InitializeHandler(self):
"""Load UI and register packet handlers without showing window"""
if self.isLoaded == 0:
self.__LoadWindow()
self.OnRefreshList()
self.OnResizeDialog()
self.isLoaded = 1
def Show(self):
if self.isLoaded==0:
self.isLoaded=1
@@ -390,7 +401,7 @@ class MessengerWindow(ui.ScriptWindow):
def __LoadWindow(self):
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
pyScrLoader.LoadScriptFile(self, "UIScript/MessengerWindow.py")
try:
self.board = self.GetChild("board")
@@ -669,6 +680,12 @@ class MessengerWindow(ui.ScriptWindow):
self.selectedItem.OnRemove()
self.selectedItem.UnSelect()
self.selectedItem = None
if app.FIX_MESSENGER_ACTION_SYNC:
self.whisperButton.Disable()
self.mobileButton.Disable()
self.removeButton.Disable()
self.OnRefreshList()
self.OnCloseQuestionDialog()
@@ -770,7 +787,27 @@ class MessengerWindow(ui.ScriptWindow):
def OnRemoveList(self, groupIndex, key):
group = self.groupList[groupIndex]
group.RemoveMember(group.FindMember(key))
if app.FIX_MESSENGER_ACTION_SYNC:
member = group.FindMember(key)
if not member:
return
if self.selectedItem is member or member.IsSameKey(key):
member.UnSelect()
self.selectedItem = None
# Optional: also disable buttons to mirror local delete flow
self.whisperButton.Disable()
self.mobileButton.Disable()
self.removeButton.Disable()
member.Hide()
group.RemoveMember(member)
else:
group.RemoveMember(group.FindMember(key))
self.OnRefreshList()
def OnRemoveAllList(self, groupIndex):

View File

@@ -672,6 +672,23 @@ class TaskBar(ui.ScriptWindow):
for button in self.selectSkillButtonList:
button.RefreshSkill()
if app.FIX_REFRESH_SKILL_COOLDOWN:
def SkillClearCoolTime(self, usedSlotIndex):
QUICK_SLOT_SLOT_COUNT = 4
slotIndex = 0
for slotWindow in self.quickslot:
for i in xrange(QUICK_SLOT_SLOT_COUNT):
(Type, Position) = player.GetLocalQuickSlot(slotIndex)
if Type == player.SLOT_TYPE_SKILL:
if usedSlotIndex == Position:
slotWindow.SetSlotCoolTime(slotIndex, 0)
return
slotIndex += 1
def SetHP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
@@ -776,17 +793,19 @@ class TaskBar(ui.ScriptWindow):
slot.DeactivateSlot(slotNumber)
slot.SetItemSlot(slotNumber, itemIndex, itemCount)
elif player.SLOT_TYPE_SKILL == Type:
skillIndex = player.GetSkillIndex(Position)
if 0 == skillIndex:
slot.ClearSlot(slotNumber)
continue
skillType = skill.GetSkillType(skillIndex)
if skill.SKILL_TYPE_GUILD == skillType:
import guild
skillGrade = 0
skillLevel = guild.GetSkillLevel(Position)
@@ -799,13 +818,26 @@ class TaskBar(ui.ScriptWindow):
slot.SetCoverButton(slotNumber)
## NOTE : CoolTime 체크
if player.IsSkillCoolTime(Position):
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
if app.FIX_REFRESH_SKILL_COOLDOWN:
if player.IsSkillCoolTime(Position) and skillLevel > 0:
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
else:
if skillType != skill.SKILL_TYPE_GUILD and skillLevel <= 0:
slot.SetSlotCoolTime(slotNumber, 0, 0)
else:
if player.IsSkillCoolTime(Position):
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
## NOTE : Activate 되어 있다면 아이콘도 업데이트
if player.IsSkillActive(Position):
slot.ActivateSlot(slotNumber)
else:
if app.FIX_REFRESH_SKILL_COOLDOWN:
slot.DeactivateSlot(slotNumber)
elif player.SLOT_TYPE_EMOTION == Type:

View File

@@ -556,6 +556,22 @@ window = {
"down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub",
},
##horse skill page
{
"name" : "Skill_Group_Button_3",
"type" : "radio_button",
"x" : 95,
"y" : 2,
"text" : "Group3",
"text_color" : 0xFFFFE3AD,
"default_image" : "d:/ymir work/ui/game/windows/skill_tab_button_01.sub",
"over_image" : "d:/ymir work/ui/game/windows/skill_tab_button_02.sub",
"down_image" : "d:/ymir work/ui/game/windows/skill_tab_button_03.sub",
},
{
"name" : "Active_Skill_Group_Name",
"type" : "text",