SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Plugin Development

Reply
 
Thread Tools Display Modes
Old 01/07/2012, 03:21 PM   #1
Mauzen
High-roller
 
Mauzen's Avatar
 
Join Date: Jun 2007
Location: Western Germany
Posts: 4,136
Reputation: 1027
Default RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Its been a while since I wrote about my experiences with the .rec files. Later, Joe Staff released a code snippet to generate rec files. Now I finally made use of this, as I planned to do all the time, and started creating a plugin to control NPCs by manipulating and creating rec files.
The generate code is now completely rewritten for a better performance, and more possibilities.

What RNPC does
RNPC currently offers complete control over OnFoot-NPCs. Easy or complex actions can be assembled in the script using the "build mode". Since 0.4, NPCs can also be killed. You can read about how it all works on the wiki page. Theres also some example code.
The plugin comes with a npcmode and include, that do most of the job.

What RNPC should do
RNPC is just in developement, but might already be useful for some people.
Im looking forward to add these functionalities some time:
  • Vehicle support (done in V0.3)
  • Automatic playback queues (for creating routes or complex actions) (done in V0.2)
  • Support for NPC actions like animations, keys, etc (done in V0.2)
  • Automatic pathfinding (done by pamdex, but not yet included in new versions)
  • Killing NPCs (done in V0.4)
  • Mid-level functions to get rid of the build mode
  • NPC streaming (see the RNPC Pool include in the download section)
  • REC file repositioning to move existing actions to other places
  • Own threads for rec file creation/modification
The list of course is open and not binding. Im asking you to give any suggestions you got, and Ill see if they can be realized.

Bugs
Creating a new recording file (using RNPC_CreateBuild) on the same slot the NPC is currently playing back will crash the NPC.
Fix: To be sure, create the new build on another slot. Due to the way of communcation, stopping the playback just before creating a new one is a typical race condition, the NPC might, or might not have stopped the playback when writing to the file then. So this can be a reason of seemingly random crashes. Since 0.3.3 you can use RNPC_CreateBuild_s to prevent this automatically.

Starting vehicle playbacks is delayed if the vehicle is far away from its recorded position.
Fix: This is a SA-MP issue, however it can be fixed when specifiing the vehicleid in RNPC_StartBuildPlayback. This will start the recording twice with a small delay, which seems to fix the problem.

Missing DLLs?
If you get error messages about missing DLLs when starting the server, try installing Visual C++ redistributables.
MSVCP120.dll is part of this: http://www.microsoft.com/en-us/downl....aspx?id=40784 (x86 version)
Thanks to [D]ry[D]esert

Background info
The system behind it is quite easy.
When MoveRNPC is called, the plugin generates a .rec file for the movement from A to B. Then a clientmessage is sent to the npc, telling him that theres a new action in his record file. He plays it back, and reports back when its done.
The "build mode" is meant to assemble more complex actions than just walking. When starting it, the record file is created, and new segments are added whenever something is added in the script. This way the .rec file is built step-by-step, and can easily be played back after finishing it. As this is quite complicated if you arent familiar with the way .rec files work, Ill add CNPC-like Mid-level functions later.
The source currently contains MapAndreas. Dont get confused by that, I altered an old project and as im going to need MapAndreas anyways at a later stage I just kept it there.

Changelog
0.1: Initial release
0.2: Huge amount of changes, the plugin is now really useable for normal servers:
  • New "build mode" system and .rec generate code
  • Complete support for all OnFoot attributes
  • Greatly increased performance
0.2.1: Minor release
  • When using the defined movement speeds (RNPC_SPEED_WALK etc) the correct walking animation will be set.
  • Removed some old functions
  • Fixed some minor bugs
  • Linux version included
0.3: Vehicle support (ugly release)
  • Support for vehicle recordings
  • Included MapAndreas 1.1
  • Support for acceleration with a new movement generation
  • Some bugfixes and new functions
  • Probably a lot new bugs
0.3.3: Bugfixes (Testing release) (announcement post)
  • ConnectRNPC now returns the correct ID without the need for timers or extra stuff
  • Fixed a bug with RNPC_StartBuildPlayback and RNPC_StartPlayback that could cause them to have no effect
  • Added IsPlayerRNPC(playerid) to check if a player is a valid and ready RNPC
  • Added optional parameter use_zmap to RNPC_AddMovement/RNPC_ConcatMovement to use MapAndreas for z-coordinates (MapAndreas has to be initialized correctly)
