//公開用に色々コメントが付いています。あっても問題無いですが、気になる方は消してください。 #include #include #include #define COLOR_YELLOW 0xFFFF00AA #define COLOR_WHITE 0xFFFFFFAA public OnFilterScriptInit() { //ロードが成功したらコンソールに表示されます。気になる方は消しちゃってください〜w. print("\n--------------------------------"); print(" Diving script set by ALMEIDA"); print("--------------------------------\n"); } public OnFilterScriptExit() { return 1; } public OnPlayerConnect(playerid) { //サーバに接続時に表示されるメッセージ. SendClientMessage(playerid,COLOR_YELLOW," スカイダイブを楽しみたい方は"); SendClientMessage(playerid,COLOR_YELLOW," /dive または /sdive [高度] をどうぞ"); return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new idx; new cmd[256]; new tmp[256]; cmd = strtok(cmdtext, idx); //通常のダイブコマンド 高さは固定 1000に設定. if(strcmp(cmd, "/dive", true) == 0) { if(GetPlayerState(playerid) == PLAYER_STATE_NONE) return 1; if(IsPlayerInAnyVehicle(playerid)) { new Float:X; new Float:Y; new Float:Z; new VehicleID; GetPlayerPos(playerid, X, Y, Z); VehicleID = GetPlayerVehicleID(playerid); SetVehiclePos(VehicleID, X, Y, Z + 1000);// +1000 を書き換えて高さを変えれます。. GivePlayerWeapon(playerid,46,1);//プレイヤーにパラシュートを持たせる. GameTextForPlayer(playerid, "~b~sky~n~ diiiiiiiiiiiiiiive!",5000,6);//ダイブしたら表示されるゲームテキスト. } else { new Float:X; new Float:Y; new Float:Z; GetPlayerPos(playerid, X, Y, Z); SetPlayerPos(playerid, X, Y, Z + 1000); GivePlayerWeapon(playerid,46,1); GameTextForPlayer(playerid, "~b~sky~n~ diiiiiiiiiiiiiiive!",5000,6); } return 1; } //高さを選べるダイビング機能 sdiveの s は SELECT の意味。 if(strcmp(cmd, "/sdive", true) == 0) { tmp = strtok(cmdtext, idx);//これが無かったら機能しません. if(GetPlayerState(playerid) == PLAYER_STATE_NONE) return 1; if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, " 使い方: /sdive [高度] 200から10000まで"); return 1; } //高すぎるとおかしくなるので10000を最高到達点と設定. if(strval(tmp) > 10001) { SendClientMessage(playerid, COLOR_YELLOW, " 高度が高すぎます"); return 1; } //高さを調節 低い入力を拒否. if(strval(tmp) < 199) { SendClientMessage(playerid, COLOR_YELLOW, " 高度が低すぎます"); return 1; } if(IsPlayerInAnyVehicle(playerid)) {//乗り物に乗っている場合. new Float:X; new Float:Y; new Float:Z; new VehicleID; GetPlayerPos(playerid, X, Y, Z);//プレイヤーの現在地を取得. GivePlayerWeapon(playerid,46,1);//パラシュートを持たせる. VehicleID = GetPlayerVehicleID(playerid);//コマンドを使用したプレイヤーが乗っている乗り物のIDを取得. SetPlayerInterior(playerid,0);//室内でのバグ対策 灰色世界を防ぐ. SetVehiclePos(VehicleID, X, Y, Z +strval(tmp));//入力した数字を 現在の位置の高さにプラス. } else { new Float:X; new Float:Y; new Float:Z; GetPlayerPos(playerid, X, Y, Z); GivePlayerWeapon(playerid,46,1); SetPlayerInterior(playerid,0); SetPlayerPos(playerid,X,Y,Z +strval(tmp)); } return 1; } /*ランダムで高さが変わるダイブ 不採用になった物です if(strcmp(cmd, "/rdive", true) == 0) { if(GetPlayerState(playerid) == PLAYER_STATE_NONE) return 1; if(IsPlayerInAnyVehicle(playerid)) { new Float:X; new Float:Y; new Float:Z; new VehicleID; GetPlayerPos(playerid, X, Y, Z); VehicleID = GetPlayerVehicleID(playerid); new randomdive =(random(95) + 5) * 100;//高さを設定 500〜10000まで. SetVehiclePos(VehicleID, X, Y, Z + randomdive);//高さにランダム値をプラス GivePlayerWeapon(playerid,46,1); GameTextForPlayer(playerid, "~b~sky~n~ diiiiiiiiiiiiiiive!",5000,6); } else { new Float:X; new Float:Y; new Float:Z; GetPlayerPos(playerid, X, Y, Z); new randomdive =(random(95) + 5) * 100; SetPlayerPos(playerid, X, Y, Z + randomdive); GivePlayerWeapon(playerid,46,1); GameTextForPlayer(playerid, "~b~sky~n~ diiiiiiiiiiiiiiive!",5000,6); } return 1; } */ return 0; } // strtok使用にあたり、これが必要らしい。消したら機能しません。 strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } // Last update 2007 2.9 by ALMEIDA http://chelseafcsamp.blog86.fc2.com/ 分からない事があればこちらまで