Page 1 of 1

trouble creating a custom instant gang

Posted: 24 Mar 2011, 07:05
by jibby
I'm trying to create a custom "instant gang". I tried using Dafe's Death Valley as an example, but I'm getting a bug. When I go on the designated spot, I either get killed (if walking) or get transported elsewhere (if in car). Not sure what could be causing this in my code. I copied the relevant parts below:

Code: Select all

PLAYER_PED player1 = (84.6, 172.7, 2.1) 17 180
PLAYER_PED player2 = (85.5, 172.7, 2.1) 15 180
PLAYER_PED player3 = (85.2, 172.7, 255.0) 17 180
PLAYER_PED player4 = (84.9, 172.7, 2.1) 15 180
PLAYER_PED player5 = (84.2, 172.7, 2.1) 7 180
PLAYER_PED player6 = (85.8, 172.7, 255.0) 0 180

CHAR_DATA busgang1  //  9 BOTS USED FOR CRANE BUS GANG TO HELP PLAYER WHOM ACTIVATES IT
CHAR_DATA busgang2
CHAR_DATA busgang3
CHAR_DATA busgang4
CHAR_DATA busgang5
CHAR_DATA busgang6
CHAR_DATA busgang7
CHAR_DATA busgang8
CHAR_DATA busgang9


////////////////////////////////////////////////////////////////////////////////////////////////////
//  BUSGANG SUBROUTINES                                                                           //
////////////////////////////////////////////////////////////////////////////////////////////////////

//  SUBROUTINE TO KILL THE BUSGANG
killbusgang:
              IF ( CHECK_CHARACTER_HEALTH ( busgang1 , 0 ) )  //  KILL AND MARK TO DELETE CHARACTER IN QUEUE IF ALREADY PREVIOUSLY SPAWNED
                 KILL_CHAR ( busgang1 )  //  MAKE CHARACTER DIE
                 DELETE_ITEM ( busgang1 )  //  PUT DEAD CHARACTER IN DELETE QUEUE
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang2 , 0 ) )
                 KILL_CHAR ( busgang2 )
                 DELETE_ITEM ( busgang2 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang3 , 0 ) )
                 KILL_CHAR ( busgang3 )
                 DELETE_ITEM ( busgang3 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang4 , 0 ) )
                 KILL_CHAR ( busgang4 )
                 DELETE_ITEM ( busgang4 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang5 , 0 ) )
                 KILL_CHAR ( busgang5 )
                 DELETE_ITEM ( busgang5 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang6 , 0 ) )
                 KILL_CHAR ( busgang6 )
                 DELETE_ITEM ( busgang6 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang7 , 0 ) )
                 KILL_CHAR ( busgang7 )
                 DELETE_ITEM ( busgang7 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang8 , 0 ) )
                 KILL_CHAR ( busgang8 )
                 DELETE_ITEM ( busgang8 )
              ENDIF
              IF ( CHECK_CHARACTER_HEALTH ( busgang9 , 0 ) )
                 KILL_CHAR ( busgang9 )
                 DELETE_ITEM ( busgang9 )
              ENDIF
RETURN

//  ROUTINE TO SPAWN A NEW BUSGANG OF 9 CHARACTERS AND SET UP THEIR CHARACTERISTICS  ///////////////
COUNTER busgangflag = 0

spawnbusgang:
              busgang1 = CREATE_CHAR (63.5, 184.0) 28 90 PSYCHO END // SPAWN 9 BUSGANGx MEMBERS
              busgang2 = CREATE_CHAR (62.0, 184.4) 29 90 PSYCHO END
              busgang3 = CREATE_CHAR (63.3, 184.6) 30 90 PSYCHO END
              busgang4 = CREATE_CHAR (62.8, 183.2) 31 90 PSYCHO END
              busgang5 = CREATE_CHAR (62.8, 184.2) 32 90 PSYCHO END
              busgang6 = CREATE_CHAR (62.8, 185.2) 33 90 PSYCHO END
              busgang7 = CREATE_CHAR (62.1, 183.6) 49 90 PSYCHO END
              busgang8 = CREATE_CHAR (62.3, 185.0) 51 90 PSYCHO END
              busgang9 = CREATE_CHAR (63.3, 185.1) 51 90 PSYCHO END

              IF ( CHECK_CHARACTER_HEALTH ( busgang1 , 0 ) ) // SET BUSGANG MEMBERS ATTRIBUTES
                 SET_CHAR_GRAPHIC_TYPE ( busgang1 , DUMMY_GRAPHIC , 28 )
                 SET_CHAR_THREAT_REACTION ( busgang1 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang1 , ON )
                 GIVE_WEAPON ( busgang1 , ELECTRO_BATON )
                 SET_CHAR_THREAT_SEARCH ( busgang1 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang1 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang1 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang2 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang2 , DUMMY_GRAPHIC , 29 )
                 SET_CHAR_THREAT_REACTION ( busgang2 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang2 , ON )
                 GIVE_WEAPON ( busgang2 , ROCKET_LAUNCHER )
                 SET_CHAR_THREAT_SEARCH ( busgang2 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang2 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang2 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang3 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang3 , DUMMY_GRAPHIC , 30 )
                 SET_CHAR_THREAT_REACTION ( busgang3 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang3 , ON )
                 GIVE_WEAPON ( busgang3 , FLAME_THROWER )
                 SET_CHAR_THREAT_SEARCH ( busgang3 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang3 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang3 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang4 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang4 , DUMMY_GRAPHIC , 31 )
                 SET_CHAR_THREAT_REACTION ( busgang4 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang4 , ON )
                 GIVE_WEAPON ( busgang4 , MOLOTOV )
                 SET_CHAR_THREAT_SEARCH ( busgang4 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang4 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang4 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang5 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang5 , DUMMY_GRAPHIC , 32 )
                 SET_CHAR_THREAT_REACTION ( busgang5 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang5 , ON )
                 GIVE_WEAPON ( busgang5 , GRENADE )
                 SET_CHAR_THREAT_SEARCH ( busgang5 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang5 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang5 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang6 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang6 , DUMMY_GRAPHIC , 33 )
                 SET_CHAR_INVINCIBLE ( busgang6 , ON )
                 GIVE_WEAPON ( busgang6 , SILENCED_MACHINE_GUN )
                 SET_CHAR_THREAT_SEARCH ( busgang6 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang6 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang6 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang7 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang7 , DUMMY_GRAPHIC , 49 )
                 SET_CHAR_THREAT_REACTION ( busgang7 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang7 , ON )
                 GIVE_WEAPON ( busgang7 , MACHINE_GUN )
                 SET_CHAR_THREAT_SEARCH ( busgang7 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang7 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang7 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang8 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang8 , DUMMY_GRAPHIC , 51 )
                 SET_CHAR_THREAT_REACTION ( busgang8 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang8 , ON )
                 GIVE_WEAPON ( busgang8 , SHOTGUN )
                 SET_CHAR_THREAT_SEARCH ( busgang8 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang8 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang8 , NORMAL_SHOT )
              ENDIF

              IF ( CHECK_CHARACTER_HEALTH ( busgang9 , 0 ) )
                 SET_CHAR_GRAPHIC_TYPE ( busgang9 , DUMMY_GRAPHIC , 51 )
                 SET_CHAR_THREAT_REACTION ( busgang9 , NO_REACTION )
                 SET_CHAR_INVINCIBLE ( busgang9 , ON )
                 GIVE_WEAPON ( busgang9 , PISTOL )
                 SET_CHAR_THREAT_SEARCH ( busgang9 , AREA_PLAYER_ONLY )
                 SET_CHAR_BRAVERY_LEVEL ( busgang9 , LOONY )
                 SET_CHAR_SHOOTING_SKILL ( busgang9 , NORMAL_SHOT )
              ENDIF

              ADD_GROUP_TO_CHARACTER ( busgang1, 0 ) //  MAKE BUSGANG1 MEMBER THE INITIAL LEADER OF GROUP - PLAYER IS MADE LEADER IN MAIN LOOP
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang2 )  //  ADD THE REST OF BUSGANGx MEMBERS TO LEADER busgang1 GROUP
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang3 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang4 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang5 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang6 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang7 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang8 )
              ADD_EXISTING_CHAR_TO_GROUP ( busgang1, busgang9 )

RETURN


// Code Looping:
COUNTER loopage = 1

LEVELSTART

