Wortel Angels
Members-
Posts
1150 -
Joined
-
Last visited
Never
Content Type
Profiles
Forums
Calendar
Everything posted by Wortel Angels
-
lol >.< Here is all over the other an really Quest Mix :D But without fruits :( haha
-
Thanks :D If anyone have trouble with this ask Justn hes the best *.* haha
-
Compile error… Method or Data member not found > If NpcX = GetPlayerX(attacker) Then > If NpcY = GetPlayerY(attacker) Then > > If NPC(npcNum).Behaviour = NPC_BEHAVIOUR_FRIENDLY Then > Call CheckTasks(attacker, QUEST_TYPE_GOTALK, npcNum) > Call CheckTasks(attacker, QUEST_TYPE_GOGIVE, npcNum) > Call CheckTasks(attacker, QUEST_TYPE_GOGET, npcNum) > If NPC(npcNum).Quest = YES Then > If CanStartQuest(attacker, NPC(npcNum).QuestNum) Then > 'if can start show the request message (chat1) > QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(1)), NPC(npcNum).QuestNum > Exit Function > End If > If QuestInProgress(attacker, NPC(npcNum).QuestNum) Then > 'if the quest is in progress show the meanwhile message (chat2) > PlayerMsg attacker, Trim$(NPC(npcNum).Name) + ": " + Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), BrightGreen > 'QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), 0 > Exit Function > End If > End If > If NPC(npcNum).Quest = NO Then > If NPC(npcNum)**.Convo** = False Then > If Len(Trim$(NPC(npcNum).AttackSay)) > 0 Then > PlayerMsg attacker, Trim$(NPC(npcNum).Name) & ": " & Trim$(NPC(npcNum).AttackSay), White > End If > Else > InitChat attacker, mapnum, mapNpcNum > End If > Exit Function > End If > End If > > CanPlayerAttackNpc = True > End If > > End If > End If > End If > End Function
-
>! Option Explicit >! ' ################################ ' ## Basic Calculations ## ' ################################ >! Function GetPlayerMaxVital(ByVal Index As Long, ByVal Vital As Vitals) As Long 'Mortal Angels Dim i As Long '/Mortal Angels If Index > MAX_PLAYERS Then Exit Function Select Case Vital Case HP Select Case GetPlayerClass(Index) Case 1 ' Warrior GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Endurance) / 2)) * 15 + 150 Case 2 ' Mage GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Endurance) / 2)) * 5 + 65 Case Else ' Anything else - Warrior by default GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Endurance) / 2)) * 15 + 150 End Select 'Mortal Angels For i = 1 To 10 If TempPlayer(Index).Buffs(i) = BUFF_ADD_HP Then GetPlayerMaxVital = GetPlayerMaxVital + TempPlayer(Index).BuffValue(i) >! End If If TempPlayer(Index).Buffs(i) = BUFF_SUB_HP Then GetPlayerMaxVital = GetPlayerMaxVital - TempPlayer(Index).BuffValue(i) End If Next '/Mortal Angels Case MP Select Case GetPlayerClass(Index) Case 1 ' Warrior GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Intelligence) / 2)) * 5 + 25 Case 2 ' Mage GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Intelligence) / 2)) * 30 + 85 Case Else ' Anything else - Warrior by default GetPlayerMaxVital = ((GetPlayerLevel(Index) / 2) + (GetPlayerStat(Index, Intelligence) / 2)) * 5 + 25 End Select 'Mortal Angels For i = 1 To 10 If TempPlayer(Index).Buffs(i) = BUFF_ADD_MP Then GetPlayerMaxVital = GetPlayerMaxVital + TempPlayer(Index).BuffValue(i) End If If TempPlayer(Index).Buffs(i) = BUFF_SUB_MP Then GetPlayerMaxVital = GetPlayerMaxVital - TempPlayer(Index).BuffValue(i) End If Next '/Mortal Angels End Select End Function >! Function GetPlayerVitalRegen(ByVal Index As Long, ByVal Vital As Vitals) As Long Dim i As Long >! ' Prevent subscript out of range If IsPlaying(Index) = False Or Index MAX_PLAYERS Then GetPlayerVitalRegen = 0 Exit Function End If >! Select Case Vital Case HP i = (GetPlayerStat(Index, Stats.Willpower) * 0.8) + 6 Case MP i = (GetPlayerStat(Index, Stats.Willpower) / 4) + 12.5 End Select >! If i < 2 Then i = 2 GetPlayerVitalRegen = i End Function >! Function GetPlayerDamage(ByVal Index As Long) As Long 'Mortal Angels Dim i As Long '/Mortal Angels Dim weaponNum As Long GetPlayerDamage = 0 >! ' Check for subscript out of range If IsPlaying(Index) = False Or Index MAX_PLAYERS Then Exit Function End If If GetPlayerEquipment(Index, Weapon) > 0 Then weaponNum = GetPlayerEquipment(Index, Weapon) GetPlayerDamage = 0.085 * 5 * GetPlayerStat(Index, Strength) * Item(weaponNum).Data2 + (GetPlayerLevel(Index) / 5) Else GetPlayerDamage = 0.085 * 5 * GetPlayerStat(Index, Strength) + (GetPlayerLevel(Index) / 5) End If For i = 1 To 10 If TempPlayer(Index).Buffs(i) = BUFF_ADD_ATK Then GetPlayerDamage = GetPlayerDamage + TempPlayer(Index).BuffValue(i) End If If TempPlayer(Index).Buffs(i) = BUFF_SUB_ATK Then GetPlayerDamage = GetPlayerDamage - TempPlayer(Index).BuffValue(i) End If Next End Function 'Mortal Angels Function GetPlayerDef(ByVal Index As Long) As Long Dim i As Long Dim DefNum As Long Dim Def As Long GetPlayerDef = 0 Def = 0 ' Check for subscript out of range If IsPlaying(Index) = False Or Index MAX_PLAYERS Then Exit Function End If If GetPlayerEquipment(Index, Armor) > 0 Then DefNum = GetPlayerEquipment(Index, Armor) Def = Def + Item(DefNum).Data2 End If If GetPlayerEquipment(Index, Helmet) > 0 Then DefNum = GetPlayerEquipment(Index, Helmet) Def = Def + Item(DefNum).Data2 End If If GetPlayerEquipment(Index, Shield) > 0 Then DefNum = GetPlayerEquipment(Index, Shield) Def = Def + Item(DefNum).Data2 End If If Not GetPlayerEquipment(Index, Armor) > 0 And Not GetPlayerEquipment(Index, Helmet) > 0 And Not GetPlayerEquipment(Index, Shield) > 0 Then GetPlayerDef = 0.085 * GetPlayerStat(Index, Endurance) + (GetPlayerLevel(Index) / 5) Else GetPlayerDef = 0.085 * GetPlayerStat(Index, Endurance) * Def + (GetPlayerLevel(Index) / 5) End If For i = 1 To 10 If TempPlayer(Index).Buffs(i) = BUFF_ADD_DEF Then GetPlayerDef = GetPlayerDef + TempPlayer(Index).BuffValue(i) End If If TempPlayer(Index).Buffs(i) = BUFF_SUB_DEF Then GetPlayerDef = GetPlayerDef - TempPlayer(Index).BuffValue(i) End If Next End Function '/Mortal Angels Function GetNpcMaxVital(ByVal npcNum As Long, ByVal Vital As Vitals) As Long Dim x As Long >! ' Prevent subscript out of range If npcNum MAX_NPCS Then GetNpcMaxVital = 0 Exit Function End If >! Select Case Vital Case HP GetNpcMaxVital = NPC(npcNum).HP Case MP GetNpcMaxVital = 30 + (NPC(npcNum).Stat(Intelligence) * 10) + 2 End Select >! End Function >! Function GetNpcVitalRegen(ByVal npcNum As Long, ByVal Vital As Vitals) As Long Dim i As Long >! 'Prevent subscript out of range If npcNum MAX_NPCS Then GetNpcVitalRegen = 0 Exit Function End If >! Select Case Vital Case HP i = (NPC(npcNum).Stat(Stats.Willpower) * 0.8) + 6 Case MP i = (NPC(npcNum).Stat(Stats.Willpower) / 4) + 12.5 End Select GetNpcVitalRegen = i >! End Function >! Function GetNpcDamage(ByVal npcNum As Long) As Long GetNpcDamage = 0.085 * 5 * NPC(npcNum).Stat(Stats.Strength) * NPC(npcNum).Damage + (NPC(npcNum).Level / 5) End Function >! ' ############################### ' ## Luck-based rates ## ' ############################### >! Public Function CanPlayerBlock(ByVal Index As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanPlayerBlock = False >! rate = 0 ' TODO : make it based on shield lulz End Function >! Public Function CanPlayerCrit(ByVal Index As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanPlayerCrit = False >! rate = GetPlayerStat(Index, Agility) / 52.08 rndNum = RAND(1, 100) If rndNum ! Public Function CanPlayerDodge(ByVal Index As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanPlayerDodge = False >! rate = GetPlayerStat(Index, Agility) / 83.3 rndNum = RAND(1, 100) If rndNum ! Public Function CanPlayerParry(ByVal Index As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanPlayerParry = False >! rate = GetPlayerStat(Index, Strength) * 0.25 rndNum = RAND(1, 100) If rndNum ! Public Function CanNpcBlock(ByVal npcNum As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanNpcBlock = False >! rate = 0 ' TODO : make it based on shield lol End Function >! Public Function CanNpcCrit(ByVal npcNum As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanNpcCrit = False >! rate = NPC(npcNum).Stat(Stats.Agility) / 52.08 rndNum = RAND(1, 100) If rndNum ! Public Function CanNpcDodge(ByVal npcNum As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanNpcDodge = False >! rate = NPC(npcNum).Stat(Stats.Agility) / 83.3 rndNum = RAND(1, 100) If rndNum ! Public Function CanNpcParry(ByVal npcNum As Long) As Boolean Dim rate As Long Dim rndNum As Long >! CanNpcParry = False >! rate = NPC(npcNum).Stat(Stats.Strength) * 0.25 rndNum = RAND(1, 100) If rndNum ! ' ################################### ' ## Player Attacking NPC ## ' ################################### >! Public Sub TryPlayerAttackNpc(ByVal Index As Long, ByVal mapNpcNum As Long) Dim blockAmount As Long Dim npcNum As Long Dim mapnum As Long Dim Damage As Long >! Damage = 0 >! ' Can we attack the npc? If CanPlayerAttackNpc(Index, mapNpcNum) Then mapnum = GetPlayerMap(Index) npcNum = MapNpc(mapnum).NPC(mapNpcNum).Num ' check if NPC can avoid the attack If CanNpcDodge(npcNum) Then SendActionMsg mapnum, "Dodge!", Pink, 1, (MapNpc(mapnum).NPC(mapNpcNum).x * 32), (MapNpc(mapnum).NPC(mapNpcNum).y * 32) Exit Sub End If If CanNpcParry(npcNum) Then SendActionMsg mapnum, "Parry!", Pink, 1, (MapNpc(mapnum).NPC(mapNpcNum).x * 32), (MapNpc(mapnum).NPC(mapNpcNum).y * 32) Exit Sub End If >! ' Get the damage we can do Damage = GetPlayerDamage(Index) ' if the npc blocks, take away the block amount blockAmount = CanNpcBlock(mapNpcNum) Damage = Damage - blockAmount ' take away armour Damage = Damage - RAND(1, (NPC(npcNum).Stat(Stats.Agility) * 2)) ' randomise from 1 to max hit Damage = RAND(1, Damage) ' * 1.5 if it's a crit! If CanPlayerCrit(Index) Then Damage = Damage * 1.5 SendActionMsg mapnum, "Critical!", BrightCyan, 1, (GetPlayerX(Index) * 32), (GetPlayerY(Index) * 32) End If If Damage > 0 Then Call PlayerAttackNpc(Index, mapNpcNum, Damage) Else Call PlayerMsg(Index, "Your attack does nothing.", BrightRed) End If End If End Sub >! Public Function CanPlayerAttackNpc(ByVal attacker As Long, ByVal mapNpcNum As Long, Optional ByVal IsSpell As Boolean = False) As Boolean Dim mapnum As Long Dim npcNum As Long Dim NpcX As Long Dim NpcY As Long Dim attackspeed As Long >! ' Check for subscript out of range If IsPlaying(attacker) = False Or mapNpcNum MAX_MAP_NPCS Then Exit Function End If >! ' Check for subscript out of range If MapNpc(GetPlayerMap(attacker)).NPC(mapNpcNum).Num ! mapnum = GetPlayerMap(attacker) npcNum = MapNpc(mapnum).NPC(mapNpcNum).Num ' Make sure the npc isn't already dead If MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) ! ' Make sure they are on the same map If IsPlaying(attacker) Then ' exit out early If IsSpell Then If npcNum > 0 Then If NPC(npcNum).Behaviour NPC_BEHAVIOUR_FRIENDLY And NPC(npcNum).Behaviour NPC_BEHAVIOUR_SHOPKEEPER Then CanPlayerAttackNpc = True Exit Function End If End If End If >! ' attack speed from weapon If GetPlayerEquipment(attacker, Weapon) > 0 Then attackspeed = Item(GetPlayerEquipment(attacker, Weapon)).Speed Else attackspeed = 1000 End If >! If npcNum > 0 And GetTickCount > TempPlayer(attacker).AttackTimer + attackspeed Then ' Check if at same coordinates Select Case GetPlayerDir(attacker) Case DIR_UP NpcX = MapNpc(mapnum).NPC(mapNpcNum).x NpcY = MapNpc(mapnum).NPC(mapNpcNum).y + 1 Case DIR_DOWN NpcX = MapNpc(mapnum).NPC(mapNpcNum).x NpcY = MapNpc(mapnum).NPC(mapNpcNum).y - 1 Case DIR_LEFT NpcX = MapNpc(mapnum).NPC(mapNpcNum).x + 1 NpcY = MapNpc(mapnum).NPC(mapNpcNum).y Case DIR_RIGHT NpcX = MapNpc(mapnum).NPC(mapNpcNum).x - 1 NpcY = MapNpc(mapnum).NPC(mapNpcNum).y End Select >! If NpcX = GetPlayerX(attacker) Then If NpcY = GetPlayerY(attacker) Then If NPC(npcNum).Behaviour NPC_BEHAVIOUR_FRIENDLY And NPC(npcNum).Behaviour NPC_BEHAVIOUR_SHOPKEEPER Then CanPlayerAttackNpc = True Else If NPC(npcNum).Behaviour = NPC_BEHAVIOUR_FRIENDLY Then Call CheckTasks(attacker, QUEST_TYPE_GOTALK, npcNum) Call CheckTasks(attacker, QUEST_TYPE_GOGIVE, npcNum) Call CheckTasks(attacker, QUEST_TYPE_GOGET, npcNum) If NPC(npcNum).Quest = YES Then If CanStartQuest(attacker, NPC(npcNum).QuestNum) Then 'if can start show the request message (chat1) QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(1)), NPC(npcNum).QuestNum Exit Function End If If QuestInProgress(attacker, NPC(npcNum).QuestNum) Then 'if the quest is in progress show the meanwhile message (chat2) PlayerMsg attacker, Trim$(NPC(npcNum).Name) + ": " + Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), BrightGreen 'QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), 0 Exit Function End If End If End If If Len(Trim$(NPC(npcNum).AttackSay)) > 0 Then PlayerMsg attacker, Trim$(NPC(npcNum).Name) & ": " & Trim$(NPC(npcNum).AttackSay), White End If End If End If End If End If End If >! End Function >! Public Sub PlayerAttackNpc(ByVal attacker As Long, ByVal mapNpcNum As Long, ByVal Damage As Long, Optional ByVal spellnum As Long, Optional ByVal overTime As Boolean = False) Dim Name As String Dim exp As Long Dim n As Long Dim i As Long Dim STR As Long Dim Def As Long Dim mapnum As Long Dim npcNum As Long Dim Buffer As clsBuffer >! ' Check for subscript out of range If IsPlaying(attacker) = False Or mapNpcNum MAX_MAP_NPCS Or Damage < 0 Then Exit Sub End If >! mapnum = GetPlayerMap(attacker) npcNum = MapNpc(mapnum).NPC(mapNpcNum).Num Name = Trim$(NPC(npcNum).Name) If npcNum < 1 Then Exit Sub ' Check for weapon n = 0 >! If GetPlayerEquipment(attacker, Weapon) > 0 Then n = GetPlayerEquipment(attacker, Weapon) End If ' set the regen timer TempPlayer(attacker).stopRegen = True TempPlayer(attacker).stopRegenTimer = GetTickCount >! If Damage >= MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) Then SendActionMsg GetPlayerMap(attacker), "-" & MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP), BrightRed, 1, (MapNpc(mapnum).NPC(mapNpcNum).x * 32), (MapNpc(mapnum).NPC(mapNpcNum).y * 32) SendBlood GetPlayerMap(attacker), MapNpc(mapnum).NPC(mapNpcNum).x, MapNpc(mapnum).NPC(mapNpcNum).y ' send the sound If spellnum > 0 Then SendMapSound attacker, MapNpc(mapnum).NPC(mapNpcNum).x, MapNpc(mapnum).NPC(mapNpcNum).y, SoundEntity.seSpell, spellnum ' send animation If n > 0 Then If Not overTime Then If spellnum = 0 Then Call SendAnimation(mapnum, Item(GetPlayerEquipment(attacker, Weapon)).Animation, MapNpc(mapnum).NPC(mapNpcNum).x, MapNpc(mapnum).NPC(mapNpcNum).y) End If End If >! ' Calculate exp to give attacker exp = NPC(npcNum).exp >! ' Make sure we dont get less then 0 If exp < 0 Then exp = 1 End If >! ' in party? If TempPlayer(attacker).inParty > 0 Then ' pass through party sharing function Party_ShareExp TempPlayer(attacker).inParty, exp, attacker Else ' no party - keep exp for self GivePlayerEXP attacker, exp End If 'Drop the goods if they get it For n = 1 To MAX_NPC_DROPS If NPC(npcNum).DropItem(n) = 0 Then Exit For >! If Rnd 0 Then If Not overTime Then If spellnum = 0 Then Call SendAnimation(mapnum, Item(GetPlayerEquipment(attacker, Weapon)).Animation, 0, 0, TARGET_TYPE_NPC, mapNpcNum) End If End If >! ' Set the NPC target to the player MapNpc(mapnum).NPC(mapNpcNum).targetType = 1 ' player MapNpc(mapnum).NPC(mapNpcNum).target = attacker >! ' Now check for guard ai and if so have all onmap guards come after'm If NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Behaviour = NPC_BEHAVIOUR_GUARD Then For i = 1 To MAX_MAP_NPCS If MapNpc(mapnum).NPC(i).Num = MapNpc(mapnum).NPC(mapNpcNum).Num Then MapNpc(mapnum).NPC(i).target = attacker MapNpc(mapnum).NPC(i).targetType = 1 ' player End If Next End If ' set the regen timer MapNpc(mapnum).NPC(mapNpcNum).stopRegen = True MapNpc(mapnum).NPC(mapNpcNum).stopRegenTimer = GetTickCount ' if stunning spell, stun the npc If spellnum > 0 Then If Spell(spellnum).StunDuration > 0 Then StunNPC mapNpcNum, mapnum, spellnum ' DoT If Spell(spellnum).Duration > 0 Then AddDoT_Npc mapnum, mapNpcNum, spellnum, attacker End If End If SendMapNpcVitals mapnum, mapNpcNum End If >! If spellnum = 0 Then ' Reset attack timer TempPlayer(attacker).AttackTimer = GetTickCount End If End Sub >! ' ################################### ' ## NPC Attacking Player ## ' ################################### >! Public Sub TryNpcAttackPlayer(ByVal mapNpcNum As Long, ByVal Index As Long) Dim mapnum As Long, npcNum As Long, blockAmount As Long, Damage As Long >! ' Can the npc attack the player? If CanNpcAttackPlayer(mapNpcNum, Index) Then mapnum = GetPlayerMap(Index) npcNum = MapNpc(mapnum).NPC(mapNpcNum).Num ' check if PLAYER can avoid the attack If CanPlayerDodge(Index) Then SendActionMsg mapnum, "Dodge!", Pink, 1, (Player(Index).x * 32), (Player(Index).y * 32) Exit Sub End If If CanPlayerParry(Index) Then SendActionMsg mapnum, "Parry!", Pink, 1, (Player(Index).x * 32), (Player(Index).y * 32) Exit Sub End If >! ' Get the damage we can do Damage = GetNpcDamage(npcNum) ' if the player blocks, take away the block amount blockAmount = CanPlayerBlock(Index) Damage = Damage - blockAmount ' take away armour Damage = Damage - RAND(1, (GetPlayerStat(Index, Agility) * 2)) ' randomise for up to 10% lower than max hit Damage = RAND(1, Damage) ' * 1.5 if crit hit If CanNpcCrit(Index) Then Damage = Damage * 1.5 SendActionMsg mapnum, "Critical!", BrightCyan, 1, (MapNpc(mapnum).NPC(mapNpcNum).x * 32), (MapNpc(mapnum).NPC(mapNpcNum).y * 32) End If 'Mortal Angels Damage = Damage - GetPlayerDef(Index) '/Mortal Angels If Damage > 0 Then Call NpcAttackPlayer(mapNpcNum, Index, Damage) End If End If End Sub >! Function CanNpcAttackPlayer(ByVal mapNpcNum As Long, ByVal Index As Long) As Boolean Dim mapnum As Long Dim npcNum As Long >! ' Check for subscript out of range If mapNpcNum MAX_MAP_NPCS Or Not IsPlaying(Index) Then Exit Function End If >! ' Check for subscript out of range If MapNpc(GetPlayerMap(Index)).NPC(mapNpcNum).Num ! mapnum = GetPlayerMap(Index) npcNum = MapNpc(mapnum).NPC(mapNpcNum).Num >! ' Make sure the npc isn't already dead If MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) ! ' Make sure npcs dont attack more then once a second If GetTickCount < MapNpc(mapnum).NPC(mapNpcNum).AttackTimer + 1000 Then Exit Function End If >! ' Make sure we dont attack the player if they are switching maps If TempPlayer(Index).GettingMap = YES Then Exit Function End If >! MapNpc(mapnum).NPC(mapNpcNum).AttackTimer = GetTickCount >! ' Make sure they are on the same map If IsPlaying(Index) Then If npcNum > 0 Then >! ' Check if at same coordinates If (GetPlayerY(Index) + 1 = MapNpc(mapnum).NPC(mapNpcNum).y) And (GetPlayerX(Index) = MapNpc(mapnum).NPC(mapNpcNum).x) Then CanNpcAttackPlayer = True Else If (GetPlayerY(Index) - 1 = MapNpc(mapnum).NPC(mapNpcNum).y) And (GetPlayerX(Index) = MapNpc(mapnum).NPC(mapNpcNum).x) Then CanNpcAttackPlayer = True Else If (GetPlayerY(Index) = MapNpc(mapnum).NPC(mapNpcNum).y) And (GetPlayerX(Index) + 1 = MapNpc(mapnum).NPC(mapNpcNum).x) Then CanNpcAttackPlayer = True Else If (GetPlayerY(Index) = MapNpc(mapnum).NPC(mapNpcNum).y) And (GetPlayerX(Index) - 1 = MapNpc(mapnum).NPC(mapNpcNum).x) Then CanNpcAttackPlayer = True End If End If End If End If End If End If End Function >! Sub NpcAttackPlayer(ByVal mapNpcNum As Long, ByVal victim As Long, ByVal Damage As Long) Dim Name As String Dim exp As Long Dim mapnum As Long Dim i As Long Dim Buffer As clsBuffer >! ' Check for subscript out of range If mapNpcNum MAX_MAP_NPCS Or IsPlaying(victim) = False Then Exit Sub End If >! ' Check for subscript out of range If MapNpc(GetPlayerMap(victim)).NPC(mapNpcNum).Num ! mapnum = GetPlayerMap(victim) Name = Trim$(NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Name) ' Send this packet so they can see the npc attacking Set Buffer = New clsBuffer Buffer.WriteLong SNpcAttack Buffer.WriteLong mapNpcNum SendDataToMap mapnum, Buffer.ToArray() Set Buffer = Nothing If Damage 0 Then SendPartyVitals TempPlayer(victim).inParty, victim ' send the sound SendMapSound victim, GetPlayerX(victim), GetPlayerY(victim), SoundEntity.seNpc, MapNpc(mapnum).NPC(mapNpcNum).Num ' Say damage SendActionMsg GetPlayerMap(victim), "-" & Damage, BrightRed, 1, (GetPlayerX(victim) * 32), (GetPlayerY(victim) * 32) SendBlood GetPlayerMap(victim), GetPlayerX(victim), GetPlayerY(victim) ' set the regen timer TempPlayer(victim).stopRegen = True TempPlayer(victim).stopRegenTimer = GetTickCount End If >! End Sub >! Sub NpcSpellPlayer(ByVal mapNpcNum As Long, ByVal victim As Long, SpellSlotNum As Long) Dim mapnum As Long Dim i As Long Dim n As Long Dim spellnum As Long Dim Buffer As clsBuffer Dim InitDamage As Long Dim Damage As Long Dim MaxHeals As Long >! ' Check for subscript out of range If mapNpcNum MAX_MAP_NPCS Or IsPlaying(victim) = False Then Exit Sub End If >! ' Check for subscript out of range If MapNpc(GetPlayerMap(victim)).NPC(mapNpcNum).Num ! ' The Variables mapnum = GetPlayerMap(victim) spellnum = NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Spell(SpellSlotNum) ' Send this packet so they can see the person attacking Set Buffer = New clsBuffer Buffer.WriteLong SNpcAttack Buffer.WriteLong mapNpcNum SendDataToMap mapnum, Buffer.ToArray() Set Buffer = Nothing ' CoolDown Time If MapNpc(mapnum).NPC(mapNpcNum).SpellTimer(SpellSlotNum) > GetTickCount Then Exit Sub ' Spell Types Select Case Spell(spellnum).Type ' AOE Healing Spells Case SPELL_TYPE_HEALHP ' Make sure an npc waits for the spell to cooldown MaxHeals = 1 + NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Stat(Stats.Intelligence) \ 25 If MapNpc(mapnum).NPC(mapNpcNum).Heals >= MaxHeals Then Exit Sub If MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) 0 Then If MapNpc(mapnum).NPC(i).Vital(Vitals.HP) > 0 Then If isInRange(Spell(spellnum).AoE, MapNpc(mapnum).NPC(mapNpcNum).x, MapNpc(mapnum).NPC(mapNpcNum).y, MapNpc(mapnum).NPC(i).x, MapNpc(mapnum).NPC(i).y) Then InitDamage = Spell(spellnum).Vital + (NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Stat(Stats.Intelligence) / 2) MapNpc(mapnum).NPC(i).Vital(Vitals.HP) = MapNpc(mapnum).NPC(i).Vital(Vitals.HP) + InitDamage SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).NPC(i).x * 32), (MapNpc(mapnum).NPC(i).y * 32) Call SendAnimation(mapnum, Spell(spellnum).SpellAnim, 0, 0, TARGET_TYPE_NPC, mapNpcNum) If MapNpc(mapnum).NPC(i).Vital(Vitals.HP) > NPC(MapNpc(mapnum).NPC(i).Num).HP Then MapNpc(mapnum).NPC(i).Vital(Vitals.HP) = NPC(MapNpc(mapnum).NPC(i).Num).HP End If MapNpc(mapnum).NPC(mapNpcNum).Heals = MapNpc(mapnum).NPC(mapNpcNum).Heals + 1 MapNpc(mapnum).NPC(mapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(spellnum).CDTime * 1000 Exit Sub End If End If End If Next Else ' Non AOE Healing Spells InitDamage = Spell(spellnum).Vital + (NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Stat(Stats.Intelligence) / 2) MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) = MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) + InitDamage SendActionMsg mapnum, "+" & InitDamage, BrightGreen, 1, (MapNpc(mapnum).NPC(mapNpcNum).x * 32), (MapNpc(mapnum).NPC(mapNpcNum).y * 32) Call SendAnimation(mapnum, Spell(spellnum).SpellAnim, 0, 0, TARGET_TYPE_NPC, mapNpcNum) If MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) > NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).HP Then MapNpc(mapnum).NPC(mapNpcNum).Vital(Vitals.HP) = NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).HP End If MapNpc(mapnum).NPC(mapNpcNum).Heals = MapNpc(mapnum).NPC(mapNpcNum).Heals + 1 MapNpc(mapnum).NPC(mapNpcNum).SpellTimer(SpellSlotNum) = GetTickCount + Spell(spellnum).CDTime * 1000 Exit Sub End If End If ' AOE Damaging Spells Case SPELL_TYPE_DAMAGEHP ' Make sure an npc waits for the spell to cooldown If Spell(spellnum).IsAoE Then For i = 1 To Player_HighIndex If IsPlaying(i) Then If GetPlayerMap(i) = mapnum Then If isInRange(Spell(spellnum).AoE, MapNpc(mapnum).NPC(mapNpcNum).x, MapNpc(mapnum).NPC(mapNpcNum).y, GetPlayerX(i), GetPlayerY(i)) Then InitDamage = Spell(spellnum).Vital + (NPC(MapNpc(mapnum).NPC(mapNpcNum).Num).Stat(Stats.Intelligence) / 2) Damage = InitDamage - Player(i).Stat(Stats.Willpower) If Damage ! Public Sub TryPlayerAttackPlayer(ByVal attacker As Long, ByVal victim As Long) Dim blockAmount As Long Dim npcNum As Long Dim mapnum As Long Dim Damage As Long >! Damage = 0 >! ' Can we attack the npc? If CanPlayerAttackPlayer(attacker, victim) Then mapnum = GetPlayerMap(attacker) ' check if NPC can avoid the attack If CanPlayerDodge(victim) Then SendActionMsg mapnum, "Dodge!", Pink, 1, (GetPlayerX(victim) * 32), (GetPlayerY(victim) * 32) Exit Sub End If If CanPlayerParry(victim) Then SendActionMsg mapnum, "Parry!", Pink, 1, (GetPlayerX(victim) * 32), (GetPlayerY(victim) * 32) Exit Sub End If >! ' Get the damage we can do Damage = GetPlayerDamage(attacker) ' if the npc blocks, take away the block amount blockAmount = CanPlayerBlock(victim) Damage = Damage - blockAmount ' take away armour Damage = Damage - RAND(1, (GetPlayerStat(victim, Agility) * 2)) ' randomise for up to 10% lower than max hit Damage = RAND(1, Damage) ' * 1.5 if can crit If CanPlayerCrit(attacker) Then Damage = Damage * 1.5 SendActionMsg mapnum, "Critical!", BrightCyan, 1, (GetPlayerX(attacker) * 32), (GetPlayerY(attacker) * 32) End If 'Mortal Angels Damage = Damage - GetPlayerDef(victim) '/Mortal Angels If Damage > 0 Then Call PlayerAttackPlayer(attacker, victim, Damage) Else Call PlayerMsg(attacker, "Your attack does nothing.", BrightRed) End If End If End Sub >! Function CanPlayerAttackPlayer(ByVal attacker As Long, ByVal victim As Long, Optional ByVal IsSpell As Boolean = False, Optional ByVal IsProjectile As Boolean = False) As Boolean >! If Not IsSpell And Not IsProjectile Then ' Check attack timer If GetPlayerEquipment(attacker, Weapon) > 0 Then
-
Hm the info shows me at the right point but the item icon is 1 row to high… its all like your tut
-
~~Sorry i edited it :D Take a look one post over your… The weapon is on the enchant slot :(~~ Yes its all so and i deleted it… but its still one row to high
-
hmmm… The Icon is one row too high... [![](http://www7.pic-upload.de/thumb/21.03.12/7atg2kepev6e.png)](http://www.pic-upload.de/view-13427831/Unbenannt.png.html)
-
Hellooooo :D I got an question… Are the EO Source code edits working in CS:DE? Greetings Mortal Angels
-
I ve pushed it all to the top… but it show me only the first 3 Icons... Why? EDIT--- I see there is only the Face frame, name and stats i got nothing other...
-
For me it works… but i got another question... Does anyone have an template for me for the character slots... because there is all over the other....
-
Ok… here is an sceen of my npc, and quest editor and at the bottom you can see what the quest giver say... [![](http://www7.pic-upload.de/thumb/20.03.12/bxj2qj2tdy.png)](http://www.pic-upload.de/view-13425364/Unbenannt.png.html) I got Team Viewer if anyone want take a look… Because im from switzerland and my english is bad so its very hard to explain...
-
It is firendly :D But he has stats? Must i set it to 0
-
NPC does not start the quest…. Ive maked an quest gived it to an noc but when i speak with it... [![](http://www7.pic-upload.de/thumb/20.03.12/j89gqtfohtpv.png)](http://www.pic-upload.de/view-13425100/Unbenannt.png.html) And there is no Quest….
-
[EO 2.0] Chest Attribute with Editor + Data save in Player Array
Wortel Angels replied to Joyce's topic in Source
Thanks :D -
[EO 2.0][Fixed] Multiple Item Drops and Percentile Chances
Wortel Angels replied to Scott's topic in Source
No xD Thanks now it works -
[EO 2.0] Chest Attribute with Editor + Data save in Player Array
Wortel Angels replied to Joyce's topic in Source
How can i do it that you Can't walk on it and open it 1 tile away… like a chest ;) Because... In real life you dont walk on an chest... -
[EO 2.0][Fixed] Multiple Item Drops and Percentile Chances
Wortel Angels replied to Scott's topic in Source
My server got too many error's… So i downloaded an clean version of EO but now... i can't attack the NPC's... -
Works very good :D But i got one Problem… I use Show Player Level and now... Take a look [![](http://www7.pic-upload.de/thumb/17.03.12/myhwxj4k7hv4.png)](http://www.pic-upload.de/view-13383116/Unbenannt.png.html) What can i do ? Or can i make that the Player Level shows on the Right of the name like the Show NPC Level ?
-
Works Fine :D Thanks very much
-
> ReOrderChat Header & Name & ": " & message, colour Variable not defined…i know i must define it but where ?
-
When it is on 0 will gain the player the normal EXP's which are generated in the NPC Data? And when i put in on 2 will the player gahter the EXP which are generatet x2 or only 2 EXP?
-
Yes Server side ModServerLoop Search ``` ' Anim every 1 sec ```There :D
-
[EO 2.0][Fixed] Multiple Item Drops and Percentile Chances
Wortel Angels replied to Scott's topic in Source
So :D i changed it to vnpcNum :D It works :D Thanks "Im the best dance" "Oh yea im the best oh yea" Feel like Einstein xD -
[EO 2.0][Fixed] Multiple Item Drops and Percentile Chances
Wortel Angels replied to Scott's topic in Source
Hm but i cant insert the quest and pet system in an Default EO… im not very good at coding... -
[EO 2.0][Fixed] Multiple Item Drops and Percentile Chances
Wortel Angels replied to Scott's topic in Source
@Justn: > this is what it should look like > > ``` > ' Drop the goods if they get it > For n = 1 To MAX_NPC_DROPS > If Npc(Victim).DropItem(n) = 0 Then Exit For > If Rnd Call SpawnItem(Npc(Victim).DropItem(n), Npc(Victim).DropItemValue(n), MapNum, MapNpc(MapNum).Npc(Victim).x, MapNpc(MapNum).Npc(Victim).y) > End If > Next > ``` > I think you are using a custom version like starlight or omega… The pet system for those are buggy anyways you probably shouldn't use it if you are... Error… [![](http://www10.pic-upload.de/thumb/14.03.12/qnf4jjthzvb.png)](http://www.pic-upload.de/view-13345131/Unbenannt.png.html) I use the Starlight files… Which are then the best files ?? I heard many about CS:DE but its really so good ?