Cleaned up Camouflage to work as originally intended

Fixed offensive healing and cleaned up skill_calc_heal - Fixes bugreport:7317
Fixed Poison Mist to accurately display and damage correct area - Fixes bugreport:7600
Cleaning channel system update from r17284 and r17285 (lighta)
Updated CHN, SPN, IDN, FRN map_msg translations (Goddameit, Tragedy, Cydh, Capuche)
Follow up to r17228 - Removed map_msg lines related to deprecated @main chat
Fixed issues with clif_maptypeproperty2 and clif_dropfloorite (lighta) bugreport:7602 - bugreport:7603

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17296 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
akinari1087 2013-04-26 03:13:48 +00:00
parent a15cee063d
commit 380bf896f0
15 changed files with 435 additions and 375 deletions

View File

@ -98,15 +98,15 @@ save_clothcolor: yes
wedding_ignorepalette: no
// Do not display cloth colors for the Xmas class?
// Set this to yes if your cloth palettes pack doesn't has Xmas palettes (or has less than the other jobs)
// Set this to yes if your cloth palettes pack doesn't have Xmas palettes (or has less than the other jobs)
xmas_ignorepalette: no
// Do not display cloth colors for the Summer class?
// Set this to yes if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs)
// Set this to yes if your cloth palettes pack doesn't have Summer palettes (or has less than the other jobs)
summer_ignorepalette: no
// Do not display cloth colors for the Hanbok class?
// Set this to yes if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs)
// Set this to yes if your cloth palettes pack doesn't have Hanbok palettes (or has less than the other jobs)
hanbok_ignorepalette: no
// Set this to 1 if your clients have langtype problems and can't display motd properly

View File

