Raised This Month: $51 Target: $400
 12% 

NPC in CS:S


Post New Thread Reply   
 
Thread Tools Display Modes
raydan
Senior Member
Join Date: Aug 2006
Old 03-27-2011 , 07:52   Re: NPC in CS:S
Reply With Quote #21

i working a npc extension in css using CEntity, used alot scaned function , virtual function. And CEntity can't find some data member, like "m_pStudioHdr"

i already rewrite CAI_BaseNPC, CBaseHeadcrab, CHeadcrab
i can successful spawn npc_headcrab, but the AI/Schedules doesn't work

the following code use alot CAI_BaseNPC static pointer, like gm_SquadSlotNamespace and so on. It very hard to access...

i have "done" DECLARE_ACTIVITY, DECLARE_ANIMEVENT

if someone interest to try make it work, i can upload source code

Code:
//-----------------------------------------------------------------------------
//
// Schedules
//
//-----------------------------------------------------------------------------
AI_BEGIN_CUSTOM_NPC( npc_headcrab, CBaseHeadcrab )
 DECLARE_TASK( TASK_HEADCRAB_HOP_ASIDE )
 DECLARE_TASK( TASK_HEADCRAB_DROWN )
 DECLARE_TASK( TASK_HEADCRAB_HOP_OFF_NPC )
 DECLARE_TASK( TASK_HEADCRAB_WAIT_FOR_BARNACLE_KILL )
 DECLARE_TASK( TASK_HEADCRAB_UNHIDE )
 DECLARE_TASK( TASK_HEADCRAB_HARASS_HOP )
 DECLARE_TASK( TASK_HEADCRAB_BURROW )
 DECLARE_TASK( TASK_HEADCRAB_UNBURROW )
 DECLARE_TASK( TASK_HEADCRAB_FIND_BURROW_IN_POINT )
 DECLARE_TASK( TASK_HEADCRAB_BURROW_WAIT )
 DECLARE_TASK( TASK_HEADCRAB_CHECK_FOR_UNBURROW )
 DECLARE_TASK( TASK_HEADCRAB_JUMP_FROM_CANISTER )
 DECLARE_TASK( TASK_HEADCRAB_CLIMB_FROM_CANISTER )
 DECLARE_TASK( TASK_HEADCRAB_CEILING_POSITION )
 DECLARE_TASK( TASK_HEADCRAB_CEILING_WAIT )
 DECLARE_TASK( TASK_HEADCRAB_CEILING_DETACH )
 DECLARE_TASK( TASK_HEADCRAB_CEILING_FALL )
 DECLARE_TASK( TASK_HEADCRAB_CEILING_LAND )
 DECLARE_ACTIVITY( ACT_HEADCRAB_THREAT_DISPLAY )
 DECLARE_ACTIVITY( ACT_HEADCRAB_HOP_LEFT )
 DECLARE_ACTIVITY( ACT_HEADCRAB_HOP_RIGHT )
 DECLARE_ACTIVITY( ACT_HEADCRAB_DROWN )
 DECLARE_ACTIVITY( ACT_HEADCRAB_BURROW_IN )
 DECLARE_ACTIVITY( ACT_HEADCRAB_BURROW_OUT )
 DECLARE_ACTIVITY( ACT_HEADCRAB_BURROW_IDLE )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CRAWL_FROM_CANISTER_LEFT )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CRAWL_FROM_CANISTER_CENTER )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CRAWL_FROM_CANISTER_RIGHT )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CEILING_FALL )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CEILING_IDLE )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CEILING_DETACH )
 DECLARE_ACTIVITY( ACT_HEADCRAB_CEILING_LAND )
 DECLARE_CONDITION( COND_HEADCRAB_IN_WATER )
 DECLARE_CONDITION( COND_HEADCRAB_ILLEGAL_GROUNDENT )
 DECLARE_CONDITION( COND_HEADCRAB_BARNACLED )
 DECLARE_CONDITION( COND_HEADCRAB_UNHIDE )
 //Adrian: events go here
 DECLARE_ANIMEVENT( AE_HEADCRAB_JUMPATTACK )
 DECLARE_ANIMEVENT( AE_HEADCRAB_JUMP_TELEGRAPH )
 DECLARE_ANIMEVENT( AE_HEADCRAB_BURROW_IN )
 DECLARE_ANIMEVENT( AE_HEADCRAB_BURROW_IN_FINISH )
 DECLARE_ANIMEVENT( AE_HEADCRAB_BURROW_OUT )
 DECLARE_ANIMEVENT( AE_HEADCRAB_CEILING_DETACH )
 
 //=========================================================
 // > SCHED_HEADCRAB_RANGE_ATTACK1
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_RANGE_ATTACK1,
  " Tasks"
  "  TASK_STOP_MOVING   0"
  "  TASK_FACE_ENEMY    0"
  "  TASK_RANGE_ATTACK1   0"
  "  TASK_SET_ACTIVITY   ACTIVITY:ACT_IDLE"
  "  TASK_FACE_IDEAL    0"
  "  TASK_WAIT_RANDOM   0.5"
  ""
  " Interrupts"
  "  COND_ENEMY_OCCLUDED"
  "  COND_NO_PRIMARY_AMMO"
 )
 //=========================================================
 //
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_WAKE_ANGRY,
  " Tasks"
  "  TASK_STOP_MOVING    0"
  "  TASK_SET_ACTIVITY    ACTIVITY:ACT_IDLE "
  "  TASK_FACE_IDEAL     0"
  "  TASK_SOUND_WAKE     0"
  "  TASK_PLAY_SEQUENCE_FACE_ENEMY ACTIVITY:ACT_HEADCRAB_THREAT_DISPLAY"
  ""
  " Interrupts"
 )
 //=========================================================
 //
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_WAKE_ANGRY_NO_DISPLAY,
  " Tasks"
  "  TASK_STOP_MOVING    0"
  "  TASK_SET_ACTIVITY    ACTIVITY:ACT_IDLE "
  "  TASK_FACE_IDEAL     0"
  "  TASK_SOUND_WAKE     0"
  "  TASK_FACE_ENEMY     0"
  ""
  " Interrupts"
 )
 //=========================================================
 // > SCHED_FAST_HEADCRAB_RANGE_ATTACK1
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_FAST_HEADCRAB_RANGE_ATTACK1,
  " Tasks"
  "  TASK_STOP_MOVING   0"
  "  TASK_FACE_ENEMY    0"
  "  TASK_RANGE_ATTACK1   0"
  "  TASK_SET_ACTIVITY   ACTIVITY:ACT_IDLE"
  "  TASK_FACE_IDEAL    0"
  "  TASK_WAIT_RANDOM   0.5"
  ""
  " Interrupts"
 )
 //=========================================================
 // The irreversible process of drowning
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_DROWN,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE  SCHEDULE:SCHED_HEADCRAB_FAIL_DROWN"
  "  TASK_SET_ACTIVITY   ACTIVITY:ACT_HEADCRAB_DROWN"
  "  TASK_HEADCRAB_DROWN   0"
  ""
  " Interrupts"
 )
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_FAIL_DROWN,
  " Tasks"
  "  TASK_HEADCRAB_DROWN   0"
  ""
  " Interrupts"
 )

 //=========================================================
 // Headcrab lurks in place and waits for a chance to jump on
 // some unfortunate soul.
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_AMBUSH,
  " Tasks"
  "  TASK_STOP_MOVING   0"
  "  TASK_SET_ACTIVITY   ACTIVITY:ACT_IDLE"
  "  TASK_WAIT_INDEFINITE  0"
  " Interrupts"
  "  COND_SEE_ENEMY"
  "  COND_SEE_HATE"
  "  COND_CAN_RANGE_ATTACK1"
  "  COND_LIGHT_DAMAGE"
  "  COND_HEAVY_DAMAGE"
  "  COND_PROVOKED"
 )
 //=========================================================
 // Headcrab has landed atop another NPC or has landed on 
 // a ledge. Get down!
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_HOP_RANDOMLY,
  " Tasks"
  "  TASK_STOP_MOVING   0"
  "  TASK_HEADCRAB_HOP_OFF_NPC 0"
  " Interrupts"
 )
 //=========================================================
 // Headcrab is in the clutches of a barnacle
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_BARNACLED,
  " Tasks"
  "  TASK_STOP_MOVING      0"
  "  TASK_SET_ACTIVITY      ACTIVITY:ACT_HEADCRAB_DROWN"
  "  TASK_HEADCRAB_WAIT_FOR_BARNACLE_KILL 0"
  " Interrupts"
 )
 //=========================================================
 // Headcrab is unhiding
 //=========================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_UNHIDE,
  " Tasks"
  "  TASK_HEADCRAB_UNHIDE   0"
  " Interrupts"
 )
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_HARASS_ENEMY,
  " Tasks"
  "  TASK_FACE_ENEMY     0"
  "  TASK_HEADCRAB_HARASS_HOP  0"
  "  TASK_WAIT_FACE_ENEMY   1"
  "  TASK_SET_ROUTE_SEARCH_TIME  2" // Spend 2 seconds trying to build a path if stuck
  "  TASK_GET_PATH_TO_RANDOM_NODE 300"
  "  TASK_WALK_PATH     0"
  "  TASK_WAIT_FOR_MOVEMENT   0"
  " Interrupts"
  "  COND_NEW_ENEMY"
 )
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_FALL_TO_GROUND,
  " Tasks"
  "  TASK_SET_ACTIVITY    ACTIVITY:ACT_HEADCRAB_DROWN"
  "  TASK_FALL_TO_GROUND    0"
  ""
  " Interrupts"
 )
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_CRAWL_FROM_CANISTER,
  " Tasks"
  "  TASK_HEADCRAB_CLIMB_FROM_CANISTER 0"
  "  TASK_HEADCRAB_JUMP_FROM_CANISTER 0"
  ""
  " Interrupts"
 )
 //==================================================
 // Burrow In
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_BURROW_IN,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_CHASE_ENEMY_FAILED"
  "  TASK_HEADCRAB_BURROW    0"
  "  TASK_PLAY_SEQUENCE     ACTIVITY:ACT_HEADCRAB_BURROW_IN"
  "  TASK_PLAY_SEQUENCE     ACTIVITY:ACT_HEADCRAB_BURROW_IDLE"
  "  TASK_SET_SCHEDULE     SCHEDULE:SCHED_HEADCRAB_BURROW_WAIT"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
 )
 //==================================================
 // Run to a nearby burrow hint and burrow there
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_RUN_TO_BURROW_IN,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_CHASE_ENEMY_FAILED"
  "  TASK_HEADCRAB_FIND_BURROW_IN_POINT 512"
  "  TASK_SET_TOLERANCE_DISTANCE   8"
  "  TASK_RUN_PATH      0"
  "  TASK_WAIT_FOR_MOVEMENT    0"
  "  TASK_SET_SCHEDULE     SCHEDULE:SCHED_HEADCRAB_BURROW_IN"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
  "  COND_GIVE_WAY"
  "  COND_CAN_RANGE_ATTACK1"
 )
 //==================================================
 // Run to m_pHintNode and burrow there
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_RUN_TO_SPECIFIC_BURROW,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_CHASE_ENEMY_FAILED"
  "  TASK_SET_TOLERANCE_DISTANCE   8"
  "  TASK_GET_PATH_TO_HINTNODE   0"
  "  TASK_RUN_PATH      0"
  "  TASK_WAIT_FOR_MOVEMENT    0"
  "  TASK_SET_SCHEDULE     SCHEDULE:SCHED_HEADCRAB_BURROW_IN"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
  "  COND_GIVE_WAY"
 )
 //==================================================
 // Wait until we can unburrow and attack something
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_BURROW_WAIT,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_HEADCRAB_BURROW_WAIT"
  "  TASK_HEADCRAB_BURROW_WAIT   1"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
  "  COND_NEW_ENEMY"    // HACK: We don't actually choose a new schedule on new enemy, but
           // we need this interrupt so that the headcrab actually acquires
           // new enemies while burrowed. (look in ai_basenpc.cpp for "DO NOT mess")
  "  COND_CAN_RANGE_ATTACK1"
 )
 //==================================================
 // Burrow Out
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_BURROW_OUT,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE   SCHEDULE:SCHED_HEADCRAB_BURROW_WAIT"
  "  TASK_HEADCRAB_UNBURROW   0"
  "  TASK_PLAY_SEQUENCE    ACTIVITY:ACT_HEADCRAB_BURROW_OUT"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
 )
 //==================================================
 // Wait for it to be clear for unburrowing
 //==================================================
 DEFINE_SCHEDULE
 (
  SCHED_HEADCRAB_WAIT_FOR_CLEAR_UNBURROW,
  " Tasks"
  "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_HEADCRAB_BURROW_WAIT"
  "  TASK_HEADCRAB_CHECK_FOR_UNBURROW  1"
  "  TASK_SET_SCHEDULE     SCHEDULE:SCHED_HEADCRAB_BURROW_OUT"
  ""
  " Interrupts"
  "  COND_TASK_FAILED"
 )
 //==================================================
 // Wait until we can drop.
 //==================================================
 DEFINE_SCHEDULE
 (
 SCHED_HEADCRAB_CEILING_WAIT,
 " Tasks"
 "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_HEADCRAB_CEILING_DROP"
 "  TASK_SET_ACTIVITY     ACTIVITY:ACT_HEADCRAB_CEILING_IDLE"
 "  TASK_HEADCRAB_CEILING_POSITION  0"
 "  TASK_HEADCRAB_CEILING_WAIT   1"
 ""
 " Interrupts"
 "  COND_TASK_FAILED"
 "  COND_NEW_ENEMY" 
 "  COND_CAN_RANGE_ATTACK1"
 )
 //==================================================
 // Deatch from ceiling.
 //==================================================
 DEFINE_SCHEDULE
 (
 SCHED_HEADCRAB_CEILING_DROP,
 " Tasks"
 "  TASK_SET_FAIL_SCHEDULE    SCHEDULE:SCHED_HEADCRAB_CEILING_WAIT"
 "  TASK_HEADCRAB_CEILING_DETACH  0"
 "  TASK_HEADCRAB_CEILING_FALL   0"
 "  TASK_HEADCRAB_CEILING_LAND   0"
 ""
 " Interrupts"
 "  COND_TASK_FAILED"
 )
