Mercurial > mm7
diff CastSpellInfo.cpp @ 2188:0ae56373cc35
CastSpell continue
author | Ritor1 |
---|---|
date | Tue, 28 Jan 2014 22:41:49 +0600 |
parents | 9856c2f8f918 |
children | 0e2bee275f60 |
line wrap: on
line diff
--- a/CastSpellInfo.cpp Tue Jan 28 17:25:58 2014 +0600 +++ b/CastSpellInfo.cpp Tue Jan 28 22:41:49 2014 +0600 @@ -2864,7 +2864,6 @@ } case SPELL_LIGHT_PRISMATIC_LIGHT://Свет призмы { - //v67 = 2; if ( uCurrentlyLoadedLevelType == LEVEL_Outdoor) { ShowStatusBarString(pGlobalTXT_LocalizationStrings[497], 2); // Can't cast Prismatic Light outdoors! @@ -2874,7 +2873,7 @@ } if ( !pPlayer->CanCastSpell(uRequiredMana) ) break; - v531 = pRenderer->_46А6АС_GetActorsInViewport(4096); + int mon_num = pRenderer->_46А6АС_GetActorsInViewport(4096); ++pSpellSprite.uType; v694.x = 0; v694.y = 0; @@ -2891,233 +2890,205 @@ pSpellSprite.uFacing = 0; pSpellSprite.spell_caster_pid = PID(OBJECT_Player, pCastSpell->uPlayerID); pSpellSprite.uSoundID = LOWORD(pCastSpell->sound_id); - a2 = 0; - if ( (signed int)v531 > 0 ) - { - do - { - v533 = _50BF30_actors_in_viewport_ids[a2]; - pSpellSprite.vPosition.x = pActors[v533].vPosition.x; - pSpellSprite.vPosition.y = pActors[v533].vPosition.y; - pSpellSprite.vPosition.z = pActors[v533].vPosition.z - (unsigned int)(signed __int64)((double)pActors[v533].uActorHeight * -0.8); - pSpellSprite.spell_target_pid = PID(OBJECT_Actor, _50BF30_actors_in_viewport_ids[a2]); - v535 = pSpellSprite.Create(0, 0, 0, 0); - v536 = a2; - DamageMonsterFromParty(PID(OBJECT_Item, v535), _50BF30_actors_in_viewport_ids[a2], &v694); - a2 = v536 + 1; - } - while ( v536 + 1 < (signed int)v531 ); - } - v537 = pGame->GetStru6(); - pGame->GetStru6()->_4A8BFC(); - LODWORD(v727) = 1; - break; - } - case SPELL_LIGHT_DAY_OF_PROTECTION: - { - switch (skill_level) - { - case 1: LODWORD(v733) = 14400 * spell_level; amount = 4 * spell_level; break; - case 2: LODWORD(v733) = 14400 * spell_level; amount = 4 * spell_level; break; - case 3: LODWORD(v733) = 14400 * spell_level; amount = 4 * spell_level; break; - case 4: LODWORD(v733) = 18000 * spell_level; amount = 5 * spell_level; break; - default: - assert(false); - } - v730 = LODWORD(v733); - if ( !pPlayer->CanCastSpell(uRequiredMana) ) - break; - - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 0); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 1); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 2); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 3); - - v732 = v730 << 7; - v549 = (double)(v730 << 7) * 0.033333335; - *((float *)&v733 + 1) = v549; - v712 = (signed __int64)v549; - pParty->pPartyBuffs[PARTY_BUFF_RESIST_BODY].Apply(pParty->uTimePlayed + (signed __int64)v549, skill_level, amount, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_RESIST_MIND].Apply(pParty->uTimePlayed + v712, skill_level, amount, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_RESIST_FIRE].Apply(pParty->uTimePlayed + v712, skill_level, amount, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_RESIST_WATER].Apply(pParty->uTimePlayed + v712, skill_level, amount, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_RESIST_AIR].Apply(pParty->uTimePlayed + v712, skill_level, amount, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_RESIST_EARTH].Apply(pParty->uTimePlayed + v712, skill_level, amount, 0, 0); - v550 = spell_level + 5; - pParty->pPartyBuffs[PARTY_BUFF_FEATHER_FALL].Apply( - (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)), - skill_level, - v550, 0, 0); - - pParty->pPartyBuffs[PARTY_BUFF_WIZARD_EYE].Apply((signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)), skill_level, v550, 0, 0); - LODWORD(v727) = 1; - break; - } - case SPELL_LIGHT_HOUR_OF_POWER: - { - switch (skill_level) - { - case 1: LODWORD(v733) = 4; amount = 4; break; - case 2: LODWORD(v733) = 4; amount = 4; break; - case 3: LODWORD(v733) = 12; amount = 12; break; - case 4: LODWORD(v733) = 20; amount = 15; break; - default: - assert(false); - } - if ( !pPlayer->CanCastSpell(uRequiredMana) ) - break; - y = (char *)(60 * (spell_level * LODWORD(v733) + 60)); - v732 = (300 * amount * spell_level + 60) << 7; - v730 = spell_level + 5; - int _v726 = 0; - v553 = pParty->pPlayers.data();//[0].pConditions[1]; - *((float *)&v733) = (double)v732 * 0.033333335; - do - { - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 0); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 1); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 2); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 3); - - //((SpellBuff *)(v553 + 6056))->Apply( - v553->pPlayerBuffs[4].Apply((signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733)), skill_level, v730, 0, 0); - if ( *(_QWORD *)v553 ) - _v726 = 1; - ++v553; - } - while ( v553 <= &pParty->pPlayers[3] ); - v562 = skill_level; - pParty->pPartyBuffs[PARTY_BUFF_HEROISM].Apply((signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733)), skill_level, v730, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_SHIELD].Apply((signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733)), v562, 0, 0, 0); - pParty->pPartyBuffs[PARTY_BUFF_STONE_SKIN].Apply((signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733)), v562, v730, 0, 0); - if (!_v726) - { - pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply((signed __int64)((double)(signed int)((int)y << 7) * 0.033333335 + (double)(signed __int64)pParty->uTimePlayed), v562, v730, 0, 0); - } - LODWORD(v727) = 1; - break; - } - case SPELL_LIGHT_DIVINE_INTERVENTION://Божественное вмешательство - { - amount = 3; - if ( pPlayer->uNumDivineInterventionCastsThisDay >= 3 ) - { - ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed - pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); - pCastSpell->uSpellID = 0; - continue; - } - if ( !pPlayer->CanCastSpell(uRequiredMana) ) - break; - for ( uint pl_id = 0; pl_id < 4; pl_id++ ) - { - for ( v563 = 0; v563 <= 19; v563++) - { - LODWORD(pPlayers[pl_id]->pConditions[v563]) = 0; - HIDWORD(pPlayers[pl_id]->pConditions[v563]) = 0; - } - pPlayers[pl_id]->sHealth = pPlayers[pl_id]->GetMaxHealth(); - pPlayers[pl_id]->sMana = pPlayers[pl_id]->GetMaxMana(); - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, pl_id); - } - if ( pPlayer->sAgeModifier + 10 >= 120 ) - pPlayer->sAgeModifier = 120; - else - pPlayer->sAgeModifier = pPlayer->sAgeModifier + 10; - sRecoveryTime += -5 * spell_level; - ++pPlayer->uNumDivineInterventionCastsThisDay; - LODWORD(v727) = 1; - break; - } - case SPELL_DARK_REANIMATE: - { - switch (skill_level) - { - case 1: amount = 2 * spell_level; break; - case 2: amount = 3 * spell_level; break; - case 3: amount = 4 * spell_level; break; - case 4: amount = 5 * spell_level; break; - default: - assert(false); - } - if ( !pPlayer->CanCastSpell(uRequiredMana) ) - break; - v576 = pCastSpell->spell_target_pid; - if (!v576) - { - v585 = (char *)&pParty->pPlayers[pCastSpell->uPlayerID_2]; - pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, pCastSpell->uPlayerID_2); - if ( *((_QWORD *)v585 + 14) ) - { - ((Player *)v585)->SetCondition(0x11u, 1); - v587 = ((Player *)v585)->GetSexByVoice(); - ReloadPlayerPortraits(pCastSpell->uPlayerID_2, (v587 != 0) + 23); - *((_QWORD *)v585 + 17) = pParty->uTimePlayed; - } - break; - } - v577 = (Player *)(PID_ID(v576)); - //v726 = v577; - if ( v577 == (Player *)-1 ) - { - ShowStatusBarString(pGlobalTXT_LocalizationStrings[496], 2); // No valid target exists! - pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); - pCastSpell->uSpellID = 0; - continue; - } - v578 = (int)&pActors[(int)v577]; - v721 = v578; - if ( *(short *)(v578 + 40) > 0 || (v579 = *(short *)(v578 + 176), v579 != 5) && v579 != 4 ) - { - ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed - pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); - pCastSpell->uSpellID = 0; - continue; - } - ++pSpellSprite.uType; - pSpellSprite.stru_24.Reset(); - pSpellSprite.spell_id = pCastSpell->uSpellID; - pSpellSprite.spell_level = spell_level; - pSpellSprite.spell_skill = skill_level; - pSpellSprite.uObjectDescID = pObjectList->ObjectIDByItemID(pSpellSprite.uType); - pSpellSprite.uAttributes = 0; - pSpellSprite.uSectorID = 0; - pSpellSprite.uSpriteFrameID = 0; - pSpellSprite.field_60_distance_related_prolly_lod = 0; - v581 = v721; - pSpellSprite.uFacing = 0; - pSpellSprite.spell_caster_pid = PID(OBJECT_Player, pCastSpell->uPlayerID); - pSpellSprite.uSoundID = LOWORD(pCastSpell->sound_id); - pSpellSprite.vPosition.x = *(short *)(v721 + 142); - pSpellSprite.vPosition.y = *(short *)(v721 + 144); - v732 = *(short *)(v721 + 138); - pSpellSprite.vPosition.z = *(short *)(v721 + 146) - (unsigned int)(signed __int64)((double)v732 * -0.8); - pSpellSprite.spell_target_pid = PID(OBJECT_Actor, (int)v577); - pSpellSprite.Create(0, 0, 0, 0); - if ( *(char *)(v581 + 52) > amount ) - break; - Actor::Resurrect((unsigned int)v577); - *(char *)(v581 + 61) = 0; - *(char *)(v581 + 53) = 0; - *(char *)(v581 + 54) = 0; - *(char *)(v581 + 55) = 0; - *(char *)(v581 + 56) = 0; - *(char *)(v581 + 57) = 0; - *(int *)(v581 + 712) = 9999; - *(char *)(v581 + 38) &= 0xF7u; - *(int *)(v581 + 708) = 0; - ((SpellBuff *)(v581 + 356))->Reset(); - ((SpellBuff *)(v581 + 228))->Reset(); - ((SpellBuff *)(v581 + 404))->Reset(); - if ( *(short *)(v581 + 40) > 10 * amount ) - *(short *)(v581 + 40) = 10 * amount; - LODWORD(v727) = 1; - break; - } - case SPELL_DARK_VAMPIRIC_WEAPON: - { - amount = 16; - if ( skill_level == 4 ) + for ( uint mon_id = 0; mon_id < mon_num; mon_id++ ) + { + pSpellSprite.vPosition.x = pActors[_50BF30_actors_in_viewport_ids[mon_id]].vPosition.x; + pSpellSprite.vPosition.y = pActors[_50BF30_actors_in_viewport_ids[mon_id]].vPosition.y; + pSpellSprite.vPosition.z = pActors[_50BF30_actors_in_viewport_ids[mon_id]].vPosition.z - + (unsigned int)(signed __int64)((double)pActors[_50BF30_actors_in_viewport_ids[mon_id]].uActorHeight * -0.8); + pSpellSprite.spell_target_pid = PID(OBJECT_Actor, _50BF30_actors_in_viewport_ids[mon_id]); + DamageMonsterFromParty(PID(OBJECT_Item, pSpellSprite.Create(0, 0, 0, 0)), _50BF30_actors_in_viewport_ids[mon_id], &v694); + } + //v537 = pGame->GetStru6(); + pGame->GetStru6()->_4A8BFC(); + LODWORD(v727) = 1; + break; + } + case SPELL_LIGHT_DAY_OF_PROTECTION://День защиты + { + switch (skill_level) + { + case 1: duration = 14400 * spell_level; amount = 4 * spell_level; break; + case 2: duration = 14400 * spell_level; amount = 4 * spell_level; break; + case 3: duration = 14400 * spell_level; amount = 4 * spell_level; break; + case 4: duration = 18000 * spell_level; amount = 5 * spell_level; break; + default: + assert(false); + } + if ( !pPlayer->CanCastSpell(uRequiredMana) ) + break; + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 0); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 1); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 2); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 3); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_BODY].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_MIND].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_FIRE].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_WATER].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_AIR].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_RESIST_EARTH].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, amount, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_FEATHER_FALL].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_WIZARD_EYE].Apply(pParty->uTimePlayed + + (signed __int64)((double)(duration << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + LODWORD(v727) = 1; + break; + } + case SPELL_LIGHT_HOUR_OF_POWER: //Час могущества + { + switch (skill_level) + { + case 1: duration = 4; amount = 4; break; + case 2: duration = 4; amount = 4; break; + case 3: duration = 12; amount = 12; break; + case 4: duration = 20; amount = 15; break; + default: + assert(false); + } + if ( !pPlayer->CanCastSpell(uRequiredMana) ) + break; + bool player_weak = false; + for ( uint pl_id = 0; pl_id < 4; pl_id++ ) + { + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 0); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 1); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 2); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, 3); + pParty->pPlayers[pl_id].pPlayerBuffs[PLAYER_BUFF_BLESS].Apply(pParty->uTimePlayed + + (signed __int64)((double)((300 * amount * spell_level + 60) << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + if ( pParty->pPlayers[pl_id].pConditions[Condition_Weak] ) + player_weak = true; + } + pParty->pPartyBuffs[PARTY_BUFF_HEROISM].Apply(pParty->uTimePlayed + + (signed __int64)((double)((300 * amount * spell_level + 60) << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_SHIELD].Apply(pParty->uTimePlayed + + (signed __int64)((double)((300 * amount * spell_level + 60) << 7) * 0.033333335), skill_level, 0, 0, 0); + pParty->pPartyBuffs[PARTY_BUFF_STONE_SKIN].Apply(pParty->uTimePlayed + + (signed __int64)((double)((300 * amount * spell_level + 60) << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + if ( !player_weak ) + pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply(pParty->uTimePlayed + + (signed __int64)((double)((60 * (spell_level * duration + 60)) << 7) * 0.033333335), skill_level, spell_level + 5, 0, 0); + LODWORD(v727) = 1; + break; + } + case SPELL_LIGHT_DIVINE_INTERVENTION://Божественное вмешательство + { + //amount = 3; + if ( pPlayer->uNumDivineInterventionCastsThisDay >= 3 ) + { + ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed + pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); + pCastSpell->uSpellID = 0; + continue; + } + if ( !pPlayer->CanCastSpell(uRequiredMana) ) + break; + for ( uint pl_id = 0; pl_id < 4; pl_id++ ) + { + for ( uint buff_id = 0; buff_id <= 19; buff_id++ ) + pParty->pPlayers[pl_id].pConditions[buff_id] = 0; + pParty->pPlayers[pl_id].sHealth = pParty->pPlayers[pl_id].GetMaxHealth(); + pParty->pPlayers[pl_id].sMana = pParty->pPlayers[pl_id].GetMaxMana(); + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, pl_id); + } + if ( pPlayer->sAgeModifier + 10 >= 120 ) + pPlayer->sAgeModifier = 120; + else + pPlayer->sAgeModifier = pPlayer->sAgeModifier + 10; + sRecoveryTime += -5 * spell_level; + ++pPlayer->uNumDivineInterventionCastsThisDay; + LODWORD(v727) = 1; + break; + } + case SPELL_DARK_REANIMATE: //Реанимация + { + switch (skill_level) + { + case 1: amount = 2 * spell_level; break; + case 2: amount = 3 * spell_level; break; + case 3: amount = 4 * spell_level; break; + case 4: amount = 5 * spell_level; break; + default: + assert(false); + } + if ( !pPlayer->CanCastSpell(uRequiredMana) ) + break; + if (!pCastSpell->spell_target_pid) + { + pGame->GetStru6()->SetPlayerBuffAnim(pCastSpell->uSpellID, pCastSpell->uPlayerID_2); + if ( pParty->pPlayers[pCastSpell->uPlayerID_2].pConditions[Condition_Dead] ) + { + pParty->pPlayers[pCastSpell->uPlayerID_2].SetCondition(Condition_Zombie, 1); + ReloadPlayerPortraits(pCastSpell->uPlayerID_2, (pParty->pPlayers[pCastSpell->uPlayerID_2].GetSexByVoice() != 0) + 23); + pParty->pPlayers[pCastSpell->uPlayerID_2].pConditions[Condition_Zombie] = pParty->uTimePlayed; + } + break; + } + mon_id = PID_ID(pCastSpell->spell_target_pid); + if ( mon_id == -1 ) + { + ShowStatusBarString(pGlobalTXT_LocalizationStrings[496], 2); // No valid target exists! + pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); + pCastSpell->uSpellID = 0; + continue; + } + if ( pActors[mon_id].sCurrentHP > 0 + || pActors[mon_id].uAIState != Dead && pActors[mon_id].uAIState != Dying ) + { + ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2); // Spell failed + pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0); + pCastSpell->uSpellID = 0; + continue; + } + ++pSpellSprite.uType; + pSpellSprite.stru_24.Reset(); + pSpellSprite.spell_id = pCastSpell->uSpellID; + pSpellSprite.spell_level = spell_level; + pSpellSprite.spell_skill = skill_level; + pSpellSprite.uObjectDescID = pObjectList->ObjectIDByItemID(pSpellSprite.uType); + pSpellSprite.uAttributes = 0; + pSpellSprite.uSectorID = 0; + pSpellSprite.uSpriteFrameID = 0; + pSpellSprite.field_60_distance_related_prolly_lod = 0; + pSpellSprite.uFacing = 0; + pSpellSprite.spell_caster_pid = PID(OBJECT_Player, pCastSpell->uPlayerID); + pSpellSprite.uSoundID = LOWORD(pCastSpell->sound_id); + pSpellSprite.vPosition.x = pActors[mon_id].vPosition.x; + pSpellSprite.vPosition.y = pActors[mon_id].vPosition.y; + pSpellSprite.vPosition.z = pActors[mon_id].vPosition.z - + (unsigned int)(signed __int64)((double)pActors[mon_id].uActorHeight * -0.8); + pSpellSprite.spell_target_pid = PID(OBJECT_Actor, mon_id); + pSpellSprite.Create(0, 0, 0, 0); + if ( pActors[mon_id].pMonsterInfo.uLevel > amount ) + break; + Actor::Resurrect(mon_id); + pActors[mon_id].pMonsterInfo.uHostilityType = (MonsterInfo::HostilityRadius)0; + pActors[mon_id].pMonsterInfo.uTreasureDropChance = 0; + pActors[mon_id].pMonsterInfo.uTreasureDiceRolls = 0; + pActors[mon_id].pMonsterInfo.uTreasureDiceSides = 0; + pActors[mon_id].pMonsterInfo.uTreasureLevel = 0; + pActors[mon_id].pMonsterInfo.uTreasureType = 0; + pActors[mon_id].uAlly = 9999; + pActors[mon_id].uAttributes &= 0xF70000; + pActors[mon_id].uGroup = 0; + pActors[mon_id].pActorBuffs[ACTOR_BUFF_BERSERK].Reset(); + pActors[mon_id].pActorBuffs[ACTOR_BUFF_CHARM].Reset(); + pActors[mon_id].pActorBuffs[ACTOR_BUFF_ENSLAVED].Reset(); + if ( pActors[mon_id].sCurrentHP > 10 * amount ) + pActors[mon_id].sCurrentHP = 10 * amount; + LODWORD(v727) = 1; + break; + } + case SPELL_DARK_VAMPIRIC_WEAPON:// Оружие-вампир + { + amount = 16; + if ( skill_level == 4 ) { LODWORD(v733) = 0; }