@ -386,16 +386,7 @@
375: <- Player %s has left the duel --
376: -> Player %s has accepted the duel --
377: -- Player %s has rejected the duel --
// Main chat
380: Main chat has been activated.
381: Main chat already activated.
382: Main chat has been disabled.
383: Main chat already disabled.
384: Main chat is currently enabled. Usage: @main <on|off>, @main <message>.
385: Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
386: %s :Main: %s
387: You cannot use Main chat while muted.
388: You should enable main chat with "@main on" command.
//378-389 free
//NoAsk
390: Autorejecting is activated.
391: Autorejecting is deactivated.
@ -456,7 +447,7 @@
// Messages of others (not for GM commands)
// ----------------------------------------
//500: FREE
//500 free
501: Your account time limit is: %d-%m-%Y %H:%M:%S.
502: Day Mode is activated
503: Night Mode is activated
@ -471,7 +462,7 @@
// Trade Spoof Messages
507: This player has been banned for %d minute(s).
508: This player hasn't been banned (Ban option is disabled).
//509 Available....
//509 free
// mail system
//----------------------
@ -569,8 +560,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
//619: FREE
//620: FREE
//619 free
//620 free
621: Summer
622: Gangsi
623: Death Knight
@ -1421,10 +1412,10 @@
1398: -- Displaying first %d partial matches:
// @channel
1399: Unknown Channel (usage: %s <#channel_name>)
1400: Unknown Channel '%s' (usage: %s <#channel_name>)
1401: '%s' Channel is password protected (usage: %s <#channel_name> <password>)
1402: You're not in that channel, type '@join <#channel_name>'
1399: Unknown channel (usage: %s <#channel_name>).
1400: Unknown channel '%s' (usage: %s <#channel_name>).
1401: Channel '%s' is password-protected (usage: %s <#channel_name> <password>).
1402: You're not in that channel (use '@join <#channel_name>').
1403: You're now in the '%s' channel.
1404: %s failed.
1405: Channel name must start with '#'.
@ -1458,48 +1449,47 @@
1433: Your global chat is now unbinded from the '#%s' channel.
1434: You're already in the '%s' channel.
1435: You're now in the '#%s' channel for '%s'.
1436: Channel password can't be higher then %d.
1437: Player '%s' has now been banned from '%s' channel
1438: You cannot join the '%s' channel because you've been banned from it
1439: Channel '%s' has no banned players
1440: Player '%s' is not banned from this channel
1441: Player '%s' has now been unbanned from the '%s' channel
1442: Removed all bans from '%s' channel
1443: -- '%s' ban list
1444: - %d: %s
1436: Channel password can't be over %d characters.
1437: Player '%s' is banned from the '%s' channel.
1438: You're currently banned from the '%s' channel.
1439: Channel '%s' contains no banned players.
1440: Player '%s' is not banned from this channel.
1441: Player '%s' is unbanned from the '%s' channel.
1442: Cleared all bans from the '%s' channel.
1443: ---- '#%s' Ban List:
//1444 free
1445: - %s
1446: You need to input a option
1447: '%s' is not a known channel option
1448: -- Available options
1449: option '%s' is already enabled, if you'd like to disable it type '@channel setopt %s 0'
1450: option '%s' is now enabled for channel '%s'
1451: value '%d' for option '%s' is out of range (limit is 0-10)
1452: option '%s' is now enabled for channel '%s' with %d seconds
1453: option '%s' is now disabled for channel '%s'
1454: option '%s' is now enabled for channel '%s'
1446: You need to input an option.
1447: Unknown channel option '%s'.
1448: Channel '%s' deleted.
1449: Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
1450: Option '%s' is enabled for channel '%s'.
1451: Value '%d' for option '%s' is out of range (limit 0-10).
1452: Option '%s' is enabled for channel '%s' at %d seconds.
1453: Option '%s' is disabled for channel '%s'.
//1454 free
1455: You're talking too fast!
1456: -- %s ban <channel name> <character name>
1457: - bans <character name> from <channel name> channel
1458: -- %s banlist <channel name>
1459: - lists all banned characters from <channel name> channel
1460: -- %s unban <channel name> <character name>
1461: - unban <character name> from <channel name> channel
1462: -- %s setopt <channel name> <option name> <option value>
1463: - adds or removes <option name> with <option value> to <channel name> channel
1464: Ban failed, not possible to ban/unban this user.
1465: Player '%s' is already banned from this channel
1466: For '%s' you need the amount of seconds (from 0 to 10)
1467: -- %s unbanall <channel name>
1468: - unbans everyone from <channel name>
1469: * %s delete <channel_name>
1470: -- Force people leave and destroy the specified channel
1456: * %s ban <#channel_name> <player>
1457: -- Bans the specified player from the channel.
1458: * %s banlist <#channel_name>
1459: -- Lists all players banned from the specified channel.
1460: * %s unban <#channel_name> <player>
1461: -- Unbans the specified player from the channel.
1462: * %s setopt <#channel_name> <option> <value>
1463: -- Sets an option and value for the specified channel.
1464: Ban failed for player '%s'.
1465: Player '%s' is already banned from this channel.
1466: Input the number of seconds (0-10) for the '%s' option.
1467: * %s unbanall <#channel_name>
1468: -- Clears all bans from the specified channel.
1469: * %s delete <#channel_name>
1470: -- Destroys the specified channel.
1471: * %s list mine
1472: -- List all your joined channel
1473: * %s join <channel_name> <channel_password>
1474: -- join specified channel
1475: ---- Joined Channels ----
1476: You have not joined any channel yet
1477: Channel %s deleted
1472: -- Lists all channels you have joined.
1473: * %s join <#channel_name> <channel_password>
1474: -- Joins the specified channel.
1475: ---- My Channels ----
1476: You have not joined any channels.
//Custom translations
//import: conf/msg_conf/import/map_msg_eng_conf.txt

View File

@ -1,7 +1,7 @@
// rAthena map_msg_chn.conf
// Message Configuration
// For translation, just change msg here (second line), no need to modify source code,
// or alternatively, use conf/import/msg_conf.txt
// or alternatively, use conf/msg_conf/import/map_msg_chn_conf.txt
// Format:
// // English message
// msg_number: translated message
@ -348,7 +348,7 @@
332: 32個城堡
333: 33個城堡
// 334: Thirty-Four Castles
324: 完全統治
334: 完全統治
// Templates for @who output
343: 名字: %s
@ -386,16 +386,7 @@
375: <- 玩家 %s 已經離開決鬥 --
376: -> 玩家 %s 已經接受決鬥 --
377: -- 玩家 %s 已經拒絕決鬥 --
// Main chat
380: 主聊天功能正在啟動
381: 主聊天功能已經啟動
382: 主聊天功能正在被禁止
383: 主聊天功能已經被禁止
384: 當前可以使用主聊天功能用法: @main <on|off>, @main <訊息>.
385: 當前不能使用主聊天功能用法: @main <on|off>, @main <訊息>.
386: %s :Main: %s
387: 禁言時不能使用主聊天功能
388: 請使用 "@main on" 打開主聊天功能
//378-389 free
//NoAsk
390: 自動拒絕功能啟動
391: 自動拒絕功能關閉
@ -443,10 +434,20 @@
// Homunculus messages
450: 你已經擁有一個人工生命體了
// Return pet to egg message
451: 你無法收回寵物,因為你身上沒有空間了
// Message System
460: 請輸入合法的語言 (usage: @langtype <language>).
461: 語言現在被設定為 %s
462: 這語言不被允許
463: 訊息組態已被重新載入
464: ---- 允許的語言:
// Messages of others (not for GM commands)
// ----------------------------------------
//500: FREE
//500 free
501: 您上次登入時間是: %d-%m-%Y %H:%M:%S
502: 白晝到來了
503: 夜晚降臨了
@ -455,8 +456,8 @@
504: 使用了%d卡普拉點數(%s)和%d現金點數(%s)。剩餘%d卡普拉點數和%d現金點數。
505: 得到了%d現金點數。總共%d點數。
506: 得到了%d卡普拉點數。總共%d點數。
505: 失去了%d現金點數。總共%d點數。
506: 失去了%d卡普拉點數。總共%d點數。
410: 失去了%d現金點數。總共%d點數。
411: 失去了%d卡普拉點數。總共%d點數。
// Trade Spoof Messages
507: 此玩家被禁止發言 %d 分鐘
@ -559,10 +560,10 @@
616: 跆拳少年/少女
617: 拳聖
618: 悟靈士
//619: FREE
//620: FREE
620: 忍者
621: 夏裝
//619 free
//620 free
621: 忍者
622: 夏裝
623: Death Knight
624: Dark Collector
625: 盧恩騎士
@ -758,28 +759,28 @@
1009: Please enter a status type/flag (用法: @displaystatus <status type> <flag> <tick> {<val1> {<val2> {<val3>}}}).
// @stpoint
1010: Please enter a number (用法: @stpoint <number of points>).
1010: 請輸入有效數字 (用法: @stpoint <number of points>).
// @skpoint
1011: Please enter a number (用法: @skpoint <number of points>).
1011: 請輸入有效數字 (用法: @skpoint <number of points>).
// @zeny
1012: 請輸入數量 (用法: @zeny <amount>).
// @param
1013: Please enter a valid value (用法: @str/@agi/@vit/@int/@dex/@luk <+/-adjustment>).
1013: 請輸入有效數值 (用法: @str/@agi/@vit/@int/@dex/@luk <+/-adjustment>).
// @guildlevelup
1014: Please enter a valid level (用法: @guildlvup/@guildlvlup <# of levels>).
1014: 請輸入有效等級 (用法: @guildlvup/@guildlvlup <# of levels>).
// @makeeg
1015: Please enter a monster/egg name/ID (用法: @makeegg <pet>).
1015: 請輸入魔物\寵物蛋的名稱\ID (用法: @makeegg <pet>).
// @petfriendly
1016: Please enter a valid value (用法: @petfriendly <0-1000>).
1016: 請輸入有效數值 (用法: @petfriendly <0-1000>).
// @pethungry
1017: Please enter a valid number (用法: @pethungry <0-100>).
1017: 請輸入有效數字 (用法: @pethungry <0-100>).
// @recall
1018: 請輸入角色名稱 (用法: @recall <char name/ID>).
@ -805,7 +806,7 @@
1026: 請輸入角色名稱 (用法: @kick <char name/ID>).
// @questskill / @lostskill
1027: Please enter a quest skill number.
1027: 請輸入任務技能的編號
// @spiritball
1028: 請輸入數量 (用法: @spiritball <number: 0-%d>).
@ -817,11 +818,11 @@
1030: 請輸入公會名稱 (用法: @guild <guild_name>).
// @idsearch
1031: Please enter part of an 物品名稱 (用法: @idsearch <part_of_item_name>).
1031: 請輸入部分的物品名稱 (用法: @idsearch <part_of_item_name>).
// @recallall / @guildrecall / @partyrecall
1032: You are not authorized to warp somenone to your current map.
1033: Because you are not authorized to warp from some maps, %d player(s) have not been recalled.
1032: 你不被允許移動某人到你當前的地圖
1033: 因為你不被允許移動某人到某地圖 %d 名玩家沒有被召回
// @guildrecall
1034: 請輸入公會名稱/ID (用法: @guildrecall <guild_name/ID>).

View File

@ -386,16 +386,7 @@
375: <- Joueur %s quitte le duel --
376: -> Joueur %s accepte le duel --
377: -- Joueur %s rejete la demande de duel --
// Main chat
380: Chat principal activé.
381: Chat principal déjà activé.
382: Chat principal désactivé.
383: Chat principal déjà désactivé.
384: Chat principal activé. Usage: @main <on|off>, @main <message>.
385: Chat principal désactivé. Usage: @main <on|off>, @main <message>.
386: %s :Main: %s
387: Vous ne pouvez pas utiliser le chat principal en étant mute.
388: Activer le chat principal avec la commande "@main on".
//378-389 free
//NoAsk
390: Rejet automatique activé.
391: Rejet automatique désactivé.
@ -429,20 +420,23 @@
419: Serveur bloqué à cause de la surpopulation.
420: Votre compte n'est plus autorisé.
421: Votre compte est totallement supprimé.
423: Compte bannie jusqu'à
423: Compte banni jusqu'à
424: Login-server demande de %s le Joueur '%.*s'.
425: Le Joueur '%.*s' n'existe pas.
426: Votre niveau de GM ne vous autorise pas à %s le Joueur '%.*s'.
427: Login-server est déconnecté. Impossible de %s le Joueur '%.*s'.
428: bloqué
429: bannie
429: banni
430: débloqué
431: débannie
431: débanni
432: change le genre de
// Homunculus messages
450: Vous possédez déjà un homunculus
// Return pet to egg message
451: Vous ne pouvez pas remettre votre pet dans son oeuf car votre inventaire est plein.
// Message System
460: Entrez une langue (usage: @langtype <langue>).
461: La langue est maintenant en %s.
@ -453,7 +447,7 @@
// Autres Messages ( != GM commands)
// ----------------------------------------
//500: FREE
//500 free
501: La date limite de votre compte est: %d-%m-%Y %H:%M:%S.
502: Le Mode Jour s'est activé
503: Le Mode Nuit s'est activé
@ -466,9 +460,9 @@
411: Supprimé %d kafra points. Total: %d points.
// Trade Spoof Messages
507: Joueur bannie pendant %d minute(s).
508: Joueur non-bannie (Option Ban désactivée).
//509 Available....
507: Joueur banni pendant %d minute(s).
508: Joueur non-banni (Option Ban désactivée).
//509 free
// mail system
//----------------------
@ -566,8 +560,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
//619: FREE
//620: FREE
//619 free
//620 free
621: Summer
622: Gangsi
623: Death Knight
@ -1417,14 +1411,12 @@
// @skillid (extension)
1398: -- Affichage des premiers %d de la recherche:
// @join
1399: Canal ('Channel') inconnu (usage: %s <#nom_canal>)
1400: Canal ('Channel') inconnu '%s' (usage: %s <#nom_canal>)
1401: Le Canal '%s' est protégé par un mot de passe (usage: %s <#nom_canal> <mot_de_passe>)
1402: Vous n'êtes pas sur ce canal, taper '@join <#nom_canal>'
1403: Vous êtes connecté(e) sur le Canal '%s'.
// @channel
1399: Canal ('Channel') inconnu (usage: %s <#nom_canal>).
1400: Canal ('Channel') inconnu '%s' (usage: %s <#nom_canal>).
1401: Le Canal '%s' est protégé par un mot de passe (usage: %s <#nom_canal> <mot_de_passe>).
1402: Vous n'êtes pas sur ce canal, taper '@join <#nom_canal>'.
1403: Vous êtes connecté(e) sur le Canal '%s'.
1404: %s échoué.
1405: Le nom du Canal doit commencer par '#'.
1406: La longueur du nom du Canal doit être comprise entre 3 et %d.
@ -1456,7 +1448,48 @@
1432: Votre chat global n'est relié à aucun canal.
1433: Votre chat global est maintenant délié du Canal '#%s'.
1434: Vous êtes déjà sur le canal '%s'.
1435: Vous entrez sur le Canal '#%s' de '%s'.
1435: Vous êtes sur le Canal '#%s' à '%s'.
1436: Le Mot de passe du Canal ne peut pas dépasser %d caractères.
1437: Le Joueur '%s' est banni du canal '%s'.
1438: Vous ne pouvez pas rejoindre le canal '%s', vous en êtes banni.
1439: Le canal '%s' n'a aucun joueur banni.
1440: Le joueur '%s' n'est pas banni de ce canal.
1441: Le joueur '%s' n'est plus banni du canal '%s'
1442: Liste des bannis du canal '%s' supprimée.
1443: ---- liste des bannis de '#%s':
//1444 free
1445: - %s
1446: Veuillez entrer une option.
1447: Option de canal '%s' inconnue.
1448: Canal %s supprimé,
1449: L'option '%s' est déjà activée, si vous souhaitez la désactiver entrez: '@channel setopt %s 0'.
1450: Option '%s' maintenant activée sur le canal '%s'.
1451: La valeur '%d' pour l'option '%s' est incorrecte (doit être comprise entre 0-10).
1452: Option '%s' maintenant activée sur le canal '%s' avec %d secondes.
1453: Option '%s' maintenant désactivée sur le canal '%s'.
//1454 free
1455: Vous parlez trop rapidement!
1456: * %s ban <#nom_canal> <nom du personnage>
1457: -- Banni <nom du personnage> du canal <#nom_canal>
1458: * %s banlist <#nom_canal>
1459: -- Listes de tous les personnages bannis du canal <#nom_canal>
1460: * %s unban <#nom_canal> <nom du personnage>
1461: -- Débanni <nom du personnage> du canal <#nom_canal>
1462: * %s setopt <#nom_canal> <nom de l'option> <valeur de l'option>
1463: -- Ajoute ou supprime <nom option> avec <valeur de l'option> du canal <#nom_canal>
1464: Ban échoué, impossible de bannir/débannir cet utilisateur.
1465: Le joueur '%s' est déjà banni de ce canal.
1466: Pour '%s' vous avez besoin de la quantité de secondes (0 à 10 secs)
1467: * %s unbanall <#nom_canal>
1468: -- Débanni tous les bannis du canal <#nom_canal>
1469: * %s delete <#nom_canal>
1470: -- Force les utilisateurs à sortir du canal et supprime le canal spécifié
1471: * %s list mine
1472: -- Liste tous les canaux rejoins
1473: * %s join <#nom_canal> <mot de passe du canal>
1474: -- joindre le canal spécifié
1475: ---- Canaux rejoins ----
1476: Vous n'avez rejoins aucun canal.
//Custom translations
//import: conf/msg_conf/import/map_msg_frn_conf.txt

View File

@ -1,19 +1,19 @@
// rAthena map_msg_idn.conf
// Pengaturan pesan
// Diterjemahkan oleh [Cydh] dan [nanakiwurtz]
// Untuk terjemahan, cukup ubah pesan di sini (pada baris ke-2), tidak perlu mengubah source code,
// atau dapat dilakukan dengan cara lain, menggunakan conf/import/msg_conf.txt
// Pengaturan pesan. Diterjemahkan oleh [Cydh] dan [nanakiwurtz]
// Untuk terjemahan, cukup ubah pesan di sini (pada baris setelah pesan asli), tidak perlu mengubah source code,
// atau dapat dilakukan dengan cara lain, gunakan conf/msg_conf/import/map_msg_idn_conf.txt
// Format penulisan:
// //nomor_pesan: pesan asli
// nomor_pesan: pesan yang diterjemahkan
// 0-410: untuk perintah GM
// 500-900 untuk lainnya
// 0-410: digunakan untuk perintah GM
// 500-900: digunakan untuk pesan lainnya
// 900-1300: @atcommand
// Untuk meniadakan sebuah string (%s), maka jadikan maks. panjang string tersebut menjadi 0.
// Untuk meniadakan sebuah string (%s), maka jadikan panjang string maksimal tersebut menjadi 0.
// contoh:
// 270: *%s %s* (@me format)
// 270: *%.0s%s* (menghilangkan nama karakter dari pesan tersebut)
// 270: *%.0s%s* (menghilangkan nama karakter dari @me)
// Pesan dari perintah GM
// -----------------------
@ -349,14 +349,14 @@
// 334: Tigapuluh Empat Kastil
334: Mendominasi Total!
// Contoh untuk keluaran @who
// Contoh untuk hasil @who
343: Nama: %s
344: (%s)
345: | Party: '%s'
346: | Guild: '%s'
//Kamu mungkin menghilangkan %s terakhir, kemudian kamu tidak akan melihat nama job pemain.
//Kamu mungkin menghilangkan '%s' terakhir, hasilnya kamu tidak akan melihat nama job pemain.
347: | Lv:%d/%d | Job: %s
//Kamu mungkin menghilangkan %d terakhir, kemudian kamu tidak akan koordinat pemain, hanya nama map.
//Kamu mungkin menghilangkan 2 '%d' terakhir, hasilnya tidak akan koordinat pemain, hanya nama map.
348: | Lokasi: %s %d %d
// @duel (bagian 1)
@ -385,16 +385,7 @@
375: <- Pemain %s meninggalkan duel --
376: -> Pemain %s telah menerima permintaan duel --
377: -- Pemain %s telah menolak permintaan duel --
// Main chat
380: Main chat telah diaktifkan.
381: Main chat sudah aktif..
382: Main chat telah dimatikan..
383: Main chat sudah dimatikan.
384: Main chat saat ini tersedia. Penggunaan: @main <on|off>, @main <pesan>.
385: Main chat saat ini dimatikan. Penggunaan: @main <on|off>, @main <pesan>.
386: %s :Main: %s
387: Kamu tidak dapat menggunakan obrolan 'Main' ketika bisu.
388: Kamu sebaiknya mengaktifkan obrolan utama dengan perintah "@main on".
//378-389 kosong
//NoAsk
390: Penolakan otomatis diaktifkan.
391: Penolakan otomatis ditidakaktifkan.
@ -442,6 +433,9 @@
// Pesan-pesan untuk Homunculus
450: Kamu sudah memiliki homunculus
// Pesan tentang mengembalikan peliharaan ke telur
451: Kamu tidak dapat mengembalikan peliharaan kamu karena inventory penuh.
// Sistem Pesan
460: Harap masukkan tipe bahasa yang valid. (Penggunaan: @langtype <bahasa>).
461: Bahasa saat ini dipilih menjadi %s.
@ -452,7 +446,7 @@
// Pesan-pesan untuk keperluan lain (Bukan untuk perintah GM)
// ----------------------------------------
//500: KOSONG
//500: kosong
501: Batas akun kamu adalah: %d-%m-%Y %H:%M:%S.
502: Mode siang diaktifkan.
503: Mode malam diaktifkan.
@ -564,8 +558,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
//619: KOSONG
//620: KOSONG
//619: kosong
//620: kosong
621: Summer
622: Gangsi
623: Death Knight
@ -700,7 +694,7 @@
// @jobchange
922: Harap masukkan ID Job.
923: Kamu tidak bisa berganti job menggunakan perintah ini.
//924-979 KOSONG (Masih kosong, dipakai untuk job-job berikutnya)
//924-979 kosong (Masih kosong, dipakai untuk job-job berikutnya)
// @kami
980: Harap masukkan pesan (Penggunaan: @kami <pesan>).
@ -1361,19 +1355,19 @@
// @accinfo
1365: Penggunaan: @accinfo/@accountinfo <id_akun/nama karakter>
1366: Kamu diperbolehkan mencari bagian nama dengan menggunakan '%' dalam pencarian, misal. "@accinfo %Mario%" akan menampilkan daftar semua karakter dengan nama "Mario".
1366: Kamu boleh mencari bagian nama dengan menggunakan '%' dalam pencarian, misal "@accinfo %Mario%" akan menampilkan daftar semua karakter dengan nama "Mario".
// @set
1367: Penggunaan: @set <nama variable> <nilai>
1368: Penggunaan: ex. "@set PoringCharVar 50"
1369: Penggunaan: ex. "@set PoringCharVarSTR$ Super Duper String"
1370: Penggunaan: ex. "@set PoringCharVarSTR$" menghasilkan nilainya, Super Duper String.
1371: Variabel pada NPC tidak mungkin digunakan dengan @set.
1372: Variabel instanis tidak mungkin digunakan dengan @set.
1373: Nilai %s saat ini :%d
1374: Nilai %s saat ini :%s
1368: Contoh penggunaan: "@set PoringCharVar 50"
1369: Contoh penggunaan: "@set PoringCharVarSTR$ Super Duper String"
1370: Contoh penggunaan: "@set PoringCharVarSTR$" menampilkan nilainya, Super Duper String.
1371: Variabel pada NPC tidak boleh digunakan dengan @set.
1372: Variabel instansi tidak boleh digunakan dengan @set.
1373: Nilai %s saat ini: %d
1374: Nilai %s saat ini: %s
1375: %s kosong
1376: Jenis data %s tidak didukung :%u
1376: Jenis data %s tidak didukung: %u
// @reloadquestdb
1377: Database Quest sudah dimuat ulang.
@ -1415,14 +1409,12 @@
// @skillid (tambahan)
1398: -- Menampilkan %d bagian pertama yang cocok:
// @join
// @channel
1399: Channel tidak diketahui. (Penggunaan: %s <#nama_channel>)
1400: Channel '%s' tidak diketahui. (Penggunaan: %s <#nama_channel>)
1401: Channel '%s' menggunakan password. (Penggunaan: %s <#nama_channel> <password>)
1402: kamu tidak berada di channel tersebut, ketikkan '@join <#nama_channel>'
1403: Kamu sekarang berada di channel '%s'.
// @channel
1404: %s gagal.
1405: Nama Channel harus dimulai dengan '#'.
1406: Panjang nama channel harus di antara 3 dan %d.
@ -1446,7 +1438,7 @@
1424: -- Meninggalkan channel yang ditentukan.
1425: Kamu bukan bagian dari channel '%s'.
1426: Kamu meninggalkan channel '%s'.
1427: * %s bindto <#name_channel>
1427: * %s bindto <#nama_channel>
1428: -- Mengikat chat globalmu ke channel yang ditentukan, mengirim semua pesan global ke channel tersebut.
1429: * %s unbind
1430: -- Melepaskan chat globalmu dari channel yang diikuti, jika ada.
@ -1455,6 +1447,47 @@
1433: Chat globalmu sudah dilepaskan dari channel '#%s'.
1434: Kamu telah berada di channel '%s'.
1435: Kamu sekarang berada di channel '#%s' untuk '%s'.
1436: Password channel tidak dapat lebih banyak dari %d.
1437: Pemain '%s' sekarang telah diban dari channel '%s'.
1438: Kamu tidak dapat bergabung di channel '%s' karena kamu telah diban dari channel tersebut.
1439: Channel '%s' tidak memiliki pemain yang diban.
1440: Pemain '%s' tidak diban dari channel ini.
1441: Pemain '%s' sudah diunban dari channel '%s' saat ini.
1442: Menghilangkan semua 'ban' dari channel '%s'.
1443: ---- Daftar 'ban' '#%s':
//1444 kosong
1445: - %s
1446: Kamu butuh untuk memasukkan pilihan.
1447: '%s' adalah pilihan channel yang tidak diketahui.
1448: Channel %s dihapus.
1449: Pilihan '%s' sudah diaktifkan, jika kamu ingin mematikannya ketik '@channel setopt %s 0'.
1450: Pilihan '%s' saat ini diaktifkan untuk channel '%s'.
1451: Nilai '%d' keluar dari batas untuk option '%s' (batasnya 0-10).
1452: Pilihan '%s' sekarang diaktifkan untuk channel '%s' dalam %d detik.
1453: Pilihan '%s' sekarang dimatikan untuk channel '%s'.
//1454 kosong
1455: Kamu berbicara terlalu cepat!
1456: * %s ban <#nama_channel> <nama karakter>
1457: -- ban <nama karakter> dari channel <#nama_channel>
1458: * %s banlist <#nama_channel>
1459: -- daftar semua pemain yang diban dari channel <#nama_channel>
1460: * %s unban <#nama_channel> <nama karakter>
1461: -- unban <nama karakter> dari channel <#nama_channel>
1462: * %s setopt <#nama_channel> <nama pilihan> <nilai pilihan>
1463: -- menambahkan atau mengurangi <nama pilihan> dengan <nilai pilihan> untuk channel <#nama_channel>
1464: 'Ban' gagal, tidak mungkin untuk 'ban'/'unban' pengguna ini.
1465: Pemain '%s' sudah diban dari channel ini.
1466: Untuk '%s' kamu membutuhkan jumlah dalam detik (dari 0 sampai 10)
1467: * %s unbanall <#nama_channel>
1468: -- 'unban' semua orang dari <#nama_channel>
1469: * %s delete <#nama_channel>
1470: -- Memaksa pemain meninggalkan channel dan menghilangkan channel yang ditentukan.
1471: * %s list mine
1472: -- Daftar semua channel yang kamu ikuti.
1473: * %s join <#nama_channel> <password_channel>
1474: -- bergabung ke channel yang ditentukan
1475: ---- Channel yang diikuti ----
1476: Kamu tidak bergabung ke channel manapun saat ini.
//Bila ada terjemahan lain, cukup tulis di file conf/import/msg_conf.txt
//Bila ada terjemahan lain
//import: conf/msg_conf/import/map_msg_idn_conf.txt

View File

@ -391,16 +391,7 @@
375: <- Jogador %s abandonou o duelo --
376: -> Jogador %s aceitou o desafio --
377: -- Jogador %s não aceitou o desafio --
// Chat principal
380: Chat principal ativado.
381: Chat principal já está ativado.
382: Chat principal desativado.
383: Chat principal já está desativado.
384: Chat principal atualmente ativado. Uso: @main <on|off>, @main <mensagem>.
385: Chat principal atualmente desativado. Uso: @main <on|off>, @main <mensagem>.
386: %s :Main: %s
387: Você não pode usar o Chat principal enquanto estiver mutado.
388: Você pode habilitar o chat principal pelo comando "@main on".
//378-389 livre
//NoAsk
390: Autorejeição ativada.
391: Autorejeição desativada.
@ -461,7 +452,7 @@
// Mensagens para outros (não para comandos de Game Master)
// ----------------------------------------
//500: LIVRE
//500 livre
501: A sua conta expira em: %d-%m-%Y %H:%M:%S.
502: Está de dia
503: Está de noite
@ -570,8 +561,8 @@
616: Taekwon
617: Mestre Taekwon
618: Espiritualista
//619: LIVRE
//620: LIVRE
//619 livre
//620 livre
621: Praia
622: Gangsi
623: Cavaleiro Sombrio
@ -637,7 +628,7 @@
678: Você não é mais o líder do clã.
679: Você se tornou o líder do clã!
680: Você recuperou-se!
//681-899 free
//681-899 livre
681: Cavaleiro Rúnico T
682: Arcano T

View File

@ -390,16 +390,7 @@
376: -> Игрок %s принял приглашение --
377: -- Игрок %s отверг приглашение --
// Сообщения команд Общего чата
380: Общий чат включен.
381: Общий чат уже включен.
382: Общий чат выключен.
383: Общий чат уже выключен.
384: Общий чат включен. Использование: @main <on|off>, @main <сообщение>.
385: Общий чат выключен. Использование: @main <on|off>, @main <сообщение>.
386: %s :Общий: %s
387: Вы не можете использовать Общий чат, когда вы безмолвны.
388: Вы должны включить Общий чат через команду "@main on".
//378-389 НЕ ИСПОЛЬЗУЕТСЯ
// Сообщения команды @NoAsk
390: Автоматический отказ включен.
@ -459,7 +450,7 @@
// ----------------------------------------
// Остальные сообщения
// ----------------------------------------
//500: НЕ ИСПОЛЬЗУЕТСЯ
//500 НЕ ИСПОЛЬЗУЕТСЯ
501: Срок действия вашего аккаунта: %d-%m-%Y %H:%M:%S.
502: Наступил день
503: Наступила ночь
@ -571,8 +562,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
//619: НЕ ИСПОЛЬЗУЕТСЯ
//620: НЕ ИСПОЛЬЗУЕТСЯ
//619 НЕ ИСПОЛЬЗУЕТСЯ
//620 НЕ ИСПОЛЬЗУЕТСЯ
621: Summer
622: Gangsi
623: Death Knight

View File

@ -1,7 +1,7 @@
// rAthena map_msg_spn.conf
// Message Configuration
// For translation, just change msg here (second line), no need to modify source code,
// or alternatively, use conf/import/msg_conf.txt
// or alternatively, use conf/import/map_msg_spn_conf.txt
// Format:
// // English message
// msg_number: translated message
@ -392,16 +392,7 @@
375: <- El jugador %s ha abandonado el duelo --
376: -> El jugador %s ha aceptado el duelo --
377: -- El jugador %s ha rechazado el duelo --
// Main chat
380: Se ha activado el Main chat.
381: El Main chat ya está activo.
382: Se ha desactivado el Main chat.
383: El Main chat ya está desactivado.
384: El Main chat está activado en estos instantes. Uso: @main <on|off>, @main <mensaje>.
385: El Main chat está desactivado en estos instantes. Uso: @main <on|off>, @main <mensaje>.
386: %s :Main: %s
387: No puedes usar el Main chat mientras estás muteado.
388: Deberías activar el Main chat usando el comando "@main on".
//378-389 free
//NoAsk
390: Se ha activado el autoreject.
391: Se ha desactivado el autoreject.
@ -434,7 +425,7 @@
417: Tu archivo EXE del juego no es el de la última versión.
418: Se ha prohibido el log in de tu cuenta.
419: El servidor está sobrecargado por sobrepoblación.
//para 420: No sé si esta traducción refleja lo que se quería decir. Vaya inglés...
//NdT 420: No sé si esta traducción refleja lo que se quería decir. Vaya inglés...
420: Tu cuenta no tiene más autorización.
421: Tu cuenta ha sido totalmente borrada.
423: Tu cuenta ha sido baneada hasta el
@ -451,8 +442,8 @@
// Homunculus messages
450: Ya tienes un homúnculo.
// Return pet to egg message
451: No puedes retornar tu pet porque tu inventory está llena.
// Return pet to egg message
451: No puedes devolver tu pet al huevo porque tu inventario está lleno.
// Message System
460: Por favor, especifica una lengua válida (uso: @langtype <lengua>).
@ -464,7 +455,7 @@
// Messages of others (not for GM commands)
// ----------------------------------------
//500: FREE
//500 free
501: El límite de tiempo de tu cuenta es: %d-%m-%Y %H:%M:%S.
502: El Modo Día está activo
503: El Modo Noche está activo
@ -578,8 +569,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
//619: FREE
//620: FREE
//619 free
//620 free
621: Summer
622: Gangsi
623: Death Knight
@ -1044,7 +1035,8 @@
// @skilltree
1167: Uso: @skilltree <ID skill> <objetivo>
1168: El jugador está usando el árbol de skills de %s (%d puntos de basic skill).
//NdT 1168: No estoy seguro de que sea correcta
1168: El jugador está usando el skill tree de %s (%d puntos de basic skill).
1169: El jugador no puede usar la skill indicada.
1170: El jugador necesita el nivel %d de la skill %s.
1171: El jugador tiene todos los requisitos para la skill indicada.
@ -1432,14 +1424,12 @@
// @skillid (extension)
1398: -- Se muestran las primeras %d coincidencias parciales:
// @join
1399: Canal Desconocido (uso: %s <#nombre_canal>)
1400: Se desconoce el canal '%s' (uso: %s <#nombre_canal>)
1401: El canal '%s' está protegido por contraseña (uso: %s <#nombre_canal> <contraseña>)
1402: No estás en ese canal. Para entrar, escribe '@join <#nombre_canal>'
1403: Estás ahora en el canal '%s'.
// @channel
1399: Canal Desconocido (uso: %s <#nombre_canal>).
1400: Se desconoce el canal '%s' (uso: %s <#nombre_canal>).
1401: El canal '%s' está protegido por contraseña (uso: %s <#nombre_canal> <contraseña>).
1402: No estás en ese canal. Para entrar, escribe '@join <#nombre_canal>'.
1403: Estás ahora en el canal '%s'.
1404: %s fallido.
1405: El nombre del canal debe empezar por '#'.
1406: El nombre del canal debe tener entre 3 y %d caracteres.
@ -1472,6 +1462,47 @@
1433: Tu chat global ya no está unido al canal '%s'.
1434: Ya estás en el canal '%s'.
1435: Estás ahora en el canal '#%s' gracias a '%s'.
1436: La contraseña del canal no puede ser mas grande que %d.
1437: El jugador '%s' ha sido banneado del canal '%s'
1438: No puedes ingresar al canal '%s' por que estás banneado.
1439: El canal '%s' no tiene ningún jugador banneado.
1440: El jugador '%s' no esta banneado de este canal.
1441: El jugador '%s' ha sido desbanneado del canal '%s'
1442: Removidos todos los banneados del canal '%s'
1443: ---- '#%s' Lista de banneados:
//1444 free
1445: - %s
1446: Necesitas ingresar una opción.
1447: '%s' Es una opción invalida.
1448: Canal %s eliminado.
1449: Opción '%s' está activada, si deseas desactivarla escribe '@channel setopt %s 0'.
1450: Opción '%s' está activada para el canal '%s'.
1451: Valores '%d' de la opción '%s' está fuera del rango (El limite es 0-10).
1452: Opción '%s' está activada para el canal '%s' con %d segundos.
1453: Opción '%s' está desactivada para el canal '%s'.
//1454 free
1455: Estás hablando muy rápido!
1456: * %s ban <#nombre_canal> <character name>
1457: -- Bans <character name> del canal <#nombre_canal>
1458: * %s banlist <#nombre_canal>
1459: -- Lista de todos los jugadores banneados del canal <#nombre_canal>
1460: * %s desbannear <#nombre_canal> <character name>
1461: -- Desbannear <character name> del canal <channel name>
1462: * %s setopt <#nombre_canal> <option name> <option value>
1463: -- Añade o remueve <option name> con <option value> del canal <#nombre_canal>
1464: No es posible banear o desbannear a este jugador
1465: El jugador '%s' ya esta banneado de este canal
1466: Para '%s' necesitas una cantidad de segundos (De 0 a 10)
1467: * %s unbanall <#nombre_canal>
1468: -- Desbaneados todos del canal <#nombre_canal>
1469: * %s delete <#nombre_canal>
1470: -- Fuerza a los jugadores para dejar y destruir un canal especific.
1471: * %s list mine
1472: -- Lista de todos tus canales ingresados
1473: * %s ingresa <#nombre_canal> <channel_password>
1474: -- Ingresado a un canal especifico.
1475: ---- Canales ingresados ----
1476: No has entrado a ningún canal todavía.
//Custom translations
//import: conf/msg_conf/import/map_msg_spn_conf.txt

View File

@ -160,7 +160,7 @@
3020,0xf8, , 0, 3, 100,all, 0x018 //KO_ZENKAI
3010,0xfc, , 0, 1,1000,enemy, 0x020 //KO_MAKIBISHI
8020,0xf5, , 0, 3,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST
8020,0xf5, , 3, 0,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST
8033,0x7e, , 0, 0, -1,all, 0x003 //MH_STEINWAND
8025,0x86, , 0, 2:2:3:3:4,1000,enemy, 0x018 //MH_XENO_SLASHER
8041,0xf6, , 1:1:2:2:3, 0,2000,enemy, 0x01A //MH_LAVA_SLIDE

View File

@ -1482,8 +1482,10 @@ ACMD_FUNC(pvpoff)
map[sd->bl.m].flag.pvp = 0;
if (!battle_config.pk_mode)
if (!battle_config.pk_mode){
clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
}
map_foreachinmap(atcommand_pvpoff_sub,sd->bl.m, BL_PC);
map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
clif_displaymessage(fd, msg_txt(sd,31)); // PvP: Off.
@ -1518,9 +1520,9 @@ ACMD_FUNC(pvpon)
map[sd->bl.m].flag.pvp = 1;
if (!battle_config.pk_mode)
{// display pvp circle and rank
if (!battle_config.pk_mode) {// display pvp circle and rank
clif_map_property_mapall(sd->bl.m, MAPPROPERTY_FREEPVPZONE);
clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
map_foreachinmap(atcommand_pvpon_sub,sd->bl.m, BL_PC);
}
@ -1543,6 +1545,7 @@ ACMD_FUNC(gvgoff)
map[sd->bl.m].flag.gvg = 0;
clif_map_property_mapall(sd->bl.m, MAPPROPERTY_NOTHING);
clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0);
clif_displaymessage(fd, msg_txt(sd,33)); // GvG: Off.
@ -1563,6 +1566,7 @@ ACMD_FUNC(gvgon)
map[sd->bl.m].flag.gvg = 1;
clif_map_property_mapall(sd->bl.m, MAPPROPERTY_AGITZONE);
clif_maptypeproperty2(&sd->bl,ALL_SAMEMAP);
clif_displaymessage(fd, msg_txt(sd,34)); // GvG: On.
return 0;
@ -8765,7 +8769,7 @@ ACMD_FUNC(join){
char chname[CHAN_NAME_LENGTH], pass[CHAN_NAME_LENGTH];
if( !message || !*message || sscanf(message, "%s %s", chname, pass) < 1 ) {
sprintf(atcmd_output, msg_txt(sd,1399),command); // Unknown Channel (usage: %s <#channel_name>)
sprintf(atcmd_output, msg_txt(sd,1399),command); // Unknown channel (usage: %s <#channel_name>).
clif_displaymessage(fd, atcmd_output);
return -1;
}
@ -8791,9 +8795,9 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
//option delete
if(can_delete){
sprintf(atcmd_output, msg_txt(sd,1469),command);// * %s delete <channel_name>
sprintf(atcmd_output, msg_txt(sd,1469),command);// * %s delete <#channel_name>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1470)); // -- Force people leave and destroy the specified channel
clif_displaymessage(fd, msg_txt(sd,1470)); // -- Destroys the specified channel.
}
//option list
@ -8802,7 +8806,7 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
clif_displaymessage(fd, msg_txt(sd,1418));// -- Lists all public channels.
sprintf(atcmd_output, msg_txt(sd,1471),command);// * %s list mine
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1472));
clif_displaymessage(fd, msg_txt(sd,1472));// -- Lists all channels you have joined.
if( can_create ) {
sprintf(atcmd_output, msg_txt(sd,1419),command);// * %s list colors
clif_displaymessage(fd, atcmd_output);
@ -8817,9 +8821,9 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
}
//option join
sprintf(atcmd_output, msg_txt(sd,1473),command);// * %s join <channel_name>
sprintf(atcmd_output, msg_txt(sd,1473),command);// * %s join <#channel_name> <channel_password>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1474));
clif_displaymessage(fd, msg_txt(sd,1474));// -- Joins the specified channel.
//option leave
sprintf(atcmd_output, msg_txt(sd,1423),command);// * %s leave <#channel_name>
@ -8838,25 +8842,25 @@ static inline void atcmd_channel_help(struct map_session_data *sd, const char *c
//option ban/unban/banlist
if( can_create ) {
sprintf(atcmd_output, msg_txt(sd,1456),command);// -- %s ban <channel name> <character name>
sprintf(atcmd_output, msg_txt(sd,1456),command);// * %s ban <#channel_name> <player>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1457));// - bans <character name> from <channel name> channel
sprintf(atcmd_output, msg_txt(sd,1458),command);// -- %s banlist <channel name>
clif_displaymessage(fd, msg_txt(sd,1457));// -- Bans the specified player from the channel.
sprintf(atcmd_output, msg_txt(sd,1458),command);// * %s banlist <#channel_name>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1459));// - lists all banned characters from <channel name> channel
sprintf(atcmd_output, msg_txt(sd,1460),command);// -- %s unban <channel name> <character name>
clif_displaymessage(fd, msg_txt(sd,1459));// -- Lists all players banned from the specified channel.
sprintf(atcmd_output, msg_txt(sd,1460),command);// * %s unban <#channel_name> <player>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1461));// - unban <character name> from <channel name> channel
sprintf(atcmd_output, msg_txt(sd,1467),command);// -- %s unbanall <channel name>
clif_displaymessage(fd, msg_txt(sd,1461));// -- Unbans the specified player from the channel.
sprintf(atcmd_output, msg_txt(sd,1467),command);// * %s unbanall <#channel_name>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1468));// - unbans everyone from <channel name>
clif_displaymessage(fd, msg_txt(sd,1468));// -- Clears all bans from the specified channel.
}
//option setopt
if(can_create){
sprintf(atcmd_output, msg_txt(sd,1462),command);// -- %s setopt <channel name> <option name> <option value>
sprintf(atcmd_output, msg_txt(sd,1462),command);// * %s setopt <#channel_name> <option> <value>
clif_displaymessage(fd, atcmd_output);
clif_displaymessage(fd, msg_txt(sd,1463));// - adds or removes <option name> with <option value> to <channel name> channel
clif_displaymessage(fd, msg_txt(sd,1463));// -- Sets an option and value for the specified channel.
}
sprintf(atcmd_output, msg_txt(sd,1404),command); // %s failed.
@ -8874,7 +8878,7 @@ ACMD_FUNC(channel) {
if( strcmpi(key,"create") == 0 && ( Channel_Config.user_chenable || pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) ) ) {
if(sub3[0] != '\0'){
clif_displaymessage(fd, msg_txt(sd,1408)); // Channel password may not contain spaces
clif_displaymessage(fd, msg_txt(sd,1408)); // Channel password may not contain spaces.
return -1;
}
return channel_pccreate(sd,sub1,sub2);
@ -8894,6 +8898,8 @@ ACMD_FUNC(channel) {
return channel_pcunbind(sd);
} else if ( strcmpi(key,"ban") == 0 ) {
return channel_pcban(sd,sub1,map_nick2sd(sub2),0);
} else if ( strcmpi(key,"banlist") == 0 ) {
return channel_pcban(sd,sub1,NULL,3);
} else if ( strcmpi(key,"unban") == 0 ) {
return channel_pcban(sd,sub1,map_nick2sd(sub2),1);
} else if ( strcmpi(key,"unbanall") == 0 ) {

View File

@ -1924,7 +1924,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
cri += sd->bonus.arrow_cri;
}
if( sc && sc->data[SC_CAMOUFLAGE] )
cri += 10 * (10-sc->data[SC_CAMOUFLAGE]->val4);
cri += 10 * sc->data[SC_CAMOUFLAGE]->val3;
//The official equation is *2, but that only applies when sd's do critical.
//Therefore, we use the old value 3 on cases when an sd gets attacked by a mob
cri -= tstatus->luk*(!sd&&tsd?3:2);
@ -3232,7 +3232,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
def2 += 2 * tsc->data[SC_GT_REVITALIZE]->val4;
if( tsc && tsc->data[SC_CAMOUFLAGE] ){
i = 5 * (10-tsc->data[SC_CAMOUFLAGE]->val4);
i = 5 * tsc->data[SC_CAMOUFLAGE]->val3;
def1 -= def1 * i / 100;
def2 -= def2 * i / 100;
}
@ -3349,7 +3349,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
}
if(sc->data[SC_CAMOUFLAGE])
ATK_ADD(30 * (10-sc->data[SC_CAMOUFLAGE]->val4) );
ATK_ADD(30 * sc->data[SC_CAMOUFLAGE]->val3 );
}
//Refine bonus

View File

@ -20,6 +20,11 @@
static DBMap* channel_db; // channels
DBMap* channel_get_db(void){ return channel_db; }
struct chan_banentry {
int char_id;
char char_name[NAME_LENGTH];
} chan_banentry;
/*
* Create *channel
* - will then add it in channel_db if type not map or ally
@ -37,7 +42,7 @@ struct Channel* channel_create(char *name, char *pass, unsigned char color, enum
CREATE( channel, struct Channel, 1 ); //will exit on fail allocation
channel->users = idb_alloc(DB_OPT_BASE);
channel->banned = idb_alloc(DB_OPT_BASE);
channel->banned = idb_alloc(DB_OPT_BASE|DB_OPT_RELEASE_DATA);
channel->opt = CHAN_OPT_BASE;
channel->type = chantype;
channel->color = color;
@ -62,7 +67,7 @@ struct Channel* channel_create(char *name, char *pass, unsigned char color, enum
* Delete channel *channel
* - check if there is any user in channel and make them all quit
* return
* 0 : succes
* 0 : success
* -1 : invalid channel
*/
int channel_delete(struct Channel *channel) {
@ -98,13 +103,13 @@ int channel_delete(struct Channel *channel) {
}
/*
* Make player *sd join an channel *channel
* Make player *sd join a channel *channel
* - add charid to channel user list
* - add *channel to user channel list
* return
* 0 : success
* -1 : invalid channel or sd
* -2 : already in here
* -2 : sd already in channel
* -3 : sd banned
*/
int channel_join(struct Channel *channel, struct map_session_data *sd) {
@ -112,11 +117,11 @@ int channel_join(struct Channel *channel, struct map_session_data *sd) {
if(!channel || !sd)
return -1;
if(channel_haspc(channel,sd)==1) //already in here
if(channel_haspc(channel,sd)==1)
return -2;
if(channel_haspcbanned(channel,sd)==1){ //banned ?
sprintf(output, msg_txt(sd,1438),channel->name); //You cannot join the '%s' channel because you've been banned from it
if(channel_haspcbanned(channel,sd)==1){
sprintf(output, msg_txt(sd,1438),channel->name); //You're currently banned from the '%s' channel.
clif_displaymessage(sd->fd, output);
return -3;
}
@ -146,7 +151,7 @@ int channel_join(struct Channel *channel, struct map_session_data *sd) {
* create the map_channel if not exist
* return
* -1 : invalid sd
* -2 : already in here (channel_join)
* -2 : sd already in channel (channel_join)
* -3 : sd banned (channel_join)
*/
int channel_mjoin(struct map_session_data *sd) {
@ -169,8 +174,8 @@ int channel_mjoin(struct map_session_data *sd) {
* Make all ally member of guild *g join our guild chan
* nb : they only join if they are into their own guild channel (if they not they probably left it)
* return
* 0 : succes
* -1 : invalide guild or no channel for guild
* 0 : success
* -1 : invalid guild or no channel for guild
*/
int channel_ajoin(struct guild *g){
int i;
@ -183,7 +188,7 @@ int channel_ajoin(struct guild *g){
if(ga->guild_id && (ga->opposition==0) && (ag=guild_search(ga->guild_id))){
for (i = 0; i < ag->max_member; i++){ //load all guildmember
pl_sd = ag->member[i].sd;
if(channel_haspc(ag->channel,pl_sd)==1) //only if they are in there own guildchan
if(channel_haspc(ag->channel,pl_sd)==1) //only if they are in their own guildchan
channel_join(g->channel,pl_sd);
}
}
@ -195,9 +200,9 @@ int channel_ajoin(struct guild *g){
* Make *sd join the guild channel
* create a chan guild if not exist
* return
* 0 : succes
* 0 : success
* -1 : invalid sd
* -2 : sd have no guild attach
* -2 : sd has no guild attached
*/
int channel_gjoin(struct map_session_data *sd, int flag){
struct Channel *channel;
@ -321,7 +326,7 @@ int channel_pcquit(struct map_session_data *sd, int type){
* Format *msg from *sd to send it in *channel
* Also truncate extra char if msg too long (max=RACHSYS_MSG_LENGTH)
* return
* 0 : succes
* 0 : success
* -1 : invalid sd, channel, or msg
* -2 : delay msg too low since last talk
*/
@ -342,36 +347,35 @@ int channel_send(struct Channel *channel, struct map_session_data *sd, const cha
return 0;
}
/*
* Chk parameter for channel creation
* Check parameters for channel creation
* @type (bitflag)
* 1 : check name # + lenght
* 1 : check name # + length
* 2 : check if already exist, need 1
* 4 : check pass lenght
* 4 : check password length
* return
* 0 : success
* -1 : bad chan name
* -2 : bad chan name lenght
* -2 : bad chan name length
* -3 : pass given too long
* -4 : chan already exist
* -4 : chan already exists
*/
int channel_chk(char *chname, char *chpass, int type){
if(type&1){ //check name
if( chname[0] != '#' ) return -1; // Channel name must start with '#'
if( chname[0] != '#' )
return -1;
if ( strlen(chname) < 3 || strlen(chname) > CHAN_NAME_LENGTH )
return -2; // Channel length must be between 3 and %d.
return -2;
if( (type&2) && (
strcmpi(chname + 1,Channel_Config.map_chname) == 0
|| strcmpi(chname + 1,Channel_Config.ally_chname) == 0
|| strdb_exists(channel_db, chname + 1) )
) {
return -4; // Channel '%s' already exist
return -4;
}
}
if (type&4 && (chpass != '\0' && strlen(chpass) > CHAN_NAME_LENGTH ) ) {
return -3; // Channel pass can't be higher then %d.
return -3;
}
return 0;
@ -414,7 +418,7 @@ struct Channel* channel_name2channel(char *chname, struct map_session_data *sd,
/*
* Channel check if he has *sd in his user list
* return
* -1 : invalide sd or channel
* -1 : invalid sd or channel
* 0 : not found
* 1 : has pc
*/
@ -426,7 +430,7 @@ int channel_haspc(struct Channel *channel,struct map_session_data *sd){
/*
* Channel check if *sd is banned from channel (banned ?)
* return
* -1 : invalide sd or channel
* -1 : invalid sd or channel
* 0 : not found
* 1 : has pc
*/
@ -458,7 +462,7 @@ int channel_pc_haschan(struct map_session_data *sd, struct Channel *channel){
* mine : list of chan *sd is in + nb of user
* void : list of public chan + map + guild + nb of user
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_display_list(struct map_session_data *sd, char *options){
@ -469,8 +473,6 @@ int channel_display_list(struct map_session_data *sd, char *options){
if(!sd || !options)
return -1;
//display availaible colors
if( options[0] != '\0' && strcmpi(options,"colors") == 0 ) {
char msg[40];
@ -480,9 +482,9 @@ int channel_display_list(struct map_session_data *sd, char *options){
}
}
else if( options[0] != '\0' && strcmpi(options,"mine") == 0 ) { //display chan I'm into
clif_displaymessage(sd->fd, msg_txt(sd,1475)); // ---- Joined Channels ----
clif_displaymessage(sd->fd, msg_txt(sd,1475)); // ---- My Channels ----
if(!sd->channel_count)
clif_displaymessage(sd->fd, msg_txt(sd,1476)); //You have not joined any channel yet
clif_displaymessage(sd->fd, msg_txt(sd,1476)); // You have not joined any channels.
else {
for(k=0; k<sd->channel_count; k++){
channel = sd->channels[k];
@ -497,13 +499,13 @@ int channel_display_list(struct map_session_data *sd, char *options){
clif_displaymessage(sd->fd, msg_txt(sd,1410)); // ---- Public Channels ----
if( Channel_Config.map_enable ) {
sprintf(output, msg_txt(sd,1409), Channel_Config.map_chname, map[sd->bl.m].channel ? db_size(map[sd->bl.m].channel->users) : 0);// - #%s ( %d users )
sprintf(output, msg_txt(sd,1409), Channel_Config.map_chname, map[sd->bl.m].channel ? db_size(map[sd->bl.m].channel->users) : 0);// - #%s (%d users)
clif_displaymessage(sd->fd, output);
}
if( Channel_Config.ally_enable && sd->status.guild_id ) {
struct guild *g = sd->guild;
if( !g ) return -1; //how can this happen if status.guild_id true ?
sprintf(output, msg_txt(sd,1409), Channel_Config.ally_chname, db_size(((struct Channel *)g->channel)->users));// - #%s ( %d users )
sprintf(output, msg_txt(sd,1409), Channel_Config.ally_chname, db_size(((struct Channel *)g->channel)->users));// - #%s (%d users)
clif_displaymessage(sd->fd, output);
}
iter = db_iterator(channel_db);
@ -519,12 +521,10 @@ int channel_display_list(struct map_session_data *sd, char *options){
return 0;
}
/*
* An user *sd is attempting to create a channel named *chname with pass *chpass
* A user *sd is attempting to create a channel named *chname with pass *chpass
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
@ -536,7 +536,7 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
return 0;
res = channel_chk(chname,chpass,7);
if(res==0){ //succes
if(res==0){ //success
channel = channel_create(chname + 1,chpass,0,CHAN_TYPE_PRIVATE,sd->status.char_id);
channel_join(channel,sd);
if( !( channel->opt & CHAN_OPT_ANNOUNCE_JOIN ) ) {
@ -547,7 +547,7 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
switch(res){
case -1: sprintf(output, msg_txt(sd,1405), CHAN_NAME_LENGTH); break;// Channel name must start with '#'.
case -2: sprintf(output, msg_txt(sd,1406), CHAN_NAME_LENGTH); break;// Channel length must be between 3 and %d.
case -3: sprintf(output, msg_txt(sd,1436), CHAN_NAME_LENGTH); break;// Channel pass can't be higher then %d.
case -3: sprintf(output, msg_txt(sd,1436), CHAN_NAME_LENGTH); break;// Channel password can't be over %d characters.
case -4: sprintf(output, msg_txt(sd,1407), chname);// Channel '%s' is not available.
}
clif_displaymessage(sd->fd, output);
@ -557,9 +557,9 @@ int channel_pccreate(struct map_session_data *sd, char *chname, char *chpass){
}
/*
* An user *sd is attempting to delete a channel named *chname
* A user *sd is attempting to delete a channel named *chname
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcdelete(struct map_session_data *sd, char *chname){
@ -581,16 +581,16 @@ int channel_pcdelete(struct map_session_data *sd, char *chname){
}
channel_delete(channel);
sprintf(output, msg_txt(sd,1477),chname); //Channel %s deleted
sprintf(output, msg_txt(sd,1448),chname); // Channel '%s' deleted.
clif_displaymessage(sd->fd, output);
return 0;
}
/*
* An user *sd is attempting to leave a channel named *chname
* A user *sd is attempting to leave a channel named *chname
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcleave(struct map_session_data *sd, char *chname){
@ -630,9 +630,9 @@ int channel_pcleave(struct map_session_data *sd, char *chname){
}
/*
* An user *sd is attempting to join a channel named *chname
* A user *sd is attempting to join a channel named *chname
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
@ -659,7 +659,7 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
if( pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) ) {
sd->stealth = true;
} else {
sprintf(output, msg_txt(sd,1401),chname,"@Join"); // '%s' Channel is password protected (usage: %s <#channel_name> <password>)
sprintf(output, msg_txt(sd,1401),chname,"@join"); // Channel '%s' is password-protected (usage: %s <#channel_name> <password>).
clif_displaymessage(sd->fd, output);
return -1;
}
@ -667,7 +667,7 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
}
}
else {
sprintf(output, msg_txt(sd,1400),chname,"@Join"); // Unknown Channel '%s' (usage: %s <#channel_name>)
sprintf(output, msg_txt(sd,1400),chname,"@join"); // Unknown channel '%s' (usage: %s <#channel_name>).
clif_displaymessage(sd->fd, output);
return -1;
}
@ -688,9 +688,9 @@ int channel_pcjoin(struct map_session_data *sd, char *chname, char *pass){
}
/*
* An user *sd is attempting to change color with *color of a channel named *chname
* A user *sd is attempting to change color with *color of a channel named *chname
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pccolor(struct map_session_data *sd, char *chname, char *color){
@ -733,10 +733,10 @@ int channel_pccolor(struct map_session_data *sd, char *chname, char *color){
}
/*
* An user *sd is attempting to bind (make default message output display chan talk)
* A user *sd is attempting to bind (make default message output display chan talk)
* from a channel named *chname
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcbind(struct map_session_data *sd, char *chname){
@ -764,9 +764,9 @@ int channel_pcbind(struct map_session_data *sd, char *chname){
}
/*
* An user *sd is attempting to unbind
* A user *sd is attempting to unbind
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcunbind(struct map_session_data *sd){
@ -786,13 +786,13 @@ int channel_pcunbind(struct map_session_data *sd){
}
/*
* An user *sd is attempting to do something with the banlist
* A user *sd is attempting to do something with the banlist
* @flag == 0 : ban
* @flag == 1 : unban
* @flag == 2 : unbanall
* @flag == 3 : banlist
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_data *tsd, int flag){
@ -820,25 +820,26 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
if(flag != 2 && flag != 3){
char banned;
if(!tsd || pc_has_permission(tsd, PC_PERM_CHANNEL_ADMIN) ) {
clif_displaymessage(sd->fd, msg_txt(sd,1464)); // Ban failed, not possible to ban/unban this user.
sprintf(output, msg_txt(sd,1464), tsd->status.name);// Ban failed for player '%s'.
clif_displaymessage(sd->fd, output);
return -1;
}
banned = channel_haspcbanned(channel,tsd);
if(!flag && banned==1) {
sprintf(output, msg_txt(sd,1465), tsd->status.name);// Player '%s' is already banned from this channel
sprintf(output, msg_txt(sd,1465), tsd->status.name);// Player '%s' is already banned from this channel.
clif_displaymessage(sd->fd, output);
return -1;
}
else if(flag==1 && banned==0) {
sprintf(output, msg_txt(sd,1440), tsd->status.name);// 1440: Player '%s' is not banned from this channel
sprintf(output, msg_txt(sd,1440), tsd->status.name);// Player '%s' is not banned from this channel.
clif_displaymessage(sd->fd, output);
return -1;
}
}
else {
if( !db_size(channel->banned) ) {
sprintf(output, msg_txt(sd,1439), chname);// Channel '%s' has no banned players
sprintf(output, msg_txt(sd,1439), chname);// Channel '%s' contains no banned players.
clif_displaymessage(sd->fd, output);
return -1;
}
@ -846,31 +847,36 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
//let properly alter the list now
switch(flag){
case 0:
idb_put(channel->banned, tsd->status.char_id, tsd);
case 0: {
struct chan_banentry *cbe;
CREATE(cbe, struct chan_banentry, 1);
cbe->char_id = tsd->status.char_id;
strcpy(cbe->char_name,tsd->status.name);
idb_put(channel->banned, tsd->status.char_id, cbe);
channel_clean(channel,tsd,0);
sprintf(output, msg_txt(sd,1437),tsd->status.name,chname); // Player '%s' has now been banned from '%s' channel
sprintf(output, msg_txt(sd,1437),tsd->status.name,chname); // Player '%s' is banned from the '%s' channel.
break;
}
case 1:
idb_remove(channel->banned, tsd->status.char_id);
sprintf(output, msg_txt(sd,1441),tsd->status.name,chname); // Player '%s' has now been unbanned from the '%s' channel
sprintf(output, msg_txt(sd,1441),tsd->status.name,chname); // Player '%s' is unbanned from the '%s' channel.
break;
case 2:
db_clear(channel->banned);
sprintf(output, msg_txt(sd,1442),chname); // Removed all bans from '%s' channel
sprintf(output, msg_txt(sd,1442),chname); // Cleared all bans from the '%s' channel.
break;
case 3: {
DBIterator *iter = db_iterator(channel->banned);
struct map_session_data *pl_sd;
sprintf(output, msg_txt(sd,1443), channel->name);// -- '%s' ban list
struct chan_banentry *cbe;
sprintf(output, msg_txt(sd,1443), channel->name);// ---- '#%s' Ban List:
clif_displaymessage(sd->fd, output);
for( pl_sd = dbi_first(iter); dbi_exists(iter); pl_sd = dbi_next(iter) ) { //for all users
sprintf(output, msg_txt(sd,1444),pl_sd->status.char_id,pl_sd->status.name); // %d: %s
for( cbe = dbi_first(iter); dbi_exists(iter); cbe = dbi_next(iter) ) { //for all users
sprintf(output, "%d: %s",cbe->char_id,cbe->char_name);
clif_displaymessage(sd->fd, output);
}
dbi_destroy(iter);
}
break;
return 0;
}
clif_displaymessage(sd->fd, output);
@ -878,12 +884,12 @@ int channel_pcban(struct map_session_data *sd, char *chname, struct map_session_
}
/*
* An user *sd is attempting to set an option on channel named *chname
* A user *sd is attempting to set an option on channel named *chname
* @chname = channel name
* @option = available = opt_str
* @val = value to assign to option
* return
* 0 : succes
* 0 : success
* -1 : fail
*/
int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *option, const char *val){
@ -916,16 +922,16 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
if( option == '\0' ) {
clif_displaymessage(sd->fd, msg_txt(sd,1446));// You need to input a option
clif_displaymessage(sd->fd, msg_txt(sd,1446));// You need to input an option.
return -1;
}
s = ARRAYLENGTH(opt_str);
ARR_FIND(1,s,k,( strncmpi(option,opt_str[k],3) == 0 )); //we only cmp 3 letter atm
if( k == 3 ) {
sprintf(output, msg_txt(sd,1447), option);// '%s' is not a known channel option
sprintf(output, msg_txt(sd,1447), option);// Unknown channel option '%s'.
clif_displaymessage(sd->fd, output);
clif_displaymessage(sd->fd, msg_txt(sd,1448)); // -- Available options
clif_displaymessage(sd->fd, msg_txt(sd,1414));// ---- Available options:
for( k = 1; k < s; k++ ) {
sprintf(output, msg_txt(sd,1445), opt_str[k]);// - '%s'
clif_displaymessage(sd->fd, output);
@ -935,16 +941,16 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
if( val[0] == '\0' ) {
if ( k == CHAN_OPT_MSG_DELAY ) {
sprintf(output, msg_txt(sd,1466), opt_str[k]);// For '%s' you need the amount of seconds (from 0 to 10)
sprintf(output, msg_txt(sd,1466), opt_str[k]);// Input the number of seconds (0-10) for the '%s' option.
clif_displaymessage(sd->fd, output);
return -1;
} else if( channel->opt & k ) {
sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // option '%s' is already enabled, if you'd like to disable it type '@channel setopt %s 0'
sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
clif_displaymessage(sd->fd, output);
return -1;
} else {
channel->opt |= k;
sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);//option '%s' is now enabled for channel '%s'
sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);// Option '%s' is enabled for channel '%s'.
clif_displaymessage(sd->fd, output);
return 0;
}
@ -952,42 +958,42 @@ int channel_pcsetopt(struct map_session_data *sd, char *chname, const char *opti
int v = atoi(val);
if( k == CHAN_OPT_MSG_DELAY ) {
if( v < 0 || v > 10 ) {
sprintf(output, msg_txt(sd,1451), v, opt_str[k]);// value '%d' for option '%s' is out of range (limit is 0-10)
sprintf(output, msg_txt(sd,1451), v, opt_str[k]);// Value '%d' for option '%s' is out of range (limit 0-10).
clif_displaymessage(sd->fd, output);
return false;
}
if( v == 0 ) {
channel->opt &=~ k;
channel->msg_delay = 0;
sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name,v);// option '%s' is now disabled for channel '%s'
sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name,v);// Option '%s' is disabled for channel '%s'.
clif_displaymessage(sd->fd, output);
return true;
} else {
channel->opt |= k;
channel->msg_delay = v;
sprintf(output, msg_txt(sd,1452), opt_str[k],channel->name,v);// option '%s' is now enabled for channel '%s' with %d seconds
sprintf(output, msg_txt(sd,1452), opt_str[k],channel->name,v);// Option '%s' is enabled for channel '%s' at %d seconds.
clif_displaymessage(sd->fd, output);
return true;
}
} else {
if( v ) {
if( channel->opt & k ) {
sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // option '%s' is already enabled, if you'd like to disable it type '@channel opt %s 0'
sprintf(output, msg_txt(sd,1449), opt_str[k],opt_str[k]); // Option '%s' is already enabled (use '@channel setopt %s 0' to disable).
clif_displaymessage(sd->fd, output);
return false;
} else {
channel->opt |= k;
sprintf(output, msg_txt(sd,1454), opt_str[k],channel->name);//option '%s' is now enabled for channel '%s'
sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name);// Option '%s' is enabled for channel '%s'.
clif_displaymessage(sd->fd, output);
}
} else {
if( !(channel->opt & k) ) {
sprintf(output, msg_txt(sd,1454), opt_str[k],channel->name); // option '%s' is not enabled on channel '%s'
sprintf(output, msg_txt(sd,1450), opt_str[k],channel->name); // Option '%s' is enabled for channel '%s'.
clif_displaymessage(sd->fd, output);
return false;
} else {
channel->opt &=~ k;
sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name);// option '%s' is now disabled for channel '%s'
sprintf(output, msg_txt(sd,1453), opt_str[k],channel->name);// Option '%s' is disabled for channel '%s'.
clif_displaymessage(sd->fd, output);
return true;
}

View File

@ -729,7 +729,7 @@ void clif_dropflooritem(struct flooritem_data* fitem)
uint32 header=0x84b;
#else
uint8 buf[17];
uint32 header=0x09b;
uint32 header=0x09e;
#endif
int view, offset=0;
@ -9159,9 +9159,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
sd->pvp_lost = 0;
}
clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
} else
// set flag, if it's a duel [LuzZza]
if(sd->duel_group)
} else if(sd->duel_group) // set flag, if it's a duel [LuzZza]
clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
if (map[sd->bl.m].flag.gvg_dungeon)

View File

@ -368,13 +368,13 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
struct status_change* sc;
switch( skill_id ) {
case BA_APPLEIDUN:
#ifdef RENEWAL
hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
#else
hp = 30+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
#endif
if( sd )
case BA_APPLEIDUN:
#ifdef RENEWAL
hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
#else
hp = 30+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery
#endif
if( sd )
hp += 5*pc_checkskill(sd,BA_MUSICALLESSON);
break;
case PR_SANCTUARY:
@ -386,23 +386,27 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
default:
if (skill_lv >= battle_config.max_heal_lv)
return battle_config.max_heal;
#ifdef RENEWAL
/**
* Renewal Heal Formula
* Formula: ( [(Base Level + INT) / 5] x 30 ) x (Heal Level / 10) x (Modifiers) + MATK
**/
hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30 * skill_lv / 10;
#else
hp = ( status_get_lv(src) + status_get_int(src) ) / 8 * (4 + ( skill_id == AB_HIGHNESSHEAL ? ( sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv ) * 8);
#endif
#ifdef RENEWAL
/**
* Renewal Heal Formula
* Formula: ( [(Base Level + INT) / 5] x 30 ) x (Heal Level / 10) x (Modifiers) + MATK
**/
hp = (status_get_lv(src) + status_get_int(src)) / 5 * 30 * (skill_id == AB_HIGHNESSHEAL ? (sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv) / 10;
#else
hp = (status_get_lv(src) + status_get_int(src)) / 8 * (4 + ( (skill_id == AB_HIGHNESSHEAL ? (sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv) * 8));
#endif
if (skill_id == AB_HIGHNESSHEAL)
hp *= ( 17 + 3 * skill_lv ) / 10;
if( sd && ((skill = pc_checkskill(sd, HP_MEDITATIO)) > 0) )
hp += hp * skill * 2 / 100;
else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
hp += hp * skill * 2 / 100;
if( sd && tsd && sd->status.partner_id == tsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
hp *= 2;
break;
}
if( ( (target && target->type == BL_MER) || !heal ) && skill_id != NPC_EVILLAND )
if( (!heal || (target && target->type == BL_MER)) && skill_id != NPC_EVILLAND )
hp >>= 1;
if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
@ -413,9 +417,9 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
sc = status_get_sc(target);
if( sc && sc->count ) {
if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
if( heal && sc->data[SC_CRITICALWOUND] ) // Critical Wound has no effect on offensive heal. [Inkfish]
hp -= hp * sc->data[SC_CRITICALWOUND]->val2/100;
if( sc->data[SC_DEATHHURT] && heal )
if( heal && sc->data[SC_DEATHHURT] )
hp -= hp * 20/100;
if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
hp += hp * sc->data[SC_INCHEALRATE]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
@ -424,8 +428,8 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
}
#ifdef RENEWAL
// MATK part of the RE heal formula [malufett]
// Note: in this part matk bonuses from items or skills are not applied
// MATK part of the RE heal formula [malufett]
// Note: in this part matk bonuses from items or skills are not applied
switch( skill_id ) {
case BA_APPLEIDUN: case PR_SANCTUARY:
case NPC_EVILLAND: break;
@ -434,6 +438,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
struct status_data *status = status_get_status_data(src);
int min, max;
sc = status_get_sc(src);
min = max = status_base_matk(status, status_get_lv(src));
if( status->rhw.matk > 0 ){
int wMatk, variance;
@ -4974,24 +4979,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
**/
case AB_HIGHNESSHEAL:
{
int heal = skill_calc_heal(src, bl, (skill_id == AB_HIGHNESSHEAL)?AL_HEAL:skill_id, (skill_id == AB_HIGHNESSHEAL)?10:skill_lv, true);
int heal = skill_calc_heal(src, bl, skill_id, skill_lv, true);
int heal_get_jobexp;
//Highness Heal: starts at 1.7 boost + 0.3 for each level
if( skill_id == AB_HIGHNESSHEAL ) {
heal = heal * ( 17 + 3 * skill_lv ) / 10;
}
if( status_isimmune(bl) ||
(dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) ||
(dstsd && pc_ismadogear(dstsd)) )//Mado is immune to heal
heal=0;
if( sd && dstsd && sd->status.partner_id == dstsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
heal = heal*2;
if( tsc && tsc->count )
{
if( tsc->data[SC_KAITE] && !(sstatus->mode&MD_BOSS) )
{ //Bounce back heal
if( tsc && tsc->count ) {
if( tsc->data[SC_KAITE] && !(sstatus->mode&MD_BOSS) ) { //Bounce back heal
if (--tsc->data[SC_KAITE]->val2 <= 0)
status_change_end(bl, SC_KAITE, INVALID_TIMER);
if (src == bl)
@ -17425,7 +17421,6 @@ void skill_init_unit_layout (void) {
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
}
break;
case MH_POISON_MIST:
case AS_VENOMDUST: {
static const int dx[] = {-1, 0, 0, 0, 1};
static const int dy[] = { 0,-1, 0, 1, 0};
@ -17721,7 +17716,7 @@ int skill_disable_check(struct status_change *sc, uint16 skill_id)
case RA_WUGDASH:
case RA_CAMOUFLAGE:
if( sc->data[status_skill2sc(skill_id)] )
return 1;
return 1;
}
return 0;

View File

@ -598,7 +598,7 @@ void initChangeTables(void) {
set_sc( RA_FEARBREEZE , SC_FEARBREEZE , SI_FEARBREEZE , SCB_NONE );
set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED );
set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_CRI|SCB_SPEED|SCB_WATK|SCB_DEF );
set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_SPEED );
add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE );
add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE );
add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE );
@ -10494,23 +10494,8 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
case SC_CAMOUFLAGE:
if (!status_charge(bl, 0, 7 - sce->val1))
break;
if (sd && --sce->val4 >= 0) {
if (!(sce->val2 & 1)) {
status->cri += sd->base_status.cri * 1 / 10; //+10% per second
if (status->cri > 1000) { //max 100%
status->cri = 1000;
sce->val2 |= 1;
}
}
if (!(sce->val2 & 2)) {
status->def2 -= sd->base_status.def2 * 1 / 20; //-5% per second
if (status->def2 < 0) { //min 0
status->def2 = 0;
sce->val2 |= 2;
}
}
status->rhw.atk += 30; //+30 per second
}
if (--sce->val4 >= 0)
sce->val3++;
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
return 0;