0.3.4: User-friendliness
  • Update notifier
  • Some new functions
  • Better and safer functionality of some functions
  • Updated to MapAndreas 1.2
0.4: Damage management update
  • Shoot NPCs
  • Drive over NPCs
  • Kill NPCs
  • A bunch of new functions and callbacks
  • Some bugfixes and improved sync
(That list is getting long, I should move the old updates to some other place soon)

Currently working on
(I cant and wont give any information about release dates)
(realtime) .rec file editing, NPC communication remake (no more strcmp) and better possibilities to add own NPC directives (that actually is a great way to reduce server load and so allow more NPCs, more about that idea later), enabling NPCs damaging normal players in lagcomp mode.

Some suggestion for useful SA-MP NPC updates
Ive been suggesting some of that stuff for years now. All of them would make NPCs in general, and especially RNPC much more powerful. This is my personal selection, just listing the "important" ones that got no nice script/plugin solution, so I still hope at least some of them will be realized some time. Sure theres a suggestion thread, but I thought this thread would be an even better place for this, as it also explains why RNPC is that limited in some aspects.
  • Sync the full aimvector in rec files, not just the facing angle: right now there is absolutely no chance to make a NPC look/aim up and down, without memory hacking (except using quaternions to rotate the whole character, but thats useless) Though this is a really important thing to create nice NPCs.
  • Allow access to more information in npc scripts: Using npc scripts combined with dynamic rec file creation allows great NPC AIs without affecting the servers performance a lot. But the possibilities currently are very limited, as a_npc doesnt allow access to many player/vehicle/server information. NPCs are treated pretty much like normal players, so I guess the server also sends the same information to them. So why not create natives to access them all?
  • Ignore lag compensation mode for NPCs: I understand this might be a difficult one, depending on how the lagcomp mode is treated internally. But seriously, right now you have to decide to either get damage from shooting NPCs (lagcomp off) or being able to shoot NPCs (lagcomp on). And invulnerable NPCs that are able to kill you are just as useless as killable NPCs that cant harm you. So it would be a GREAT improvement, if the server would ignore the lagcomp mode for NPCs, and instead always relies on the clients for that.

Download
Version 0.3.1.1 Fixed RNPC_StopPlayback (25.2.2013), full package with 0.3.1 release version plugin (updated link)
Version 0.3.3 (24.5.2014) test release, complete with .dll .so and source (26.5.2014: Small fixes, thanks to [D]ry[D]esert, juandiegox and EnzoMetlc)
Version 0.3.4 (18.6.2014) Full package Consider this post for changes and infos
Version 0.4 (26.6.2014) Full package Consider this post for detailled changes and infos

Other stuff
ARNPC include by TheArcher - An "addon" for RNPC that fixes a bunch of bugs, and adds a bunch of new functions like RNPCFollowPlayer
RNPC Pool include - Great for reducing the amount of wasted player slots for NPCs, essential for streaming NPCs
An include for 0.4 for creating very basic zombie bots to test the new damage management
SAfull.hmap for lazy guys who dont want to get it from MapAndreas

Have fun, and give some feedback

Last edited by Mauzen; 27/08/2014 at 02:34 PM. Reason: Version 0.4
Mauzen is offline   Reply With Quote
Old 01/07/2012, 03:26 PM   #2
WillyP
High-roller
 
WillyP's Avatar
 
Join Date: Jul 2010
Location: Durham, England
Posts: 2,232
Reputation: 63
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

This. Is. Awesome.
WillyP is offline   Reply With Quote
Old 01/07/2012, 03:30 PM   #3
zgintasz
Huge Clucker
 
Join Date: Oct 2011
Posts: 394
Reputation: 8
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Very good job! Keep it up .
zgintasz is offline   Reply With Quote
Old 01/07/2012, 03:35 PM   #4
Michael@Belgium
High-roller
 
Michael@Belgium's Avatar
 
Join Date: Dec 2010
Location: Belgium
Posts: 2,496
Reputation: 836
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Aw yeaaah Nice work !
Michael@Belgium is offline   Reply With Quote
Old 01/07/2012, 04:24 PM   #5
Kar
High-roller
 
Join Date: May 2010
Location: Black Asylum
Posts: 2,876
Reputation: 280
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

NICE!. I CAN'T WAIT FOR Vehicle support!
__________________

  • Twisted Metal's Website & Forums are up! http://tm.lvcnr.net

    Are you prepared to get your wish? Twisted Metal SA-MP is coming soon! Join the IRC Channel: #tm on irc.tl - @tmsamp_dev

server.lvcnr.net:7777 | samp://server.lvcnr.net:7777
www.lvcnr.net | @kcnrdev
Channel: #lvcnr on irc.tl
Kar is offline   Reply With Quote
Old 01/07/2012, 06:07 PM   #6
Joe Staff
High-roller
 
Joe Staff's Avatar
 
Join Date: Aug 2007
Posts: 2,809
Reputation: 330
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

As I mentioned in my old thread, it should be relatively easy to create configuring functions pre-rec generation like so...

pawn Code:
public OnPlayerCommandText(playerid,cmdtext[])
{
    if(!strcmp(cmdtext[1],"createrecording"))
    {
        RNPCSetKeys(KEY_WALK+KEY_AIM);
        RNPCSetWeapon(31);
        RNPCSetVehicleID(myvehicleid);
        RNPCIsMoving(false);
        RNPCGenerate(REC_ON_FOOT,X,Y,Z,X,Y,Z); //The second X,Y,Z representing a 'to destination'
    }
}
__________________
Evil triumphs when good men do nothing.
Joe Staff is offline   Reply With Quote
Old 01/07/2012, 08:48 PM   #7
Mauzen
High-roller
 
Mauzen's Avatar
 
Join Date: Jun 2007
Location: Western Germany
Posts: 4,136
Reputation: 1027
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Quote:
Originally Posted by Joe Staff View Post
As I mentioned in my old thread, it should be relatively easy to create configuring functions pre-rec generation like so...
Yes thats the way i planned to do it, seems to be the best way.
Structure will change a bit with the new generation code. Recordings will be appendable (already are in the current version, but just in the code, not useable with the include yet) so you can build a route or set of actions step by step, also including "pauses" without movements, as the current code just works with movements. Then you can set those configs for each step, this should give maximum control.

The biggest problem i got so far is making vehicle movements at least a bit smooth. Already thought about different ways to interpolate curves and turns. However the first vehicle version will just offer straight movements.
Mauzen is offline   Reply With Quote
Old 01/07/2012, 08:50 PM   #8
BloodyEric
Huge Clucker
 
BloodyEric's Avatar
 
Join Date: May 2008
Location: Berlin, Germany
Posts: 359
Reputation: 12
Default AW: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Awesome mauzen, awesome!

Best would of course be to find a way using the GPS Pathfinding stuff to make it like the 0.2.5 Actors work, but I know it is hardly possible.
BloodyEric is online now   Reply With Quote
Old 01/07/2012, 08:52 PM   #9
Mauzen
High-roller
 
Mauzen's Avatar
 
Join Date: Jun 2007
Location: Western Germany
Posts: 4,136
Reputation: 1027
Default Re: AW: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Quote:
Originally Posted by BloodyEric View Post
Awesome mauzen, awesome!

Best would of course be to find a way using the GPS Pathfinding stuff to make it like the 0.2.5 Actors work, but I know it is hardly possible.
Hehe I indeed already thought about that. Using MapAndreas to evade obstacles, or navigating with the GTA nodes. But this will take a while.

Damn, im somehow curious myself how far this plugin will make it. I got tons of ideas.
Mauzen is offline   Reply With Quote
Old 01/07/2012, 08:59 PM   #10
TheArcher
High-roller
 
TheArcher's Avatar
 
Join Date: Dec 2009
Location: Home
Posts: 2,493
Reputation: 233
Default Re: RNPC - Recordfree NPCs | Control NPCs without recording | DEV

Damn it, i was going to release such a idea today, but this looks better since its a plugin. Good job

Edit: You released almost everything we spoke in PM

Edit2: What about GTA path?
__________________

Last edited by TheArcher; 01/07/2012 at 09:35 PM.
TheArcher is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Control NPCs using Paths? Programie Scripting Help 2 16/06/2012 02:49 PM
Help with recording two npcs at once marharth Help Archive 3 13/08/2010 03:14 AM
Recording NPCs animation with new version (0.3b) Hernaner28 Help Archive 0 12/08/2010 01:17 AM
No NPCs regdude Server Support 5 08/07/2010 05:54 PM
[HELP] Npcs armyoftwo Help Archive 3 05/12/2009 09:43 AM


All times are GMT. The time now is 11:44 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.