- Viewing Profile: Reputation: Like it~*
Community Stats
- Group Members
- Active Posts 150
- Profile Views 6732
- Member Title Advanced Member
- Age Age Unknown
- Birthday Birthday Unknown
-
Gender
Not Telling
#81951 Introducing the Item Options System
Posted by Like it~* on 24 April 2017 - 02:43 AM
#81385 [Guia e orientação] Criando habilidades. PT-BR
Posted by Like it~* on 31 March 2017 - 03:56 AM
Nome: Earth Bolt Level Máx: 10 Tipo: Ativa Custo de SP: 20 + 5*SkillLV Alvo: 1 inimigo Tempo de conjuração: 2 seg Delay: 1 seg Duração: Instantânea Descrição: Causa dano mágico de elemento terra ao inimigo, conforme level da habilidade, a 150% MATK por hit. Basicamente, essa habilidade deve atingir 1 inimigo e lidar com 10 hits de 150% MATK, propriedade elemental da Terra e deve ser baseada em dano mágico.
EL_STONE_HAMMER, EL_ROCK_CRUSHER, EL_ROCK_CRUSHER_ATK, EL_STONE_RAIN,
MG_EARTHBOLT = 8443,
case AB_RENOVATIO: case AB_HIGHNESSHEAL: case AB_DUPLELIGHT_MAGIC: case WM_METALICSOUND: case MH_ERASER_CUTTER: case KO_KAIHOU:
skill->attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
case MG_EARTHBOLT:
case WM_GREAT_ECHO: case GN_SLINGITEM_RANGEMELEEATK: case KO_JYUMONJIKIRI: case KO_SETSUDAN: case GC_DARKCROW: case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND:
case WM_GREAT_ECHO: case GN_SLINGITEM_RANGEMELEEATK: case KO_JYUMONJIKIRI: case KO_SETSUDAN: case GC_DARKCROW: case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND: case MG_EARTHBOLT:
case NPC_EARTHQUAKE: skillratio += 100 +100*skill_lv +100*(skill_lv/2); break;
case MG_EARTHBOLT: skillratio += 50; break;
case NPC_VAMPIRE_GIFT: skillratio += ((skill_lv-1)%5+1)*100; break;
case MG_EARTHBOLT: skillratio += 50; break;
- Nessa parte é sempre aconselhável que você tenha alguma habilidade escolhida para se utilizar como base, pois facilitará muito a criação e/ou clonagem de sua habilidade.
- Aqui há diferenças, então dependendo do emulador usado, cada forma será de um jeito, caso o seu emulador seja alguns dos abaixos, continue. Caso não, pule para a parte: ** p/ Hercules.
// ID,Alcance,Dano,Inf,Elemento,Nk,Splash,MaxLv,ListNum,CastCancel,ChanceDefCast,Inf2,MaxCount,TipoSkill,BlowCount,Nome,Descrição // 01 ID // 02 Alcance (Habilidades de combo não verificam pelo alcance // Se o alcance < 5, então a habilidade é considerada melee) // 03 Dano (8- dano repetitivo, 6- dano único) // 04 inf (0- passivo, 1- inimigo, 2- local, 4- si próprio, 16- amigo, 32- armadilha) // 05 Elemento (0 - neutro, 1 - água, 2 - terra, 3 - fogo, 4 - vento, 5 - veneno, // 6 - sagrado, 7 - sombrio, 8 - fantasma, 9 - morto-vivo, -1 - elemento da arma // -2 - elemento endowed, -3 - elemento aleatório.) // 06 nk (Propriedade de Dano das Habilidades): // 0x01 - habilidade sem dano // 0x02 - tem área visual (necessária modificação na source) // 0x04 - dano dividido entre os alvos (necessário 0x02 em ordem de trabalho) // 0x08 - habilidade ignora dano bônus dado por cartas de quem a conjura // 0x10 - habilidade ignora bônus elementais // 0x20 - habilidade ignora a defesa do alvo (tipo variado sempre ingnora) // 0x40 - habilidade ignora a esquiva do alvo (tipo mágido sempre ignora) // 0x80 - habilidade ignora defesa do alvo dada por cartas // 07 Área de efeito (-1 para wide) // 08 Nível máximo da habilidade // 09 Número de danos (Quando positivo, acresenta o dano por dano, // valores negativos apenas mostraram o número de acertos, sem aumentar os danos totais) // 10 A conjuração pode ser cancelada? // 11 Redução de defesa durante conjuração. // 12 inf2 (Informações de Habilidades 2): // 0x0001- habilidade de quest // 0x0002- habilidade de npc // 0x0004- habilidade de casamento // 0x0008- habilidade de espírito // 0x0010- habilidade de clã // 0x0020- habilidade de música // 0x0040- habilidade de dueto // 0x0080- armadilha // 0x0100- habilidade que o alvo é quem invoca // 0x0200- não pode ser usada em si próprio // 0x0400- apenas pode ser usada em membros de grupo // 0x0800- apenas pode ser usada em membros de clã // 0x1000- não pode ser usada em inimigos // 0x2000- habilidade ignora proteção terrestre (exemplo: Chuva de Flechas) // 0x4000- chorus skill // 13 maxcount: Quantidade máxima de habilidades colocadas no chão. // player_land_skill_limit/monster_land_skill_limit está ativo. Para Habilidades // que atacam usando um caminho, este é o comprimento do caminho a ser utilizado. // 14 Tipo de Ataque (nenhum, arma, magia, misc) // 15 Blowcount (amount of tiles skill knockbacks) // 16 Nome // 17 Descrição //=================================================================*/
8443,5,8,1,2,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic, 0, MG_EARTHBOLT, Earth Bolt
// SkillID,TempoConjuracao,AfterCastActDelay,AfterCastWalkDelay,Duracao1,Duracao2,Cool Down,Tempo de Cast Fixo //== Explanando: // TempoConjuracao: Tempo para lançar esta habilidade, em milissegundos. // AfterCastActDelay: Atraso "normal",o personagem não pode usar habilidades,em milésimos de segundo. // AfterCastWalkDleay: Tempo necessário para que o personagem possa mover-se novamente, em milésimos de segundo. // Duracao1 / Duracao2: Geralmente, o tempo ultilizado pela habilidade, em alguns casos é usado para salvar dados especiais. // Cool Down: Tempo necessário até que o personagem possa voltar a usar essa habilidade, em milésimos de segundo. // Tempo de Cast Fixo: Tempo de execução das habilidades em milissegundos (quando 0, usa-se 20% do tempo de cast e menor que 0 significa que não há tempo de cast fixo) //== Extra // Em todos os campos você pode usar ":" como delimitador de valores específicos do nível, // - Exemplo usando SM_PROVOKE // - Original:6,0,0,0,30000,0,1000 // - Modificado:6,0,0,0,30000,0,1000:2500:3000:etc // - Faz no nível 1 ter 1000 (1s) cool down, lvl 2 2500 (2.5s), lvl 3 3000, e assim por diante. //==========================================
8443,2000,1,000,0,0,0
// SkillID,HPCost,MaxHPTrigger,SPCost,HPRateCost,SPRateCost,ZenyCost,RequiredWeapons,RequiredAmmoTypes,RequiredAmmoAmount,RequiredState,SpiritSphereCost,RequiredItemID1,RequiredItemAmount1,RequiredItemID2,RequiredItemAmount2,RequiredItemID3,RequiredItemAmount3,RequiredItemID4,RequiredItemAmount4,RequiredItemID5,RequiredItemAmount5,RequiredItemID6,RequiredItemAmount6,RequiredItemID7,RequiredItemAmount7,RequiredItemID8,RequiredItemAmount8,RequiredItemID9,RequiredItemAmount9,RequiredItemID10,RequiredItemAmount10 // // 01 ID // 02 HP cost // 03 Max HP trigger // 04 SP cost // 05 HP rate // If positive, it is a percent of your current hp, otherwise it is a percent of your max hp. // 06 SP rate // If positive, it is a percent of your current sp, otherwise it is a percent of your max sp. // 07 Zeny cost // 08 Required Weapon // See doc/item_db.txt for weapon types // 99 any weapon **includes bare fists** // To include more than one weapon type use type1:type2:type3 // 09 Required Ammo // See doc/item_db.txt for ammo types // 99 any ammo type // To include more than one ammo type use type1:type2:type3 // 10 Required ammo ammount // 11 Required State // none = Nothing special // move_enable = Requires to be able to move // recover_weight_rate = Requires to be less than 50% weight // water = Requires to be standing on a water cell // cart = Requires a Pushcart // riding = Requires to ride either a peco or a dragon // falcon = Requires a Falcon // sight = Requires Sight skill activated // hiding = Requires Hiding skill activated // cloaking = Requires Cloaking skill activated // explosionspirits = Requires Fury skill activated // cartboost = Requires a Pushcart and Cart Boost skill activated // shield = Requires a 0,shield equipped // warg = Requires a Warg // dragon = Requires to ride a Dragon // ridingwarg = Requires to ride a Warg // mado = Requires to have an active mado // poisonweapon = Requires to be under Poisoning Weapon. // rollingcutter = Requires at least one Rotation Counter from Rolling Cutter. // elementalspirit = Requires to have an Elemental Spirit summoned. // mh_fighting = Requires Eleanor fighthing mode // mh_grappling = Requires Eleanor grappling mode // peco = Requires riding a peco // 12 Spirit sphere cos
8443,0,0,25: 30: 35: 40: 45: 50: 55: 60: 65: 70,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
{ // ------------------------------ Mandatory Fields ---------------------------- Id: ID (int) (Required) Name: "Skill Name" (string) (Required) MaxLevel: Skill Level (int) (Required) // ------------------------------ Optional Fields ----------------------------- Description: "Skill Description" (string) (optional but recommended) Range: Skill Range (int) (optional, defaults to 0) (can be grouped by Levels) Note: Range < 5 is considered Melee range. Hit: Hit Type (int) (optional, default "BDT_NORMAL") Types - "BDT_SKILL", "BDT_MULTIHIT" or "BDT_NORMAL" SkillType: { (bool, defaults to "Passive") Passive: true/false (boolean, defaults to false) Enemy: true/false (boolean, defaults to false) Place: true/false (boolean, defaults to false) Self: true/false (boolean, defaults to false) Friend: true/false (boolean, defaults to false) Trap: true/false (boolean, defaults to false) } SkillInfo: { (bool, defaults to "None") Quest: true/false (boolean, defaults to false) NPC: true/false (boolean, defaults to false) Wedding: true/false (boolean, defaults to false) Spirit: true/false (boolean, defaults to false) Guild: true/false (boolean, defaults to false) Song: true/false (boolean, defaults to false) Ensemble: true/false (boolean, defaults to false) Trap: true/false (boolean, defaults to false) TargetSelf: true/false (boolean, defaults to false) NoCastSelf: true/false (boolean, defaults to false) PartyOnly: true/false (boolean, defaults to false) GuildOnly: true/false (boolean, defaults to false) NoEnemy: true/false (boolean, defaults to false) IgnoreLandProtector: true/false (boolean, defaults to false) Chorus: true/false (boolean, defaults to false) FreeCastReduced: true/false (boolean, defaults to false) Works like skill SA_FREECAST, allow move and attack with reduced speed. FreeCastNormal: true/false (boolean, defaults to false) Works like FreeCastReduced, but not reduce speed. } AttackType: "Attack Type" (string, defaults to "None") Types: "None", "Weapon", "Magic" or "Misc" Element: "Element Type" (string) (Optional field - Default "Ele_Neutral") (can be grouped by Levels) Types: "Ele_Neutral", "Ele_Water", "Ele_Earth", "Ele_Fire", "Ele_Wind" "Ele_Poison", "Ele_Holy", "Ele_Dark", "Ele_Ghost", "Ele_Undead" "Ele_Weapon" - Uses weapon's element. "Ele_Endowed" - Uses Endowed element. "Ele_Random" - Uses random element. DamageType: { (bool, default to "NoDamage") NoDamage: true/false No damage skill SplashArea: true/false Has splash area (requires source modification) SplitDamage: true/false Damage should be split among targets (requires 'SplashArea' in order to work) IgnoreCards: true/false Skill ignores caster's % damage cards (misc type always ignores) IgnoreElement: true/false Skill ignores elemental adjustments IgnoreDefense: true/false Skill ignores target's defense (misc type always ignores) IgnoreFlee: true/false Skill ignores target's flee (magic type always ignores) IgnoreDefCards: true/false Skill ignores target's def cards } SplashRange: Damage Splash Area (int, defaults to 0) (can be grouped by Levels) Note: -1 for screen-wide. NumberOfHits: Number of Hits (int, defaults to 1) (can be grouped by Levels) Note: when positive, damage is increased by hits, negative values just show number of hits without increasing total damage. InterruptCast: Cast Interruption (bool, defaults to false) CastDefRate: Cast Defense Reduction (int, defaults to 0) SkillInstances: Skill instances (int, defaults to 0) (can be grouped by Levels) Notes: max amount of skill instances to place on the ground when player_land_skill_limit/monster_land_skill_limit is enabled. For skills that attack using a path, this is the path length to be used. KnockBackTiles: Knock-back by 'n' Tiles (int, defaults to 0) (can be grouped by Levels) CastTime: Skill cast Time (in ms) (int, defaults to 0) (can be grouped by Levels) AfterCastActDelay: Skill Delay (in ms) (int, defaults to 0) (can be grouped by Levels) AfterCastWalkDelay: Walk Delay (in ms) (int, defaults to 0) (can be grouped by Levels) SkillData1: Skill Data/Duration (in ms) (int, defaults to 0) (can be grouped by Levels) SkillData2: Skill Data/Duration (in ms) (int, defaults to 0) (can be grouped by Levels) CoolDown: Skill Cooldown (in ms) (int, defaults to 0) (can be grouped by Levels) FixedCastTime: Fixed Cast Time (in ms) (int, defaults to 0) (can be grouped by Levels) Note: when 0, uses 20% of cast time and less than 0 means no fixed cast time. CastTimeOptions: { IgnoreDex: true/false (boolean, defaults to false) IgnoreStatusEffect: true/false (boolean, defaults to false) IgnoreItemBonus: true/false (boolean, defaults to false) Note: Delay setting 'IgnoreDex' only makes sense when delay_dependon_dex is enabled. } SkillDelayOptions: { IgnoreDex: true/false (boolean, defaults to false) IgnoreStatusEffect: true/false (boolean, defaults to false) IgnoreItemBonus: true/false (boolean, defaults to false) Note: Delay setting 'IgnoreDex' only makes sense when delay_dependon_dex is enabled. } Requirements: { HPCost: HP Cost (int, defaults to 0) (can be grouped by Levels) SPCost: SP Cost (int, defaults to 0) (can be grouped by Levels) HPRateCost: HP % Cost (int, defaults to 0) (can be grouped by Levels) Note: If positive, it is a percent of your current hp, otherwise it is a percent of your max hp. SPRateCost: SP % Cost (int, defaults to 0) (can be grouped by Levels) Note: If positive, it is a percent of your current sp, otherwise it is a percent of your max sp. ZenyCost: Zeny Cost (int, defaults to 0) (can be grouped by Levels) WeaponTypes: { (bool or string, defaults to "All") NoWeapon: true/false (boolean, defaults to false) Daggers: true/false (boolean, defaults to false) 1HSwords: true/false (boolean, defaults to false) 2HSwords: true/false (boolean, defaults to false) 1HSpears: true/false (boolean, defaults to false) 2HSpears: true/false (boolean, defaults to false) 1HAxes: true/false (boolean, defaults to false) 2HAxes: true/false (boolean, defaults to false) Maces: true/false (boolean, defaults to false) 2HMaces: true/false (boolean, defaults to false) Staves: true/false (boolean, defaults to false) Bows: true/false (boolean, defaults to false) Knuckles: true/false (boolean, defaults to false) Instruments: true/false (boolean, defaults to false) Whips: true/false (boolean, defaults to false) Books: true/false (boolean, defaults to false) Katars: true/false (boolean, defaults to false) Revolvers: true/false (boolean, defaults to false) Rifles: true/false (boolean, defaults to false) GatlingGuns: true/false (boolean, defaults to false) Shotguns: true/false (boolean, defaults to false) GrenadeLaunchers: true/false (boolean, defaults to false) FuumaShurikens: true/false (boolean, defaults to false) 2HStaves: true/false (boolean, defaults to false) MaxSingleWeaponType: true/false (boolean, defaults to false) DWDaggers: true/false (boolean, defaults to false) DWSwords: true/false (boolean, defaults to false) DWAxes: true/false (boolean, defaults to false) DWDaggerSword: true/false (boolean, defaults to false) DWDaggerAxe: true/false (boolean, defaults to false) DWSwordAxe: true/false (boolean, defaults to false) } AmmoTypes: { (for all types use string "All") A_ARROW: true/false (boolean, defaults to false) A_DAGGER: true/false (boolean, defaults to false) A_BULLET: true/false (boolean, defaults to false) A_SHELL: true/false (boolean, defaults to false) A_GRENADE: true/false (boolean, defaults to false) A_SHURIKEN: true/false (boolean, defaults to false) A_KUNAI: true/false (boolean, defaults to false) A_CANNONBALL: true/false (boolean, defaults to false) A_THROWWEAPON: true/false (boolean, defaults to false) } AmmoAmount: Ammunition Amount (int, defaults to 0) (can be grouped by Levels) State: "Required State" (string, defaults to "None") (can be grouped by Levels) Types : 'None' = Nothing special 'Moveable' = Requires to be able to move 'NotOverWeight' = Requires to be less than 50% weight 'InWater' = Requires to be standing on a water cell 'Cart' = Requires a Pushcart 'Riding' = Requires to ride either a peco or a dragon 'Falcon' = Requires a Falcon 'Sight' = Requires Sight skill activated 'Hiding' = Requires Hiding skill activated 'Cloaking' = Requires Cloaking skill activated 'ExplosionSpirits' = Requires Fury skill activated 'CartBoost' = Requires a Pushcart and Cart Boost skill activated 'Shield' = Requires a 0,shield equipped 'Warg' = Requires a Warg 'Dragon' = Requires to ride a Dragon 'RidingWarg' = Requires to ride a Warg 'Mado' = Requires to have an active mado 'PoisonWeapon' = Requires to be under Poisoning Weapon. 'RollingCutter' = Requires at least one Rotation Counter from Rolling Cutter. 'ElementalSpirit' = Requires to have an Elemental Spirit summoned. 'MH_Fighting' = Requires Eleanor fighthing mode 'MH_Grappling' = Requires Eleanor grappling mode 'Peco' = Requires riding a peco SpiritSphereCost: Spirit Sphere Cost (int, defaults to 0) (can be grouped by Levels) Items: { ItemID or Aegis_Name : Amount (int, defaults to 0) (can be grouped by Levels) Item example: "ID717" or "Blue_Gemstone". Notes: Items with amount 0 will not be consumed. Amount can also be grouped by levels. } } Unit: { Id: [ UnitID, UnitID2 ] (int, defaults to 0) (can be grouped by Levels) Layout: Unit Layout (int, defaults to 0) (can be grouped by Levels) Range: Unit Range (int, defaults to 0) (can be grouped by Levels) Interval: Unit Interval (int, defaults to 0) (can be grouped by Levels) Target: "Unit Target" (string, defaults to "None") Types: All - affects everyone NotEnemy - affects anyone who isn't an enemy Friend - affects party, guildmates and neutral players Party - affects party only Guild - affects guild only Ally - affects party and guildmates only Sameguild - affects guild but not allies Enemy - affects enemies only None - affects nobody Flag: { UF_DEFNOTENEMY: true/false (boolean, defaults to false) UF_NOREITERATION: true/false (boolean, defaults to false) UF_NOFOOTSET: true/false (boolean, defaults to false) UF_NOOVERLAP: true/false (boolean, defaults to false) UF_PATHCHECK: true/false (boolean, defaults to false) UF_NOPC: true/false (boolean, defaults to false) UF_NOMOB: true/false (boolean, defaults to false) UF_SKILL: true/false (boolean, defaults to false) UF_DANCE: true/false (boolean, defaults to false) UF_ENSEMBLE: true/false (boolean, defaults to false) UF_SONG: true/false (boolean, defaults to false) UF_DUALMODE: true/false (boolean, defaults to false) UF_RANGEDSINGLEUNI: true/false (boolean, defaults to false) } } }
{ Id: 8443 Name: "MG_EARTHBOLT" Description: "Earth Bolt" MaxLevel: 10 Range: 9 Hit: "BDT_MULTIHIT" SkillType: { Enemy: true } } AttackType: "Magic" Element: "Ele_Earth" NumberOfHits: { Lv1: 1 Lv2: 2 Lv3: 3 Lv4: 4 Lv5: 5 Lv6: 6 Lv7: 7 Lv8: 8 Lv9: 9 Lv10: 10 } InterruptCast: true CastTime: { Lv1: 640 Lv2: 960 Lv3: 1280 Lv4: 1600 Lv5: 1920 Lv6: 2100 Lv7: 1560 Lv8: 2880 Lv9: 3200 Lv10: 3520 } AfterCastActDelay: { Lv1: 1000 Lv2: 1200 Lv3: 1400 Lv4: 1600 Lv5: 1800 Lv6: 2000 Lv7: 2200 Lv8: 2400 Lv9: 2600 Lv10: 2800 } FixedCastTime: { Lv1: 160 Lv2: 240 Lv3: 320 Lv4: 400 Lv5: 480 Lv6: 700 Lv7: 640 Lv8: 720 Lv9: 800 Lv10: 880 } Requirements: { SPCost: { Lv1: 25 Lv2: 50 Lv3: 75 Lv4: 100 Lv5: 125 Lv6: 150 Lv7: 175 Lv8: 200 Lv9: 225 Lv10: 250 } } },
Job_Name: { // Job names as in src/map/pc.c (they are hardcoded at the moment so if you want to add a new job you should add it there) inherit: ( "Other_Job_Name" ); // Base job from which this job will inherit its skill tree. NV_TRICKDEAD inheritance is skipped for non-novices from the source skills: { // SKILL_NAMEs come from the Name (16th column) value in db/re/skill_db.txt SKILL_NAME1: Max_Level // Use this for skills that don't have other skill prerequisite; Max_Level is a numeric value that should match your client side files SKILL_NAME2: { // Use this for skills which have other skills as prerequisites MaxLevel: Max_Level // Max_Level is a numeric value that should match your client side files SKILL_NAME_PREREQUISITE: Level_Prerequisite // The prerequisite skill and min level for having this skill available. Should also match your client side files SKILL_NAME_PREREQUISITE2: Level_Prerequisite2 // You can add as many prerequisite skills as you want. Minimum of 1 if you add a skill this way } }
MG_EARTHBOLT: { MaxLevel: 10 MG_FIREBOLT: 5 MG_LIGHTNINGBOLT: 5 }
{"MG_FIREWALL", 18; Pos = 19, MaxLv = 10, NeedSkillList = {6, 12}}
Adicione a baixo:
{"MG_EARTHBOLT",8443; Pos = 20, MaxLv = 10, NeedSkillList = {19,20}}
ECLAGE_RECALL = 3035,
Depois adicione:
MG_EARTHBOLT = 8443,
in data/lua files/skillinfo/skilldescript.lua localize:
[SKID.MG_THUNDERSTORM] = { "Thunder Storm", "Max Level:^777777 10 ^000000", "Type:^777777 Offensive ^000000", "SP Cost:^777777 24 + 5*SkillLV ^000000", "Target:^777777 cell ^000000", "Range:^777777 9 cells ^000000", "Cast Time:^777777 1*SkillLV sec ^000000", "Cool Down:^777777 2 sec ^000000", "Duration:^777777 0.2*SkillLV sec ^000000", "Effect:^777777 Hits every Enemy in a 5x5 area around the targeted cell with 1 Wind Element Bolt per level at a rate of 1 bolt every 0.2 seconds. Each bolt does 0.8*MATK Wind element damage. ^000000", "[LV 1]^777777 1 Bolt ^000000", "[LV 2]^777777 2 Bolts ^000000", "[LV 3]^777777 3 Bolts ^000000", "[LV 4]^777777 4 Bolts ^000000", "[LV 5]^777777 5 Bolts ^000000", "[LV 6]^777777 6 Bolts ^000000", "[LV 7]^777777 7 Bolts ^000000", "[LV 8]^777777 8 Bolts ^000000", "[LV 9]^777777 9 Bolts ^000000", "[LV 10]^777777 10 Bolts ^000000", },
Depois adicione:
[SKID.MG_EARTHBOLT] = { "Earth Bolt", "Max Level:^777777 10 ^000000" "Type:^77777 Active ^000000" "SP Cost:^777777 20 + 5*SkillLV ^000000" "Target:^777777 1 Enemy ^000000" "Cast Time:^777777 2 sec ^000000" "Cool Down:^777777 1 sec ^000000" "Duration:^777777 Instant ^000000" "Effect: ^777777 Deals SkillLV bolts of Earth magic damage to one enemy, at 150% MATK per hit.^000000", },
skilltreeview.lua mude:
[JOBID.JT_MAGICIAN] = { [1] = SKID.MG_STONECURSE, [2] = SKID.MG_COLDBOLT, [3] = SKID.MG_LIGHTNINGBOLT, [4] = SKID.MG_NAPALMBEAT, [5] = SKID.MG_FIREBOLT, [6] = SKID.MG_SIGHT, [8] = SKID.MG_SRECOVERY, [9] = SKID.MG_FROSTDIVER, [10] = SKID.MG_THUNDERSTORM, [11] = SKID.MG_SOULSTRIKE, [12] = SKID.MG_FIREBALL, [13] = SKID.MG_ENERGYCOAT, [18] = SKID.MG_SAFETYWALL, [19] = SKID.MG_FIREWALL },
para:
[JOBID.JT_MAGICIAN] = { [1] = SKID.MG_STONECURSE, [2] = SKID.MG_COLDBOLT, [3] = SKID.MG_LIGHTNINGBOLT, [4] = SKID.MG_NAPALMBEAT, [5] = SKID.MG_FIREBOLT, [6] = SKID.MG_SIGHT, [8] = SKID.MG_SRECOVERY, [9] = SKID.MG_FROSTDIVER, [10] = SKID.MG_THUNDERSTORM, [11] = SKID.MG_SOULSTRIKE, [12] = SKID.MG_FIREBALL, [13] = SKID.MG_ENERGYCOAT, [18] = SKID.MG_SAFETYWALL, [19] = SKID.MG_FIREWALL, [20] = SKID.MG_EARTHBOLT },
skillinfolist.lua Mude:
[SKID.ECL_SEQUOIADUST] = { "ECL_SEQUOIADUST"; SkillName = "Sequoia Dust", MaxLv = 1, SpAmount = { 0 }, bSeperateLv = false, AttackRange = { 7 }, }
Para:
[SKID.ECL_SEQUOIADUST] = { "ECL_SEQUOIADUST"; SkillName = "Sequoia Dust", MaxLv = 1, SpAmount = { 0 }, bSeperateLv = false, AttackRange = { 7 }, }, [SKID.MG_EARTHBOLT] = { "MG_EARTHBOLT"; SkillName = "Earth Bolt", MaxLv = 10, SpAmount = { 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 }, _NeedSkillList = { { SKID.MG_FIREBOLT, 5}, { SKID.MG_LIGHTNINGBOLT, 5} }
Vá a src/map/skill.h, Procure a skill que deseja adicionar/editar o efeito:
case WE_BABY: if(sd) { struct map_session_data *f_sd = pc->get_father(sd); struct map_session_data *m_sd = pc->get_mother(sd); bool we_baby_parents = false; if(m_sd && check_distance_bl(bl,&m_sd->bl,AREA_SIZE)) { sc_start(src,&m_sd->bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); clif->specialeffect(&m_sd->bl,408,AREA); we_baby_parents = true; }
#80927 Utilizar multíplos iteminfo.lua
Posted by Like it~* on 04 March 2017 - 06:54 PM
Olá.
Hoje vim trazer um tutorial muito simples, mas que é de grande utilidade para todos, até pelo motivo de eu não ter encontrado em nenhuma comunidade PT-BR. Tive um grande trabalho para achar um tutorial que tivesse uma línguagem mais prática e funcionasse, então devido a isso decidi postar.
Utilizar multíplos iteminfo.lub/lua.
Primeiro, como sabemos, os clientes mais novos estão usando itemInfo.lua / lub para substituir arquivos TXT para informações de item no lado do cliente, dentro da pasta System.
Acho que grande parte dos criadores de servidores mais complexos, se depararam com a situação de adicionar algum(ns) item(ns) de outro RO como idRO, iRO, & jRO, KRO e sempre receber "Item desconhecido" e "Maçãs", e não saber o verdadeiro motivo causador disso, exceto ao trocar os arquivos itemInfo.lua/lub. Eis que surgiu uma solução! Vamos lá.
Utilidade: utilizar itemInfo de outros servidores oficiais, como kRO, iRO e idRO, e fazer com que aqueles possam substituir informações não existentes de outros arquivos.
Tutorial
- 1º Passo:
Prepare os arquivos a ser utilizado, exemplo:
"itemInfo_bRO.lua" - Traduzido do BRO com todos os arquivos em PT-BR.
"itemInfo_iRO.lua" Servidor internacional iRO.
"itemInfo_idRO.lua".
"iteminfo_custom" - Seu iteminfo customizado, com seus itens criados.
"itemInfo_kRO.lua" - Servidor oficial e distribuidor do jogo RO.
- 2º Passo:
Faça um arquivo .lua vazio, dê o nome "itemInfo.lua". Este será o arquivo principal para ser lido pelo cliente.
Edite o "itemInfo.lua", e cole este código.
Spoiler
main = function() iiFiles = { "System/itemInfo_Translation.lua", -- 1st priority "System/itemInfo_iRO.lua", -- 2nd "System/itemInfo_idRO.lua", -- 3rd "System/itemInfo_kRO.lua", -- 4th } _TempItems = {} _Num = 0 -- check existing item function CheckItem(ItemID, DESC) if not (_TempItems[ItemID]) then _TempItems[ItemID] = DESC _Num = _Num + 1 else myTbl = {} for pos,val in pairs(_TempItems[ItemID]) do myTbl[pos] = val end for pos,val in pairs(DESC) do if not (myTbl[pos]) or myTbl[pos] == "" then myTbl[pos] = val end end _TempItems[ItemID] = myTbl end end -- end check -- Read all files for i,iiFile in pairs(iiFiles) do d = dofile(iiFile) end -- Read all files -- process _TempItems for ItemID,DESC in pairs(_TempItems) do --print("ItemID",ItemID,"Name",DESC.identifiedDisplayName) result, msg = AddItem(ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not result then return false, msg end for k,v in pairs(DESC.unidentifiedDescriptionName) do result, msg = AddItemUnidentifiedDesc(ItemID, v) if not result then return false, msg end end for k,v in pairs(DESC.identifiedDescriptionName) do result, msg = AddItemIdentifiedDesc(ItemID, v) if not result then return false, msg end end end -- process _TempItems _TempItems = nil return true, "good" end
- 3º Passo:entre no arquivo criado iteminfo.lua, que foi colado o código e onde estiver essa partemain = function() iiFiles = { "System/itemInfo_Translation.lua", -- 1st priority "System/itemInfo_iRO.lua", -- 2nd "System/itemInfo_idRO.lua", -- 3rd "System/itemInfo_kRO.lua", -- 4th }Mude para o nome dos seus arquivos, colocando em ordem de prioridade qual arquivo deve ser lido primeiro pelo Hexed (Geralmente iniciado com o BRO). Salve e feche.
- 4º Passo:
Em seguida, copie o arquivo e renomeie o arquivo copiado para "iteminfo.lub".
- 5º Passo:
Entre em todos seus arquivos preparados no Passo 1, e verifique se ambos começam assim:
tbl = { ... }Caso sim, continue no mesmo arquivo e vá para o próximo passo.
- 6º Passo:
Vá até o final do arquivo e remova a função principal. Geralmente estará assim.
Spoilerfunction main() for ItemID, DESC in pairs(tbl) do result, msg = AddItem(ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not result then return false, msg end for k, v in pairs(DESC.unidentifiedDescriptionName) do result, msg = AddItemUnidentifiedDesc(ItemID, v) if not result then return false, msg end end for k, v in pairs(DESC.identifiedDescriptionName) do result, msg = AddItemIdentifiedDesc(ItemID, v) if not result then return false, msg end end end return true, "good" end
Adicione ao lugar removido o seguinte código.
for ItemID,DESC in pairs(tbl) do CheckItem(ItemID,DESC) endFim!
Aprecie seus novos arquivos.
Notas e Créditos.
OBS¹: Apenas traduzi um tutorial já existente, no qual vou estar deixando a fonte a baixo. Mas tive que modificar praticamente todo tutorial, então os créditos são a ambos.
OBS²: Não irei fornecer nenhum arquivo, isto é apenas um tutorial, não me envie pm me solicitando nada.
OBS³: todos os arquivos devem ser decompilado .lua, não compilado.
OBS4:Se você tiver itens com ícone vazio , isso significa que sua data não tem o sprite / textura necessária ou seus arquivos itemInfo estão com o "unidentifiedResourceName" ou "identifiedResourceName" vazio ou não preenchidos.
muito bom obrigado por compartilhar!!]
Seguinte tem alguma forma de colocar para o jogador escolher sua linguagem e de acordo com isso ler o itemInfo de sua região ? por exemplo eu coloco no clientinfo varios servers porem em vez de colocar o nome eu coloco a linguage tipo:
No iRO é:
Thor
Chaos
No nosso seria:
English
Portuguese
Spañol
etc..
dai de acordo que o jogador escolhe o seu jogo lerá o itemInfo.lub (bRO, kRO iRO) de acordo com a linguagem dele, seria uma possibilidade de colocar em servidores com dual language! e seria muito bom! eu gostaria de aprender como por um servidor com + de um idioma sem ter que ficar traduzindo, tipo o @lang, ele muda a linguagem geral, queria um que os jogadores pudessem escolher sua linguagem e dar load na que eles escolherem, seria TOP! se alguem souber e quiser compartilhar o conhecimento, e se alguem quiser participar de uma equipe de tradução, estou traduzindo o arquivo.po 100% par português porém ele é gigantesco e sozinho ta osso! Fica o convite!
Acho que é isso que vc quer...
http://herc.ws/board...-dual-language/
#80808 Utilizar multíplos iteminfo.lua
Posted by Like it~* on 28 February 2017 - 09:45 PM
Olá.
Hoje vim trazer um tutorial muito simples, mas que é de grande utilidade para todos, até pelo motivo de eu não ter encontrado em nenhuma comunidade PT-BR. Tive um grande trabalho para achar um tutorial que tivesse uma línguagem mais prática e funcionasse, então devido a isso decidi postar.
Utilizar multíplos iteminfo.lub/lua.
Primeiro, como sabemos, os clientes mais novos estão usando itemInfo.lua / lub para substituir arquivos TXT para informações de item no lado do cliente, dentro da pasta System.
Acho que grande parte dos criadores de servidores mais complexos, se depararam com a situação de adicionar algum(ns) item(ns) de outro RO como idRO, iRO, & jRO, KRO e sempre receber "Item desconhecido" e "Maçãs", e não saber o verdadeiro motivo causador disso, exceto ao trocar os arquivos itemInfo.lua/lub. Eis que surgiu uma solução! Vamos lá.
Utilidade: utilizar itemInfo de outros servidores oficiais, como kRO, iRO e idRO, e fazer com que aqueles possam substituir informações não existentes de outros arquivos.
Tutorial
- 1º Passo:
Prepare os arquivos a ser utilizado, exemplo:
"itemInfo_bRO.lua" - Traduzido do BRO com todos os arquivos em PT-BR.
"itemInfo_iRO.lua" Servidor internacional iRO.
"itemInfo_idRO.lua".
"iteminfo_custom" - Seu iteminfo customizado, com seus itens criados.
"itemInfo_kRO.lua" - Servidor oficial e distribuidor do jogo RO.
- 2º Passo:
Faça um arquivo .lua vazio, dê o nome "itemInfo.lua". Este será o arquivo principal para ser lido pelo cliente.
Edite o "itemInfo.lua", e cole este código.
main = function() iiFiles = { "System/itemInfo_Translation.lua", -- 1st priority "System/itemInfo_iRO.lua", -- 2nd "System/itemInfo_idRO.lua", -- 3rd "System/itemInfo_kRO.lua", -- 4th } _TempItems = {} _Num = 0 -- check existing item function CheckItem(ItemID, DESC) if not (_TempItems[ItemID]) then _TempItems[ItemID] = DESC _Num = _Num + 1 else myTbl = {} for pos,val in pairs(_TempItems[ItemID]) do myTbl[pos] = val end for pos,val in pairs(DESC) do if not (myTbl[pos]) or myTbl[pos] == "" then myTbl[pos] = val end end _TempItems[ItemID] = myTbl end end -- end check -- Read all files for i,iiFile in pairs(iiFiles) do d = dofile(iiFile) end -- Read all files -- process _TempItems for ItemID,DESC in pairs(_TempItems) do --print("ItemID",ItemID,"Name",DESC.identifiedDisplayName) result, msg = AddItem(ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not result then return false, msg end for k,v in pairs(DESC.unidentifiedDescriptionName) do result, msg = AddItemUnidentifiedDesc(ItemID, v) if not result then return false, msg end end for k,v in pairs(DESC.identifiedDescriptionName) do result, msg = AddItemIdentifiedDesc(ItemID, v) if not result then return false, msg end end end -- process _TempItems _TempItems = nil return true, "good" end
main = function() iiFiles = { "System/itemInfo_Translation.lua", -- 1st priority "System/itemInfo_iRO.lua", -- 2nd "System/itemInfo_idRO.lua", -- 3rd "System/itemInfo_kRO.lua", -- 4th }
Mude para o nome dos seus arquivos, colocando em ordem de prioridade qual arquivo deve ser lido primeiro pelo Hexed (Geralmente iniciado com o BRO). Salve e feche.
- 4º Passo:
Em seguida, copie o arquivo e renomeie o arquivo copiado para "iteminfo.lub".
- 5º Passo:
Entre em todos seus arquivos preparados no Passo 1, e verifique se ambos começam assim:
tbl = { ... }
Caso sim, continue no mesmo arquivo e vá para o próximo passo.
- 6º Passo:
Vá até o final do arquivo e remova a função principal. Geralmente estará assim.
function main() for ItemID, DESC in pairs(tbl) do result, msg = AddItem(ItemID, DESC.unidentifiedDisplayName, DESC.unidentifiedResourceName, DESC.identifiedDisplayName, DESC.identifiedResourceName, DESC.slotCount, DESC.ClassNum) if not result then return false, msg end for k, v in pairs(DESC.unidentifiedDescriptionName) do result, msg = AddItemUnidentifiedDesc(ItemID, v) if not result then return false, msg end end for k, v in pairs(DESC.identifiedDescriptionName) do result, msg = AddItemIdentifiedDesc(ItemID, v) if not result then return false, msg end end end return true, "good" end
Adicione ao lugar removido o seguinte código.
for ItemID,DESC in pairs(tbl) do CheckItem(ItemID,DESC) end
Fim!
Aprecie seus novos arquivos.
Notas e Créditos.
OBS¹: Apenas traduzi um tutorial já existente, no qual vou estar deixando a fonte a baixo. Mas tive que modificar praticamente todo tutorial, então os créditos são a ambos.
OBS²: Não irei fornecer nenhum arquivo, isto é apenas um tutorial, não me envie pm me solicitando nada.
OBS³: todos os arquivos devem ser decompilado .lua, não compilado.
OBS4:Se você tiver itens com ícone vazio , isso significa que sua data não tem o sprite / textura necessária ou seus arquivos itemInfo estão com o "unidentifiedResourceName" ou "identifiedResourceName" vazio ou não preenchidos.
Fonte: http://pservero.com/...iteminfo-files/
#79264 [Request] Script RWC or WRC automated 7 vs 7
Posted by Like it~* on 02 January 2017 - 11:43 PM
NPC that will queue PARTY 1 until there is a PARTY 2 and warp them to GvG Map
Eg.
Parties should be in different class like HW,Champ,Prof,Stalker,Clown,High Priest,Paladin with no Job Repetition (Example: Paladin and Lord Knight in the same party)
Parties will be warped into designated arena when all parties are good to go and complete.
They will need to enter a 0/7 room just to be sure that they are only 7 chars with no job repetition
If Arena 1,2,3,4 are full players will be in queue mode
Party 1 and Party 2 cannot use the skill until the NPC says "3","2","1","Buffs up!"
Players cannot move from their designated location like a barricade is on until the NPC Says "Ready?","3","2","1","GOOOOOOOOOOO!!!" and the barricades blocking the way will turned off.
GvG Maps are:
guild_vs1,2,3,4
I am hoping for a help here cause i am planning to release a 7v7 RWC Practice Server so players from other trans server can come to my server to practice in their upcoming tournaments.
For reference:
I found something similar, but only works with eAmod, would need adaptation to the hercules.
https://rathena.org/...-rules-release/
- Viewing Profile: Reputation: Like it~*
- Privacy Policy
- Hercules Forum Rules ·