SET_SHADING_LEVEL  ( 27 )
SET_AMBIENT_LEVEL  ( 0.4 , 0 )

SWITCH_GENERATOR ( s_mac , ON )
SWITCH_GENERATOR ( pistol2 , ON )
SWITCH_GENERATOR ( dualpistol , ON )
SWITCH_GENERATOR ( mac1 , ON )
SWITCH_GENERATOR ( mac2 , ON )
SWITCH_GENERATOR ( shotgun , ON )
SWITCH_GENERATOR ( flamer , ON )
SWITCH_GENERATOR ( electro , ON )
SWITCH_GENERATOR ( bagoom , ON )
SWITCH_GENERATOR ( grenades , ON )
SWITCH_GENERATOR ( molotovs2 , ON )

SWITCH_GENERATOR ( vehmines , ON )
SWITCH_GENERATOR ( vehoil , ON )
SWITCH_GENERATOR ( vehmac , ON )

SWITCH_GENERATOR ( health , ON )
SWITCH_GENERATOR ( armor , ON )
//SWITCH_GENERATOR ( gang , ON )

// the loop
WHILE_EXEC (loopage = 1)

    IF ( (LOCATE_CHARACTER_ANY_MEANS ( player1 ,  63.0, 184.0, 2.0 , 1.0 , 1.0 ))  AND ( busgangflag = 0 ) ) 
       //GOSUB killbusgang: //  KILL ANY PRE-EXISTING BUSGANG MEMBERS IF PRESENTLY ALIVE
       GOSUB spawnbusgang:  //  SPAWN NEW BUSGANG MEMBERS
       MAKE_NEW_LEADER_OF_GROUP ( busgang1, player1 )  //  SET PLAYER AS NEW LEADER OF BUSGANG GROUP FROM ORIGINAL LEADER busgang1 MEMBER
       SET busgangflag = 1  //  BUSGANG FLAG SET GANG EXISTS FOR PLAYER1
    ENDIF

    IF ( (LOCATE_CHARACTER_ANY_MEANS ( player1 ,  63.0, 184.0, 2.0 , 1.0 , 1.0 )) AND ( NOT ( busgangflag = 1 ) )) 
       IF ( busgangflag = 2 ) //  IF PRSENT BUSGANG LEADER FLAG IS PLAYER2
          MAKE_NEW_LEADER_OF_GROUP ( player2, player1 ) //  SET PLAYER1 AS NEW LEADER OF BUSGANG GROUP FROM PREVIOUS LEADER
      	   REMOVE_CHAR_FROM_GROUP ( player1 , player2 ) // UNBIND PREVIOUS PLAYER LEADER FROM GROUP FUNCTION
       ENDIF
       IF ( busgangflag = 3 ) //  IF PRESENT BUSGANG LEADER FLAG IS PLAYER3
          MAKE_NEW_LEADER_OF_GROUP ( player3, player1 ) //  SET PLAYER1 AS NEW LEADER OF BUSGANG GROUP FROM PREVIOUS LEADER
      	   REMOVE_CHAR_FROM_GROUP ( player1 , player3 )
       ENDIF
       IF ( busgangflag = 4 ) //  IF PRESENT BUSGANG LEADER FLAG IS PLAYER4
          MAKE_NEW_LEADER_OF_GROUP ( player4, player1 ) //  SET PLAYER1 AS NEW LEADER OF BUSGANG GROUP FROM PREVIOUS LEADER
      	   REMOVE_CHAR_FROM_GROUP ( player1 , player4 )
       ENDIF
       IF ( busgangflag = 5 ) //  IF PRESENT BUSGANG LEADER FLAG IS PLAYER5
          MAKE_NEW_LEADER_OF_GROUP ( player5, player1 ) //  SET PLAYER1 AS NEW LEADER OF BUSGANG GROUP FROM PREVIOUS LEADER
      	   REMOVE_CHAR_FROM_GROUP ( player1 , player5)
       ENDIF
       IF ( busgangflag = 6 ) //  IF PRESENT BUSGANG LEADER FLAG IS PLAYER6
          MAKE_NEW_LEADER_OF_GROUP ( player6, player1 ) //  SET PLAYER1 AS NEW LEADER OF BUSGANG GROUP FROM PREVIOUS LEADER
      	   REMOVE_CHAR_FROM_GROUP ( player1 , player6 )
       ENDIF
       SET busgangflag = 1  //  BUSGANG FLAG SET GANG IS NOW LEAD BY PLAYER1
    ENDIF