AI_END_CUSTOM_NPC()
raydan is offline
KyleS
SourceMod Plugin Approver
Join Date: Jul 2009
Location: Segmentation Fault.
Old 03-27-2011 , 09:17   Re: NPC in CS:S
Reply With Quote #22

If you've given up, could you upload the source?
KyleS is offline
raydan
Senior Member
Join Date: Aug 2006
Old 03-29-2011 , 10:57   Re: NPC in CS:S
Reply With Quote #23

For Windows Only!
most updated source code in here
http://code.google.com/p/sourcemod-n...source/browse/


some codes are hard coded a offset or address

you can spawn a headcrab, but it will die within 10 seconds (i can't fix it)
i think the problem is the schedule or task or something.

And the virtual offset mark as "correct", which mean it 99% correct in CSS (already tested)

In source code, mark as "CE_TODO", mean code unfinish

if someone can find out how to fix the schedule, tell me how to fix

good luck

P.S. Thx CEntity
Attached Files
File Type: zip gm_construct.zip (510.2 KB, 146 views)
File Type: txt monster.games.txt (11.9 KB, 160 views)

Last edited by raydan; 03-29-2011 at 11:49.
raydan is offline
raydan
Senior Member
Join Date: Aug 2006
Old 03-31-2011 , 03:19   Re: NPC in CS:S
Reply With Quote #24

some offset are wrong, and CEntity doesn't support logical entity??

Last edited by raydan; 03-31-2011 at 04:45.
raydan is offline
raydan
Senior Member
Join Date: Aug 2006
Old 04-01-2011 , 11:21   Re: NPC in CS:S
Reply With Quote #25

Headcrap demo in CSS, Monster Extension!

http://www.youtube.com/watch?v=ITWxCdNnfKc

Some problem in demo convert, the speed too fast
raydan is offline
GoD-Tony
Veteran Member
Join Date: Jul 2005
Old 04-05-2011 , 08:05   Re: NPC in CS:S
Reply With Quote #26

Quote:
Originally Posted by raydan View Post
Headcrap demo in CSS, Monster Extension!

http://www.youtube.com/watch?v=ITWxCdNnfKc

Some problem in demo convert, the speed too fast
Very cool It looks like the future of Zombie plugins.
GoD-Tony is offline
Leonardo
Veteran Member
Join Date: Feb 2010
Location: 90's
Old 04-07-2011 , 00:14   Re: NPC in CS:S
Reply With Quote #27

video posted at April 1st, lol
also, crabs with over 50 hp FTW
also2, only for css? does/will it able to every OB games?
Leonardo is offline
raydan
Senior Member
Join Date: Aug 2006
Old 04-07-2011 , 10:48   Re: NPC in CS:S
Reply With Quote #28

working on npz_zombie, but really really hard to do, alot of code are missing. I am thinking it still work.

My be rewrite the CAI_BaseNPC are much better
raydan is offline
KyleS
SourceMod Plugin Approver
Join Date: Jul 2009
Location: Segmentation Fault.
Old 04-08-2011 , 11:15   Re: NPC in CS:S
Reply With Quote #29

Quote:
Originally Posted by raydan View Post
Headcrap demo in CSS, Monster Extension!

http://www.youtube.com/watch?v=ITWxCdNnfKc

Some problem in demo convert, the speed too fast
This will replace many 'bot' dependencies. Great job man!
KyleS is offline
raydan
Senior Member
Join Date: Aug 2006
Old 04-11-2011 , 07:12   Re: NPC in CS:S
Reply With Quote #30

updated source code

the zombie code make me crazy

Use this code can spawn classic headcrab, fast headcrab, black headcrab

i completely give up!
Attached Files
File Type: txt monster.games.txt (14.1 KB, 186 views)
raydan is offline
Reply



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

Forum Jump


All times are GMT -4. The time now is 07:03.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode