[SA] Início aleatório
Enviado: 28 Jun 2019, 09:56



Esse mod é pra quem mais abre o jogo do que joga, que fica só testando coisas e está enjoado dos save games.
Sempre que você iniciar um jogo você aparecerá em um lugar aleatório do mapa, mas nunca num lugar remoto e o cj será substituído por um ped aleatório, assim você pode apreciar melhor o mapa do jogo mesmo sem tempo de ficar andando por aí.
Atualizei o que sei
-Agora o mod é desativado ao iniciar um novo jogo;
-Corrigido crash com ids de ped 0 e 1;
-Velocidade de carregar o mapa aumentada (agora é a mesma de iniciar o jogo normalmente);
-Agora você não irá aparecer em uma cidade que ainda não foi desbloqueada no seu jogo salvo;
Agora tem um .ini simples pra você configurar o intervalo de ids dos peds e horário que o jogo inicia;
- Deixe o id inicial ou o final em -1 pra iniciar sempre com o CJ;
- Deixe a hora inicial ou a final em -1 pra iniciar na hora original do seu jogo salvo;
Atualizei o que sei²
-Refiz o sistema de selecionar o lugar, agora é mais baleancado e menos repetitivo;
-Refiz o sistema de sortear a skin;
-Adicionei configuração pra spawnar em qualquer lugar (menos água e em cima de prédios);
Código: Selecionar tudo
SCRIPT_START
{
LVAR_INT scplayer rand iStat id_inicial id_final hora_inicial hora_final aleatório lugar
LVAR_FLOAT x y z a b c z2 angulo progresso
GET_PLAYER_CHAR 0 scplayer
GET_PROGRESS_PERCENTAGE progresso
IF progresso = 0.0
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
IF NOT READ_INT_FROM_INI_FILE "cleo\início_aleatório.ini" "IDs" "ID inicial" id_inicial
id_inicial = 0
WRITE_INT_TO_INI_FILE id_inicial "cleo\início_aleatório.ini" "IDs" "ID inicial"
ENDIF
IF NOT READ_INT_FROM_INI_FILE "cleo\início_aleatório.ini" "IDs" "ID final" id_final
id_final = 289
WRITE_INT_TO_INI_FILE id_final "cleo\início_aleatório.ini" "IDs" "ID final"
ENDIF
IF NOT READ_INT_FROM_INI_FILE "cleo\início_aleatório.ini" "Horas" "Hora inicial" hora_inicial
hora_inicial = 6
WRITE_INT_TO_INI_FILE hora_inicial "cleo\início_aleatório.ini" "Horas" "Hora inicial"
ENDIF
IF NOT READ_INT_FROM_INI_FILE "cleo\início_aleatório.ini" "Horas" "Hora final" hora_final
hora_final = 18
WRITE_INT_TO_INI_FILE hora_final "cleo\início_aleatório.ini" "Horas" "Hora final"
ENDIF
IF NOT READ_INT_FROM_INI_FILE "cleo\início_aleatório.ini" "Lugar" "lugar" lugar
lugar = 0
WRITE_INT_TO_INI_FILE lugar "cleo\início_aleatório.ini" "Lugar" "lugar"
ENDIF
hora_final += 1
id_final += 1
timerb = 0
WHILE NOT CAN_PLAYER_START_MISSION 0
OR NOT IS_PLAYER_CONTROL_ON 0
OR timerb < 40
WAIT 0
IF IS_BUTTON_PRESSED 0 0
OR IS_BUTTON_PRESSED 0 1
OR IS_BUTTON_PRESSED 0 6
OR IS_BUTTON_PRESSED 0 14
OR IS_BUTTON_PRESSED 0 15
OR IS_BUTTON_PRESSED 0 16
OR IS_BUTTON_PRESSED 0 17
TERMINATE_THIS_CUSTOM_SCRIPT
ENDIF
ENDWHILE
DISPLAY_ZONE_NAMES TRUE
novo_lugar:
GET_PLAYER_CHAR 0 scplayer
GET_INT_STAT 181 (iStat)
IF lugar = 2
SWITCH iStat
CASE 0
GENERATE_RANDOM_FLOAT_IN_RANGE -1022.879517 2849.330078 x //ls
GENERATE_RANDOM_FLOAT_IN_RANGE -2958.146973 378.348389 y //ls
IF x < 36.830322
AND y < -294.642822
GOTO novo_lugar
ENDIF
BREAK
CASE 1
GENERATE_RANDOM_FLOAT_IN_RANGE -2979.910645 2974.888672 x //LS + SF
GENERATE_RANDOM_FLOAT_IN_RANGE -2936.384277 1566.964355 y
IF x > -1155.133911
AND y > 508.928711
GOTO novo_lugar
ENDIF
BREAK
DEFAULT
GENERATE_RANDOM_FLOAT_IN_RANGE -2700.0 2700.0 x
GENERATE_RANDOM_FLOAT_IN_RANGE -2700.0 2700.0 y
TASK_JUMP scplayer 1
//PRINT_FORMATTED_NOW "%f %f" 10000 x y
BREAK
ENDSWITCH
ELSE
GENERATE_RANDOM_INT_IN_RANGE 0 11 aleatório
SWITCH aleatório
CASE 0//LS
CASE 1
CASE 2
GENERATE_RANDOM_FLOAT_IN_RANGE 143.973145 2812.500000 x
GENERATE_RANDOM_FLOAT_IN_RANGE -1851.562500 264.508789 y
BREAK
CASE 3//SF
CASE 4
CASE 5
GENERATE_RANDOM_FLOAT_IN_RANGE -2712.053711 -1667.410645 x
GENERATE_RANDOM_FLOAT_IN_RANGE -197.544678 1282.366089 y
IF iStat = 0
GOTO novo_lugar
ENDIF
BREAK
CASE 6//LV
CASE 7
CASE 8
GENERATE_RANDOM_FLOAT_IN_RANGE 2564.732422 1349.330078 x
GENERATE_RANDOM_FLOAT_IN_RANGE 2491.071533 967.633911 y
IF iStat < 2
GOTO novo_lugar
ENDIF
BREAK
CASE 9//cidades pequenas
CASE 10
GENERATE_RANDOM_INT_IN_RANGE 0 9 aleatório
SWITCH aleatório
CASE 0
GENERATE_RANDOM_FLOAT_IN_RANGE -308.725983 10.044678 x //fort carson
GENERATE_RANDOM_FLOAT_IN_RANGE 1075.241455 1208.705322 y
IF iStat < 2
GOTO novo_lugar
ENDIF
BREAK
CASE 1
GENERATE_RANDOM_FLOAT_IN_RANGE -2645.089355 -2347.098145 x //bayside
GENERATE_RANDOM_FLOAT_IN_RANGE 2531.250000 2246.651855 y
IF iStat < 2
GOTO novo_lugar
ENDIF
BREAK
CASE 2
GENERATE_RANDOM_FLOAT_IN_RANGE -2216.517822 -2072.544678 x //angel pine
GENERATE_RANDOM_FLOAT_IN_RANGE -2531.250000 -2229.911377 y
IF iStat = 0
GOTO novo_lugar
ENDIF
BREAK
CASE 3
GENERATE_RANDOM_FLOAT_IN_RANGE 133.885300 318.082062 x //blueberry
GENERATE_RANDOM_FLOAT_IN_RANGE -229.476852 -33.481964 y
BREAK
CASE 4
GENERATE_RANDOM_FLOAT_IN_RANGE 619.419678 812.703430 x //dillimore
GENERATE_RANDOM_FLOAT_IN_RANGE -585.937500 -486.644135 y
BREAK
CASE 5
GENERATE_RANDOM_FLOAT_IN_RANGE 1208.296021 1395.810303 x //montgomery
GENERATE_RANDOM_FLOAT_IN_RANGE 210.886078 354.861176 y
BREAK
CASE 6
GENERATE_RANDOM_FLOAT_IN_RANGE 2223.214355 2517.858154 x //palomino creek
GENERATE_RANDOM_FLOAT_IN_RANGE -73.660645 117.187607 y
BREAK
CASE 7
GENERATE_RANDOM_FLOAT_IN_RANGE -1548.360962 -1412.946411 x //el quebrados
GENERATE_RANDOM_FLOAT_IN_RANGE 2548.903809 2675.225098 y
IF iStat < 2
GOTO novo_lugar
ENDIF
BREAK
CASE 8
GENERATE_RANDOM_FLOAT_IN_RANGE -300.444183 -194.196625 x //a payasadas
GENERATE_RANDOM_FLOAT_IN_RANGE 2643.598877 2755.580322 y
IF iStat < 2
GOTO novo_lugar
ENDIF
BREAK
ENDSWITCH
BREAK
ENDSWITCH
ENDIF
GET_GROUND_Z_FOR_3D_COORD x y z z
CLEO_CALL fast_teleport 0 x y
WAIT 0
SWITCH lugar
CASE 0
GET_CLOSEST_CHAR_NODE x y 100.0 x y z
GET_GROUND_Z_FOR_3D_COORD x y z z
CLEO_CALL fast_teleport 0 x y
BREAK
CASE 1
GET_CLOSEST_CAR_NODE x y 100.0 x y z
GET_GROUND_Z_FOR_3D_COORD x y z z
CLEO_CALL fast_teleport 0 x y
BREAK
CASE 2
GET_WATER_HEIGHT_AT_COORDS x y 1 z
IF NOT z = -1000.0
GOTO novo_lugar
ENDIF
GET_CLOSEST_CAR_NODE x y z a b c
GET_CHAR_COORDINATES scplayer x y z
GET_DISTANCE_BETWEEN_COORDS_3D x y c a b c z2
IF z2 < 25.0
z -= c
IF z > 5.0
OR z < -5.0
GOTO novo_lugar
ENDIF
ENDIF
BREAK
ENDSWITCH
WAIT 0
IF LOCATE_CHAR_ANY_MEANS_2D scplayer -422.375000 299.000000 80.0 10.0 0
OR LOCATE_CHAR_ANY_MEANS_2D scplayer 0.000000 0.000000 10.0 10.0 0
OR LOCATE_CHAR_ANY_MEANS_2D scplayer -536.125000 293.875000 80.0 20.0 0
OR LOCATE_CHAR_ANY_MEANS_2D scplayer -1955.000000 -986.625000 20.0 20.0 0
OR LOCATE_CHAR_ANY_MEANS_2D scplayer -1488.420532 -379.580566 190.0 190.0 0
GOTO novo_lugar
ENDIF
IF NOT hora_inicial = -1
AND NOT hora_final = -1
IF hora_inicial = hora_final
IF NOT hora_inicial > 23
GENERATE_RANDOM_INT_IN_RANGE 0 30 hora_final
ENDIF
ELSE
GENERATE_RANDOM_INT_IN_RANGE hora_inicial hora_final hora_inicial
GENERATE_RANDOM_INT_IN_RANGE 0 59 hora_final
ENDIF
SET_TIME_OF_DAY hora_inicial hora_final
ENDIF
SET_WEATHER_TO_APPROPRIATE_TYPE_NOW
MANAGE_ALL_POPULATION
GET_CHAR_COORDINATES scplayer x y z
GET_CLOSEST_CAR_NODE x y z a b c
CLEO_CALL FindAngle 0 (x,y) (a,b) (angulo) //LightVelox
SET_CHAR_HEADING scplayer angulo
RESTORE_CAMERA
SET_CAMERA_BEHIND_PLAYER
IF IS_CHAR_MODEL scplayer 0
CLEO_CALL skin 0 id_inicial id_final
DISABLE_CHAR_SPEECH scplayer TRUE
ENDIF
DISPLAY_ZONE_NAMES FALSE
TERMINATE_THIS_CUSTOM_SCRIPT
}
{
LVAR_FLOAT x y z[3]
LVAR_INT var char area
fast_teleport:
GET_PLAYER_CHAR 0 char
GET_CHAR_AREA_VISIBLE char area
IF NOT area = 0
SET_AREA_VISIBLE 0
SET_CHAR_AREA_VISIBLE char 0
ENDIF
LOAD_SCENE x y 100.0
REQUEST_COLLISION x y
GET_GROUND_Z_FOR_3D_COORD x y 900.0 z[1]
GET_WATER_HEIGHT_AT_COORDS x y 0 z[2]
WHILE z[1] = 0.0
AND var = 0
LOAD_SCENE x y 100.0
REQUEST_COLLISION x y
GET_GROUND_Z_FOR_3D_COORD x y 900.0 z[1]
GET_WATER_HEIGHT_AT_COORDS x y 0 z[2]
IF z[2] >= 0.0
var = 1
ENDIF
ENDWHILE
IF z[0] = 0.0
IF z[1] < z[2]
timera = 0
WHILE NOT z[1] > z[2]
WAIT 0
SET_CHAR_COORDINATES char x y -100.0
GET_CHAR_COORDINATES char x y z[1]
IF timera > 500
CLEO_RETURN 0
ENDIF
ENDWHILE
ELSE
SET_CHAR_COORDINATES char x y z[1]
ENDIF
ELSE
SET_CHAR_COORDINATES char x y z[0]
ENDIF
IF LOCATE_CHAR_ANY_MEANS_2D char 1198.1 -1334.9 50.0 50.0 FALSE
SET_CHAR_HEADING char 270.0
ELSE
SET_CHAR_HEADING char 0.0
ENDIF
CLEO_RETURN 0
}
{
LVAR_INT random id_inicial id_final var
skin:
IF id_inicial = id_final
random = id_inicial
ELSE
GENERATE_RANDOM_INT_IN_RANGE id_inicial id_final random
ENDIF
IF IS_MODEL_AVAILABLE random
AND IS_MODEL_IN_CDIMAGE random
CALL_FUNCTION_RETURN 0x00403DA0 1 1 (random)(var)
READ_MEMORY var 4 FALSE var
var += 0x10
READ_MEMORY var 4 FALSE var
CALL_FUNCTION_RETURN var 1 1 0 var
IF NOT var = 7
random += 1
GOTO skin
ENDIF
ELSE
random += 1
GOTO skin
ENDIF
REQUEST_MODEL random
LOAD_ALL_MODELS_NOW
SET_PLAYER_MODEL 0 random
CLEO_RETURN 0
}
{
FindAngle:
LVAR_FLOAT cx cy ex ey
LVAR_FLOAT dx dy theta m_pi q1 q2 r
m_pi = 3.1415926
dy = ey
dy -= cy
dx = ex
dx -= cx
q1 = dx
q1 *=dx
q2 = dy
q2 *=dy
q1 +=q2
SQRT q1 r
dx /= r
dy /= r
GET_HEADING_FROM_VECTOR_2D dx dy theta
CLEO_RETURN 0 theta
}
SCRIPT_END