ENDWHILE

LEVELEND

Re: trouble creating a custom instant gang

Posted: 24 Mar 2011, 11:51
by elypter
when they spawn directly on you, you either die, you get teleported or the camera jumps to a random ped.
spawn them mid air or in a car like on tiny tiny town army instead

Re: trouble creating a custom instant gang

Posted: 25 Mar 2011, 04:35
by jibby
Excellent. Thanks for helping me with that. I'm now running into another problem. What I would like, ideally, is to respawn this custom instant gang after a certain amount of time (like a real weapon). I tried the following code, but for some reason more than one gang spawns and it crashes. It probably has something to do with the counter, but I just can't figure out what. I also tried out using THREAD with the phone, but couldn't get it to reactivate after calling SET_PHONE_DEAD.

Code: Select all

OBJ_DATA phone1 = ( 63.0, 184.0, 2.0 ) 000 PHONE
COUNTER gangPickedup = 0

COUNTER loopage = 1
COUNTER counter1 = 0

LEVELSTART

WHILE_EXEC (loopage = 1)

    IF ((LOCATE_STOPPED_CHARACTER_ON_FOOT ( player1 ,  63.0, 184.0, 2.0 , 1.0 , 1.0 )) AND (gangPickedup=0))   //character stand on item
       GOSUB killgangA: //  KILL ANY PRE-EXISTING gangA MEMBERS IF PRESENTLY ALIVE
       GOSUB spawngangA:  //  SPAWN NEW gangA MEMBERS
       MAKE_NEW_LEADER_OF_GROUP ( gangA1, player1 )  //  SET PLAYER AS NEW LEADER OF gangA GROUP FROM ORIGINAL LEADER gangA1 MEMBER
       DELETE_ITEM (phone1)
       SET gangPickedup = 1
    ENDIF    

IF ( counter1 > 200  )           //certain time has elapsed
	IF (NOT (IS_POINT_ONSCREEN(63.0, 184.0, 2.0)))
		phone1 = CREATE_OBJ ( 63.0, 184.0, 2.0 ) 000 PHONE END
		SET counter1 = 0         
		SET gangPickedup = 0  
	ENDIF	
ENDIF

IF (gangPickedup = 1)
	SET counter1 = (counter1 + 1)
ENDIF

ENDWHILE

LEVELEND

Re: trouble creating a custom instant gang

Posted: 25 Mar 2011, 05:56
by jibby
Ah, I figured out how to use the phone thread. After deleting it and create a new phone, you have to reenable the thread by calling ENABLE_THREAD_TRIGGER (thr_p1_group).

However, my if statement, meant to delay the respawn by a couple minutes or so, ends up being ~10s no matter what the counter value is:
IF ( counter1 > 30000 ) //still 10s!!

Surely, this is a common problem. Any suggestions?

Re: trouble creating a custom instant gang

Posted: 25 Mar 2011, 10:22
by elypter
i have no idea with that. one second is usually 30 cycles. maybe your code is counting too fast or you forgot to compile the new examples/got a compiler error

Re: trouble creating a custom instant gang

Posted: 25 Mar 2011, 10:44
by Sektor
You can use ++counter1 instead of SET counter1 = (counter1 + 1) but it should do the same thing.

I tried your combining the two scripts you posted. I needed to rename some of the gangs. Changing the delay worked. Post your full script.

Re: trouble creating a custom instant gang

Posted: 25 Mar 2011, 18:11
by jibby
Hmm, ++counter1 does not fix it for me. I attached the file. I appreciate the help, guys, this community is awesome.

Re: trouble creating a custom instant gang

Posted: 26 Mar 2011, 13:28
by Sektor
Add this to the end of your phone threads:

DISABLE_THREAD_TRIGGER ( thr_p1_group )
STOP_PHONE ( phone1 )

Replace thr_p1_group with correct thread name.

The delay was working but the triggers were remaining activate, so it didn't matter how often you enabled them.

Re: trouble creating a custom instant gang

Posted: 26 Mar 2011, 18:46
by jibby
Ah, that's what it is! I figured it disabled automatically since the phone stops ringing after you pick it up. Thanks a million!