All pastes #1457594 Raw Edit

SA:MP Vehicle Streamer

public cpp v1 · immutable
#1457594 ·published 2009-06-12 09:45 UTC
rendered paste body
/*----------------------------------------------------------------------------*-					============================					      Easy Car Streamer					============================										**Published Version**										Coded by Aqua_MarineYSI等でオブジェクトの自動ストリームは可能だったものの、車の自動ストリームのできるスクリプトが少なかったので試験的に作ってみました。ベータ版故に、確実に全く問題なく動作するという保証はありません…。バージョン:	0,3β更新履歴:	2009/5/28:ver0.3β        車をストリームするかしないかの判断基準を修正    2009/5/25:ver0.1β        超適当にスクリプトを走り書きしてなんとか完成備考欄:	AddStreamVehicle関数を使用して設置された車は自動的にストリームされる	ようになります。デフォルトの状態で設置できる最大車両数は700、	最大車種数は127ですが、このスクリプトを使用してストリームすると	最大車両数は5120、最大車種数は212にまで増やすことができます。		変数VehicleInfoの配列数を変えることによりストリームできる車の量を	増やすことができますが、これ以上増やすことは動作が不安定になる場合もあるので、	極端な数値を入力することは避けたほうが無難です。		このスクリプトで設置される車はあくまでも静的に設置される車と同じ扱いになります。	そのため、SetVehiclePos等で車を動かすことは不可能です。		このスクリプトはコンソールにてloadfs/unloadfsによりスクリプトを	ロード/アンロードされることは全く考慮されていないため、	このスクリプトを起動/再起動する場合、サーバーごと再起動する必要があります。-*----------------------------------------------------------------------------*///インクルードファイル#include <a_samp>//プロトタイプ宣言forward CheckShouldStreamVehicle(void);//列挙型変数enum vInfo{	model,	Float:x_spawn,	Float:y_spawn,	Float:z_spawn, 	Float:za_spawn, 	color_1, 	color_2,	spawned,	idnum,};//グローバル変数new modelcount[212];new vehcount=0;new streamcount=0;new vehused[65];new VehicleInfo[5120][vInfo];// -----------------------------------------------------------------------------public OnFilterScriptInit(){	//ここにAddStreamVehicle関数で車を設置	//使い方:AddStreamVehicle(modelid, X座標, Y座標, Z座標, 角度, Color1, Color2);	//例:AddStreamVehicle(451,2040.0520,1319.2799,10.3779,183.2439,16,16);		//ここから車設置					//ここまで車設置	SetTimer("CheckShouldStreamVehicle",1000,1);	print("-----------------------------------------------------------------");	print("Aqua's Vehicle Streamer has loaded.");	printf("%d vehicles has spawned althrough this script...",vehcount);    print("-----------------------------------------------------------------");	return 1;}// -----------------------------------------------------------------------------public OnVehicleDeath(vehicleid,killerid){		SetTimerEx("DeactivateStreamedVehicle",6000,0,"x",vehicleid);		return 1;}// -----------------------------------------------------------------------------public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger){	vehused[vehicleid]=1;	return 1;}//関数ここから/*----------------------------------------------------------------------------*-関数名:	CheckShouldStreamVehicle引数:	なし戻り値:	なし機能等:    車をストリームすべきかどうかを調べる関数です。    プレーヤーが近くにいて、ストリーム済み車数が上限に達していなければ    車をストリームし、条件を満たしていない場合は削除します。-*----------------------------------------------------------------------------*/public CheckShouldStreamVehicle(void){	for(new i=1;i<vehcount;i++){		if(VehicleInfo[i][spawned]==0){			if(IsPlayerClose(i,150)==1){			    if(streamcount<=675){			        if(modelcount[VehicleInfo[i][model]-400]<65){						VehicleInfo[i][idnum]=CreateVehicle(VehicleInfo[i][model],VehicleInfo[i][x_spawn],VehicleInfo[i][y_spawn],VehicleInfo[i][z_spawn],VehicleInfo[i][za_spawn],VehicleInfo[i][color_1],VehicleInfo[i][color_2],11000);                    	VehicleInfo[i][spawned]=1;                    	modelcount[VehicleInfo[i][model]-400]++;						streamcount++;					}				}			}		}else{			if(vehused[VehicleInfo[i][idnum]]==0){	    		if(IsPlayerClose(i,150)==0){            		DestroyVehicle(VehicleInfo[i][idnum]);            		VehicleInfo[i][spawned]=0;                    modelcount[VehicleInfo[i][model]-400]--;					streamcount--;				}			}		}	}}/*----------------------------------------------------------------------------*-関数名:	AddStreamVehicle引数:	modelid - 車のmodel id	x - 設置したい車のx座標(縦)	y - 設置したい車のy座標(横)	z - 設置したい車のz座標(高さ)	a - 設置したい車のa座標(角度)	color1 - 設置したい車のfirst color id	color2 - 設置したい車のsecond color id戻り値:	1機能等:    ストリームしたい車を設置します-*----------------------------------------------------------------------------*/stock AddStreamVehicle(modelid,Float:x,Float:y,Float:z,Float:a,color1,color2){	vehcount++;	VehicleInfo[vehcount][model]=modelid;	VehicleInfo[vehcount][x_spawn]=x;	VehicleInfo[vehcount][y_spawn]=y;	VehicleInfo[vehcount][z_spawn]=z;	VehicleInfo[vehcount][za_spawn]=a;	VehicleInfo[vehcount][color_1]=color1;	VehicleInfo[vehcount][color_2]=color2;	return 1;}/*----------------------------------------------------------------------------*-関数名:	DeactivateStreamedVehicle引数:	vehicleid - AddStreamVehicleによって設置された車のid戻り値:	1-*----------------------------------------------------------------------------*/stock DeactivateStreamedVehicle(vehicleid){    vehused[vehicleid]=0;	return 1;}/*----------------------------------------------------------------------------*-関数名:	IsPlayerClose引数:	streamid - AddStreamVehicleによって設置された車のid	MAX - 近いかどうかの判断基準(半径)戻り値:    (正の場合)1    (負の場合)0機能等:    プレーヤーがAddStreamVehicleで設置された車に近いかどうかを調べます-*----------------------------------------------------------------------------*/stock IsPlayerClose(streamid, Float:MAX){    for(new i = 0;i<MAX_PLAYERS;i++){    	if(!IsPlayerConnected(i))continue;		new Float:PPos[3];    	GetPlayerPos(i, PPos[0], PPos[1], PPos[2]);		if(PPos[0]>=floatsub(VehicleInfo[streamid][x_spawn],MAX)&&PPos[0]<=floatadd(VehicleInfo[streamid][x_spawn],MAX)		&& PPos[1]>=floatsub(VehicleInfo[streamid][y_spawn],MAX)&&PPos[1]<=floatadd(VehicleInfo[streamid][y_spawn],MAX)		&& PPos[2]>=floatsub(VehicleInfo[streamid][z_spawn],MAX)&&PPos[2]<=floatadd(VehicleInfo[streamid][z_spawn],MAX)){			return 1;		}	}	return 0;}