| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898 |
- /**********************************************************************************************************************************
- * *
- * Hunting System *
- * *
- * Copyright © 2017 Abyss Morgan. All rights reserved. *
- * *
- * Download: https://github.com/AbyssMorgan/SA-MP/tree/master/include/engine *
- * Publication: http://forum.sa-mp.com/showthread.php?t=639694 *
- * Website: http://8.ct8.pl *
- * *
- * Plugins: Streamer, ColAndreas *
- * Modules: 3DTryg *
- * *
- * File Version: 1.2.1 *
- * SA:MP Version: 0.3.7 *
- * Streamer Version: 2.9.1 *
- * ColAndreas Version: 1.4.0 *
- * 3DTryg Version: 4.4.3 *
- * *
- * Functions: *
- * Hunt_Create(type,Float:x,Float:y,Float:z,Float:health,respawntime,worldid=-1,interiorid=-1,playerid=-1, *
- * Float:streamdistance=200.0,moving_area = 0); *
- * Hunt_Destroy(mobid); *
- * Hunt_Respawn(mobid); *
- * Hunt_ForceRespawn(mobid,Float:x,Float:y,Float:z); *
- * Hunt_Kill(mobid,playerid=INVALID_PLAYER_ID); *
- * Hunt_Stop(mobid,delay=-1); *
- * Hunt_GoTo(mobid,Float:x,Float:y,bool:disable_moving=false); *
- * Hunt_GetDrop(mobid); *
- * Hunt_SetDrop(mobid,drop); *
- * Hunt_GetPos(mobid,Float:x,Float:y,Float:z); *
- * Hunt_SetPos(mobid,Float:x,Float:y,Float:z,bool:disable_moving=false); *
- * Hunt_GetScaredRange(mobid); *
- * Hunt_SetScaredRange(mobid,Float:range); *
- * Hunt_GetHealth(mobid); *
- * Hunt_SetHealth(mobid,Float:health); *
- * Hunt_GetSpawnHealth(mobid); *
- * Hunt_SetSpawnHealth(mobid,Float:health); *
- * Hunt_GetRespawnTime(mobid); *
- * Hunt_SetRespawnTime(mobid,respawntime); *
- * Hunt_GetSpawn(mobid,&Float:x,&Float:y,&Float:z); *
- * Hunt_SetSpawn(mobid,Float:x,Float:y,Float:z); *
- * Hunt_GetInterior(mobid); *
- * Hunt_SetInterior(mobid,interiorid); *
- * Hunt_GetVirtualWorld(mobid); *
- * Hunt_SetVirtualWorld(mobid,worldid); *
- * Hunt_GetSpeed(mobid); *
- * Hunt_SetSpeed(mobid,Float:speed); *
- * Hunt_GetPressTime(mobid); *
- * Hunt_SetPressTime(mobid,miliseconds); *
- * Hunt_GetFacingAngle(mobid); *
- * Hunt_IsPlayerInRange(playerid,mobid,Float:range); *
- * Hunt_IsToggledMoving(mobid); *
- * Hunt_ToggleMoving(mobid,toggle); *
- * Hunt_IsValid(mobid); *
- * Hunt_IsSpawned(mobid); *
- * Hunt_IsDead(mobid); *
- * Hunt_IsScared(mobid); *
- * *
- * Extended Functions: *
- * Hunt_Count(); *
- * Hunt_GetKey(); *
- * Hunt_SetKey(key); *
- * Hunt_GetFreeID(); *
- * Hunt_GetActiveMob(playerid,mob_state); *
- * *
- * Callbacks: *
- * OnPlayerTakeHuntDrop(playerid,mobid,drop); //return 0 set drop flag 0 *
- * OnPlayerKillHuntAnimal(playerid,mobid); *
- * OnPlayerApproachingAnimal(playerid,mobid,mob_state); *
- * OnAnimalTakeDamage(mobid,playerid,Float:amount,weaponid); *
- * OnHuntAnimalRespawn(mobid); *
- * OnAnimalScareStateChanged(mobid,playerid,isscared); *
- * OnPlayerHuntDropStateChange(playerid,mobid,drop_state); *
- * *
- **********************************************************************************************************************************/
-
- #if ((defined Streamer_AppendArrayData) && (defined INVALID_STREAMER_ID) && (!defined STREAMER_TYPE_ACTOR))
- #error [ADM] You need Streamer v2.9.1 (github.com/samp-incognito/samp-streamer-plugin/releases)
- #endif
- #if !defined COLANDREAS
- #error [ADM] You need ColAndreas v1.4.0 (github.com/Pottus/ColAndreas/releases)
- #endif
- //Check Version 3DTryg.inc
- /*#if !defined _3D_Tryg
- #error [ADM] You need 3DTryg.inc v4.4.3 (github.com/AbyssMorgan/SA-MP/blob/master/include/SAM/3DTryg.inc)
- #elseif !defined Tryg3D_Version
- #error [ADM] Update you 3DTryg.inc to v4.4.3 (github.com/AbyssMorgan/SA-MP/blob/master/include/SAM/3DTryg.inc)
- #elseif (Tryg3D_Version < 40403)
- #error [ADM] Update you 3DTryg.inc to v4.4.3 (github.com/AbyssMorgan/SA-MP/blob/master/include/SAM/3DTryg.inc)
- #endif
- */
- #if defined _hunting_system
- #endinput
- #endif
- #define _hunting_system
- #if !defined MAX_HUNTING_ANIMALS
- #define MAX_HUNTING_ANIMALS (100)
- #endif
- #if !defined HUNTING_UPDATE_INTERVAL
- #define HUNTING_UPDATE_INTERVAL (500)
- #endif
- #define HUNT_EXTRA_ID_OFFSET (600000)
- #define HUNT_EXTRA_ID_OFFSET_B (HUNT_EXTRA_ID_OFFSET + MAX_HUNTING_ANIMALS)
- #define HUNTING_TYPE_COW (19833)
- #define HUNTING_TYPE_DEER (19315)
- #define HUNTING_STATE_DESTROYED (0)
- #define HUNTING_STATE_SPAWNED (1)
- #define HUNTING_STATE_DEAD (2)
- #define HUNTING_DROP_STATE_FINISH (0)
- #define HUNTING_DROP_STATE_START (1)
- #define HUNTING_DROP_STATE_INTERRUPT (2)
- #define INVALID_HUNTING_ID (0)
- #define HUNTING_NO_AUTO_RESPAWN (-1)
- enum Hunt_enum {
- STREAMER_TAG_OBJECT Hunt_objectid,
- STREAMER_TAG_AREA Hunt_drop_area,
- STREAMER_TAG_AREA Hunt_scared_area,
- STREAMER_TAG_AREA Hunt_areaid,
- Hunt_type,
- Float:Hunt_health,
- Float:Hunt_spawn_health,
- Hunt_state,
- Hunt_respawntime,
- Hunt_drop,
- Hunt_respawn_tick,
- Float:Hunt_X,
- Float:Hunt_Y,
- Float:Hunt_Z,
- Float:Hunt_tX,
- Float:Hunt_tY,
- Float:Hunt_rZ,
- Float:Hunt_speed,
- Hunt_moving,
- Hunt_calm,
- Hunt_press_time,
- Hunt_last_scared,
- Hunt_stop_delay
- }
- new Hunt_Data[MAX_HUNTING_ANIMALS][Hunt_enum],
- Hunt_Upperbound = 0,
- Hunt_Key = KEY_YES,
- Hunt_Timer = -1,
- Hunt_PlayerPress[MAX_PLAYERS];
-
- #if defined OnPlayerTakeHuntDrop
- forward OnPlayerTakeHuntDrop(playerid,mobid,drop);
- #endif
- #if defined OnPlayerKillHuntAnimal
- forward OnPlayerKillHuntAnimal(playerid,mobid);
- #endif
- #if defined OnPlayerApproachingAnimal
- forward OnPlayerApproachingAnimal(playerid,mobid,mob_state);
- #endif
- #if defined OnAnimalTakeDamage
- forward OnAnimalTakeDamage(mobid,playerid,Float:amount,weaponid);
- #endif
- #if defined OnHuntAnimalRespawn
- forward OnHuntAnimalRespawn(mobid);
- #endif
- #if defined OnAnimalScareStateChanged
- forward OnAnimalScareStateChanged(mobid,playerid,isscared);
- #endif
- #if defined OnPlayerHuntDropStateChange
- forward OnPlayerHuntDropStateChange(playerid,mobid,drop_state);
- #endif
- #define Hunt_GetKey() Hunt_Key
- #define Hunt_SetKey(%0) Hunt_Key = (%0)
- #define Hunt_SetDrop(%0,%1) Hunt_Data[(%0)][Hunt_drop] = (%1)
- #define Hunt_GetDrop(%0) Hunt_Data[(%0)][Hunt_drop]
- #define Hunt_ToggleMoving(%0,%1) Hunt_Data[(%0)][Hunt_moving] = (%1)
- #define Hunt_IsToggledMoving(%0) Hunt_Data[(%0)][Hunt_moving]
- #define Hunt_GetPos(%0,%1,%2,%3) GetDynamicObjectPos(Hunt_Data[(%0)][Hunt_objectid],(%1),(%2),(%3))
- #define Hunt_GetHealth(%0) Hunt_Data[(%0)][Hunt_health]
- #define Hunt_SetHealth(%0,%1) Hunt_Data[(%0)][Hunt_health] = (%1)
- #define Hunt_GetSpawnHealth(%0) Hunt_Data[(%0)][Hunt_spawn_health]
- #define Hunt_SetSpawnHealth(%0,%1) Hunt_Data[(%0)][Hunt_spawn_health] = (%1)
- #define Hunt_GetRespawnTime(%0) Hunt_Data[(%0)][Hunt_respawntime]
- #define Hunt_SetRespawnTime(%0,%1) Hunt_Data[(%0)][Hunt_respawntime] = (%1)
- #define Hunt_IsValid(%0) (Hunt_Data[(%0)][Hunt_state] != HUNTING_STATE_DESTROYED)
- #define Hunt_IsSpawned(%0) (Hunt_Data[(%0)][Hunt_state] == HUNTING_STATE_SPAWNED)
- #define Hunt_IsDead(%0) (Hunt_Data[(%0)][Hunt_state] == HUNTING_STATE_DEAD)
- #define Hunt_GetSpeed(%0) Hunt_Data[(%0)][Hunt_speed]
- #define Hunt_SetSpeed(%0,%1) Hunt_Data[(%0)][Hunt_speed] = (%1)
- #define Hunt_GetPressTime(%0) Hunt_Data[(%0)][Hunt_press_time]
- #define Hunt_SetPressTime(%0,%1) Hunt_Data[(%0)][Hunt_press_time] = (%1)
- #define Hunt_IsScared(%0) (Hunt_Data[(%0)][Hunt_calm] != 0)
- stock Hunt_Count(){
- new cnt = 0;
- for(new mobid = 1; mobid <= Hunt_Upperbound; mobid++){
- if(Hunt_IsValid(mobid)) cnt++;
- }
- return cnt;
- }
- stock Hunt_GetFreeID(){
- for(new mobid = 1; mobid < MAX_HUNTING_ANIMALS; mobid++){
- if(!Hunt_IsValid(mobid)) return mobid;
- }
- return INVALID_HUNTING_ID;
- }
- stock Hunt_Construct(){
- new Hunt_data_construct[Hunt_enum];
-
- Hunt_data_construct[Hunt_speed] = 0.8;
- Hunt_data_construct[Hunt_last_scared] = INVALID_PLAYER_ID;
-
- return Hunt_data_construct;
- }
-
- stock Hunt_Stop(mobid,delay=-1){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(delay > 0){
- Hunt_ToggleMoving(mobid,0);
- Hunt_Data[mobid][Hunt_stop_delay] = GetTickCount() + delay;
- } else {
- Hunt_Data[mobid][Hunt_stop_delay] = 0;
- if(delay != -1) Hunt_ToggleMoving(mobid,0);
- }
- StopDynamicObject(Hunt_Data[mobid][Hunt_objectid]);
- return 1;
- }
- stock Hunt_SetSpawn(mobid,Float:xx,Float:xy,Float:xz){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Hunt_Data[mobid][Hunt_X] = xx;
- Hunt_Data[mobid][Hunt_Y] = xy;
- Hunt_Data[mobid][Hunt_Z] = xz;
- return 1;
- }
- stock Hunt_GetSpawn(mobid,&Float:xx,&Float:xy,&Float:xz){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- xx = Hunt_Data[mobid][Hunt_X];
- xy = Hunt_Data[mobid][Hunt_Y];
- xz = Hunt_Data[mobid][Hunt_Z];
- return 1;
- }
- stock Float:Hunt_GetScaredRange(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0.0;
- if(!Hunt_IsValid(mobid)) return 0.0;
- new Float:Hunt_range;
- Streamer_GetFloatData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_scared_area],E_STREAMER_SIZE,Hunt_range);
- return Hunt_range;
- }
- stock Hunt_SetScaredRange(mobid,Float:range){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Streamer_SetFloatData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_scared_area],E_STREAMER_SIZE,range);
- return 1;
- }
- stock Hunt_GetInterior(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- return Streamer_GetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_INTERIOR_ID);
- }
- stock Hunt_SetInterior(mobid,interiorid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Streamer_SetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_INTERIOR_ID,interiorid);
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_drop_area],E_STREAMER_INTERIOR_ID,interiorid);
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_scared_area],E_STREAMER_INTERIOR_ID,interiorid);
- return 1;
- }
- stock Hunt_GetVirtualWorld(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- return Streamer_GetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_WORLD_ID);
- }
- stock Hunt_SetVirtualWorld(mobid,worldid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Streamer_SetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_WORLD_ID,worldid);
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_drop_area],E_STREAMER_WORLD_ID,worldid);
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_scared_area],E_STREAMER_WORLD_ID,worldid);
- return 1;
- }
- stock Hunt_GoTo(mobid,Float:x,Float:y,bool:disable_moving=false){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsSpawned(mobid)) return 0;
-
- new Float:z;
- MapAndreas48FindZ(x,y,z);
- if(IsPointInWater(x,y,z)) return 0;
- if(Hunt_Data[mobid][Hunt_areaid] != STREAMER_TAG_AREA INVALID_STREAMER_ID){
- if(!IsPointInDynamicArea(Hunt_Data[mobid][Hunt_areaid],x,y,z)) return 0;
- }
-
- new F4[Vectors3D], tmp_moving = Hunt_IsToggledMoving(mobid);
-
- Hunt_ToggleMoving(mobid,0);
- Hunt_Stop(mobid);
- Hunt_GetPos(mobid,F4[T3D:X],F4[T3D:Y],F4[T3D:Z]);
-
- Hunt_Data[mobid][Hunt_tX] = x;
- Hunt_Data[mobid][Hunt_tY] = y;
- GetRotationFor2Point2D(F4[T3D:X],F4[T3D:Y],x,y,Hunt_Data[mobid][Hunt_rZ]);
-
- if(!disable_moving){
- Hunt_ToggleMoving(mobid,1);
- } else {
- Hunt_ToggleMoving(mobid,tmp_moving);
- }
- return 1;
- }
- stock Hunt_SetPos(mobid,Float:x,Float:y,Float:z,bool:disable_moving=false){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsSpawned(mobid)) return 0;
-
- if(IsPointInWater(x,y,z)) return 0;
- if(Hunt_Data[mobid][Hunt_areaid] != STREAMER_TAG_AREA INVALID_STREAMER_ID){
- if(!IsPointInDynamicArea(Hunt_Data[mobid][Hunt_areaid],x,y,z)) return 0;
- }
-
- new tmp_moving = Hunt_IsToggledMoving(mobid);
-
- Hunt_ToggleMoving(mobid,0);
- Hunt_Stop(mobid);
-
- SetDynamicObjectPos(Hunt_Data[mobid][Hunt_objectid],x,y,z);
-
- Hunt_Data[mobid][Hunt_tX] = x;
- Hunt_Data[mobid][Hunt_tY] = y;
-
- if(!disable_moving){
- Hunt_ToggleMoving(mobid,1);
- } else {
- Hunt_ToggleMoving(mobid,tmp_moving);
- }
- return 1;
- }
- stock Hunt_Create(type,Float:x,Float:y,Float:z,Float:health,respawntime,worldid=-1,interiorid=-1,playerid=-1,Float:streamdistance=200.0){
- new mobid = Hunt_GetFreeID();
- if(mobid == INVALID_HUNTING_ID){
- printf("[ADM] Error: Failed to Hunt_Create limit %d exceeded, add #define MAX_HUNTING_ANIMALS before Hunting.inc",MAX_HUNTING_ANIMALS);
- return mobid;
- }
-
- new moving_area = CreateDynamicRectangle(2085.0176, 52.4910,1945.4626, 142.9483);
-
- if(moving_area != STREAMER_TAG_AREA INVALID_STREAMER_ID){
- if(!IsPointInDynamicArea(moving_area,x,y,z)){
- printf("[ADM] Error: Failed to Hunt_Create(%d,%f,%f,%f,...) position out of moving_area",type,x,y,z);
- return INVALID_HUNTING_ID;
- }
- }
- if(IsPointInWater(x,y,z) || IsPointInUnderground(x,y,z)){
- printf("[ADM] Error: Failed to Hunt_Create(%d,%f,%f,%f,...) position out of world",type,x,y,z);
- return INVALID_HUNTING_ID;
- }
-
- Hunt_Data[mobid] = Hunt_Construct();
-
- new Float:tmp_float,Float:target_z;
- MovePointCol(x,y,z+1.0,x,y,-100.0,tmp_float,tmp_float,target_z);
- z = target_z;
- switch(type){
- case HUNTING_TYPE_COW: {
- Hunt_Data[mobid][Hunt_objectid] = CreateDynamicObject(type,x,y,z,0.0,0.0,184.0,worldid,interiorid,playerid,streamdistance);
- }
- case HUNTING_TYPE_DEER: {
- z += 0.5;
- Hunt_Data[mobid][Hunt_objectid] = CreateDynamicObject(type,x,y,z,0.0,0.0,90.0,worldid,interiorid,playerid,streamdistance);
- }
- }
- Hunt_Data[mobid][Hunt_drop_area] = CreateDynamicSphere(x,y,z,3.0,worldid,interiorid,playerid);
- Hunt_Data[mobid][Hunt_scared_area] = CreateDynamicSphere(x,y,z,5.0,worldid,interiorid,playerid);
-
- AttachDynamicAreaToObject(Hunt_Data[mobid][Hunt_drop_area],Hunt_Data[mobid][Hunt_objectid]);
- AttachDynamicAreaToObject(Hunt_Data[mobid][Hunt_scared_area],Hunt_Data[mobid][Hunt_objectid]);
-
- Streamer_SetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_EXTRA_ID,(mobid+HUNT_EXTRA_ID_OFFSET));
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_drop_area],E_STREAMER_EXTRA_ID,(mobid+HUNT_EXTRA_ID_OFFSET));
- Streamer_SetIntData(STREAMER_TYPE_AREA,Hunt_Data[mobid][Hunt_scared_area],E_STREAMER_EXTRA_ID,(mobid+HUNT_EXTRA_ID_OFFSET_B));
-
- Hunt_Data[mobid][Hunt_areaid] = moving_area;
-
- Hunt_Data[mobid][Hunt_type] = type;
- Hunt_Data[mobid][Hunt_respawntime] = respawntime;
- Hunt_Data[mobid][Hunt_health] = health;
- Hunt_Data[mobid][Hunt_spawn_health] = health;
- Hunt_Data[mobid][Hunt_drop] = 1;
- Hunt_Data[mobid][Hunt_tX] = x;
- Hunt_Data[mobid][Hunt_tY] = y;
- Hunt_Data[mobid][Hunt_moving] = 1;
- Hunt_Data[mobid][Hunt_speed] = 0.8;
-
- Hunt_SetSpawn(mobid,x,y,z);
-
- if(mobid > Hunt_Upperbound) Hunt_Upperbound = mobid;
-
- Hunt_Data[mobid][Hunt_state] = HUNTING_STATE_SPAWNED;
-
- printf("Bixo Criado");
-
- return mobid;
- }
- stock Hunt_Destroy(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
-
- Hunt_Data[mobid][Hunt_state] = HUNTING_STATE_DESTROYED;
-
- if(IsValidDynamicObject(Hunt_Data[mobid][Hunt_objectid])) DestroyDynamicObject(Hunt_Data[mobid][Hunt_objectid]);
- if(IsValidDynamicArea(Hunt_Data[mobid][Hunt_drop_area])) DestroyDynamicArea(Hunt_Data[mobid][Hunt_drop_area]);
- if(IsValidDynamicArea(Hunt_Data[mobid][Hunt_scared_area])) DestroyDynamicArea(Hunt_Data[mobid][Hunt_scared_area]);
-
- Hunt_Data[mobid] = Hunt_Construct();
-
- if(mobid == Hunt_Upperbound) Hunt_Upperbound--;
- return 1;
- }
- stock Hunt_Respawn(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Hunt_Data[mobid][Hunt_respawn_tick] = 0;
-
- if(Hunt_IsSpawned(mobid)){
- Hunt_Data[mobid][Hunt_state] = HUNTING_STATE_DEAD;
- Hunt_Stop(mobid);
- }
-
- Hunt_Data[mobid][Hunt_health] = Hunt_Data[mobid][Hunt_spawn_health];
- Hunt_SetDrop(mobid,1);
-
- SetDynamicObjectMaterial(Hunt_Data[mobid][Hunt_objectid],0,0,"","",0);
- SetDynamicObjectMaterial(Hunt_Data[mobid][Hunt_objectid],1,0,"","",0);
- new modelid = Streamer_GetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_MODEL_ID);
- Streamer_SetIntData(STREAMER_TYPE_OBJECT,Hunt_Data[mobid][Hunt_objectid],E_STREAMER_MODEL_ID,modelid);
- new Float:tmp_float,Float:target_z;
- MovePointCol(Hunt_Data[mobid][Hunt_X],Hunt_Data[mobid][Hunt_Y],Hunt_Data[mobid][Hunt_Z]+1.0,Hunt_Data[mobid][Hunt_X],Hunt_Data[mobid][Hunt_Y],-100.0,tmp_float,tmp_float,target_z);
- switch(Hunt_Data[mobid][Hunt_type]){
- case HUNTING_TYPE_DEER: target_z += 0.5;
- }
- SetDynamicObjectPos(Hunt_Data[mobid][Hunt_objectid],Hunt_Data[mobid][Hunt_X],Hunt_Data[mobid][Hunt_Y],target_z);
-
- Hunt_Data[mobid][Hunt_tX] = Hunt_Data[mobid][Hunt_X];
- Hunt_Data[mobid][Hunt_tY] = Hunt_Data[mobid][Hunt_Y];
-
- switch(Hunt_Data[mobid][Hunt_type]){
- case HUNTING_TYPE_COW: {
- SetDynamicObjectRot(Hunt_Data[mobid][Hunt_objectid],0.0,0.0,184.0);
- }
- case HUNTING_TYPE_DEER: {
- SetDynamicObjectRot(Hunt_Data[mobid][Hunt_objectid],0.0,0.0,90.0);
- }
- }
-
- Hunt_Data[mobid][Hunt_state] = HUNTING_STATE_SPAWNED;
- #if defined OnHuntAnimalRespawn
- OnHuntAnimalRespawn(mobid);
- #endif
- return 1;
- }
- stock Hunt_IsPlayerInRange(playerid,mobid,Float:range){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- if(!IsPlayerConnected(playerid)) return 0;
- return (GetElementsDistance(playerid,item_player,Hunt_Data[mobid][Hunt_objectid],item_dynamic_object) <= range);
- }
- stock Float:Hunt_GetFacingAngle(mobid){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- switch(Hunt_Data[mobid][Hunt_type]){
- case HUNTING_TYPE_COW: return CompRotationFloat(Hunt_Data[mobid][Hunt_rZ]+184.0);
- case HUNTING_TYPE_DEER: return CompRotationFloat(Hunt_Data[mobid][Hunt_rZ]+90.0);
- }
- return 1;
- }
- stock Hunt_ForceRespawn(mobid,Float:x,Float:y,Float:z){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsValid(mobid)) return 0;
- Hunt_SetSpawn(mobid,x,y,z);
- return Hunt_Respawn(mobid);
- }
- stock Hunt_Kill(mobid,playerid=INVALID_PLAYER_ID){
- if(mobid <= 0 || mobid >= MAX_HUNTING_ANIMALS) return 0;
- if(!Hunt_IsSpawned(mobid)) return 0;
- Hunt_Data[mobid][Hunt_state] = HUNTING_STATE_DEAD;
- Hunt_Data[mobid][Hunt_health] = 0.0;
-
- #if defined OnAnimalScareStateChanged
- if(Hunt_IsScared(mobid)){
- OnAnimalScareStateChanged(mobid,Hunt_Data[mobid][Hunt_last_scared],0);
- }
- #endif
- Hunt_Data[mobid][Hunt_calm] = 0;
- Hunt_Data[mobid][Hunt_last_scared] = INVALID_PLAYER_ID;
-
- Hunt_Stop(mobid);
-
- SetDynamicObjectMaterial(Hunt_Data[mobid][Hunt_objectid],0,2806,"CJ_MEATY","CJ_FLESH_1",0);
- SetDynamicObjectMaterial(Hunt_Data[mobid][Hunt_objectid],1,2806,"CJ_MEATY","CJ_FLESH_1",0);
-
- new Float:tmp_float,Float:target_z,Float:x,Float:y,Float:z;
- Hunt_GetPos(mobid,x,y,z);
- Hunt_SetPos(mobid,x,y,z);
- MovePointCol(x,y,z+1.0,x,y,-100.0,tmp_float,tmp_float,target_z);
-
- switch(Hunt_Data[mobid][Hunt_type]){
- case HUNTING_TYPE_COW: {
- MoveDynamicObject(Hunt_Data[mobid][Hunt_objectid],x,y,target_z+0.3,0.5,0.0,90.0);
- }
- case HUNTING_TYPE_DEER: {
- MoveDynamicObject(Hunt_Data[mobid][Hunt_objectid],x,y,target_z+0.1,0.5,270.0);
- }
- }
-
- Hunt_Data[mobid][Hunt_respawn_tick] = GetTickCount() + (1000 * Hunt_Data[mobid][Hunt_respawntime]);
-
- #if defined OnPlayerKillHuntAnimal
- OnPlayerKillHuntAnimal(playerid,mobid);
- #endif
- return 1;
- }
- stock Hunt_GetActiveMob(playerid,mob_state){
- new max_areas = GetPlayerNumberDynamicAreas(playerid);
- if(max_areas){
- new STREAMER_TAG_AREA player_areas[64], mobid;
- GetPlayerDynamicAreas(playerid,player_areas,max_areas);
- for(new k = 0; k < max_areas; k++){
- mobid = Streamer_GetIntData(STREAMER_TYPE_AREA,player_areas[k],E_STREAMER_EXTRA_ID)-HUNT_EXTRA_ID_OFFSET;
- if(mobid > 0 && mobid < MAX_HUNTING_ANIMALS){
- if(player_areas[k] == Hunt_Data[mobid][Hunt_drop_area]){
- if(mob_state == Hunt_Data[mobid][Hunt_state]){
- return mobid;
- }
- }
- }
- mobid = INVALID_HUNTING_ID;
- }
- }
- return INVALID_HUNTING_ID;
- }
- stock Hunt_OnUpdate(){
- static Float:tmp_float,Float:target_z,
- Float:x,Float:y,Float:z,
- Float:tx,Float:ty,
- Float:vx,Float:vy,Float:vz;
-
- for(new mobid = 1; mobid <= Hunt_Upperbound; mobid++){
- switch(Hunt_Data[mobid][Hunt_state]){
- case HUNTING_STATE_SPAWNED: {
- target_z = 0.0;
- Hunt_GetPos(mobid,x,y,z);
- MovePointCol(x,y,z+1.0,x,y,-100.0,tmp_float,tmp_float,target_z);
- if(Hunt_IsToggledMoving(mobid)){
- if(GetDistanceBetweenPoints2D(Hunt_Data[mobid][Hunt_tX],Hunt_Data[mobid][Hunt_tY],x,y) == 0.0){
- for(;;){
- vx = vy = vz = 0.0;
- GetRandomPointInCircle(x,y,25.0,tx,ty);
- MovePointColCutLineEx(x,y,z+1.0,tx,ty,z+1.0,vx,vy,vz,3.0);
- if(GetDistanceBetweenPoints2D(x,y,vx,vy) <= 2.0) continue;
- if(IsPointInWater(vx,vy,vz)) continue;
- if(Hunt_Data[mobid][Hunt_areaid] != STREAMER_TAG_AREA INVALID_STREAMER_ID){
- if(!IsPointInDynamicArea(Hunt_Data[mobid][Hunt_areaid],vx,vy,vz)) continue;
- }
- if(Hunt_Data[mobid][Hunt_last_scared] != INVALID_PLAYER_ID){
- if(IsPlayerInRangeOfPoint(Hunt_Data[mobid][Hunt_last_scared],5.0,vx,vy,vz)) continue;
- }
- Hunt_Data[mobid][Hunt_tX] = vx;
- Hunt_Data[mobid][Hunt_tY] = vy;
- GetRotationFor2Point2D(x,y,vx,vy,Hunt_Data[mobid][Hunt_rZ]);
- break;
- }
- }
- } else {
- if(Hunt_Data[mobid][Hunt_stop_delay] != 0 && GetTickCount() >= Hunt_Data[mobid][Hunt_stop_delay]){
- Hunt_Data[mobid][Hunt_stop_delay] = 0;
- Hunt_ToggleMoving(mobid,1);
- }
- }
- if(GetTickCount() >= Hunt_Data[mobid][Hunt_calm] && Hunt_Data[mobid][Hunt_calm] != 0){
- Hunt_SetSpeed(mobid,0.8);
- #if defined OnAnimalScareStateChanged
- if(Hunt_IsScared(mobid)){
- OnAnimalScareStateChanged(mobid,Hunt_Data[mobid][Hunt_last_scared],0);
- }
- #endif
- Hunt_Data[mobid][Hunt_calm] = 0;
- Hunt_Data[mobid][Hunt_last_scared] = INVALID_PLAYER_ID;
- }
- switch(Hunt_Data[mobid][Hunt_type]){
- case HUNTING_TYPE_COW: {
- SetDynamicObjectPos(Hunt_Data[mobid][Hunt_objectid],x,y,target_z);
- SetDynamicObjectRot(Hunt_Data[mobid][Hunt_objectid],0.0,0.0,CompRotationFloat(Hunt_Data[mobid][Hunt_rZ]+184.0));
- MoveDynamicObject(Hunt_Data[mobid][Hunt_objectid],Hunt_Data[mobid][Hunt_tX],Hunt_Data[mobid][Hunt_tY],target_z,Hunt_GetSpeed(mobid));
- }
- case HUNTING_TYPE_DEER: {
- SetDynamicObjectPos(Hunt_Data[mobid][Hunt_objectid],x,y,target_z+0.5);
- SetDynamicObjectRot(Hunt_Data[mobid][Hunt_objectid],0.0,0.0,CompRotationFloat(Hunt_Data[mobid][Hunt_rZ]+90.0));
- MoveDynamicObject(Hunt_Data[mobid][Hunt_objectid],Hunt_Data[mobid][Hunt_tX],Hunt_Data[mobid][Hunt_tY],target_z+0.5,Hunt_GetSpeed(mobid));
- }
- }
- }
- case HUNTING_STATE_DEAD: {
- if(Hunt_Data[mobid][Hunt_respawntime] != HUNTING_NO_AUTO_RESPAWN){
- if(Hunt_Data[mobid][Hunt_respawn_tick] != 0 && GetTickCount() >= Hunt_Data[mobid][Hunt_respawn_tick]){
- Hunt_Respawn(mobid);
- }
- }
- }
- }
- }
- return 1;
- }
- new const Float:WeaponHuntingDamage[] = {
- 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,82.5,0.0,1.0,9.9,46.2,0.0,8.25,13.2,46.2,3.3,3.3,4.95,6.6,8.25,
- 9.9,9.9,6.6,24.75,41.25,82.5,82.5,1.0,46.2,82.5,0.0,0.33,0.33,0.0,0.0,0.0,0.0,0.0,2.64,9.9,330.0,82.5,1.0,1.0,165.0
- };
- //Hook: OnPlayerShootDynamicObject
- public OnPlayerShootDynamicObject(playerid, weaponid, STREAMER_TAG_OBJECT objectid, Float:x, Float:y, Float:z){
- new mobid = (Streamer_GetIntData(STREAMER_TYPE_OBJECT,objectid,E_STREAMER_EXTRA_ID)-HUNT_EXTRA_ID_OFFSET);
- if(mobid > 0 && mobid < MAX_HUNTING_ANIMALS){
- if(Hunt_Data[mobid][Hunt_objectid] == objectid && Hunt_IsSpawned(mobid)){
- Hunt_SetSpeed(mobid,8.0);
- Hunt_Data[mobid][Hunt_last_scared] = playerid;
- #if defined OnAnimalScareStateChanged
- if(!Hunt_IsScared(mobid)){
- OnAnimalScareStateChanged(mobid,playerid,1);
- }
- #endif
- Hunt_Data[mobid][Hunt_calm] = GetTickCount() + 30000;
- #if defined OnAnimalTakeDamage
- if(OnAnimalTakeDamage(mobid,playerid,WeaponHuntingDamage[weaponid],weaponid)){
- Hunt_Data[mobid][Hunt_health] -= WeaponHuntingDamage[weaponid];
- }
- #else
- Hunt_Data[mobid][Hunt_health] -= WeaponHuntingDamage[weaponid];
- #endif
- if(Hunt_Data[mobid][Hunt_health] <= 0.0){
- Hunt_Kill(mobid,playerid);
- }
- }
- }
- #if defined HUN_OnPlayerShootDynamicObject
- HUN_OnPlayerShootDynamicObject(playerid, weaponid, objectid, x, y, z);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerShootDynamicObject
- #undef OnPlayerShootDynamicObject
- #else
- #define _ALS_OnPlayerShootDynamicObject
- #endif
- #define OnPlayerShootDynamicObject HUN_OnPlayerShootDynamicObject
- #if defined HUN_OnPlayerShootDynamicObject
- forward HUN_OnPlayerShootDynamicObject(playerid, weaponid, STREAMER_TAG_OBJECT objectid, Float:x, Float:y, Float:z);
- #endif
- //Hook: OnPlayerEnterDynamicArea
- public OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA areaid){
- new Hunt_extraid = Streamer_GetIntData(STREAMER_TYPE_AREA,areaid,E_STREAMER_EXTRA_ID), mobid;
-
- mobid = (Hunt_extraid - HUNT_EXTRA_ID_OFFSET);
- if(mobid > 0 && mobid < MAX_HUNTING_ANIMALS){
- if(Hunt_Data[mobid][Hunt_drop_area] == areaid){
- #if defined OnPlayerApproachingAnimal
- OnPlayerApproachingAnimal(playerid,mobid,Hunt_Data[mobid][Hunt_state]);
- #endif
- }
- }
-
- mobid = (Hunt_extraid - HUNT_EXTRA_ID_OFFSET_B);
- if(mobid > 0 && mobid < MAX_HUNTING_ANIMALS){
- if(Hunt_Data[mobid][Hunt_scared_area] == areaid){
- if(Hunt_Data[mobid][Hunt_state] == HUNTING_STATE_SPAWNED){
- Hunt_SetSpeed(mobid,8.0);
- Hunt_Data[mobid][Hunt_last_scared] = playerid;
-
- #if defined OnAnimalScareStateChanged
- if(!Hunt_IsScared(mobid)){
- OnAnimalScareStateChanged(mobid,playerid,1);
- }
- #endif
-
- Hunt_Data[mobid][Hunt_calm] = GetTickCount() + 30000;
- }
- }
- }
- #if defined HUN_OnPlayerEnterDynamicArea
- HUN_OnPlayerEnterDynamicArea(playerid, areaid);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerEnterDynamicArea
- #undef OnPlayerEnterDynamicArea
- #else
- #define _ALS_OnPlayerEnterDynamicArea
- #endif
- #define OnPlayerEnterDynamicArea HUN_OnPlayerEnterDynamicArea
- #if defined HUN_OnPlayerEnterDynamicArea
- forward HUN_OnPlayerEnterDynamicArea(playerid, STREAMER_TAG_AREA areaid);
- #endif
- #define Tryg3D_KeyPressed(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
- #define Tryg3D_KeyReleased(%0) (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
- #define Tryg3D_KeyHolding(%0) ((newkeys & (%0)) == (%0))
- //Hook: OnPlayerKeyStateChange
- public OnPlayerKeyStateChange(playerid,newkeys,oldkeys){
- if(Tryg3D_KeyPressed(Hunt_Key)){
- new mobid = Hunt_GetActiveMob(playerid,HUNTING_STATE_DEAD);
- if(Hunt_GetPressTime(mobid) == 0){
- #if defined OnPlayerTakeHuntDrop
- Hunt_Data[mobid][Hunt_drop] = OnPlayerTakeHuntDrop(playerid,mobid,Hunt_Data[mobid][Hunt_drop]);
- #endif
- } else {
- #if defined OnPlayerHuntDropStateChange
- OnPlayerHuntDropStateChange(playerid,mobid,HUNTING_DROP_STATE_START);
- #endif
- Hunt_PlayerPress[playerid] = GetTickCount() + Hunt_GetPressTime(mobid);
- }
- }
- if(Tryg3D_KeyReleased(Hunt_Key)){
- if(GetTickCount() >= Hunt_PlayerPress[playerid] && Hunt_PlayerPress[playerid] != 0){
- Hunt_PlayerPress[playerid] = 0;
- new mobid = Hunt_GetActiveMob(playerid,HUNTING_STATE_DEAD);
- if(Hunt_GetPressTime(mobid) > 0){
- #if defined OnPlayerHuntDropStateChange
- OnPlayerHuntDropStateChange(playerid,mobid,HUNTING_DROP_STATE_FINISH);
- #endif
- #if defined OnPlayerTakeHuntDrop
- Hunt_Data[mobid][Hunt_drop] = OnPlayerTakeHuntDrop(playerid,mobid,Hunt_Data[mobid][Hunt_drop]);
- #endif
- }
- } else {
- #if defined OnPlayerHuntDropStateChange
- new mobid = Hunt_GetActiveMob(playerid,HUNTING_STATE_DEAD);
- if(Hunt_GetPressTime(mobid) > 0){
- OnPlayerHuntDropStateChange(playerid,mobid,HUNTING_DROP_STATE_INTERRUPT);
- }
- #endif
- }
- }
- #if defined HUN_OnPlayerKeyStateChange
- HUN_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
- #endif
- return 1;
- }
- #if defined _ALS_OnPlayerKeyStateChange
- #undef OnPlayerKeyStateChange
- #else
- #define _ALS_OnPlayerKeyStateChange
- #endif
- #define OnPlayerKeyStateChange HUN_OnPlayerKeyStateChange
- #if defined HUN_OnPlayerKeyStateChange
- forward HUN_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
- #endif
- new bool:CRC_HuntingInit = true,
- bool:CRC_HuntingExit = true;
- //Hook: OnFilterScriptInit
- public OnFilterScriptInit(){
- if(CRC_HuntingInit){
- CRC_HuntingInit = false;
- Hunt_Timer = SetTimerEx("Hunt_OnUpdate",HUNTING_UPDATE_INTERVAL,true,"");
- }
- #if defined HUN_OnFilterScriptInit
- HUN_OnFilterScriptInit();
- #endif
- return 1;
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit HUN_OnFilterScriptInit
- #if defined HUN_OnFilterScriptInit
- forward HUN_OnFilterScriptInit();
- #endif
- //Hook: OnGameModeInit
- public OnGameModeInit(){
- if(CRC_HuntingInit){
- CRC_HuntingInit = false;
- Hunt_Timer = SetTimerEx("Hunt_OnUpdate",HUNTING_UPDATE_INTERVAL,true,"");
- }
- #if defined HUN_OnGameModeInit
- HUN_OnGameModeInit();
- #endif
- return 1;
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit HUN_OnGameModeInit
- #if defined HUN_OnGameModeInit
- forward HUN_OnGameModeInit();
- #endif
- //Hook: OnFilterScriptExit
- public OnFilterScriptExit(){
- if(CRC_HuntingExit){
- CRC_HuntingExit = false;
- KillTimer(Hunt_Timer);
- }
- #if defined HUN_OnFilterScriptExit
- HUN_OnFilterScriptExit();
- #endif
- return 1;
- }
- #if defined _ALS_OnFilterScriptExit
- #undef OnFilterScriptExit
- #else
- #define _ALS_OnFilterScriptExit
- #endif
- #define OnFilterScriptExit HUN_OnFilterScriptExit
- #if defined HUN_OnFilterScriptExit
- forward HUN_OnFilterScriptExit();
- #endif
- //Hook: OnGameModeExit
- public OnGameModeExit(){
- if(CRC_HuntingExit){
- CRC_HuntingExit = false;
- KillTimer(Hunt_Timer);
- }
- #if defined HUN_OnGameModeExit
- HUN_OnGameModeExit();
- #endif
- return 1;
- }
- #if defined _ALS_OnGameModeExit
- #undef OnGameModeExit
- #else
- #define _ALS_OnGameModeExit
- #endif
- #define OnGameModeExit HUN_OnGameModeExit
- #if defined HUN_OnGameModeExit
- forward HUN_OnGameModeExit();
- #endif
|