F4MP/f4mp_originalcode/f4mp/scripts/output/F4MPQuest.psc

249 lines
7.1 KiB
Text
Raw Normal View History

Scriptname F4MPQuest extends Quest
int tickTimerID = 10
int queryTimerID = 20
ActorBase Property f4mpPlayerBase Auto
ActorValue Property healthAV Auto
int[] playerIDs
F4MPPlayer[] players
Actor[] myNPCs
Actor[] othersNPCs
Event OnInit()
RegisterForKey(112)
EndEvent
Function OnEntityCreate(int entityID, Form[] itemsToWear)
Debug.Notification(entityID + " has entered the world.")
If entityID != F4MP.GetPlayerEntityID()
Actor player = Game.GetPlayer()
F4MPPlayer entity = player.PlaceActorAtMe(f4mpPlayerBase) as F4MPPlayer
entity.entityID = entityID
entity.itemsToWear = itemsToWear
; SetWornItems(entity, itemsToWear)
playerIDs.Add(entityID)
players.Add(entity)
EndIf
EndFunction
Function OnEntityUpdate(int entityID)
; int index = playerIDs.Find(entityID)
; If index < 0
; return
; EndIf
; F4MPPlayer player = players[index];
; If F4MP.IsEntityValid(player.entityID)
; float[] position = F4MP.GetEntityPosition(player.entityID)
; float angleX = 0.0; F4MP.ReadNumber()
; float angleY = 0.0; F4MP.ReadNumber()
; float angleZ = 0.0; F4MP.ReadNumber()
; Debug.Trace(position[0] + " " + position[1] + " " + position[2] + " " + angleX + " " + angleY + " " + angleZ)
; player.TranslateTo(position[0], position[1], position[2], angleX, angleY, angleZ, 200.0, 100.0)
; EndIf
EndFunction
Function OnEntityRemove(int entityID)
int index = playerIDs.Find(entityID)
If index < 0
return
EndIf
players[index].Delete()
playerIDs.Remove(index)
players.Remove(index)
EndFunction
Function OnClientUpdate(int entityID)
; Actor player = Game.GetPlayer()
; int playerEntityID = F4MP.GetPlayerEntityID()
; If F4MP.IsEntityValid(playerEntityID)
; F4MP.SetEntityPosition(playerEntityID, player.GetPositionX(), player.GetPositionY(), player.GetPositionZ())
; F4MP.WriteNumber(player.GetAngleX())
; F4MP.WriteNumber(player.GetAngleY())
; F4MP.WriteNumber(player.GetAngleZ())
; EndIf
EndFunction
Function OnPlayerHit(float damage)
Game.GetPlayer().DamageValue(healthAV, damage)
EndFunction
Function OnFireWeapon(int entityID)
int index = playerIDs.Find(entityID)
If index < 0
return
EndIf
players[index].FireWeapon()
EndFunction
Function OnSpawnEntity(int formID)
ObjectReference ref = Game.GetForm(formID) as ObjectReference
If ref == None
return
EndIf
Actor actorRef = ref as Actor
If actorRef != None && myNPCs.Find(actorRef) < 0
othersNPCs.Add(actorRef)
EndIf
EndFunction
Function SetWornItems(Actor dest, Form[] wornItems)
int i = 0
While i < wornItems.length
Debug.Trace(i + ": " + wornItems[i])
dest.EquipItem(wornItems[i])
i += 1
EndWhile
EndFunction
; TODO: mutiple timers
bool Function Connect(string address, int port)
Actor client = Game.GetPlayer()
ActorBase clientActorBase = client.GetActorBase()
StartTimer(0, tickTimerID)
return F4MP.Connect(client, clientActorBase, address, port)
EndFunction
Event OnKeyDown(int keyCode)
If keyCode == 112
Connect("", 7779)
playerIDs = new int[0]
players = new F4MPPlayer[0]
othersNPCs = new Actor[0]
myNPCs = new Actor[0]
StartTimer(0, queryTimerID)
;Actor player = Game.GetPlayer()
;F4MPPlayer entity = player.PlaceActorAtMe(f4mpPlayerBase) as F4MPPlayer
Actor client = Game.GetPlayer()
RegisterForAnimationEvent(client, "JumpUp")
RegisterForAnimationEvent(client, "weaponFire")
; RegisterForAnimationEvent(client, "JumpFall")
; RegisterForAnimationEvent(client, "JumpDown")
; RegisterForExternalEvent("OnCopyWornItems", "OnCopyWornItems")
RegisterForExternalEvent("OnEntityCreate", "OnEntityCreate")
RegisterForExternalEvent("OnEntityUpdate", "OnEntityUpdate")
RegisterForExternalEvent("OnEntityRemove", "OnEntityRemove")
RegisterForExternalEvent("OnClientUpdate", "OnClientUpdate")
RegisterForExternalEvent("OnPlayerHit", "OnPlayerHit")
RegisterForExternalEvent("OnFireWeapon", "OnFireWeapon")
RegisterForExternalEvent("OnSpawnEntity", "OnSpawnEntity")
RegisterForKey(113)
RegisterForKey(114)
ElseIf keyCode == 113
F4MP.SetClient(1 - F4MP.GetClientInstanceID())
ElseIf keyCode == 114
; Actor randomActor = Game.FindRandomActorFromRef(Game.GetPlayer(), 1000.0)
; If randomActor != None && randomActor != Game.GetPlayer()
; chosenActor = randomActor
; targetRef = Game.GetPlayer().PlaceAtMe(targetForm)
; Debug.Notification(chosenActor.GetDisplayName() + " " + targetRef.GetDisplayName())
; EndIf
EndIf
EndEvent
Form Property targetForm Auto
Actor Property chosenActor Auto
ObjectReference Property targetRef Auto
Event OnAnimationEvent(ObjectReference akSource, string asEventName)
If !F4MP.IsConnected()
return
EndIf
int playerEntityID = F4MP.GetPlayerEntityID()
If F4MP.IsEntityValid(playerEntityID)
If asEventName == "JumpUp"
F4MP.SetEntVarAnim(playerEntityID, "JumpUp")
; ElseIf asEventName == "JumpFall"
; F4MP.SetEntVarAnim(playerEntityID, "JumpFall")
; ElseIf asEventName == "JumpDown"
; F4MP.SetEntVarAnim(playerEntityID, "JumpLand")
ElseIf asEventName == "weaponFire"
; F4MP.SetEntVarAnim(playerEntityID, "FireWeapon")
F4MP.PlayerFireWeapon()
EndIf
EndIf
EndEvent
Event OnTimer(int aiTimerID)
If !F4MP.IsConnected()
F4MP.Tick()
StartTimer(0, aiTimerID)
return
EndIf
If aiTimerID == tickTimerID
StartTimer(0, tickTimerID)
;; ***************************************
;If chosenActor != None
; chosenActor.PathToReference(targetRef, 1.0)
;EndIf
;
;; ***************************************
Actor player = Game.GetPlayer()
int playerEntityID = F4MP.GetPlayerEntityID()
If F4MP.IsEntityValid(playerEntityID)
F4MP.SetEntityPosition(playerEntityID, player.GetPositionX(), player.GetPositionY(), player.GetPositionZ())
F4MP.SetEntVarNum(playerEntityID, "angleX", player.GetAngleX())
F4MP.SetEntVarNum(playerEntityID, "angleY", player.GetAngleY())
F4MP.SetEntVarNum(playerEntityID, "angleZ", player.GetAngleZ())
F4MP.SetEntVarNum(playerEntityID, "health", player.GetValuePercentage(healthAV))
EndIf
;int i = 0
;While i < myNPCs.length
; Actor myNPC = myNPCs[i]
; F4MP.SetEntityPosition(F4MP.GetEntityID(myNPC), myNPC.x, myNPC.y, myNPC.z)
; i += 1
;EndWhile
F4MP.Tick()
;i = 0
;While i < othersNPCs.length
; Actor othersNPC = othersNPCs[i]
; float[] position = F4MP.GetEntityPosition(F4MP.GetEntityID(othersNPC))
; float distance = Math.Sqrt(Math.Pow(position[0] - othersNPC.x, 2) + Math.Pow(position[1] - othersNPC.y, 2) + Math.Pow(position[2] - othersNPC.z, 2))
; othersNPC.TranslateTo(position[0], position[1], position[2], 0.0, 0.0, othersNPC.GetAngleZ(), distance * 3.0, 200.0)
; i += 1
;EndWhile
; Debug.Notification(F4MP.GetPlayerEntityID() + " " + player.GetPositionX() + " " + player.GetPositionY() + " " + player.GetPositionZ())
ElseIf aiTimerID == queryTimerID
StartTimer(0, queryTimerID)
;Actor randomActor = Game.FindRandomActorFromRef(Game.GetPlayer(), 10000.0)
;If randomActor != None && randomActor as F4MPPlayer == None && randomActor != Game.GetPlayer()
; If myNPCs.Find(randomActor) < 0 && othersNPCs.Find(randomActor) < 0
; myNPCs.Add(randomActor)
; F4MP.SpawnEntity(randomActor, randomActor.x, randomActor.y, randomActor.z, randomActor.GetAngleX(), randomActor.GetAngleY(), randomActor.GetAngleZ())
; EndIf
;EndIf
EndIf
EndEvent