void Awake() { player = GameObject.FindGameObjectWithTag("Player"); enemyHealth = GetComponent <damage>(); playerHealth = player.GetComponent <PlayerHealth>(); nav = GetComponent <NavMeshAgent>(); }
void OnTriggerEnter2D(Collider2D collider) { Scene currentScene = SceneManager.GetActiveScene(); string sceneName = currentScene.name; health -= damage; damage missile = collider.gameObject.GetComponent <damage>(); if (missile) { health -= missile.GetDamage(); missile.Hit(); if (health <= 0) { var bushtia = FindObjectOfType <enemies>(); Destroy(gameObject); scoreKeeper2 = FindObjectOfType <ScoreToWin>(); scoreKeeper2.Score(scoreValuee); AudioSource.PlayClipAtPoint(cracka, transform.position); if (sceneName == "Level_03") { GameObject beama = Instantiate(bushtia.enemyPrefab5, transform.position, Quaternion.identity) as GameObject; beama.GetComponent <Rigidbody2D>().velocity = new Vector3(-2, 0, 0); } } } }
void OnTriggerEnter2D(Collider2D collider) { health -= damage; AudioSource.PlayClipAtPoint(cracka, transform.position); damage missile = collider.gameObject.GetComponent <damage>(); if (missile) { health -= missile.GetDamage(); missile.Hit(); if (health <= 0) { var bushtia = FindObjectOfType <enemies>(); Destroy(gameObject); GameObject beama = Instantiate(bushtia.enemyPrefab2, transform.position, Quaternion.identity) as GameObject; beama.GetComponent <Rigidbody2D>().velocity = new Vector3(-2, 0, 0); scoreKeeper = FindObjectOfType <ScoreKeeper>(); scoreKeeper.Score(scoreValuee); } } }
void DoDamage() { timer = 0f; linePosition = new Vector3(transform.position.x, transform.position.y + 2.5f, transform.position.z); shootRay.origin = linePosition; shootRay.direction = transform.forward; //hitLine.enabled = true; //hitLine.SetPosition(0, linePosition); if (Physics.Raycast(shootRay, out shootHit, range, shootableMask)) { damage damage = shootHit.collider.GetComponent <damage>(); if (damage != null) { damage.TakeDamage(damagePerHit); Debug.Log("Damage Sent"); } //hitLine.SetPosition(1, shootHit.point); } else { // ... set the second position of the line renderer to the fullest extent of the gun's range. //hitLine.SetPosition(1, shootRay.origin + shootRay.direction * range); //Debug.Log("No Damage"); } }
public void takedamage(Creature causer, damage get) { this.nowHp = this.nowHp - get.amount; if (this.nowHp <= 0) { this.death(); } }
void meleeAttack() { RaycastHit hit; if (Physics.Raycast(Camera.transform.position, Camera.transform.forward, out hit)) { if (hit.transform.tag == "Enemy" && hit.distance <= 5f) { damage enemy = hit.transform.GetComponent <damage>(); enemy.Damage1(100f); Debug.Log("Melee"); } } }
public virtual void takeDamage(damage damage) { if (unit.alive && !(unit.exiled)) //單位活著且沒有被放逐 { if (damage.kind == 1 && !(unit.immune_attack)) //受到的是戰鬥傷害且單位不是物免 { if (!(unit.conversely) || damage.hitConversely) //如果單位沒倒地或傷害能攻擊倒地單位 { unit.nowHP -= (damage.num - (damage.num * (unit.damageReduce / 100))); //傷害結算:單位生命值減少傷害量減物理減傷 } if (unit.canBeStiff) //硬直判定 { float realstiff = damage.stiffTime - damage.stiffTime * (unit.stiffReduce / 100); if (unit.stiffTime <= realstiff) //硬直結算:如果單位當前硬直小於傷害造成的硬直 { unit.stiffTime = realstiff; //將當前硬直設定為技能造成硬直 animator.SetFloat("stiffTime", unit.stiffTime); } } if (damage.makeConversaly && (!unit.conversely) && unit.canBeConvesly)//倒地判定:如果伤害会击倒,且单位不为击倒状态,且可以被击倒 { unit.conversely = true; animator.SetBool("conversely", true); unit.converselyTime += unit.standConveslyTime; } } else if (damage.kind == 2 && !(unit.immune_skill)) //受到的是戰鬥傷害且單位不是物免 { if (!(unit.conversely) || damage.hitConversely) //如果單位沒倒地或傷害能攻擊倒地單位 { unit.nowHP -= (damage.num - (damage.num * (unit.energyReduce / 100))); //單位生命值減少傷害量減特殊減傷 } if (unit.canBeStiff) { float realstiff = damage.stiffTime - damage.stiffTime * (unit.stiffReduce / 100); if (unit.stiffTime <= realstiff) //硬直結算:如果單位當前硬直小於傷害造成的硬直 { unit.stiffTime = realstiff; //將當前硬直設定為技能造成硬直 animator.SetFloat("stiffTime", unit.stiffTime); } } if (damage.makeConversaly && (!unit.conversely) && unit.canBeConvesly)//倒地判定 { unit.conversely = true; animator.SetBool("conversely", true); unit.converselyTime += unit.standConveslyTime; } } } }
// Update is called once per frame void Update() { damage d = GameObject.Find("healthbar").GetComponent <damage>(); if (d.GetHealth() <= 0) { SceneManager.LoadScene("Menu"); } Antibody a = GameObject.FindGameObjectWithTag("Slider").GetComponent <Antibody>(); if (a.GetTime() >= 600) { SceneManager.LoadScene("Menu"); } }
void Start() { growth_tree = 0; growth_apple = 0; //isPause = true; waitTime = 0.3f; timer = 0f; tree = GameObject.FindGameObjectsWithTag("Tree"); bloss = GameObject.FindGameObjectsWithTag("Apple blossom"); fruits = GameObject.FindGameObjectsWithTag("Fruit"); dam = GameObject.Find("apple").GetComponent <damage>(); }
// Use this for initialization public override void takeDamage(damage damage) { Debug.Log("in net take damage"); if (unit.alive && !(unit.exiled))//單位活著且沒有被放逐 { int realnum = 0; float realstiff = 0; float conversalyTime = 0; if (damage.kind == 1 && !(unit.immune_attack)) //受到的是戰鬥傷害且單位不是物免 { if (!(unit.conversely) || damage.hitConversely) //如果單位沒倒地或傷害能攻擊倒地單位 { realnum = (damage.num - (damage.num * (unit.damageReduce / 100))); //傷害結算:單位生命值減少傷害量減物理減傷 } if (unit.canBeStiff) //硬直判定 { realstiff = damage.stiffTime - damage.stiffTime * (unit.stiffReduce / 100); } if (damage.makeConversaly && (!unit.conversely) && unit.canBeConvesly)//倒地判定:如果伤害会击倒,且单位不为击倒状态,且可以被击倒 { conversalyTime = unit.standConveslyTime; } } else if (damage.kind == 2 && !(unit.immune_skill)) //受到的是戰鬥傷害且單位不是物免 { if (!(unit.conversely) || damage.hitConversely) //如果單位沒倒地或傷害能攻擊倒地單位 { realnum -= (damage.num - (damage.num * (unit.energyReduce / 100))); //單位生命值減少傷害量減特殊減傷 } if (unit.canBeStiff) { realstiff = damage.stiffTime - damage.stiffTime * (unit.stiffReduce / 100); } if (damage.makeConversaly && (!unit.conversely) && unit.canBeConvesly)//倒地判定 { conversalyTime = unit.standConveslyTime; } } var parameter = new Dictionary <byte, object>() { { (byte)1, realnum }, { (byte)2, realstiff }, { (byte)3, conversalyTime }, { (byte)4, unit.No } }; client.peer.OpCustom(4, parameter, true); } }
void weapon() { isFiring = true; isFull = false; RaycastHit hit; if (Physics.Raycast(Camera.transform.position, Camera.transform.forward, out hit)) { if (hit.transform.tag == "Enemy") { damage enemy = hit.transform.GetComponent <damage>(); enemy.Damage1(20f); Debug.Log("Bullet Hit"); } surfaceHit(hit.point, hit.normal); } }
void OnTriggerEnter2D(Collider2D collider) { health -= damage; AudioSource.PlayClipAtPoint(cracka, transform.position); damage missile = collider.gameObject.GetComponent <damage>(); if (missile) { missile.Hit(); if (health <= 0) { var bushtia = FindObjectOfType <enemies>(); Destroy(gameObject); scoreKeeper22 = FindObjectOfType <ScoreToWin>(); scoreKeeper22.Score(scoreValuee); } } }
// Update is called once per frame void Update() { // Debug.Log("(transform.position-origin).magnitude is" + (transform.position - origin).magnitude + "(endPoint-origin).magnitude is" + (endPoint - origin).magnitude); // Debug.Log("origin is" + origin + "position is" + transform.position); if ((new Vector3(endPoint.x, 0, endPoint.z) - new Vector3(transform.position.x, 0, transform.position.z)).magnitude <= 0.2) { //Debug.Log("enter endpoint!!!!!!!!!!!!!!!!!!!!!!!!!!!!! it is"+endPoint); // Debug.Log("this turn obs is" + obstacle); origin = new Vector3(0, 0, 0); damage d = new damage(1, 2, 1); obstacle = null; endPoint = new Vector3(0, 0, 0); forward = new Vector3(0, 0, 0); } //Debug if (!endPoint.Equals(new Vector3(0, 0, 0))) { (GameObject.Find("mark") as GameObject).transform.position = endPoint; } }
public base_personnage(string _name,int _ID,santé _Santé, mana _Mana, energie _Energie, poudre _Poudre, vitess _Vitess, armor _Armor, encaissement _Encaissement, speed _Speed, tenacity _Tenacity, range _Range, damage _Damage, power _Power, life_steal _Life_Steal, vampirisme _Vampirisme, List<tool> _LT) { name = _name; ID = _ID; Santé = _Santé; Mana = _Mana; Energie = _Energie; Poudre = _Poudre; Vitess = _Vitess; Armor = _Armor; encaissement = _Encaissement; Speed = _Speed; Tenacity = _Tenacity; Range = _Range; Damage = _Damage; Power = _Power; Life_Steal = _Life_Steal; Vampirisme = _Vampirisme; List_tool = new List<tool>(); List_tool = _LT; }
// Use this for initialization void Start() { //get references to the child objects pearlOffset = transform.GetChild(0).gameObject; //get reference to the sprite renderer located on the pearlOffset child object pearlRenderer = pearlOffset.GetComponent <SpriteRenderer>(); playerStateScript = gameObject.GetComponent <player_state>(); numberOfPlatformsTouching = 0; damageScript = GetComponent <damage> (); rBody = GetComponent <Rigidbody2D> (); scoreScript = GameObject.FindGameObjectWithTag("Score_Keeper").GetComponent <score_keeper>(); statusAnim = GetComponent <Animator> (); soundPlayer = GameObject.FindGameObjectWithTag("Sound_Player").GetComponent <sound_player>(); }
void Fire(Transform target) { timer = 0f; linePosition = barrel.position; shootray.origin = linePosition; shootray.direction = barrel.forward; if (Physics.Raycast(shootray, out shootHit, range, shootableMask)) { damage damage = shootHit.collider.GetComponent <damage>(); if (damage != null) { damage.TakeDamage(damagePerHit); } hitLine.enabled = true; barrelLight.enabled = true; hitLine.SetPosition(0, linePosition); hitLine.SetPosition(1, shootHit.transform.position); audio.Play(); } }
public void skill_othercausedamage(Creature causer, Creature traget, damage give) { }
public ZoneTable() { int ctx = 0, cta = 0; StreamReader reader = new StreamReader(new FileInfo(@"scripts\areadata_cur.txt").FullName); while (!reader.EndOfStream) { string line = reader.ReadLine(); if (line.Length == 0) { continue; } if (line.StartsWith("//")) { continue; } if (line.StartsWith("area_begin")) { L2Zone zone = null; ZoneTemplate template = new ZoneTemplate(); string[] d = line.Split('\t'); for (int i = 1; i < d.Length; i++) { if (d[i].Equals("area_end")) { continue; } string param = d[i].Split('=')[0]; string val = d[i].Substring(param.Length + 1); switch (param) { case "name": template.Name = val; break; case "map_no": template._map_no = val; break; case "type": { template.Type = (ZoneTemplate.ZoneType)Enum.Parse(typeof(ZoneTemplate.ZoneType), val); switch (template.Type) { case ZoneTemplate.ZoneType.battle_zone: zone = new battle_zone(); break; case ZoneTemplate.ZoneType.peace_zone: zone = new peace_zone(); break; case ZoneTemplate.ZoneType.water: zone = new water(); break; case ZoneTemplate.ZoneType.no_restart: zone = new no_restart(); break; case ZoneTemplate.ZoneType.ssq_zone: zone = new ssq_zone(); break; case ZoneTemplate.ZoneType.mother_tree: zone = new mother_tree(); template._hp_regen_bonus = 2; template._mp_regen_bonus = 1; break; case ZoneTemplate.ZoneType.damage: zone = new damage(); template._damage_on_hp = 200; template._damage_on_mp = 0; break; case ZoneTemplate.ZoneType.poison: zone = new poison(); template.setSkill("s_area_a_speed_down"); break; case ZoneTemplate.ZoneType.swamp: zone = new swamp(); template._move_bonus = -50; break; case ZoneTemplate.ZoneType.instant_skill: zone = new instant_skill(); break; } } break; case "affect_race": template._affect_race = val; break; case "entering_message_no": template._entering_message_no = int.Parse(val); break; case "leaving_message_no": template._leaving_message_no = int.Parse(val); break; case "range": template.setRange(val); break; case "move_bonus": template._move_bonus = int.Parse(val); break; case "default_status": template.DefaultStatus = val.Equals("on"); break; case "event_id": template._event_id = int.Parse(val); break; case "damage_on_hp": template._damage_on_hp = int.Parse(val); break; case "damage_on_mp": template._damage_on_mp = int.Parse(val); break; case "message_no": template._message_no = int.Parse(val); break; case "target": template._target = (ZoneTemplate.ZoneTarget)Enum.Parse(typeof(ZoneTemplate.ZoneTarget), val); break; case "skill_prob": template._skill_prob = int.Parse(val); break; case "unit_tick": template._unit_tick = int.Parse(val); break; case "initial_delay": template._initial_delay = int.Parse(val); break; case "skill_list": template.setSkillList(val); break; case "skill_name": template.setSkill(val.Substring(1).Replace("]", "")); break; case "exp_penalty_per": template._exp_penalty_per = int.Parse(val); break; case "item_drop": template._item_drop = val.Equals("on"); break; } } zone.Name = template.Name; zone.Template = template; zone.Territory = new ZoneNPoly(template._x, template._y, template._z1, template._z2); cta++; for (int i = 0; i < template._x.Length; i++) { L2WorldRegion region = L2World.Instance.GetRegion(template._x[i], template._y[i]); if (region != null) { ctx++; // region._zoneManager.addZone(zone); } else { CLogger.error("AreaTable: null region at " + template._x[i] + " " + template._y[i] + " for zone " + zone.Name); } } } } CLogger.info("AreaTable: intercepted " + ctx + " regions with " + cta + " zones"); }
/// <summary> /// Calculates damage to shields, armor, and character given damage and a character model /// </summary> public static (float damageToShields, float damageToArmor, float damageToCharacter) DamageRatio(float damage, float pierce, CharacterModel character) => DamageRatioImpl(damage, pierce, character);
public base_personnage(santé _Santé, mana _Mana, energie _Energie, poudre _Poudre, vitess _Vitess, armor _Armor, encaissement _Encaissement, speed _Speed, tenacity _Tenacity, range _Range, damage _Damage, power _Power, life_steal _Life_Steal, vampirisme _Vampirisme) { }
public void skill_othertakedamage(Creature causer, damage get) { }
public static Variant apply_dmg_on_pl(IBaseUnit tar_sprite, IBaseUnit frm_sprite, damage damage, long cur_clock_tm, int per, bool direct_dmg = false) { // TO DO : 优化: per = 1000时不需要计算增益 //direct_dmg 非状态技能伤害 var tar_pl = tar_sprite.get_pack_data(); if (tar_pl == null) { return null; } if (tar_sprite.ignore_dmg()) { return null; } //::g_dump( " apply_dmg_on_pl() ===>>>>", "") ; //var ret = {hited=3, criatk=0, dmg=0, dobdmg=false, isdie=false, frm_iid=pl.iid, to_iid=tar_pl.iid}; var ret = apply_dmg_on_pl_ex(tar_sprite, frm_sprite, damage, cur_clock_tm, per, false, direct_dmg); if (ret["hited"]._int32 == 3) { // broadcast hpchange msg //var hpchange = { frm_iid = ret.frm_iid, hited = ret.hited, criatk = ret.criatk, dobdmg = ret.dobdmg }; // if (ret.dmg != 0) // { // hpchange.hpadd < - -ret.dmg; // hpchange.die < -ret.isdie; // } // if (("dp_dmg" in ret) && ret.dp_dmg != 0 ) //{ // hpchange.dpadd < - -ret.dp_dmg; // } // tar_sprite.broad_cast_zone_msg_and_self(26, { iid = tar_pl.iid, hpchange = hpchange}); } return ret; }
// { // level = 1, // atktp = atk_type.ATKTP_ATK, // atk_min = 100, // atk_max = 100, // matk_min = 100, // matk_max = 100, // atk_rate = 1000, // 命中率 // miss_rate = 0, // 闪避 // pkatkrate = 100, // pkmisrate = 100, // criatk = 0, // criatk_debuffs = 0, //暴击抵抗,相对 criatk 的抵抗 ,千分比, 算法:受到暴击击的概率降低xx // cridmg = 0, // exatk = 0, // exatk_debuffs = 0, // 卓越一击率抵抗, 相对 exatk 的抵抗 ,千分比, 算法:受到卓越一击的概率降低xx // exdmg = 0, // dobrate = 0, // igdef_rate = 0, // igdef_rate_debuffs = 0, // 抵抗无视防御几率 // def_red = 0, // dmg_red = 0, // atk_dmg_mul = 0, // igdmg_red = 0, // 无视伤害减免几率,千分比 // igatk_dmg_mul = 0,// 无视伤害增益几率,千分比 // hpsuck = 0, // 每次攻击吸收生命值 // hpsuck_dmgmul = 0, // 每次攻击吸收生命值增加伤害比例 // addResist = [0,0,0,0,0,0,0], // 属性攻击 // clansred = 0, // iid = 0, //}; // damage { noratk: } ?? public static Variant apply_dmg_on_pl_ex(IBaseUnit tar_sprite, IBaseUnit frm_sprite, damage damage, long cur_clock_tm, int per, bool wpnatk = false, bool direct_dmg = false) { // TO DO : 优化: per = 1000时不需要计算增益 //direct_dmg 默认伤害....? 技能伤害, 追击伤害, 有miss几率 //wpnatk 是否默认攻击 //::g_dump( "apply_dmg [ damage ] ===>>>> ", damage ) ; //::g_dump( "apply_dmg [ flags ] ===>>>> ", { wpnatk = wpnatk, direct_dmg = direct_dmg } ) ; if (frm_sprite != null) { frm_sprite.on_hurt(tar_sprite); } tar_sprite.on_be_hurt(frm_sprite); var tar_pl = tar_sprite.get_pack_data(); // 取不到状态添加对象情况下,本函数frm_sprite可能为空,则需要默认的计算参数 var pl = default(IMapUnit);// g_dmg_calc_def_pl; if (frm_sprite != null) { pl = frm_sprite.get_pack_data(); pl.last_atk_tm = cur_clock_tm; // 触发普通攻击cd } var ret = new Variant(); ret["hited"] = 3; ret["criatk"] = 0; ret["dmg"] = 0; ret["dobdmg"] = false; ret["isdie"] = false; ret["frm_iid"] = pl.iid; ret["to_iid"] = tar_pl.iid; // 计算玩家 VS NPC 等级调整伤害 //var dmg_per_add = 0; var is_pvp = true; if (frm_sprite != null) { if (frm_sprite.get_sprite_type() == map_sprite_type.MstMonster) { is_pvp = false; } } if (tar_sprite.get_sprite_type() == map_sprite_type.MstMonster) { is_pvp = false; } // miss check var bAllMiss = false; if (direct_dmg) { if (is_pvp) { // pvp var atk_rate = 100 * (pl.pkatkrate / (pl.pkatkrate + tar_pl.pkmisrate)/* * (pl.level/(pl.level + tar_pl.level))*/); var lvl_dist = tar_pl.level - pl.level; if (lvl_dist >= 300) { atk_rate -= 15; } else if (lvl_dist >= 200) { atk_rate -= 10; } else if (lvl_dist >= 100) { atk_rate -= 5; } var judg = Utility.random(0, 100); if (judg > atk_rate) { // miss ret["hited"] = 1; return ret; } } else { // pve var atk_rate = 100.0 * (pl.atk_rate - tar_pl.miss_rate) / pl.atk_rate; if (atk_rate < 5) { if (atk_rate < 0) { bAllMiss = true; } atk_rate = 5; } var judg = Utility.random(0, 100); if (judg > atk_rate) { // miss ret["hited"] = 1; return ret; } } } double targetDef = tar_pl.def; if (is_pvp) targetDef += tar_pl.pkdef; targetDef = (targetDef - targetDef * (pl.def_red / 1000.0)); var igdef_rate = pl.igdef_rate - tar_pl.igdef_rate_debuffs; if (igdef_rate > 0) { var judg = Utility.random(0, 1000); if (judg < igdef_rate) { targetDef = 0; ret["criatk"] = 1; // 无视防御 } } //Utility.trace_info("apply_dmg_on_pl frm_sprite:["+frm_sprite+"] per["+per+"]\n"); //sys.dumpobj(pl); //var combat_conf = get_general_combat_conf(); double total_dmg = 0; // TO DO : 计算伤害 damage 是否是物理伤害 if (pl.atktp == atk_type.ATKTP_MATK && !wpnatk && (damage.plyatk != 1)) { //pl.atktp == atk_type.ATKTP_MATK 是 魔攻攻击分类角色 // !wpnatk 不是默认攻击 // (!("plyatk" in damage) || damage.plyatk!=1) 不是物理攻击 // 根据魔法攻击计算伤害 int dmg_min = damage.dmg_min + pl.matk_min * damage.noratk; int dmg_max = damage.dmg_max + pl.matk_max * damage.noratk; if (is_pvp && pl.pkmatk != 0) {//pvp魔法攻击增加 dmg_min += pl.pkmatk; dmg_max += pl.pkmatk; } if (damage.attr >= 0) {// 属性攻击 dmg_min += pl.addResist[damage.attr]; dmg_max += pl.addResist[damage.attr]; } // TO DO : 根据装备武器不同来计算伤害 //if(direct_dmg && frm_sprite) //{ // //frm_sprite.get_equip_by_pos(6); // 获取装备的武器 //} double dmg = 0; var dmg_calced = false; if (damage.noratk > 0 && (pl.criatk - pl.criatk_debuffs > 0 || pl.exatk - pl.exatk_debuffs > 0)) { var judg = Utility.random(0, 1000); if (judg < pl.exatk - pl.exatk_debuffs) {//卓越一击几率 dmg = dmg_max - targetDef; dmg += dmg_max * (0.2 + pl.exper_add / 1000.0); dmg += pl.exdmg; ret["criatk"] = 2; // 卓越一击 dmg_calced = true; } else { judg = Utility.random(0, 1000); if (judg < pl.criatk - pl.criatk_debuffs) {// 会心一击几率 dmg = dmg_max - targetDef; dmg += pl.cridmg; ret["criatk"] = 3; // 会心一击 dmg_calced = true; } } } if (!dmg_calced) { dmg = Utility.random(dmg_min, dmg_max + 1); //if(is_pvp) //{ // dmg = dmg - (targetDef*tar_sprite.game_conf.pvp_def_per/100.0); //} //else //{ // dmg = dmg - targetDef; //} } if (frm_sprite != null && frm_sprite.get_sprite_type() == map_sprite_type.MstPlayer) { //// 技能攻击,技能额外加成 //int dmg_mul = damage["noratk"]; //var baseatt_conf = frm_sprite.carr_gen_conf.baseatt[0]; //if( ("inte2atk" in baseatt_conf) && baseatt_conf.inte2atk != 0 ) //{ // dmg_mul += pl.inte/(pl.inte+baseatt_conf.inte2atk); //} ////sys.trace( sys.SLT_DETAIL, "atk_type.ATKTP_MATK dmg_mul=" + dmg_mul + " baseatt_conf.inte2atk =" + baseatt_conf.inte2atk + "\n") //dmg = dmg * dmg_mul; } if (dmg <= 0) { dmg = 1; } total_dmg += dmg; } else { // 根据攻击力计算伤害 var skil_dmg_min = damage.dmg_min + pl.atk_min; var skil_dmg_max = damage.dmg_max + pl.atk_max; if (is_pvp && pl.pkatk != 0) { skil_dmg_min += pl.pkatk; skil_dmg_max += pl.pkatk; } if (damage.attr >= 0) { skil_dmg_min += pl.addResist[damage.attr]; skil_dmg_max += pl.addResist[damage.attr]; } double dmg = 0; var dmg_calced = false; if (damage.noratk > 0 && (pl.criatk - pl.criatk_debuffs > 0 || pl.exatk - pl.exatk_debuffs > 0)) { var judg = Utility.random(0, 1000); if (judg < pl.exatk - pl.exatk_debuffs) { dmg = skil_dmg_max; dmg += skil_dmg_max * (0.2 + pl.exper_add / 1000.0); dmg += pl.cridmg; dmg += pl.exdmg; ret["criatk"] = 2; // 卓越一击 dmg_calced = true; } else { judg = Utility.random(0, 1000); if (judg < pl.criatk - pl.criatk_debuffs) { dmg = skil_dmg_max; dmg += pl.cridmg; ret["criatk"] = 3; // 会心一击 dmg_calced = true; } } } if (!dmg_calced) { dmg = Utility.random(skil_dmg_min, skil_dmg_max + 1); } //if(is_pvp) //{ // dmg = dmg - (targetDef*tar_sprite.game_conf.pvp_def_per/100.0); //} //else //{ // dmg = dmg - targetDef; //} if (!wpnatk && frm_sprite != null && frm_sprite.get_sprite_type() == map_sprite_type.MstPlayer) { // 物理技能攻击,技能额外加成 var dmg_mul = damage.noratk; //var baseatt_conf = frm_sprite.carr_gen_conf.baseatt[0]; //if( ("inte2atk" in baseatt_conf) && baseatt_conf.inte2atk != 0 ) //{ // dmg_mul += pl.inte/(pl.inte+baseatt_conf.inte2atk); //} //sys.trace( sys.SLT_DETAIL, "atk_type.ATKTP_ATK dmg_mul=" + dmg_mul + "\n") dmg = dmg * dmg_mul; } if (dmg <= 0) { dmg = 1; } total_dmg += dmg; } if (bAllMiss) {//pve中 攻击者攻击几率 小于 被攻击者 miss几率时,攻击减益到30% total_dmg = (total_dmg * 30) / 100; } if (tar_pl.dmg_red != 1) {//伤害减免 if (pl.igdmg_red <= 0) { //无视伤害减免几率 total_dmg = (total_dmg * tar_pl.dmg_red); } else { var judg = Utility.random(0, 1000); if (judg >= pl.igdmg_red) { total_dmg = (total_dmg * tar_pl.dmg_red); } } } if (is_pvp && tar_pl.pkdmg_red != 1) { //pvp 伤害减免 total_dmg = (total_dmg * tar_pl.pkdmg_red); } var tlevel = pl.level / 10; if (total_dmg >= 0 && total_dmg < tlevel) { if (tlevel < 1) { tlevel = 1; } total_dmg = tlevel; } // TO DO : sprite damage, 小精灵伤害 if (direct_dmg) { // 计算生命损耗伤害加成 if (frm_sprite != null && pl.hpsuck > 0) { // 损耗自己生命 if (pl.hp > pl.hpsuck) { pl.hp -= pl.hpsuck; if (pl.hp < 0) pl.hp = 0; // broadcast hpchange msg //frm_sprite.broad_cast_zone_msg_and_self(26, {iid=pl.iid, hpchange={hpadd=-pl.hpsuck, die=(pl.hp <= 0), frm_iid=pl.iid}}); //if(pl.cid >0) //{ // var tid = team.get_ply_teamid(pl.cid); // if(tid > 0) // { // // 在队伍中,发送队友属性变化消息 // team_bcast_rpc_except(tid, 138, {cid=pl.cid, hp=pl.hp}, pl.sid); // } //} if (pl.hpsuck_dmgmul > 0) { // 增加攻击伤害 total_dmg = total_dmg * ((1000.0 + pl.hpsuck_dmgmul) / 1000.0); } } } var atk_dmg_mul = pl.atk_dmg_mul; if (pl.igatk_dmg_mul > 0) { //无视伤害增益几率 var judg = Utility.random(0, 1000); if (judg < pl.igatk_dmg_mul) { atk_dmg_mul = 0; } } if (is_pvp) { total_dmg += (total_dmg * ((atk_dmg_mul + pl.pkatk_dmg_mul) / 1000.0)); } else { total_dmg += (total_dmg * (atk_dmg_mul / 1000.0)); } //// 计算技能伤害的属性加成值 //if(damage.ContainsKey("attdmg_mul")) //{ // foreach(var attdmg in damage["attdmg_mul"]) // { // var val = 0; // if(attdmg.name in pl) // { // val = pl[attdmg.name]; // } // total_dmg *= ((attdmg.base + val * attdmg.val ) / attdmg.basediv); // } //} //if("attdmg_add" in damage) //{ // foreach(attdmg in damage.attdmg_add) // { // var val = 0; // if(attdmg.name in pl) // { // val = pl[attdmg.name]; // } // total_dmg += ((attdmg.base + val * attdmg.val ) / attdmg.basediv); // } //} //if((tar_sprite.get_sprite_type()==map_sprite_type.MstMonster) && tar_pl.clanatt_eff) //{ // // 需要计算副本中帮派科技伤害减免 // var clanper = 1000 - tar_pl.clanred + pl.clansred; // //Utility.trace_info("calc clanatt total_dmg["+total_dmg+"] clanper["+clanper+"] pl.clansred["+pl.clansred+"] tar_pl.clanred["+tar_pl.clanred+"]\n"); // total_dmg = (total_dmg * ((clanper)/1000.0)); // //Utility.trace_info("calc clanatt total_dmg["+total_dmg+"]\n"); //} // TO DO : 吸蓝 mpsteal } total_dmg += damage.hp_dmg; total_dmg = (total_dmg * (per / 1000.0)); //sys.dumpobj(damage); //Utility.trace_info("total_dmg:["+total_dmg+"]\n"); if (total_dmg.CompareTo(0) > 0) { var real_atk_dmg = total_dmg; if (total_dmg > 0) { if (frm_sprite != null) { tar_sprite.onhate(frm_sprite, total_dmg); tar_sprite.ondmg(frm_sprite, total_dmg); if (frm_sprite.get_sprite_type() == map_sprite_type.MstPlayer) { if (frm_sprite.gmap.blvlmap) { frm_sprite.gmap.worldsvr.on_dmg(frm_sprite, tar_sprite, total_dmg); } } if (direct_dmg) { frm_sprite.calc_weapon_dura(total_dmg); // 计算装备耐久损耗 frm_sprite.on_make_direct_dmg(); } } if (direct_dmg) { tar_sprite.calc_eqp_dura(total_dmg); // 计算装备耐久损耗 // 计算双倍伤害 if (pl.dobrate > 0) { var judg = Utility.random(0, 1000); if (judg < pl.dobrate) { total_dmg += total_dmg; ret["dobdmg"] = true; } } } // 吸收伤害 total_dmg = pl_absorb_dmg(tar_sprite, tar_pl, total_dmg); // 魔法抵扣生命 total_dmg = pl_hpdmg_2_mpdmg(tar_sprite, tar_pl, total_dmg); // 伤害链接 pl_dmg_link(tar_sprite, tar_pl, total_dmg); } if (is_pvp && total_dmg > 0) { var pkignore_dp = false;//无视dp var pkigdp_rate = pl.pkigdp_rate - tar_pl.pkigdp_rate_debuffs; if (pkigdp_rate > 0) { var judg = Utility.random(0, 1000); pkignore_dp = judg < pkigdp_rate; } if (!pkignore_dp) { if (tar_pl.dp < total_dmg) { var dp_dmg = tar_pl.dp; tar_pl.dp = 0; //剩余值 10倍作用于hp total_dmg = ((total_dmg - dp_dmg));//*tar_sprite.game_conf.ply_hp_dmg_factor); tar_pl.hp -= (int)total_dmg; if (tar_pl.hp < 0) tar_pl.hp = 0; ret["dp_dmg"] = dp_dmg; } else { tar_pl.dp -= (int)total_dmg; if (tar_pl.dp > tar_pl.max_dp) tar_pl.dp = tar_pl.max_dp; ret["dp_dmg"] = total_dmg; total_dmg = 0; } } else { //剩余值 10倍作用于hp total_dmg = (total_dmg * 10);//tar_sprite.game_conf.ply_hp_dmg_factor); tar_pl.hp -= (int)total_dmg; if (tar_pl.hp < 0) tar_pl.hp = 0; } //sys.trace( sys.SLT_DETAIL, "tar_pl.cid =" + tar_pl.cid + " tar_pl.dp = " + tar_pl.dp + " tar_pl.hp = " + tar_pl.hp + "\n"); } else { tar_pl.hp -= (int)total_dmg; if (tar_pl.hp < 0) tar_pl.hp = 0; if (tar_pl.hp > tar_pl.max_hp) tar_pl.hp = tar_pl.max_hp; } // broadcast hpchange msg //tar_sprite.broad_cast_zone_msg_and_self(26, {iid=tar_pl.iid, hpchange={hpadd=-total_dmg, die=(tar_pl.hp <= 0), frm_iid=pl.iid}}); ret["isdie"] = (tar_pl.hp <= 0); ret["dmg"] = total_dmg; //if(tar_pl.cid >0) //{ // var tid = team.get_ply_teamid(tar_pl.cid); // if(tid > 0) // { // // 在队伍中,发送队友属性变化消息 // if( is_pvp ) // { // team_bcast_rpc_except(tid, 138, {cid=tar_pl.cid, hp=tar_pl.hp, dp=tar_pl.dp}, tar_pl.sid); // } // else // { // team_bcast_rpc_except(tid, 138, {cid=tar_pl.cid, hp=tar_pl.hp}, tar_pl.sid); // } // } //} if (tar_pl.hp <= 0) { // die! tar_sprite.die(frm_sprite); } //目标死亡,本次伤害不反弹 if (frm_sprite != null && real_atk_dmg > 0 && tar_pl.iid != pl.iid && tar_pl.hp > 0) { // 反弹伤害 double dmg = 0; if (tar_pl.rev_dmg_mul > 0) { dmg = (real_atk_dmg * ((tar_pl.rev_dmg_mul) / 1000.0)); if (dmg <= 0) dmg = 1; } if (tar_pl.rev_atk > 0) { var judg = Utility.random(0, 1000); if (judg < tar_pl.rev_atk) { dmg += real_atk_dmg; } } //if(is_pvp) //{ // dmg = (dmg * combat_conf.pk_dmg_per/100); //} if (dmg > 0) { // 吸收伤害 dmg = pl_absorb_dmg(frm_sprite, pl, dmg); // 魔法抵扣生命 dmg = pl_hpdmg_2_mpdmg(frm_sprite, pl, dmg); frm_sprite.onhate(tar_sprite, dmg); frm_sprite.ondmg(tar_sprite, dmg); //var frm_hpchange = {frm_iid=tar_pl.iid} if (is_pvp) { //sys.trace( sys.SLT_DETAIL, "pl.dp =" + pl.dp + "pl.hp = "+ pl.hp + "\n"); if (pl.dp < dmg) { var dp_dmg = pl.dp; pl.dp = 0; //剩余值 10倍作用于hp dmg = ((dmg - dp_dmg));//*tar_sprite.game_conf.ply_hp_dmg_factor); pl.hp -= (int)dmg; if (pl.hp < 0) pl.hp = 0; //frm_hpchange.dpadd <- -dp_dmg; //frm_hpchange.hpadd <- -dmg; //frm_hpchange.die <- pl.hp <= 0; } else { pl.dp -= (int)dmg; //frm_hpchange.dpadd <- -dmg; } //sys.dumpobj( frm_hpchange ); } else { pl.hp -= (int)dmg; if (pl.hp < 0) pl.hp = 0; //frm_hpchange.hpadd <- -dmg; //frm_hpchange.die <- pl.hp <= 0; } // broadcast hpchange msg //frm_sprite.broad_cast_zone_msg_and_self(26, {iid=pl.iid, hpchange=frm_hpchange}); //if(pl.cid > 0) ////if("cid" in pl) //{ // var tid = team.get_ply_teamid(pl.cid); // if(tid > 0) // { // // 在队伍中,发送队友属性变化消息 // if ( is_pvp ) // { // team_bcast_rpc_except(tid, 138, {cid=pl.cid, hp=pl.hp, dp=pl.dp}, pl.sid); // } // else // { // team_bcast_rpc_except(tid, 138, {cid=pl.cid, hp=pl.hp}, pl.sid); // } // } //} if (pl.hp <= 0) { // 被弹死了 frm_sprite.die(tar_sprite); } } } } // 魔法值、怒气值调整 var mpchanged = false; //var mpchange_rpc = {}; if (damage.mp_dmg != 0) { var mpdmg = (damage.mp_dmg * per / 1000); tar_pl.mp -= mpdmg; if (tar_pl.mp < 0) tar_pl.mp = 0; if (tar_pl.mp > tar_pl.max_mp) tar_pl.mp = tar_pl.max_mp; //mpchange_rpc.mpadd <- -mpdmg; mpchanged = true; if (frm_sprite != null) { tar_sprite.onhate(frm_sprite, mpdmg); } } if (mpchanged && tar_sprite.get_sprite_type() == map_sprite_type.MstPlayer) { // send mpchange msg //::send_rpc(tar_pl.sid, 32, mpchange_rpc); } return ret; }
// Use this for initialization void Start() { source = GameObject.Find("Sound Manager").GetComponent <AudioSource> (); healthbar = GameObject.Find("healthbar").GetComponent <damage> (); wintime = GameObject.FindGameObjectWithTag("Slider").GetComponent <Antibody> (); }
private void Start() { driver = gameObject.GetComponent <CharacterDriver>(); weapon = childProjectile.GetComponent <damage>(); left = Random.value >= .5; }
// Use this for initialization void Start() { //get references to the child objects pearlOffset = transform.GetChild (0).gameObject; //get reference to the sprite renderer located on the pearlOffset child object pearlRenderer = pearlOffset.GetComponent<SpriteRenderer>(); playerStateScript = gameObject.GetComponent<player_state>(); numberOfPlatformsTouching = 0; damageScript = GetComponent<damage> (); rBody = GetComponent<Rigidbody2D> (); scoreScript = GameObject.FindGameObjectWithTag("Score_Keeper").GetComponent<score_keeper>(); statusAnim = GetComponent<Animator> (); soundPlayer = GameObject.FindGameObjectWithTag ("Sound_Player").GetComponent<sound_player>(); }