Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <dini>
- #define color_admin 0xFFFF00FF
- #define color_warn 0xFF421DFF
- #define color_error 0xFF0000FF
- #define color_server 0xFF00FFFF
- #define color_info 0xFFFFFFFF
- #define color_rot 0xAA3333AA
- #define color_gruen 0x33AA33AA
- #define MAX_GATES 100
- forward Close_Gate();
- enum g_daten
- {
- gID,
- gmodel,
- Float:gx,
- Float:gy,
- Float:gz,
- Float:grx,
- Float:gry,
- Float:grz,
- gskin,
- bool:gopened
- }
- new TorInfo[MAX_GATES][g_daten];
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Dynamisches Tor System -> by Growen");
- print(" Imaginäres Copyright by Growen");
- print(" GPawn Help -> /ghelp");
- print("--------------------------------------\n");
- for(new g=1;g<MAX_GATES;g++)
- {
- Load_Gate(g);
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- for(new g=1;g<MAX_GATES;g++)
- {
- DestroyObject(TorInfo[g][gID]);
- }
- print("\n--------------------------------------");
- print(" GPawn Gates Unloaded");
- print("--------------------------------------\n");
- return 1;
- }
- #define ocmd:%1(%2) forward ocmd_%1(%2);\
- public ocmd_%1(%2)
- public OnPlayerCommandText(playerid,cmdtext[])
- {
- cmdtext[0]='_';
- new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
- for(new i;i<128;i++)
- {
- if(cmdtext[i]=='\0')break;
- if((cmdtext[i]==' ')&&(!ocmdAffe))
- {
- ocmdAffe=true;
- continue;
- }
- if(!ocmdAffe)ocmdStr[i]=cmdtext[i];
- else
- {
- ocmdParams[ocmdFu]=cmdtext[i];
- ocmdFu++;
- }
- }
- format(ocmdStr,128,"ocmd%s",ocmdStr);
- if(!strlen(ocmdParams))format(ocmdParams,128," ");
- if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1;
- cmdtext[0]='/';
- return CallLocalFunction("ocmdOnPlayerCommandText","ds",playerid,cmdtext);
- }
- #define OnPlayerCommandText ocmdOnPlayerCommandText
- ocmd:ghelp(playerid,params[])
- {
- SendClientMessage(playerid,color_info,"----------GPawn Gates----------");
- SendClientMessage(playerid,color_admin,"/gatecreate ;; /deletegate ;; /g");
- SendClientMessage(playerid,color_info,"-------------------------------");
- return 1;
- }
- ocmd:gatecreate(playerid,params[])
- {
- new Float:x,
- Float:y,
- Float:z,
- Float:rx=0,
- Float:ry=0,
- Float:rz=0,
- typ,
- MODEL,
- str[26],
- send[50],
- skin;
- if(sscanf(params, "dd",typ,skin))
- {
- return SendClientMessage(playerid,color_info,"[GPawn]: /gatecreate [Typ] [Skin- 0=Alle erlaubt]");
- }
- else if(typ > 3 || typ < 1)
- {
- return SendClientMessage(playerid, color_admin, "[GPawn]: Falscher Typ des Gates!");
- }
- else if(IsPlayerAdmin(playerid))
- {
- GetPlayerPos(playerid,x,y,z);
- GetPlayerFacingAngle(playerid,rz);
- if(typ==1) {MODEL=985; z=z+0.5;}
- if(typ==2) {MODEL=980; z=z+1.5;}
- if(typ==3) {MODEL=987; z=z-2;}
- format(send,sizeof send,"[GPawn]: Gate Typ %d, erfolgreich erstellt!",typ);
- SendClientMessage(playerid,color_admin,send);
- if(skin > 0)
- {
- format(send,sizeof send,"[GPawn]: Nur SkinID %d darf passieren",skin);
- SendClientMessage(playerid,color_admin,send);
- }
- for(new g=1;g<MAX_GATES;g++)
- {
- format(str, sizeof(str), "GPawn_Gates/gate_%d.gpwn", g);
- if(!dini_Exists(str))
- {
- dini_Create(str);
- {
- dini_IntSet(str,"Gate_ID",g);
- dini_IntSet(str,"Gate_Model",MODEL);
- dini_FloatSet(str,"Gate_X",x);
- dini_FloatSet(str,"Gate_Y",y);
- dini_FloatSet(str,"Gate_Z",z);
- dini_FloatSet(str,"Gate_RX",rx);
- dini_FloatSet(str,"Gate_RY",ry);
- dini_FloatSet(str,"Gate_RZ",rz);
- dini_IntSet(str,"Gate_Valid_Skin",skin);
- SetPlayerPos(playerid,x+2,y+2,z);
- return Load_Gate(g);
- }
- }
- }
- }
- return 1;
- }
- stock Load_Gate(gateid)
- {
- new str[26];
- format(str, sizeof(str), "GPawn_Gates/gate_%d.gpwn", gateid);
- if(gateid == 0)
- {
- return 1;
- }
- if(fexist(str))
- {
- TorInfo[gateid][gmodel] = dini_Int(str,"Gate_Model");
- TorInfo[gateid][gskin] = dini_Int(str,"Gate_Valid_Skin");
- TorInfo[gateid][gx] = dini_Float(str,"Gate_X"); // hier laden wir die Werte
- TorInfo[gateid][gy] = dini_Float(str,"Gate_Y");
- TorInfo[gateid][gz] = dini_Float(str,"Gate_Z");
- TorInfo[gateid][grx] = dini_Float(str,"Gate_RX");
- TorInfo[gateid][gry] = dini_Float(str,"Gate_RY");
- TorInfo[gateid][grz] = dini_Float(str,"Gate_RZ");
- TorInfo[gateid][gID] = CreateObject(TorInfo[gateid][gmodel],TorInfo[gateid][gx],TorInfo[gateid][gy],TorInfo[gateid][gz],TorInfo[gateid][grx],TorInfo[gateid][gry],TorInfo[gateid][grz],150.0);
- }
- return 1;
- }
- ocmd:deletegate(playerid,params[])
- {
- new Float:x,
- Float:y,
- Float:z,
- str[26];
- if(IsPlayerAdmin(playerid))
- {
- GetPlayerPos(playerid,x,y,z);
- for(new g=1;g<MAX_GATES;g++)
- {
- if(IsPlayerInRangeOfPoint(playerid,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
- {
- SendClientMessage(playerid,color_admin,"[GPawn]: Gate erfolgreich gelöscht!");
- format(str,26,"GPawn_Gates/gate_%d.gpwn",g);
- dini_Unset(str,"Gate_Model");
- dini_Unset(str,"Gate_Valid_Skin");
- dini_Unset(str,"Gate_X");
- dini_Unset(str,"Gate_Y");
- dini_Unset(str,"Gate_Z");
- dini_Unset(str,"Gate_RX");
- dini_Unset(str,"Gate_RY");
- dini_Unset(str,"Gate_RZ");
- dini_Unset(str,"Gate_ID");
- TorInfo[g][gx]=0;
- TorInfo[g][gy]=0;
- TorInfo[g][gz]=0;
- dini_Remove(str);
- return DestroyObject(TorInfo[g][gID]);
- }
- }
- }
- return 1;
- }
- ocmd:g(playerid,params[])
- {
- new Float:x,
- Float:y,
- Float:z;
- GetPlayerPos(playerid,x,y,z);
- for(new g=1;g<MAX_GATES;g++)
- {
- if(IsPlayerInRangeOfPoint(playerid,5,TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]))
- {
- if(TorInfo[g][gskin]>0 && TorInfo[g][gskin]==GetPlayerSkin(playerid))
- {
- MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
- TorInfo[g][gopened]=true;
- return SetTimerEx("Close_Gate",5000,0,"i",playerid);
- }
- else if(TorInfo[g][gskin]==0)
- {
- MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz]-10,4);
- TorInfo[g][gopened]=true;
- return SetTimerEx("Close_Gate",5000,0,"i",playerid);
- }
- else
- {
- return SendClientMessage(playerid,color_error,"[GPawn]: Du bist nicht befugt dieses Gate zu nutzen");
- }
- }
- }
- return 1;
- }
- public Close_Gate()
- {
- for(new g=1;g<MAX_GATES;g++)
- {
- if(TorInfo[g][gopened]==true)
- {
- MoveObject(TorInfo[g][gID],TorInfo[g][gx],TorInfo[g][gy],TorInfo[g][gz],4);
- return TorInfo[g][gopened]=false;
- }
- }
- return 1;
- }
- stock sscanf(string[], format[], {Float,_}:...)
- {
- #if defined isnull
- if (isnull(string))
- #else
- if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
- #endif
- {
- return format[0];
- }
- #pragma tabsize 4
- new
- formatPos = 0,
- stringPos = 0,
- paramPos = 2,
- paramCount = numargs(),
- delim = ' ';
- while (string[stringPos] && string[stringPos] <= ' ')
- {
- stringPos++;
- }
- while (paramPos < paramCount && string[stringPos])
- {
- switch (format[formatPos++])
- {
- case '\0':
- {
- return 0;
- }
- case 'i', 'd':
- {
- new
- neg = 1,
- num = 0,
- ch = string[stringPos];
- if (ch == '-')
- {
- neg = -1;
- ch = string[++stringPos];
- }
- do
- {
- stringPos++;
- if ('0' <= ch <= '9')
- {
- num = (num * 10) + (ch - '0');
- }
- else
- {
- return -1;
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num * neg);
- }
- case 'h', 'x':
- {
- new
- num = 0,
- ch = string[stringPos];
- do
- {
- stringPos++;
- switch (ch)
- {
- case 'x', 'X':
- {
- num = 0;
- continue;
- }
- case '0' .. '9':
- {
- num = (num << 4) | (ch - '0');
- }
- case 'a' .. 'f':
- {
- num = (num << 4) | (ch - ('a' - 10));
- }
- case 'A' .. 'F':
- {
- num = (num << 4) | (ch - ('A' - 10));
- }
- default:
- {
- return -1;
- }
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num);
- }
- case 'c':
- {
- setarg(paramPos, 0, string[stringPos++]);
- }
- case 'f':
- {
- new changestr[16], changepos = 0, strpos = stringPos;
- while(changepos < 16 && string[strpos] && string[strpos] != delim)
- {
- changestr[changepos++] = string[strpos++];
- }
- changestr[changepos] = '\0';
- setarg(paramPos,0,_:floatstr(changestr));
- }
- case 'p':
- {
- delim = format[formatPos++];
- continue;
- }
- case '\'':
- {
- new
- end = formatPos - 1,
- ch;
- while ((ch = format[++end]) && ch != '\'') {}
- if (!ch)
- {
- return -1;
- }
- format[end] = '\0';
- if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
- {
- if (format[end + 1])
- {
- return -1;
- }
- return 0;
- }
- format[end] = '\'';
- stringPos = ch + (end - formatPos);
- formatPos = end + 1;
- }
- case 'u':
- {
- new
- end = stringPos - 1,
- id = 0,
- bool:num = true,
- ch;
- while ((ch = string[++end]) && ch != delim)
- {
- if (num)
- {
- if ('0' <= ch <= '9')
- {
- id = (id * 10) + (ch - '0');
- }
- else
- {
- num = false;
- }
- }
- }
- if (num && IsPlayerConnected(id))
- {
- setarg(paramPos, 0, id);
- }
- else
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #define __SSCANF_FOREACH__
- #endif
- string[end] = '\0';
- num = false;
- new
- name[MAX_PLAYER_NAME];
- id = end - stringPos;
- foreach (Player, playerid)
- {
- GetPlayerName(playerid, name, sizeof (name));
- if (!strcmp(name, string[stringPos], true, id))
- {
- setarg(paramPos, 0, playerid);
- num = true;
- break;
- }
- }
- if (!num)
- {
- setarg(paramPos, 0, INVALID_PLAYER_ID);
- }
- string[end] = ch;
- #if defined __SSCANF_FOREACH__
- #undef foreach
- #undef __SSCANF_FOREACH__
- #endif
- }
- stringPos = end;
- }
- case 's', 'z':
- {
- new
- i = 0,
- ch;
- if (format[formatPos])
- {
- while ((ch = string[stringPos++]) && ch != delim)
- {
- setarg(paramPos, i++, ch);
- }
- if (!i)
- {
- return -1;
- }
- }
- else
- {
- while ((ch = string[stringPos++]))
- {
- setarg(paramPos, i++, ch);
- }
- }
- stringPos--;
- setarg(paramPos, i, '\0');
- }
- default:
- {
- continue;
- }
- }
- while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
- {
- stringPos++;
- }
- while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
- {
- stringPos++;
- }
- paramPos++;
- }
- do
- {
- if ((delim = format[formatPos++]) > ' ')
- {
- if (delim == '\'')
- {
- while ((delim = format[formatPos++]) && delim != '\'') {}
- }
- else if (delim != 'z')
- {
- return delim;
- }
- }
- }
- while (delim > ' ');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement