@Nais
This can be done via scripting and I have a few ideas how to possibly go about it.
First off lets take a look at some lines of lua code. For now let's forget all about hex editing since hex editing is something that really is not a good way any longer since I have been readying much easier and more efficient ways to do teh same things.
First thing we will look at here is getting models into free roam such as beta characters or alternate costumed characters...whatever.
In lua it is simply one line that does this and for this example we will use jimmy. The line in lua would be: PedSetUniqueModelStatus(0, -1) in which the 0 is jimmy's model id and the -1 means not in freeroam. Changing the -1 to 1 will make it a freeroam model or changing it to say 2 would mean that two possible copies of the same model can appear in the same place at the same time...and vice versa.
Next is looking at how peds attitudes are against other peds or cliques. This example is a somewhat newer one I have been toying with and it has lots of possabilities.
like the above example it is one line of code and will read: PedSetPedToTypeAttitude(gHobo, 13, 3)
gHobo is a system name just like gPlayer and a few others. That system name can be changed to either the ped model id number itself or you can simply define a local at the start of the script like:
ImportScript("Library/LibTable.lua")
ImportScript("Library/LibTrigger.lua")
ImportScript("Library/LibSchool.lua")
ImportScript("SGlFunc.lua")
ImportScript("SZone.lua")
ImportScript("Shots.lua")
local l_0_0 = false
local l_0_1 = 0
local l_0_2 = false
local l_0_3 = nil
local l_0_4 = false
local l_0_5 = false
local l_0_6, l_0_7 = nil, nil
local l_0_8 = false
The locals are named as such and when using a local it actually makes things easier. If we are to use a local in our attitude example above then it will read like this: PedSetPedToTypeAttitude(l_0_1, 13, 3) with the local as listed above....just simply change the value after the = which in this case is 0 for jimmy...or whatever you wish it to be....and that will be used instead.
We can take the above stuff and make a mini mission where you can fight one or more peds and have bodyguards....tho having more then one bodyguard atm is very hard and somthing I am working to perfect....but it will be done soon enough...heh.
Lets take the following example that i quickly knocked together.....which may have a couple errors since I did bash it together rather fast...
local l_0_0 = {}
local l_0_1 = {}
local l_0_2 = 0
local l_0_3 = 0
local l_0_4 = 0
local l_0_5, l_0_6 = nil, nil
local l_0_7 = true
local l_0_8 = false
local l_0_9 = false
F_TableInit = function()
local l_1_0 = {model = 45, point = POINTLIST._NEW_ENEMY01}
l_1_0.id = 0
l_0_0 = l_1_0
l_1_0 = {model = 46, point = POINTLIST._NEW_ENEMY02, id = 0}
l_1_0.path = PATH._NEW_ENEMY02
l_0_1 = l_1_0
end
F_CreateEnemies = function()
PedRequestModel(l_0_0.model)
PedRequestModel(l_0_1.model)
l_0_0.id = PedCreatePoint(l_0_0.model, l_0_0.point)
l_0_1.id = PedCreatePoint(l_0_1.model, l_0_1.point)
AddBlipForChar(l_0_0.id, 3, 2, 1)
AddBlipForChar(l_0_1.id, 3, 2, 4)
PedSetActionNode(l_0_0.id, "/Global/New/Animations/PlayAnimationCyclic", "Act/Conv/New.act")
PedFollowPath(l_0_1.id, l_0_1.path, 1, 1, cbRunningMan)
end
F_CheckGate = function()
if not l_0_8 and PlayerIsInTrigger(TRIGGER._NEW_GATE) then
F_EnemiesAttackPlayer()
l_0_8 = true
end
end
F_EnemiesAttackPlayer = function()
PedAttack(l_0_0.id, gPlayer, 3)
PedSetActionNode(l_0_0.id, "/Global/New/Animations/BreakCyclicAnimation", "Act/Conv/New.act")
PedStop(l_0_1.id)
PedClearObjectives(l_0_1.id)
PedAttack(l_0_1.id, gPlayer, 3)
l_0_9 = true
TextPrintString("Get to the marker to battle the preps.", 4, 1)
TextPrintString("Prep: We are gonna send you back to the poorhouse!", 4, 2)
end
F_TellPlayerToGetToCenterOfGarden = function()
if l_0_9 then
l_0_4 = nil
l_0_3 = nil
l_0_2 = GetPointList(POINTLIST._NEW_GARDENCENTRE)
if PlayerIsInAreaXYZ(l_0_2, l_0_3, l_0_4, 1.5, 7) then
TextPrintString("KO all the Preppies to win", 4, 1)
l_0_9 = false
BlipRemove(l_0_6)
end
end
end
F_CheckEnemiesDead = function()
if PedIsDead(l_0_0.id) and PedIsDead(l_0_1.id) then
bMissionComplete = true
return true
end
return false
end
cbRunningMan = function(l_7_0, l_7_1, l_7_2)
if l_7_2 == 3 then
TextPrintString("Prep: My Daddy can beat your Daddy!", 4, 2)
end
end
MissionSetup = function()
DATLoad("NEW.DAT", 2)
DATInit()
AreaTransitionPoint(0, POINTLIST._NEW_PLAYERSTART)
F_TableInit()
end
MissionCleanup = function()
end
main = function()
F_CreateEnemies()
TextPrintString("Go into the Fight Area", 4, 1)
l_0_6 = BlipAddPoint(POINTLIST._NEW_GARDENCENTRE, 0)
l_0_5 = PickupCreatePoint(300, POINTLIST._NEW_BAT, 1, 0, "PermanentMission")
repeat
F_CheckGate()
F_TellPlayerToGetToCenterOfGarden()
if F_CheckEnemiesDead() then
else
Wait(0)
until end
if l_0_7 or bMissionComplete then
TextPrint("M_PASS", 3, 0)
Wait(3000)
MissionSucceed()
else
TextPrint("M_FAIL", 3, 0)
Wait(3000)
MissionFail()
end
end
An example like the above can be used for what you want Nais and if you want....and once you get your laptop back whenever that is......I can help you learn the basics of lua scripting so you can create custom missions.
The above example take's place in the garden area beside the preps house where teh dog is that attacks you. Same place where Gary gets the dog poop for the big prank during halloween.