/* Laser Mines API * * by g3cKpunTop (ToJI9IHGaa) * * vk.com/krisiso */ #if defined G3LaserMinesIncluded #endinput #endif #define G3LaserMinesIncluded #define LASER_MINE_CLASSNAME "ent_LaserMine" //pev_classname #define LASER_MINE_KEY 84737365 //pev_impulse #define IsLaserMineKey(%1) (bool:(pev(%1,pev_impulse)==LASER_MINE_KEY)) stock LaserMine_SetLaserPlayer( pId ) { if( callfun_begin( "ClCmd_LaserOn", "G3LaserMines.amxx" ) == 1 ) { callfunc_push_int( pId ); callfunc_end(); } return 1; } stock bool: IsLaserMine( iEntity ) { if( !pev_valid( iEntity ) ) return false; if( pev( iEntity, pev_impulse ) != LASER_MINE_KEY ) return false; static szClassName[ 35 ]; pev( iEntity, pev_classname, szClassName, charsmax( szClassName ) ); return equal( szClassName, LASER_MINE_CLASSNAME ); } // типы возврата (return) enum eData_LaserReturnCallBack { LASER_SUPERCEDE = 1, //останавливает дальнейшее выполнение функции. LASER_CONTINUE = 0 //продолжает нормальную работу функции. //в LaserMine_Set (LASER_SET_POST|LASER_SET_ERR_PLAYER|LASER_SET_ERR_MINE|LASER_SET_ERR_SPAWN) только LASER_CONTINUE //в LaserMine_Delete (LASER_DELETE_POST|LASER_DELETE_ALL|LASER_DELETE_ONE) только LASER_CONTINUE }; // события в момент попытки удаление мины (НЕ УБИЙСТВА!!!). // убийство/урон ловить - Ham_Killed/Ham_TakeDamage - info_target + Key+ClassName enum eData_DeleteLaserCallback { LASER_DELETE_PRE = 0, //вызывает до начала удаления мины (работает структура возврата eData_LaserReturnCallBack) LASER_DELETE_POST = 1, //вызывается после успешного её удаления LASER_DELETE_ALL = 2, //вызывается когда удаляют все мины у игрока LASER_DELETE_ONE = 3 //вызывается когда удаляется определённая мина } // события в момент попытки установить мину. enum eData_SetLaserCallback { LASER_SET_PRE = 0, //вызывается когда мина ставится (до установки) (работает структура возврата eData_LaserReturnCallBack) LASER_SET_POST = 1, //вызывается когда мина уже успешно поставлена. LASER_SET_ERR_PLAYER = 2, //вызывается когда мина не поставилась из-за того что рядом игрок LASER_SET_ERR_MINE = 3, //вызывается когда мина не поставилась из-за того что рядом мина LASER_SET_ERR_SPAWN = 4, //вызывается когда мина не поставилась из-за того что рядом спавн игроков LASER_SET_CMD = 5, //вызывается когда игрок только нажал на кнопку установки мины (работает структура возврата eData_LaserReturnCallBack) LASER_SET_CMD_PRE = 5 }; /*вызывается когда игрок пробует ставить мину. * iType - В какой момент идет вызов, pId - Индекс игрока. iTypeBackup - Дублирование iType. На Amx190 почему-то происходит утечка, что iType может быть всегда "2". Если у вас такая проблема, используйте этот аргумент return: только на LASER_SET_PRE и LASER_SET_CMD. */ forward LaserMine_Set( eData_SetLaserCallback:iType, pId, eData_SetLaserCallback:iTypeBackup ); /*вызывается когда у игрока удаляется мина. * iType - В какой момент идет удаление, pId - Индекс игрока, iMineId - Индекс мины. return: только на LASER_DELETE_PRE. */ forward LaserMine_Delete( eData_DeleteLaserCallback: iType, pId, iMineId ); /*вызывается когда мина пытается нанести урон врагу * iVictim - жертва, iAttacker - Индекс мины, iOwner - Индекс владельца мины (игрок), iDamage - Наносимый урон. return: eData_LaserReturnCallBack */ forward LaserMine_Damage( iVictim, iAttacker, iOwner, iDamage ); /*возвращает количество мин у игрока*/ native LaserMine_UserGetInventory( pId ); /*возвращает количество УСТАНОВЛЕННЫХ мин у игрока*/ native LaserMine_UserGetWork( pId ); /*устанавливает мины игроку (в инвентарь)*/ native LaserMine_UserSetLaserNum( pId, iNum ); /*возвращает лимит мин для игрока*/ native LaserMine_GetMineLimit(); /*удаляет мину и возвращает её в инвентарь * iOwner - владелец мины (0 - мина сама находит владельца), iMineId - Индекс мины, bAllRemove - TRUE = удаляет все мины игрока, FALSE = только iMineId. */ native LaserMine_Remove( iOwner, iMineId, bool: bAllRemove ); /*удаляет мину * iOwner - владелец мины (0 - мина сама находит владельца), iMineId - Индекс мины, bAllRemove - TRUE = удаляет все мины игрока, FALSE = только iMineId. */ native LaserMine_Destroy( iOwner, iMineId, bool: bAllRemove );