/*------------------------------------------------------------------------------ 乗り物を扱う フィルタースクリプト [ util_vehicles.pwn ] > Enter キー入力でTram、各RC等に乗車可能に < > RC各車両に乗車中にEnterキーで降車可能に < * 無理やりRespawnさせる為、不具合があるかも?* > 車両再設置時に、車両のInteriorIDを0に. < > 暫定ですが、乗車中の溺死クラッシュを防ぐ < ------------------------------------------------------------------------------*/ #include // Enterキーで乗車、降車を可能にする車両の設定 コメントアウトで無効になります. #define Tram // TRAM model ID 449 #define Rcburon // RC BURON model ID 464 #define Rcraider // RC RAIDER model ID 465 #define Rcbandit // RC BANDIT model ID 441 #define Rcgoblin // RC GOBLIN model ID 501 #define Rctiger // RC TIGER model ID 564 #define Rccam // RC CAM model ID 594 //#define CLEAN_VEHICLE #define SERVER_NUMBER_PLATE "774 SABA" // 半角英数字8文字まで #define SCRIPT_NAME "util_Vehicles.amx" // グローバル変数 #if defined CLEAN_VEHICLE new Initialized; // 初期化設定 new Vehicle[MAX_VEHICLES]; new V_BUG; #endif //------------------------------------------------------------------------------ public OnFilterScriptInit() { new string[256]; format(string, sizeof(string), "Reload %s", SCRIPT_NAME); SendClientMessageToAll(0x00EEADDF, string); return 1; } //------------------------------------------------------------------------------ public OnFilterScriptExit() { new string[256]; format(string, sizeof(string), "Unload %s", SCRIPT_NAME); SendClientMessageToAll(0x00EEADDF, string); return 1; } //------------------------------------------------------------------------------ // 全ての車を再設置。問題が多々あり、使用していない。 #if defined CLEAN_VEHICLE public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { if(Initialized == 0 && V_BUG == 1) { Initialized = 1; for(new i = 1; i < MAX_VEHICLES ; i++) { SetVehicleToRespawn(i); LinkVehicleToInterior(i, 0); } SendClientMessageToAll(0xFFFFFFAA, "SERVER: Vehicle Bug Fixed."); } return 1; } #endif //------------------------------------------------------------------------------ public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { new Float:px,Float:py,Float:pz; // プレイヤーの座標. new Float:vx,Float:vy,Float:vz; // 対象車両の座標. // プレイヤーが歩行中であり、Enterキー等を入力した場合.主に車両に乗せる場合に使用 if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && (KEY_SECONDARY_ATTACK & newkeys)) { GetPlayerPos(playerid, px, py, pz); for(new i = 1; i < MAX_VEHICLES; i++) { // SFの爆速Tramに乗車可能の場合. #if defined Tram if(GetVehicleModel(i) == 449) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif // RCで唯一、銃撃が可能な戦闘機に乗車可能の場合. #if defined Rcburon if(GetVehicleModel(i) == 464) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif // 実は凶器になり得る、RC ヘリコプター一号機に乗車可能の場合. #if defined Rcraider if(GetVehicleModel(i) == 465) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif // GTA3で出て来た、あのラジコンカーに乗車可能の場合. #if defined Rcbandit if(GetVehicleModel(i) == 441) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif // ラジコンヘリ TypeUに乗車可能の場合. #if defined Rcgoblin if(GetVehicleModel(i) == 501) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif // 弾の出ない、ラジコン戦車に乗車可能の場合. #if defined Rctiger if(GetVehicleModel(i) == 564) { GetVehiclePos(i, vx, vy, vz); if(floatsqroot(floatpower(px-vx,2.0) + floatpower(py-vy,2.0) + floatpower(pz-vz,2.0)) < 5.0) { PutPlayerInVehicle(playerid, i, 0); } } #endif } } // プレイヤーが車両を運転中、Enterキー等を入力した場合.主に車両から降ろす場合に使用 /kill の方が確実な気がする. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && (KEY_SECONDARY_ATTACK & newkeys)) { new vid = GetPlayerVehicleID(playerid); // プレイヤーが RC BURON 乗車していて、Enterキーを入力した場合 #if defined Rcburon if(GetVehicleModel(vid) == 464) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif // プレイヤーが RC RAIDER 乗車していて、Enterキーを入力した場合 #if defined Rcraider if(GetVehicleModel(vid) == 465) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif // プレイヤーが RC BANDIT 乗車していて、Enterキーを入力した場合 #if defined Rcbandit if(GetVehicleModel(vid) == 441) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif // プレイヤーが RC GOBLIN 乗車していて、Enterキーを入力した場合 #if defined Rcgoblin if(GetVehicleModel(vid) == 501) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif // プレイヤーが RC TIGER 乗車していて、Enterキーを入力した場合 #if defined Rctiger if(GetVehicleModel(vid) == 564) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif // プレイヤーが RC CAM 乗車していて、Enterキーを入力した場合 #if defined Rccam if(GetVehicleModel(vid) == 594) { RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } #endif } return 1; } //------------------------------------------------------------------------------ public OnVehicleSpawn(vehicleid) { // 車両の再設置時にInteriorIDを0に戻す. LinkVehicleToInterior(vehicleid, 0); // 実験、本当に色をランダムにしてみる. 結果、ボツ AddStaticVehicle のカラーが優先されるよう //ChangeVehicleColor(vehicleid, random(126), random(126)); // お遊び、サーバーの名前のナンバープレート SetVehicleNumberPlate(vehicleid, SERVER_NUMBER_PLATE); return 1; } //------------------------------------------------------------------------------ public OnPlayerDeath(playerid, killerid, reason) { // 車両に乗ったまま溺死した場合、クラッシュするのを防ぐ 実験. if(IsPlayerInAnyVehicle(playerid)) { if(reason == WEAPON_DROWN) { new vid = GetPlayerVehicleID(playerid); RemovePlayerFromVehicle(playerid); SetVehicleToRespawn(vid); } } return 1; } //------------------------------------------------------------------------------