trouble creating a custom instant gang

Anything to do with GTA1/GTA2 modding (tools, scripts and more).
Post Reply
jibby
Mugger
Mugger
Posts: 10
Joined: 23 Mar 2011, 04:09

trouble creating a custom instant gang

Post 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
User avatar
elypter
Immortal
Posts: 1120
Joined: 26 Dec 2009, 23:53
GH nick: elypter

Re: trouble creating a custom instant gang

Post 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
yur sa'nok ngeyä
jibby
Mugger
Mugger
Posts: 10
Joined: 23 Mar 2011, 04:09

Re: trouble creating a custom instant gang

Post 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
jibby
Mugger
Mugger
Posts: 10
Joined: 23 Mar 2011, 04:09

Re: trouble creating a custom instant gang

Post 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?
User avatar
elypter
Immortal
Posts: 1120
Joined: 26 Dec 2009, 23:53
GH nick: elypter

Re: trouble creating a custom instant gang

Post 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
yur sa'nok ngeyä
User avatar
Sektor
Boss
Boss
Posts: 1426
Joined: 04 Mar 2008, 06:51
GH nick: Sektor
Location: GTAMP.com
Contact:

Re: trouble creating a custom instant gang

Post 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.
jibby
Mugger
Mugger
Posts: 10
Joined: 23 Mar 2011, 04:09

Re: trouble creating a custom instant gang

Post by jibby »

Hmm, ++counter1 does not fix it for me. I attached the file. I appreciate the help, guys, this community is awesome.
Attachments
MP1.mis
mission with custom gangs based on original Tiny Town map
(32.72 KiB) Downloaded 440 times
User avatar
Sektor
Boss
Boss
Posts: 1426
Joined: 04 Mar 2008, 06:51
GH nick: Sektor
Location: GTAMP.com
Contact:

Re: trouble creating a custom instant gang

Post 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.
jibby
Mugger
Mugger
Posts: 10
Joined: 23 Mar 2011, 04:09

Re: trouble creating a custom instant gang

Post 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!
Post Reply