Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- DVS_Battle
- Version 1.1
- Script by Zedeg and Kantelo
- Mit diesen Komfort-Funktionen ist es möglich, folgende (Kampf-)Eigenschaften einer speziellen Entität direkt zu verändern:
- - Schaden
- - Rüstung
- - maximale Anzahl des Gefolges
- - Sichtradius
- - Regenerationspunkte
- Zudem kann folgende Kampfeigenschaft eines Entitätentyps verändert werden:
- - maximale Lebensenergie
- - Geschwindigkeit der Regeneration
- Folgende Funktionen werden benötigt:
- Funktion : DVS_Battle_SetUp
- Beschreibung: Muss vor allem anderen als Callback der InitAdressEntity aufgerufen werden; leitet alles nötige ein.
- Funktion : DVS_Battle_EntityDestroyed
- Beschreibung: Wird automatisch aufgerufen; löscht alle Daten einer zerstörten Entität.
- Funktion : DVS_Battle_GUIAction_RestartMap_New
- Beschreibung: Wird automatisch angerufen; setzt einige Änderungen zurück.
- Funktion : DVS_Battle_MainWindow_LoadGame_DoLoadGame_New
- Beschreibung: Wird automatisch angerufen; setzt einige Änderungen zurück.
- Funktion : DVS_Battle_QuitGame_New
- Beschreibung: Wird automatisch angerufen; setzt einige Änderungen zurück.
- Funktion : DVS_Battle_QuitApplication_New
- Beschreibung: Wird automatisch angerufen; setzt einige Änderungen zurück.
- Funktion : DVS_Battle_ReloadAttributes
- Beschreibung: Muss in der InitPlayerColorMapping aufgerufen werden; setzt nach Laden die Attribute wieder.
- Funktion : DVS_Battle_ResetMaxHealth
- Beschreibung: Wird automatisch aufgerufen; setzt die maximale Lebensenergie zurück.
- Funktion : DVS_Battle_SetOrigHealth
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die maximale Lebensenergie zurück.
- Funktion : DVS_Battle_ResetHealingSeconds
- Beschreibung: Wird automatisch aufgerufen; setzt die Geschwindigkeit der Regeneration zurück.
- Funktion : DVS_Battle_SetOrigSeconds
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die Geschwindigkeit der Regeneration zurück.
- Funktion : DVS_Battle_AddDamage
- Beschreibung: Erhöht den Schaden einer Entität.
- Parameter : Held, Hauptmann oder Soldat (number), zugefügter Schaden (number)
- Funktion : DVS_Battle_SetDamage
- Beschreibung: Setzt den Schaden einer Entität.
- Parameter : Held, Hauptmann oder Soldat (number), Schaden (number)
- Funktion : DVS_Battle_ChangeDamage
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit den Schaden.
- Funktion : DVS_Battle_AddArmour
- Beschreibung: Erhöht die Rüstung einer Entität.
- Parameter : Held oder Hauptmann (number), zugefügte Rüstung (number)
- Hinweis : Die Rüstung des Hauptmannes wird automatisch auf die Gefolgsleute übertragen.
- Funktion : DVS_Battle_SetArmour
- Beschreibung: Setzt die Rüstung einer Entität.
- Parameter : Hauptmann oder Soldat (number), Rüstung (number)
- Hinweis : Die Rüstung des Hauptmannes wird automatisch auf die Gefolgsleute übertragen.
- Funktion : DVS_Battle_ChangeArmour
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die Rüstung.
- Funktion : DVS_Battle_AddMaxSoldiers
- Beschreibung: Erhöht die Gruppenstärke.
- Parameter : Hauptmann (number), zugefügte Gruppenstärke (number)
- Funktion : DVS_Battle_SetMaxSoldiers
- Beschreibung: Setzt die Gruppenstärke.
- Parameter : Hauptmann (number), Gruppenstärke (number)
- Funktion : DVS_Battle_ChangeMaxSoldiers
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die Gruppenstärke.
- Funktion : DVS_Battle_AddExploration
- Beschreibung: Erhöht den Sichtradius.
- Parameter : Held, Hauptmann oder Soldat (number), zugefügte Sichtweite (number)
- Funktion : DVS_Battle_SetExploration
- Beschreibung: Setzt den Sichtradius.
- Parameter : Held, Hauptmann oder Soldat (number), Sichtweite (number)
- Funktion : DVS_Battle_ChangeExploration
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit den Sichtradius.
- Funktion : DVS_Battle_AddHealingPoints
- Beschreibung: Erhöht die Regenerationspunkte.
- Parameter : Held oder Hauptmann (number), zugefügte Regenerationspunkte (number)
- Hinweis : Ihr solltet sichergehen, dass die veränderten Einheiten bereits einmal verwundet wurden, wenn diese Funktion aufgerufen wurde.
- Um sicher zu gehen, ruft mindestens einmal vorher DVS_Battle_SetHealingPoints für die zu verändernde Einheiten auf.
- Funktion : DVS_Battle_SetHealingPoints
- Beschreibung: Setzt die Regenerationspunkte.
- Parameter : Held oder Hauptmann (number), Regenerationspunkte (number)
- Funktion : DVS_Battle_GetHealingPoints
- Beschreibung: Gibt die echten Regenerationspunkte (so, wie sie aktuell sind!) zurück.
- Parameter : Held oder Hauptmann (number)
- Rückgabe : Regenerationspunkte (number)
- Funktion : DVS_Battle_ChangeHealingPoints
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die Regenerationspunkte.
- Funktion : DVS_Battle_AddMaxHealth
- Beschreibung: Erhöht die maximale Lebensenergie.
- Parameter : Heldtyp oder Hauptmanntyp (number oder string), zugefügte Lebensenergie (number)
- Hinweis : Die maximale Lebensenergie wird für alle Entitäten des gleichen Typs übernommen.
- Funktion : DVS_Battle_SetMaxHealth
- Beschreibung: Setzt die maximale Lebensenergie.
- Parameter : Heldtyp oder Hauptmanntyp (number oder string), Lebensenergie (number)
- Hinweis : Die maximale Lebensenergie wird für alle Entitäten des gleichen Typs übernommen.
- Funktion : DVS_Battle_ChangeMaxHealth
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die maximale Lebensenergie.
- Funktion : DVS_Battle_AddHealingSeconds
- Beschreibung: Erhöht die Geschwindigkeit der Regeneration.
- Parameter : Heldtyp oder Hauptmanntyp (number oder string), zugefügte Sekunden (number)
- Hinweis : Die Geschwindigkeit der Regeneration wird für alle Entitäten des gleichen Typs übernommen.
- Funktion : DVS_Battle_SetHealingSeconds
- Beschreibung: Setzt die Geschwindigkeit der Regeneration.
- Parameter : Heldtyp oder Hauptmanntyp (number oder string), Sekunden (number)
- Hinweis : Die Geschwindigkeit der Regeneration wird für alle Entitäten des gleichen Typs übernommen.
- Funktion : DVS_Battle_GetHealingSeconds
- Beschreibung: Gibt die Geschwindigkeit der Regeneration (so, wie sie aktuell ist!) zurück.
- Parameter : Heldtyp oder Hauptmanntyp (number oder string)
- Rückgabe : Sekunden (number)
- Funktion : DVS_Battle_ChangeHealingSeconds
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die Sekunden.
- Funktion : DVS_Battle_AddMaxRange
- Beschreibung: Erhöht die maximale Reichweite.
- Parameter : Held, Hauptmann oder Soldat (number oder string)
- Funktion : DVS_Battle_SetMaxRange
- Beschreibung: Setzt die maximale Reichweite.
- Parameter : Held, Hauptmann oder Soldat (number oder string)
- Funktion : DVS_Battle_GetMaxRange
- Beschreibung: Gibt die maximale Reichweite (so, wie sie aktuell ist!) zurück.
- Parameter : Held, Hauptmann oder Soldat (number oder string)
- Rückgabe : maximale Reichweite (number)
- Funktion : DVS_Battle_ChangeMaxRange
- Beschreibung: Wird automatisch aufgerufen; setzt in Wirklichkeit die maximale Reichweite.
- Funktion : DVS_Battle_CheckMaxRange
- Beschreibung: Wird automatisch aufgerufen; überprüft, ob die maximale Reichweite verändert werden kann.
- Funktion : DVS_Battle_ClearUnnecessaryPointer
- Beschreibung: Wird automatisch aufgerufen; leitet die Pointer um.
- In die InitPlayerColorMapping kommt folgender Aufruf:
- if AdressEntity then
- InitAdressEntity(DVS_BattleMemory.AdressEntity, DVS_Battle_ReloadAttributes)
- end
- Es werden zudem die SCV 2.0 benötigt!
- [url]http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum/SCV2-19696.htm[/url]
- --]]
- function DVS_Battle_SetUp()
- assert(type(AdressEntity) == "number", "Battle_SetUp:ERROR! Please call \"InitAdressEntity\" before!")
- DVS_BattleMemory = {
- AdressEntity = "AdressEntity", --muss manuell eingetragen werden; wird von DVS_Battle nach jedem Laden in InitAdressEntity aufgerufen
- NpcId = 7, --zu allen Spielern (!) neutrale Id
- SpawnPoint = "DVS_Battle_SpawnPoint", --Ort, an dem die neutrale Einheit gefahrlos erscheinen kann
- MRTimer = 3, --Intervall in Sekunden, in dem MaxRAnge überprüft wird (klein=schnelle Übernahme, hoher Rechenverbrauch; groß=langsame Übernahme, niedriger Rechenverbrauch)
- IsClosing = false,
- CloFunction = DVS_Battle_GUIAction_RestartMap,
- CloParam = nil,
- Resets = 2,
- Damage = {},
- Armour = {},
- MaxSoldiers = {},
- Exploration = {},
- HealingPoints = {},
- MaxHealth = {},
- OrigHealth = {},
- HealingSeconds = {},
- OrigSeconds = {},
- MaxRange = {},
- CheckMaxRange = {},
- Timer = {
- Damage = {},
- Armour = {},
- MaxSoldiers = {},
- Exploration = {},
- HealingPoints = {},
- MaxHealth = {},
- OrigHealth = {},
- HealingSeconds = {},
- OrigSeconds = {},
- MaxRange = {},
- },
- }
- Trigger.RequestTrigger(Events.LOGIC_EVENT_ENTITY_DESTROYED, "", "DVS_Battle_EntityDestroyed", 1)
- DVS_Battle_GUIAction_RestartMap_Old = GUIAction_RestartMap
- GUIAction_RestartMap = DVS_Battle_GUIAction_RestartMap_New
- DVS_Battle_MainWindow_LoadGame_DoLoadGame_Old = MainWindow_LoadGame_DoLoadGame
- MainWindow_LoadGame_DoLoadGame = DVS_Battle_MainWindow_LoadGame_DoLoadGame_New
- DVS_Battle_QuitGame_Old = QuitGame
- QuitGame = DVS_Battle_QuitGame_New
- DVS_Battle_QuitApplication_Old = QuitApplication
- QuitApplication = DVS_Battle_QuitApplication_New
- end
- function DVS_Battle_EntityDestroyed()
- DVS_BattleMemory.Damage[Event.GetEntityID()] = nil
- DVS_BattleMemory.Armour[Event.GetEntityID()] = nil
- DVS_BattleMemory.MaxSoldiers[Event.GetEntityID()] = nil
- DVS_BattleMemory.Exploration[Event.GetEntityID()] = nil
- DVS_BattleMemory.HealingPoints[Event.GetEntityID()] = nil
- DVS_BattleMemory.HealingSeconds[Event.GetEntityID()] = nil
- DVS_BattleMemory.MaxRange[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.Damage[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.Armour[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.MaxSoldiers[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.Exploration[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.HealingPoints[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.HealingSeconds[Event.GetEntityID()] = nil
- DVS_BattleMemory.Timer.MaxRange[Event.GetEntityID()] = nil
- end
- function DVS_Battle_GUIAction_RestartMap_New()
- DVS_BattleMemory.CloFunction = DVS_Battle_GUIAction_RestartMap_Old
- DVS_BattleMemory.CloParam = nil
- DVS_BattleMemory.IsClosing = true
- for v, w in pairs(DVS_BattleMemory.OrigHealth) do
- DVS_Battle_ResetMaxHealth(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- for v, w in pairs(DVS_BattleMemory.OrigSeconds) do
- DVS_Battle_ResetHealingSeconds(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- if not oH then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- end
- function DVS_Battle_MainWindow_LoadGame_DoLoadGame_New(...)
- DVS_BattleMemory.CloFunction = DVS_Battle_MainWindow_LoadGame_DoLoadGame_Old
- DVS_BattleMemory.CloParam = unpack(arg)
- DVS_BattleMemory.IsClosing = true
- for v, w in pairs(DVS_BattleMemory.OrigHealth) do
- DVS_Battle_ResetMaxHealth(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- for v, w in pairs(DVS_BattleMemory.OrigSeconds) do
- DVS_Battle_ResetHealingSeconds(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- if not oH then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- end
- function DVS_Battle_QuitGame_New()
- DVS_BattleMemory.CloFunction = DVS_Battle_QuitGame_Old
- DVS_BattleMemory.CloParam = nil
- DVS_BattleMemory.IsClosing = true
- for v, w in pairs(DVS_BattleMemory.OrigHealth) do
- DVS_Battle_ResetMaxHealth(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- for v, w in pairs(DVS_BattleMemory.OrigSeconds) do
- DVS_Battle_ResetHealingSeconds(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- if not oH then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- end
- function DVS_Battle_QuitApplication_New()
- DVS_BattleMemory.CloFunction = DVS_Battle_QuitApplication_Old
- DVS_BattleMemory.CloParam = nil
- DVS_BattleMemory.IsClosing = true
- for v, w in pairs(DVS_BattleMemory.OrigHealth) do
- DVS_Battle_ResetMaxHealth(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- for v, w in pairs(DVS_BattleMemory.OrigSeconds) do
- DVS_Battle_ResetHealingSeconds(v)
- oH = true
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets-1
- end
- if not oH then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- end
- function DVS_Battle_ReloadAttributes()
- DVS_BattleMemory.IsClosing = false
- for v, w in pairs(DVS_BattleMemory.Damage) do
- DVS_Battle_ClearUnnecessaryPointer(v, 12)
- DVS_Battle_SetDamage(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.Armour) do
- DVS_Battle_ClearUnnecessaryPointer(v, 24)
- DVS_Battle_SetArmour(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.Exploration) do
- DVS_Battle_ClearUnnecessaryPointer(v, 40)
- DVS_Battle_SetExploration(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.HealingPoints) do
- DVS_Battle_ClearUnnecessaryPointer(v, 52)
- DVS_Battle_SetHealingPoints(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.MaxHealth) do
- DVS_Battle_SetMaxHealth(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.HealingSeconds) do
- DVS_Battle_SetHealingSeconds(v, w)
- end
- for v, w in pairs(DVS_BattleMemory.Timer.MaxRange) do
- DVS_BattleMemory.Timer.MaxRange[v] = nil
- end
- for v, w in pairs(DVS_BattleMemory.MaxRange) do
- DVS_Battle_ClearUnnecessaryPointer(v, 44)
- DVS_Battle_SetMaxRange(v, w)
- end
- end
- function DVS_Battle_ResetMaxHealth(_entityType)
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- DVS_BattleMemory.Timer.OrigHealth[entityId] = true
- Logic.SetEntityScriptingValue(entityId, -30, 257)
- StartSimpleJob"DVS_Battle_SetOrigHealth"
- end
- function DVS_Battle_SetOrigHealth()
- local origHealth = 0
- for v, w in pairs(DVS_BattleMemory.Timer.OrigHealth) do
- origHealth = origHealth+1
- if Logic.GetEntityScriptingValue(v, 75) > 10000000 then
- local entityType = Logic.GetEntityTypeName(Logic.GetEntityType(v))
- local svbn = BigNum.new(""..Logic.GetEntityScriptingValue(v, 75))
- local index = BigNum.new()
- BigNum.add(svbn, BigNum.new(52), index)
- SetValueByAdress(BigNum.mt.tostring(index), DVS_BattleMemory.OrigHealth[entityType])
- if Logic.GetEntityMaxHealth(v) == DVS_BattleMemory.OrigHealth[entityType] then
- DestroyEntity(v)
- DVS_BattleMemory.Timer.OrigHealth[v] = nil
- end
- end
- end
- if origHealth == 0 then
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets+1
- if DVS_BattleMemory.Resets == 2 then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- return true
- end
- end
- function DVS_Battle_ResetHealingSeconds(_entityType)
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- DVS_BattleMemory.Timer.OrigSeconds[entityId] = true
- StartSimpleJob"DVS_Battle_SetOrigSeconds"
- end
- function DVS_Battle_SetOrigSeconds()
- local origSeconds = 0
- for v, w in pairs(DVS_BattleMemory.Timer.OrigSeconds) do
- origSeconds = origSeconds+1
- local entityType = Logic.GetEntityTypeName(Logic.GetEntityType(v))
- SetBehaviorXmlValue(v, 12, 3, 29, DVS_BattleMemory.OrigSeconds[entityType])
- if GetBehaviorXmlValue(v, 12, 3, 29) == DVS_BattleMemory.OrigSeconds[entityType] then
- DVS_BattleMemory.Timer.OrigSeconds[v] = nil
- DestroyEntity(v)
- end
- end
- if origSeconds == 0 then
- DVS_BattleMemory.Resets = DVS_BattleMemory.Resets+1
- if DVS_BattleMemory.Resets == 2 then
- Trigger.DisableTriggerSystem(1)
- DVS_BattleMemory.CloFunction(DVS_BattleMemory.CloParam)
- end
- return true
- end
- end
- function DVS_Battle_AddDamage(_entity, _damage)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Damage[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 12)
- DVS_BattleMemory.Damage[_entity] = Logic.GetEntityDamage(_entity)
- end
- DVS_BattleMemory.Damage[_entity] = DVS_BattleMemory.Damage[_entity]+_damage
- DVS_BattleMemory.Timer.Damage[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeDamageId) == 0 then
- DVS_Battle_ChangeDamageId = StartSimpleJob"DVS_Battle_ChangeDamage"
- end
- end
- end
- function DVS_Battle_SetDamage(_entity, _damage)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Damage[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 12)
- end
- DVS_BattleMemory.Damage[_entity] = _damage
- DVS_BattleMemory.Timer.Damage[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeDamageId) == 0 then
- DVS_Battle_ChangeDamageId = StartSimpleJob"DVS_Battle_ChangeDamage"
- end
- end
- end
- function DVS_Battle_ChangeDamage()
- local damage = 0
- for v, w in pairs(DVS_BattleMemory.Timer.Damage) do
- damage = damage+1
- Logic.SetEntityScriptingValue(v, 33, Float2Int(DVS_BattleMemory.Damage[v]))
- if Logic.GetEntityDamage(v) == DVS_BattleMemory.Damage[v] then
- DVS_BattleMemory.Timer.Damage[v] = nil
- end
- end
- if damage == 0 then
- return true
- end
- end
- function DVS_Battle_AddArmour(_entity, _armour)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Armour[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 24)
- DVS_BattleMemory.Armour[_entity] = Logic.GetEntityArmor(_entity)
- end
- DVS_BattleMemory.Armour[_entity] = DVS_BattleMemory.Armour[_entity]+_armour
- DVS_BattleMemory.Timer.Armour[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeArmourId) == 0 then
- DVS_Battle_ChangeArmourId = StartSimpleJob"DVS_Battle_ChangeArmour"
- end
- end
- end
- function DVS_Battle_SetArmour(_entity, _armour)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Armour[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 24)
- end
- DVS_BattleMemory.Armour[_entity] = _armour
- DVS_BattleMemory.Timer.Armour[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeArmourId) == 0 then
- DVS_Battle_ChangeArmourId = StartSimpleJob"DVS_Battle_ChangeArmour"
- end
- end
- end
- function DVS_Battle_ChangeArmour()
- local armour = 0
- for v, w in pairs(DVS_BattleMemory.Timer.Armour) do
- armour = armour+1
- Logic.SetEntityScriptingValue(v, 39, Float2Int(DVS_BattleMemory.Armour[v]))
- if Logic.GetEntityArmor(v) == DVS_BattleMemory.Armour[v] then
- DVS_BattleMemory.Timer.Armour[v] = nil
- end
- end
- if armour == 0 then
- return true
- end
- end
- function DVS_Battle_AddMaxSoldiers(_entity, _soldiers)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.MaxSoldiers[_entity] then
- DVS_BattleMemory.MaxSoldiers[_entity] = Logic.LeaderGetMaxNumberOfSoldiers(_entity)
- end
- DVS_BattleMemory.MaxSoldiers[_entity] = DVS_BattleMemory.MaxSoldiers[_entity]+_soldiers
- DVS_BattleMemory.Timer.MaxSoldiers[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeMaxSoldiersId) == 0 then
- DVS_Battle_ChangeMaxSoldiersId = StartSimpleJob"DVS_Battle_ChangeMaxSoldiers"
- end
- end
- end
- function DVS_Battle_SetMaxSoldiers(_entity, _soldiers)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.MaxSoldiers[_entity] then
- DVS_BattleMemory.MaxSoldiers[_entity] = _soldiers
- end
- DVS_BattleMemory.MaxSoldiers[_entity] = _soldiers
- DVS_BattleMemory.Timer.MaxSoldiers[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeMaxSoldiersId) == 0 then
- DVS_Battle_ChangeMaxSoldiersId = StartSimpleJob"DVS_Battle_ChangeMaxSoldiers"
- end
- end
- end
- function DVS_Battle_ChangeMaxSoldiers()
- local maxSoldiers = 0
- for v, w in pairs(DVS_BattleMemory.Timer.MaxSoldiers) do
- maxSoldiers = maxSoldiers+1
- local svbn = BigNum.new(""..Logic.GetEntityScriptingValue(v, -27))
- local adress1 = BigNum.new()
- BigNum.add(svbn, BigNum.new(16), adress1)
- local adress2 = BigNum.new(GetValueByAdress(BigNum.mt.tostring(adress1)))
- local adress3 = BigNum.new()
- BigNum.add(adress2, BigNum.new(24), adress3)
- local adress4 = BigNum.new(GetValueByAdress(BigNum.mt.tostring(adress3)))
- local adress5 = BigNum.new()
- BigNum.add(adress4, BigNum.new(0), adress5)
- local adress6 = BigNum.new(GetValueByAdress(BigNum.mt.tostring(adress5)))
- local index = BigNum.new()
- BigNum.add(adress6, BigNum.new(16), index)
- SetValueByAdress(BigNum.mt.tostring(index), DVS_BattleMemory.MaxSoldiers[v])
- if Logic.LeaderGetMaxNumberOfSoldiers(v) == DVS_BattleMemory.MaxSoldiers[v] then
- DVS_BattleMemory.Timer.MaxSoldiers[v] = nil
- end
- end
- if maxSoldiers == 0 then
- return true
- end
- end
- function DVS_Battle_AddExploration(_entity, _exploration)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Exploration[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 40)
- DVS_BattleMemory.Exploration[_entity] = Logic.GetEntityExplorationRange(_entity)
- end
- DVS_BattleMemory.Exploration[_entity] = DVS_BattleMemory.Exploration[_entity]+_exploration
- DVS_BattleMemory.Timer.Exploration[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeExplorationId) == 0 then
- DVS_Battle_ChangeExplorationId = StartSimpleJob"DVS_Battle_ChangeExploration"
- end
- end
- end
- function DVS_Battle_SetExploration(_entity, _exploration)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.Exploration[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 40)
- end
- DVS_BattleMemory.Exploration[_entity] = _exploration
- DVS_BattleMemory.Timer.Exploration[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeExplorationId) == 0 then
- DVS_Battle_ChangeExplorationId = StartSimpleJob"DVS_Battle_ChangeExploration"
- end
- end
- end
- function DVS_Battle_ChangeExploration()
- local exploration = 0
- for v, w in pairs(DVS_BattleMemory.Timer.Exploration) do
- exploration = exploration+1
- Logic.SetEntityScriptingValue(v, 47, Float2Int(DVS_BattleMemory.Exploration[v]))
- if Logic.GetEntityExplorationRange(v) == DVS_BattleMemory.Exploration[v] then
- DVS_BattleMemory.Timer.Exploration[v] = nil
- end
- end
- if exploration == 0 then
- return true
- end
- end
- function DVS_Battle_AddHealingPoints(_entity, _points)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.HealingPoints[_entity] then
- Logic.HurtEntity(_entity, 1)
- DVS_Battle_ClearUnnecessaryPointer(_entity, 52)
- DVS_BattleMemory.HealingPoints[_entity] = Float2Int(Logic.GetEntityScriptingValue(_entity, 53))
- end
- DVS_BattleMemory.HealingPoints[_entity] = DVS_BattleMemory.HealingPoints[_entity]+_points
- DVS_BattleMemory.Timer.HealingPoints[_entity] = GetBehaviorXmlValue(_entity, 12, 3, 29)
- if DVS_BattleMemory.Timer.HealingPoints[_entity] <= 2 then
- DVS_BattleMemory.Timer.HealingPoints[_entity] = 3
- end
- if JobIsRunning(DVS_Battle_ChangeHealingPointsId) == 0 then
- DVS_Battle_ChangeHealingPointsId = StartSimpleJob"DVS_Battle_ChangeHealingPoints"
- end
- end
- end
- function DVS_Battle_SetHealingPoints(_entity, _points)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.HealingPoints[_entity] then
- Logic.HurtEntity(_entity, 1)
- DVS_Battle_ClearUnnecessaryPointer(_entity, 52)
- end
- DVS_BattleMemory.HealingPoints[_entity] = _points
- DVS_BattleMemory.Timer.HealingPoints[_entity] = GetBehaviorXmlValue(_entity, 12, 3, 29)
- if DVS_BattleMemory.Timer.HealingPoints[_entity] <= 2 then
- DVS_BattleMemory.Timer.HealingPoints[_entity] = 3
- end
- if JobIsRunning(DVS_Battle_ChangeHealingPointsId) == 0 then
- DVS_Battle_ChangeHealingPointsId = StartSimpleJob"DVS_Battle_ChangeHealingPoints"
- end
- end
- end
- function DVS_Battle_GetHealingPoints(_entity)
- return Float2Int(Logic.GetEntityScriptingValue(_entity, 53))
- end
- function DVS_Battle_ChangeHealingPoints()
- local healingPoints = 0
- for v, w in pairs(DVS_BattleMemory.Timer.HealingPoints) do
- DVS_BattleMemory.Timer.HealingPoints[v] = DVS_BattleMemory.Timer.HealingPoints[v]-1
- healingPoints = healingPoints+1
- if DVS_BattleMemory.Timer.HealingPoints[v] <= 0 then
- Logic.SetEntityScriptingValue(v, 53, Float2Int(DVS_BattleMemory.HealingPoints[v]))
- DVS_BattleMemory.Timer.HealingPoints[v] = nil
- end
- end
- if healingPoints == 0 then
- return true
- end
- end
- function DVS_Battle_AddMaxHealth(_entityType, _maxHealth)
- if not DVS_BattleMemory.IsClosing then
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- if type(_entityType) == "number" then
- entityId = Logic.CreateEntity(_entityType, pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- _entityType = Logic.GetEntityTypeName(Logic.GetEntityType(entityId))
- else
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- end
- if not DVS_BattleMemory.MaxHealth[_entityType] then
- DVS_BattleMemory.OrigHealth[_entityType] = Logic.GetEntityMaxHealth(entityId)
- DVS_BattleMemory.MaxHealth[_entityType] = Logic.GetEntityMaxHealth(entityId)
- end
- DVS_BattleMemory.MaxHealth[_entityType] = DVS_BattleMemory.MaxHealth[_entityType]+_maxHealth
- DVS_BattleMemory.Timer.MaxHealth[entityId] = true
- Logic.SetEntityScriptingValue(entityId, -30, 257)
- if JobIsRunning(DVS_Battle_ChangeMaxHealthId) == 0 then
- DVS_Battle_ChangeMaxHealthId = StartSimpleJob"DVS_Battle_ChangeMaxHealth"
- end
- end
- end
- function DVS_Battle_SetMaxHealth(_entityType, _maxHealth)
- if not DVS_BattleMemory.IsClosing then
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- if type(_entityType) == "number" then
- entityId = Logic.CreateEntity(_entityType, pos.X, pos.Y, 0.00, 2)
- _entityType = Logic.GetEntityTypeName(Logic.GetEntityType(entityId))
- else
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- end
- if not DVS_BattleMemory.MaxHealth[_entityType] then
- DVS_BattleMemory.OrigHealth[_entityType] = Logic.GetEntityMaxHealth(entityId)
- end
- DVS_BattleMemory.MaxHealth[_entityType] = _maxHealth
- DVS_BattleMemory.Timer.MaxHealth[entityId] = true
- Logic.SetEntityScriptingValue(entityId, -30, 257)
- if JobIsRunning(DVS_Battle_ChangeMaxHealthId) == 0 then
- DVS_Battle_ChangeMaxHealthId = StartSimpleJob"DVS_Battle_ChangeMaxHealth"
- end
- end
- end
- function DVS_Battle_ChangeMaxHealth()
- local maxHealth = 0
- for v, w in pairs(DVS_BattleMemory.Timer.MaxHealth) do
- maxHealth = maxHealth+1
- if Logic.GetEntityScriptingValue(v, 75) > 10000000 then
- local entityType = Logic.GetEntityTypeName(Logic.GetEntityType(v))
- local svbn = BigNum.new(""..Logic.GetEntityScriptingValue(v, 75))
- local index = BigNum.new()
- BigNum.add(svbn, BigNum.new(52), index)
- SetValueByAdress(BigNum.mt.tostring(index), DVS_BattleMemory.MaxHealth[entityType])
- if Logic.GetEntityMaxHealth(v) == DVS_BattleMemory.MaxHealth[entityType] then
- DVS_BattleMemory.Timer.MaxHealth[v] = nil
- DestroyEntity(v)
- end
- end
- end
- if maxHealth == 0 then
- return true
- end
- end
- function DVS_Battle_AddHealingSeconds(_entityType, _healingSeconds)
- if not DVS_BattleMemory.IsClosing then
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- if type(_entityType) == "number" then
- entityId = Logic.CreateEntity(_entityType, pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- _entityType = Logic.GetEntityTypeName(Logic.GetEntityType(entityId))
- else
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- end
- if not DVS_BattleMemory.HealingSeconds[_entityType] then
- DVS_BattleMemory.OrigSeconds[_entityType] = GetBehaviorXmlValue(entityId, 12, 3, 29)
- DVS_BattleMemory.HealingSeconds[_entityType] = GetBehaviorXmlValue(entityId, 12, 3, 29)
- end
- DVS_BattleMemory.HealingSeconds[_entityType] = DVS_BattleMemory.HealingSeconds[_entityType]+_healingSeconds
- DVS_BattleMemory.Timer.HealingSeconds[entityId] = true
- if JobIsRunning(DVS_Battle_ChangeHealingSecondsId) == 0 then
- DVS_Battle_ChangeHealingSecondsId = StartSimpleJob"DVS_Battle_ChangeHealingSeconds"
- end
- end
- end
- function DVS_Battle_SetHealingSeconds(_entityType, _healingSeconds)
- if not DVS_BattleMemory.IsClosing then
- local entityId
- local pos = GetPosition(DVS_BattleMemory.SpawnPoint)
- if type(_entityType) == "number" then
- entityId = Logic.CreateEntity(_entityType, pos.X, pos.Y, 0.00, 2)
- _entityType = Logic.GetEntityTypeName(Logic.GetEntityType(entityId))
- else
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- end
- if not DVS_BattleMemory.HealingSeconds[_entityType] then
- DVS_BattleMemory.OrigSeconds[_entityType] = GetBehaviorXmlValue(entityId, 12, 3, 29)
- DVS_BattleMemory.HealingSeconds[_entityType] = _healingSeconds
- end
- DVS_BattleMemory.HealingSeconds[_entityType] = _healingSeconds
- DVS_BattleMemory.Timer.HealingSeconds[entityId] = true
- if JobIsRunning(DVS_Battle_ChangeHealingSecondsId) == 0 then
- DVS_Battle_ChangeHealingSecondsId = StartSimpleJob"DVS_Battle_ChangeHealingSeconds"
- end
- end
- end
- function DVS_Battle_GetHealingSeconds(_entityType, _healingSeconds)
- if type(_entityType) == "number" then
- entityId = Logic.CreateEntity(_entityType, pos.X, pos.Y, 0.00, 2)
- _entityType = Logic.GetEntityTypeName(Logic.GetEntityType(entityId))
- else
- entityId = Logic.CreateEntity(Entities[_entityType], pos.X, pos.Y, 0.00, DVS_BattleMemory.NpcId)
- end
- healingSeconds = GetBehaviorXmlValue(entityId, 12, 3, 29)
- DestroyEntity(entityId)
- return healingSeconds
- end
- function DVS_Battle_ChangeHealingSeconds()
- local healingSeconds = 0
- for v, w in pairs(DVS_BattleMemory.Timer.HealingSeconds) do
- local entityType = Logic.GetEntityTypeName(Logic.GetEntityType(v))
- healingSeconds = healingSeconds+1
- SetBehaviorXmlValue(v, 12, 3, 29, DVS_BattleMemory.HealingSeconds[entityType])
- if GetBehaviorXmlValue(v, 12, 3, 29) == DVS_BattleMemory.HealingSeconds[entityType] then
- DVS_BattleMemory.Timer.HealingSeconds[v] = nil
- DestroyEntity(v)
- end
- end
- if healingSeconds == 0 then
- return true
- end
- end
- function DVS_Battle_AddMaxRange(_entity, _maxRange)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.MaxRange[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 44)
- DVS_BattleMemory.MaxRange[_entity] = Int2Float(GetBehaviorXmlValue(_entity, 12, 3, 23))
- end
- DVS_BattleMemory.MaxRange[_entity] = DVS_BattleMemory.MaxRange[_entity]+_maxRange
- if Int2Float(Logic.GetEntityScriptingValue(_entity, 49)) == -1 then
- DVS_BattleMemory.CheckMaxRange[_entity] = true
- if JobIsRunning(DVS_Battle_CheckMaxRangeId) == 0 then
- DVS_Battle_CheckMaxRangeId = StartSimpleJob"DVS_Battle_CheckMaxRange"
- end
- else
- DVS_BattleMemory.Timer.MaxRange[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeMaxRangeId) == 0 then
- DVS_Battle_ChangeMaxRangeId = StartSimpleJob"DVS_Battle_ChangeMaxRange"
- end
- end
- end
- end
- function DVS_Battle_SetMaxRange(_entity, _maxRange)
- if not DVS_BattleMemory.IsClosing then
- if not DVS_BattleMemory.MaxRange[_entity] then
- DVS_Battle_ClearUnnecessaryPointer(_entity, 44)
- end
- DVS_BattleMemory.MaxRange[_entity] = _maxRange
- if Int2Float(Logic.GetEntityScriptingValue(_entity, 49)) == -1 then
- DVS_BattleMemory.CheckMaxRange[_entity] = true
- if JobIsRunning(DVS_Battle_CheckMaxRangeId) == 0 then
- DVS_Battle_CheckMaxRangeId = StartSimpleJob"DVS_Battle_CheckMaxRange"
- end
- else
- DVS_BattleMemory.Timer.MaxRange[_entity] = true
- if JobIsRunning(DVS_Battle_ChangeMaxRangeId) == 0 then
- DVS_Battle_ChangeMaxRangeId = StartSimpleJob"DVS_Battle_ChangeMaxRange"
- end
- end
- end
- end
- function DVS_Battle_GetMaxRange(_entity)
- return Int2Float(Logic.GetEntityScriptingValue(_entity, 49))
- end
- function DVS_Battle_ChangeMaxRange()
- local maxRange = 0
- for v, w in pairs(DVS_BattleMemory.Timer.MaxRange) do
- maxRange = maxRange+1
- Logic.SetEntityScriptingValue(v, 49, Float2Int(DVS_BattleMemory.MaxRange[v]))
- if Int2Float(Logic.GetEntityScriptingValue(v, 49)) == DVS_BattleMemory.MaxRange[v] then
- DVS_BattleMemory.Timer.MaxRange[v] = nil
- end
- end
- if maxRange == 0 then
- return true
- end
- end
- function DVS_Battle_CheckMaxRange()
- if Counter.Tick2("DVSBCMR", DVS_BattleMemory.MRTimer) then
- local maxRange = 0
- for v, w in pairs(DVS_BattleMemory.CheckMaxRange) do
- maxRange = maxRange+1
- if Int2Float(Logic.GetEntityScriptingValue(v, 49)) ~= -1 then
- DVS_BattleMemory.CheckMaxRange[v] = nil
- DVS_BattleMemory.Timer.MaxRange[v] = true
- if JobIsRunning(DVS_Battle_ChangeMaxRangeId) == 0 then
- DVS_Battle_ChangeMaxRangeId = StartSimpleJob"DVS_Battle_ChangeMaxRange"
- end
- end
- end
- if maxRange == 0 then
- return true
- end
- end
- end
- function DVS_Battle_ClearUnnecessaryPointer(_entityID, _index)
- local svbn = BigNum.new(""..Logic.GetEntityScriptingValue(_entityID, 22))
- local adress1 = BigNum.new()
- BigNum.add(svbn, BigNum.new("".._index), adress1)
- local value = BigNum.new()
- local adressAt22 = BigNum.new(""..GetValueByAdress(svbn))
- BigNum.sub(adressAt22, BigNum.new"100", value)
- SetValueByAdress(BigNum.mt.tostring(adress1), BigNum.mt.tostring(value))
- return BigNum.mt.tostring(adressAt22)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement