Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* DynInt
- * ( Dynamic Interiors )
- * (c) Copyright 2011-2012 by FoxHound
- *
- * @author : FoxHound aka PSPgamer_10
- * @date : 17 June 2011
- * @version : v1.0
- *
- * This file is provided as is (no warranties).
- *
- * ___ ___
- * /\__\ /| |
- * /:/ _/_ |:| |
- * /:/ /\__\ |:| |
- * /:/ /:/ / __|:|__|
- * /:/_/:/ / /::::\__\_____
- * \:\/:/ / ~~~~\::::/___/
- * \::/__/ |:|~~|
- * \:\ \ |:| |
- * \:\__\ |:|__|
- * \/__/ |/__/
- * +--+-+-+-+-+-+-+-+-+-+--+
- * | p r o d u c t i o n s |
- * +--+-+-+-+-+-+-+-+-+-+--+
- *
- */
- //--> INCLUDES
- #include <a_samp>
- //--> DEFINES
- #define FILE_INTERIORS "interiors.txt" //Write here where the File is/should be
- #define MAX_INTERIORS 10 //Change this value to the max. amount of your Interiors in File.
- #define InteriorCreateDialog 137
- #define InteriorNameDialog 138
- //--> FORWARD
- forward OnInteriorUpdate();
- //--> 'NEW's
- enum e_Interior {
- IntName[32],iEnterPickup,iExitPickup,Float:enterX, Float:enterY, Float:enterZ,
- Float:enterSpawnX, Float:enterSpawnY, Float:enterSpawnZ, Float:enterSpawnA, enterSpawnInt,
- Float:exitX, Float:exitY, Float:exitZ,
- Float:exitSpawnX, Float:exitSpawnY, Float:exitSpawnZ, Float:exitSpawnA, exitSpawnInt };
- new Interior[MAX_INTERIORS][2][e_Interior],InteriorTimer,InteriorCount;
- //--> OnFilterScriptInit
- public OnFilterScriptInit() {
- for(new i=0;i<MAX_INTERIORS;i++) { Interior[i][0][iEnterPickup]=-1; Interior[i][0][iExitPickup]=-1; } //Be sure that this Line comes BEFORE "LoadInteriors()"
- LoadInteriors();
- InteriorTimer = SetTimer("OnInteriorUpdate",2000,1);
- return print("\n--------------------------------------\n Dynamic Interior System bY FoxHound\n--------------------------------------\n"); }
- //--> OnFilterScriptExit
- public OnFilterScriptExit() {
- return KillTimer(InteriorTimer); }
- //--> OnRconCommand
- public OnRconCommand(cmd[]) {
- if(!strcmp(cmd,"reloadinteriors",true)) { UnloadInteriors(); LoadInteriors(); } }
- public OnPlayerCommandText(playerid,cmdtext[]) {
- if(!strcmp(cmdtext,"/cinterior",true) && IsPlayerAdmin(playerid)) {
- if(InteriorCount==MAX_INTERIORS) { return SendClientMessage(playerid,0xFAFAFAFA,"ERROR: Before you create another Interior, you must change the amount of max. interiors in the Script."); }
- return ShowPlayerDialog(playerid,InteriorCreateDialog,DIALOG_STYLE_LIST,"Interior Infos","Save Enter-Pickup Position\nSave Exit-Pickup Position\nSave Spawnposition (Inside)\nSave Spawnposition (Outside)\n{FF0000}Create Interior!","Choose","Cancel"); }
- return 0; }
- //--> OnDialogResponse
- public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[]) {
- if(dialogid==InteriorCreateDialog) {
- if(!response) return 1;
- if(response) {
- if(listitem==0) {
- new Float:xyz[3];
- GetPlayerPos(playerid,xyz[0],xyz[1],xyz[2]);
- Interior[InteriorCount+1][1][enterX]=xyz[0]; Interior[InteriorCount+1][1][enterY]=xyz[1]; Interior[InteriorCount+1][1][enterZ]=xyz[2];
- SendClientMessage(playerid,0xFAFAFAFA,"* Enterpickup Position saved.");
- return ShowPlayerDialog(playerid,InteriorCreateDialog,DIALOG_STYLE_LIST,"Interior Infos","Save Enter-Pickup Position\nSave Exit-Pickup Position\nSave Spawnposition (Inside)\nSave Spawnposition (Outside)\n{FF0000}Create Interior!","Choose","Cancel"); }
- if(listitem==1) {
- new Float:xyz[3];
- GetPlayerPos(playerid,xyz[0],xyz[1],xyz[2]);
- Interior[InteriorCount+1][1][exitX]=xyz[0]; Interior[InteriorCount+1][1][exitY]=xyz[1]; Interior[InteriorCount+1][1][exitZ]=xyz[2];
- SendClientMessage(playerid,0xFAFAFAFA,"* Exitpickup position saved.");
- return ShowPlayerDialog(playerid,InteriorCreateDialog,DIALOG_STYLE_LIST,"Interior Infos","Save Enter-Pickup Position\nSave Exit-Pickup Position\nSave Spawnposition (Inside)\nSave Spawnposition (Outside)\n{FF0000}Create Interior!","Choose","Cancel"); }
- if(listitem==2) {
- new Float:xyza[4], pInt=GetPlayerInterior(playerid);
- GetPlayerPos(playerid,xyza[0],xyza[1],xyza[2]); GetPlayerFacingAngle(playerid,xyza[3]);
- Interior[InteriorCount+1][1][enterSpawnX]=xyza[0]; Interior[InteriorCount+1][1][enterSpawnY]=xyza[1]; Interior[InteriorCount+1][1][enterSpawnZ]=xyza[2]; Interior[InteriorCount+1][1][enterSpawnA]=xyza[3]; Interior[InteriorCount+1][1][enterSpawnInt]=pInt;
- SendClientMessage(playerid,0xFAFAFAFA,"* Spawnposition (Inside) saved.");
- return ShowPlayerDialog(playerid,InteriorCreateDialog,DIALOG_STYLE_LIST,"Interior Infos","Save Enter-Pickup Position\nSave Exit-Pickup Position\nSave Spawnposition (Inside)\nSave Spawnposition (Outside)\n{FF0000}Create Interior!","Choose","Cancel"); }
- if(listitem==3) {
- new Float:xyza[4], pInt=GetPlayerInterior(playerid);
- GetPlayerPos(playerid,xyza[0],xyza[1],xyza[2]); GetPlayerFacingAngle(playerid,xyza[3]);
- Interior[InteriorCount+1][1][exitSpawnX]=xyza[0]; Interior[InteriorCount+1][1][exitSpawnY]=xyza[1]; Interior[InteriorCount+1][1][exitSpawnZ]=xyza[2]; Interior[InteriorCount+1][1][exitSpawnA]=xyza[3]; Interior[InteriorCount+1][1][exitSpawnInt]=pInt;
- SendClientMessage(playerid,0xFAFAFAFA,"* Spawnposition (outside) saved.");
- return ShowPlayerDialog(playerid,InteriorCreateDialog,DIALOG_STYLE_LIST,"Interior Infos","Save Enter-Pickup Position\nSave Exit-Pickup Position\nSave Spawnposition (Inside)\nSave Spawnposition (Outside)\n{FF0000}Create Interior!","Choose","Cancel"); }
- if(listitem==4) {
- if(!Interior[InteriorCount+1][1][enterX] && !Interior[InteriorCount+1][1][enterY] && !Interior[InteriorCount+1][1][enterZ]) { return SendClientMessage(playerid,0xFAFAFAFA,"* You didn't save the Enterpickup!"); }
- if(!Interior[InteriorCount+1][1][enterSpawnX] && !Interior[InteriorCount+1][1][enterSpawnY] && !Interior[InteriorCount+1][1][enterSpawnZ] && !Interior[InteriorCount+1][1][enterSpawnA] && !Interior[InteriorCount+1][1][enterSpawnInt]) { return SendClientMessage(playerid,0xFAFAFAFA,"* You didn't save the Spawnposition (inside)!"); }
- if(!Interior[InteriorCount+1][1][exitX] && !Interior[InteriorCount+1][1][exitY] && !Interior[InteriorCount+1][1][exitZ]) { return SendClientMessage(playerid,0xFAFAFAFA,"* You didn't save the Exitpickup!"); }
- if(!Interior[InteriorCount+1][1][exitSpawnX] && !Interior[InteriorCount+1][1][exitSpawnY] && !Interior[InteriorCount+1][1][exitSpawnZ] && !Interior[InteriorCount+1][1][exitSpawnA] && !Interior[InteriorCount+1][1][exitSpawnInt]) { return SendClientMessage(playerid,0xFAFAFAFA,"* You didn't save the Spawnposition (outside)!"); }
- ShowPlayerDialog(playerid,InteriorNameDialog,DIALOG_STYLE_INPUT,"Interiorname","Please enter a Name for your Interior.\nex.: 'LSPD' 'BSN' '24/7'...","Enter","Cancel");
- } } }
- else if(dialogid==InteriorNameDialog) {
- if(!response) {
- Interior[InteriorCount+1][1][enterX]=0; Interior[InteriorCount+1][1][enterY]=0; Interior[InteriorCount+1][1][enterZ]=0;
- Interior[InteriorCount+1][1][enterSpawnX]=0; Interior[InteriorCount+1][1][enterSpawnY]=0; Interior[InteriorCount+1][1][enterSpawnZ]=0; Interior[InteriorCount+1][1][enterSpawnA]=0; Interior[InteriorCount+1][1][enterSpawnInt]=0;
- Interior[InteriorCount+1][1][exitX]=0; Interior[InteriorCount+1][1][exitY]=0; Interior[InteriorCount+1][1][exitZ]=0;
- Interior[InteriorCount+1][1][exitSpawnX]=0; Interior[InteriorCount+1][1][exitSpawnY]=0; Interior[InteriorCount+1][1][exitSpawnZ]=0; Interior[InteriorCount+1][1][exitSpawnA]=0; Interior[InteriorCount+1][1][exitSpawnInt]=0;
- return SendClientMessage(playerid,0xFAFAFAFA,"You cancelled."),1; }
- if(response) {
- new string[256];
- //////////////////////////
- Interior[InteriorCount+1][0][enterX]=Interior[InteriorCount+1][1][enterX]; Interior[InteriorCount+1][0][enterY]=Interior[InteriorCount+1][1][enterY]; Interior[InteriorCount+1][0][enterZ]=Interior[InteriorCount+1][1][enterZ];
- Interior[InteriorCount+1][0][enterSpawnX]=Interior[InteriorCount+1][1][enterSpawnX]; Interior[InteriorCount+1][0][enterSpawnY]=Interior[InteriorCount+1][1][enterSpawnY]; Interior[InteriorCount+1][0][enterSpawnZ]=Interior[InteriorCount+1][1][enterSpawnZ]; Interior[InteriorCount+1][0][enterSpawnA]=Interior[InteriorCount+1][1][enterSpawnA]; Interior[InteriorCount+1][0][enterSpawnInt]=Interior[InteriorCount+1][1][enterSpawnInt];
- Interior[InteriorCount+1][0][exitX]=Interior[InteriorCount+1][1][exitX]; Interior[InteriorCount+1][0][exitY]=Interior[InteriorCount+1][1][exitY]; Interior[InteriorCount+1][0][exitZ]=Interior[InteriorCount+1][1][exitZ];
- Interior[InteriorCount+1][0][exitSpawnX]=Interior[InteriorCount+1][1][exitSpawnX]; Interior[InteriorCount+1][0][exitSpawnY]=Interior[InteriorCount+1][1][exitSpawnY]; Interior[InteriorCount+1][0][exitSpawnZ]=Interior[InteriorCount+1][1][exitSpawnZ]; Interior[InteriorCount+1][0][exitSpawnA]=Interior[InteriorCount+1][1][exitSpawnA]; Interior[InteriorCount+1][0][exitSpawnInt]=Interior[InteriorCount+1][1][exitSpawnInt];
- format(Interior[InteriorCount+1][0][IntName],32,"%s",inputtext);
- format(string,sizeof(string),"%s|%f|%f|%f|%f|%f|%f|%f|%d|%f|%f|%f|%f|%f|%f|%f|%d\n",Interior[InteriorCount][0][IntName],Interior[InteriorCount+1][0][enterX],Interior[InteriorCount+1][0][enterY],Interior[InteriorCount+1][0][enterZ],Interior[InteriorCount+1][0][enterSpawnX],Interior[InteriorCount+1][0][enterSpawnY],Interior[InteriorCount+1][0][enterSpawnZ],Interior[InteriorCount+1][0][enterSpawnA],Interior[InteriorCount+1][0][enterSpawnInt],
- Interior[InteriorCount+1][0][exitX],Interior[InteriorCount+1][0][exitY],Interior[InteriorCount+1][0][exitZ],Interior[InteriorCount+1][0][exitSpawnX],Interior[InteriorCount+1][0][exitSpawnY],Interior[InteriorCount+1][0][exitSpawnZ],Interior[InteriorCount+1][0][exitSpawnA],Interior[InteriorCount+1][0][exitSpawnInt]);
- new File:intFile = fopen(FILE_INTERIORS,io_readwrite);
- fwrite(intFile,string); fclose(intFile);
- SendClientMessage(playerid,0x33CCFFFF,"* Interior created and saved.");
- SendClientMessage(playerid,0x33CCFFFF,"* Reloading Interiors...");
- UnloadInteriors(); LoadInteriors();
- //////////////////////////
- Interior[InteriorCount+1][1][enterX]=0; Interior[InteriorCount+1][1][enterY]=0; Interior[InteriorCount+1][1][enterZ]=0;
- Interior[InteriorCount+1][1][enterSpawnX]=0; Interior[InteriorCount+1][1][enterSpawnY]=0; Interior[InteriorCount+1][1][enterSpawnZ]=0; Interior[InteriorCount+1][1][enterSpawnA]=0; Interior[InteriorCount+1][1][enterSpawnInt]=0;
- Interior[InteriorCount+1][1][exitX]=0; Interior[InteriorCount+1][1][exitY]=0; Interior[InteriorCount+1][1][exitZ]=0;
- Interior[InteriorCount+1][1][exitSpawnX]=0; Interior[InteriorCount+1][1][exitSpawnY]=0; Interior[InteriorCount+1][1][exitSpawnZ]=0; Interior[InteriorCount+1][1][exitSpawnA]=0; Interior[InteriorCount+1][1][exitSpawnInt]=0; }
- return 1; }
- return 0; }
- //--> OnInteriorUpdate
- public OnInteriorUpdate() {
- for(new pid=0,mPlayers=GetMaxPlayers(); pid<mPlayers; pid++) {
- for(new intid=0; intid<=MAX_INTERIORS; intid++) {
- if((Interior[intid][0][enterX]==0.0) && (Interior[intid][0][enterY]==0.0) && (Interior[intid][0][enterZ]==0.0)) { continue; }
- if(IsPlayerInRangeOfPoint(pid,1.0,Interior[intid][0][enterX],Interior[intid][0][enterY],Interior[intid][0][enterZ])) {
- SetPlayerPos(pid,Interior[intid][0][enterSpawnX],Interior[intid][0][enterSpawnY],Interior[intid][0][enterSpawnZ]);
- if(Interior[intid][0][enterSpawnA]) { SetPlayerFacingAngle(pid,Interior[intid][0][enterSpawnA]); }
- SetPlayerInterior(pid,Interior[intid][0][enterSpawnInt]);
- GameTextForPlayer(pid,Interior[intid][0][IntName],3000,1);
- SetCameraBehindPlayer(pid); }
- else if(IsPlayerInRangeOfPoint(pid,1.0,Interior[intid][0][exitX],Interior[intid][0][exitY],Interior[intid][0][exitZ])) {
- SetPlayerPos(pid,Interior[intid][0][exitSpawnX],Interior[intid][0][exitSpawnY],Interior[intid][0][exitSpawnZ]);
- if(Interior[intid][0][exitSpawnA]) { SetPlayerFacingAngle(pid,Interior[intid][0][exitSpawnA]); }
- SetPlayerInterior(pid,Interior[intid][0][exitSpawnInt]);
- SetCameraBehindPlayer(pid); } } }
- return 1; }
- //--> LoadInteriors
- forward LoadInteriors();
- public LoadInteriors() {
- new string[256],File:intFile = fopen(FILE_INTERIORS,io_readwrite);
- InteriorCount=0;
- for(new i=0; fread(intFile,string); i++) {
- if(!strlen(string)) { break; }
- if(string[0]=='\r') { break; }
- else if((string[0]=='>') && (string[1]=='>')) { continue; }
- else if((string[0]=='/') && (string[1]=='/')) { i--; continue; }
- InteriorCount++;
- getPartOfStringEx(string,Interior[i][0][IntName],0,'|');
- Interior[i][0][enterX]=floatstr(getPartOfString(string,1,'|'));
- Interior[i][0][enterY]=floatstr(getPartOfString(string,2,'|'));
- Interior[i][0][enterZ]=floatstr(getPartOfString(string,3,'|'));
- Interior[i][0][enterSpawnX]=floatstr(getPartOfString(string,4,'|'));
- Interior[i][0][enterSpawnY]=floatstr(getPartOfString(string,5,'|'));
- Interior[i][0][enterSpawnZ]=floatstr(getPartOfString(string,6,'|'));
- Interior[i][0][enterSpawnA]=floatstr(getPartOfString(string,7,'|'));
- Interior[i][0][enterSpawnInt]=strval(getPartOfString(string,8,'|'));
- Interior[i][0][exitX]=floatstr(getPartOfString(string,9,'|'));
- Interior[i][0][exitY]=floatstr(getPartOfString(string,10,'|'));
- Interior[i][0][exitZ]=floatstr(getPartOfString(string,11,'|'));
- Interior[i][0][exitSpawnX]=floatstr(getPartOfString(string,12,'|'));
- Interior[i][0][exitSpawnY]=floatstr(getPartOfString(string,13,'|'));
- Interior[i][0][exitSpawnZ]=floatstr(getPartOfString(string,14,'|'));
- Interior[i][0][exitSpawnA]=floatstr(getPartOfString(string,15,'|'));
- Interior[i][0][exitSpawnInt]=strval(getPartOfString(string,16,'|'));
- Interior[i][0][iEnterPickup] = AddStaticPickup(1559,23,Interior[i][0][enterX],Interior[i][0][enterY],Interior[i][0][enterZ],-1);
- Interior[i][0][iExitPickup] = AddStaticPickup(1559,23,Interior[i][0][exitX],Interior[i][0][exitY],Interior[i][0][exitZ],-1); }
- return fclose(intFile),print("[LOAD] Dynamic Interiors successfully loaded!"); }
- //--> UnloadInteriors
- forward UnloadInteriors();
- public UnloadInteriors() {
- for(new i=0;i<MAX_INTERIORS;i++) {
- if(Interior[i][0][iEnterPickup]==-1) { break; }
- Interior[i][0][IntName]=0;
- Interior[i][0][enterX]=0; Interior[i][0][enterY]=0; Interior[i][0][enterZ]=0;
- Interior[i][0][enterSpawnX]=0; Interior[i][0][enterSpawnY]=0; Interior[i][0][enterSpawnZ]=0; Interior[i][0][enterSpawnA]=0; Interior[i][0][enterSpawnInt]=0;
- Interior[i][0][exitX]=0; Interior[i][0][exitY]=0; Interior[i][0][exitZ]=0;
- Interior[i][0][exitSpawnX]=0; Interior[i][0][exitSpawnY]=0; Interior[i][0][exitSpawnZ]=0; Interior[i][0][exitSpawnA]=0; Interior[i][0][exitSpawnInt]=0;
- Interior[i][0][iEnterPickup]=-1; Interior[i][0][iExitPickup]=-1; }
- return print("[LOAD] Dynamic Interiors successfully unloaded!"); }
- //--> Needed Functions to Use
- stock getPartOfString(const string[], strpos=0, sep=' ',secondsep=256) { //by FoxHound
- new delstr[256],count[2]={0,...}; secondsep = (secondsep!=256) ? secondsep : sep;
- format(delstr,256,"%s",string);
- for(new i[2]={0,...}; i[0]<strlen(delstr); i[0]++) {
- if(delstr[i[0]]==sep) {
- count[1]++;
- if(!strpos) { strdel(delstr,i[0],strlen(delstr)); break; }
- else if(((count[0]+1)==strpos) && !i[1]) { strdel(delstr,0,i[0]+1),i={0,1},sep=secondsep; continue; }
- else if(i[1]) { strdel(delstr,i[0],strlen(delstr)); }
- else { count[0]++; continue; } } }
- if(count[1]<strpos) { delstr="\0"; }
- return delstr; }
- stock getPartOfStringEx(const string[], dest[], strpos=0, sep=' ', secondsep=256) { //by FoxHound
- new delstr[256],count[2]={0,...}; secondsep = (secondsep!=256) ? secondsep : sep;
- format(delstr,256,"%s",string);
- for(new i[2]={0,...}; i[0]<strlen(delstr); i[0]++) {
- if(delstr[i[0]]==sep) {
- count[1]++;
- if(!strpos) { strdel(delstr,i[0],strlen(delstr)); break; }
- else if(((count[0]+1)==strpos) && !i[1]) { strdel(delstr,0,i[0]+1),i={0,1},sep=secondsep; continue; }
- else if(i[1]) { strdel(delstr,i[0],strlen(delstr)); }
- else { count[0]++; continue; } } }
- if(count[1]<strpos) { delstr="\0"; }
- format(dest,64,"%s",delstr); }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement