Advertisement
Guest User

Porting Include © by Fußboden

a guest
Jul 23rd, 2011
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.51 KB | None | 0 0
  1. /*
  2. ---------------------------------------------------------------------------
  3. Credits
  4. Dieses script wurde komplett von mir "Fußboden aka Basti"
  5. das entfernen der credits ist nicht erlaubt!
  6. ---------------------------------------------------------------------------
  7.  
  8. PPPPPPPPPPPP OOOOOOOOOO RRRRRRRRRRR TTTTTTTTTTTT
  9. PPPPPPPPPPPP OO OO RRRRRRRRRRR TTTTTTTTTTTT
  10. PP PP OO OO RR RR TT
  11. PP PP OO OO RR RR TT
  12. PPPPPPPPPPPP OO OO RRRRRRRRRRR TT
  13. PPPPPPPPPPPP OO OO RRRRRRRRRRR TT
  14. PP OO OO RR RR TT
  15. PP OO OO RR RR TT
  16. PP OO OO RR RR TT OO
  17. PP OOOOOOOOOO RR RR TT OO
  18.  
  19.  
  20. */
  21. //===================================[ Include ] ====================================//
  22. #include <a_samp>
  23. #include <dini>
  24. //===================================[ Defin´s ] ====================================//
  25. #define IsAdmin(%0,%1);\
  26. new AccountString[50],spielername[MAX_PLAYER_NAME],Level[MAX_PLAYER_NAME];\
  27. GetPlayerName(%0,spielername,sizeof(spielername));\
  28. format(AccountString,sizeof AccountString,"%s%s.ini",UserFolder,spielername);\
  29. Level[%0] = dini_Int(AccountString,"AdminLevel");\
  30. if(%1 > Level[%0])\
  31. {\
  32. SendClientMessage(%0, COLOR_RED, "Du bist kein Administrator.");\
  33. return 1;\
  34. }
  35. #define Command(%0) if(strcmp(cmd,"/"%0, true) == 0)
  36. //vorsicht dialogid´s müssen angepasst werden... wenn sie schon verwendet werden bei euch
  37. #define DIA_GetHere 9993
  38. #define Portung 9994
  39. #define ListPortung 9995
  40. #define GotoPlayer 9996
  41. #define SendTo 9997
  42. #define SendToPositioneZwei 9998
  43. #define AllePorten 9999
  44. #define Dynamic_Command 10000
  45. #define DynamicList 10001
  46. #define Dynamic_CommandCreate 10002
  47. #define Dynamic_FolderSystem 10003
  48. #define ALLPICKUPS 10004
  49. #define Dynamic_LevelGoto 10005
  50. #define Dynamic_LevelCreate 10006
  51. #define PICKUP_NAME 33
  52. #define PICKUP_LIST 34
  53. #define Pickup_Dellet 35
  54. #define Pickup_Model 36
  55. #define COLOR_RED 0xAA3333AA
  56. #define COLOR_YELLOW 0xFFFF00AA
  57. #define COLOR_GREEN 0x33AA33AA
  58. #define COLOR_WHITE 0xFFFFFFAA
  59. #define Folder "/Ports/%d.ini"//hier könnt ihr denn ordner ändern
  60. #define MAXMIALEPORTS 50 //hier könnt ihr die maximale anzahl der port datein bearbeitung zurzeit ist sie auf 50
  61. new PortCommand[MAX_PLAYER_NAME];
  62. new CreateCommand[MAX_PLAYER_NAME];
  63. new UserFolder[MAX_PLAYER_NAME];
  64. new AdminLevelGoto,
  65. CreateLevel;
  66. enum PInfo
  67. {
  68. Float:PortX,Float:PortY,Float:PortZ,Beschreibung[MAX_PLAYER_NAME],VWID,IntID,
  69. };
  70. new PortInfo[MAXMIALEPORTS][PInfo];
  71. new SendToPosition[MAX_PLAYER_NAME];
  72. //===================================[ Funktionen ] ====================================//
  73.  
  74. stock EPortingOnPlayerCommandText(playerid, cmdtext[])
  75. {
  76. new cmd[256],string[245],idx,StringCreate[60],PortString[60];
  77. cmd = strtok2(cmdtext, idx);
  78.  
  79. Command("Settings")
  80. {
  81. ShowPlayerDialog(playerid, DynamicList, DIALOG_STYLE_LIST, "Setting System", "Port Command Setzen\nErstellungs Command Setzen\nSpieler Verzeichnis festlegen\nPort Command AdminLevel Setzen\nCreate Command AdminLevel Setzen\nStatistik einsehen\n", "Auswählen", "Abbrechen");
  82. return 1;
  83. }
  84. format(PortString, sizeof(PortString), "/%s",PortCommand);
  85. if(strcmp(cmd,PortString, true) == 0)
  86. //Command(PortString)
  87. {
  88. IsAdmin(playerid,AdminLevelGoto);
  89. ShowPlayerDialog(playerid,ListPortung,DIALOG_STYLE_LIST,"Dynamic Port","Zu Punkt Porten\nZu Spieler Porten\nSpieler An Punkt Porten\nSpieler Herporten\nAlle Spieler Porten\nAlle Spieler zu mir Porten\n","Weiter","Abbrechen");
  90. return 1;
  91. }
  92. format(StringCreate, sizeof(StringCreate), "/%s",CreateCommand);
  93. if(strcmp(cmd,StringCreate, true) == 0)
  94. {
  95. IsAdmin(playerid,CreateLevel);
  96. new length = strlen(cmdtext);
  97. while ((idx < length) && (cmdtext[idx] <= ' '))
  98. {
  99. idx++;
  100. }
  101. new offset = idx;
  102. new result[64];
  103. while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  104. {
  105. result[idx - offset] = cmdtext[idx];
  106. idx++;
  107. }
  108. result[idx - offset] = EOS;
  109. if(!strlen(result))
  110. {
  111. SendClientMessage(playerid, COLOR_RED, "[Text Fehlt]");
  112. return 1;
  113. }
  114. format(string, sizeof(string), "Port Text: %s", (result));
  115. SendClientMessage(playerid,COLOR_YELLOW,string);
  116. //format(string, sizeof(string), "%s", (result));
  117. format(string, sizeof(string), "%s", (result));
  118. new Float:X,Float:Y,Float:Z;
  119. GetPlayerPos(playerid,X,Y,Z);
  120. new id = NexterPort();
  121. format(string, sizeof(string),Folder, id);
  122. dini_Create(string);
  123. PortInfo[id][PortX] = X;
  124. PortInfo[id][PortY] = Y;
  125. PortInfo[id][PortZ] = Z;
  126. new intid = GetPlayerInterior(playerid),VW = GetPlayerVirtualWorld(playerid);
  127. PortInfo[id][IntID] = intid;
  128. PortInfo[id][VWID] = VW;
  129. strmid(PortInfo[id][Beschreibung] , result, 0, strlen(result), 32);
  130. SendClientMessage(playerid,COLOR_GREEN,"Port Erfolgreich erstellt");
  131. SavePorts();
  132. return 1;
  133. }
  134. return 0;
  135. }
  136.  
  137. stock EPortingOnGameModeInit()
  138. {
  139. LoadConfig();
  140. LoadPorts();
  141. new DateiString[50];
  142. format(DateiString,sizeof DateiString,"/Ports/config.ini");
  143. if(dini_Exists(DateiString))
  144. {}else {dini_Create(DateiString);}
  145. print("Elite Port System Copyright by Basti aka Fussboden");
  146. return 0;
  147. }
  148. stock EPortingOnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  149. {
  150. new Name[MAX_PLAYER_NAME],DynamicID = listitem;
  151. new idx;
  152. if(dialogid == ListPortung)
  153. {
  154. if(response)
  155. {
  156. new DynamicString[600];
  157. if(listitem == 0)
  158. {
  159. new PickupD = NexterPort();
  160. for(new ID = 0; ID < PickupD; ID++)
  161. {format(DynamicString, sizeof(DynamicString), "%s\nBeschreibung: %s ID: %d\n",DynamicString,PortInfo[ID][Beschreibung],ID);}
  162. ShowPlayerDialog(playerid,Portung,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Weiter","Abbrechen");
  163. return 1;
  164. }
  165. if(listitem == 1)
  166. {
  167. for(new ID = 0; ID < MAX_PLAYERS; ID++)
  168. {
  169. if(IsPlayerConnected(ID))
  170. {
  171. GetPlayerName(ID,Name,sizeof(Name));format(DynamicString, sizeof(DynamicString), "%s\nName: %s ID: %d\n",DynamicString,Name,ID);
  172. }
  173. }
  174. ShowPlayerDialog(playerid,GotoPlayer,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Porten","Abbrechen");
  175.  
  176. }
  177. if(listitem == 2)
  178. {
  179. for(new ID = 0; ID < MAX_PLAYERS; ID++)
  180. {
  181. if(IsPlayerConnected(ID))
  182. {
  183. GetPlayerName(ID,Name,sizeof(Name));format(DynamicString, sizeof(DynamicString), "%s\nName: %s ID: %d\n",DynamicString,Name,ID);
  184. }
  185. }
  186. ShowPlayerDialog(playerid,SendTo,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Porten","Abbrechen");
  187.  
  188. }
  189. if(listitem == 3)
  190. {
  191. for(new ID = 0; ID < MAX_PLAYERS; ID++)
  192. {
  193. if(IsPlayerConnected(ID))
  194. {
  195. GetPlayerName(ID,Name,sizeof(Name));
  196. format(DynamicString, sizeof(DynamicString), "%s\nName: %s ID: %d",DynamicString,Name,ID);
  197. }
  198. }
  199. ShowPlayerDialog(playerid,DIA_GetHere,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Porten","Abbrechen");
  200.  
  201. }
  202. if(listitem == 4)
  203. {
  204. for(new ID = 0; ID < NexterPort(); ID++)
  205. {format(DynamicString, sizeof(DynamicString), "%s\nBeschreibung: %s ID: %d\n",DynamicString,PortInfo[ID][Beschreibung],ID);}
  206. ShowPlayerDialog(playerid,AllePorten,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Weiter","Abbrechen");
  207.  
  208. }
  209. if(listitem == 5)
  210. {
  211. new Float:X,Float:Y,Float:Z;
  212. GetPlayerPos(playerid,X,Y,Z);
  213. new InteriorID = GetPlayerInterior(playerid),VW = GetPlayerVirtualWorld(playerid);
  214. for(new ID = 0; ID < MAX_PLAYERS; ID++)
  215. {
  216. SetPlayerInterior(ID,InteriorID);
  217. SetPlayerVirtualWorld(ID,VW);
  218. SetPlayerPos(ID,X,Y,Z);
  219. }
  220.  
  221. }
  222.  
  223. }
  224. }
  225. if(dialogid == DIA_GetHere)
  226. {
  227. if(!response){return 1;}
  228. new Float:X,Float:Y,Float:Z,pID = listitem;
  229. GetPlayerPos(playerid,X,Y,Z);SetPlayerPos(pID,X,Y, Z);
  230. new InteriorID = GetPlayerInterior(playerid),VW = GetPlayerVirtualWorld(playerid);
  231. SetPlayerInterior(pID,InteriorID);SetPlayerVirtualWorld(pID,VW);
  232. }
  233. if(dialogid == AllePorten)
  234. {
  235. if(!response){return 1;}
  236. for(new ID = 0; ID < MAX_PLAYERS; ID++)
  237. {
  238. SetPlayerInterior(ID,PortInfo[DynamicID][IntID]); SetPlayerVirtualWorld(ID,PortInfo[DynamicID][VWID]);
  239. SetPlayerPos(ID,PortInfo[DynamicID][PortX],PortInfo[DynamicID][PortY],PortInfo[DynamicID][PortZ]);
  240.  
  241. }
  242. }
  243. if(dialogid == SendTo)
  244. {
  245. if(response)
  246. {
  247. new DynamicString[500],PickupD = NexterPort();
  248. SendToPosition[playerid] = listitem;
  249. for(new ID = 0; ID < PickupD; ID++)
  250. {format(DynamicString, sizeof(DynamicString), "%s\nBeschreibung: %s ID: %d\n",DynamicString,PortInfo[ID][Beschreibung],ID);}
  251. ShowPlayerDialog(playerid,SendToPositioneZwei,DIALOG_STYLE_LIST,"Dynamic Port",DynamicString,"Weiter","Abbrechen");
  252. }
  253. }
  254. if(dialogid == SendToPositioneZwei)
  255. {
  256. if(!response) {return 1;}
  257. SetPlayerInterior(SendToPosition[playerid],PortInfo[DynamicID][IntID]);
  258. SetPlayerVirtualWorld(SendToPosition[playerid],PortInfo[DynamicID][VWID]);
  259. SetPlayerPos(SendToPosition[playerid],PortInfo[DynamicID][PortX],PortInfo[DynamicID][PortY],PortInfo[DynamicID][PortZ]);
  260. }
  261. if(dialogid == GotoPlayer)
  262. {
  263. if(!response) {return 1;}
  264. new pID = listitem;
  265. new Float:X,Float:Y,Float:Z;
  266. GetPlayerPos(pID,X,Y,Z);
  267. SetPlayerPos(playerid,X,Y,Z);
  268. new InteriorID = GetPlayerInterior(pID),VW = GetPlayerVirtualWorld(pID);
  269. SetPlayerInterior(playerid,InteriorID);SetPlayerVirtualWorld(playerid,VW);
  270.  
  271. }
  272. if(dialogid == Portung)
  273. {
  274. if(!response) {return 1;}
  275. SetPlayerInterior(playerid,PortInfo[DynamicID][IntID]);
  276. SetPlayerVirtualWorld(playerid,PortInfo[DynamicID][VWID]);
  277. SetPlayerPos(playerid,PortInfo[DynamicID][PortX],PortInfo[DynamicID][PortY],PortInfo[DynamicID][PortZ]);
  278. }
  279. if(dialogid == DynamicList)
  280. {
  281. if(!response) {return 1;}
  282. if(listitem == 0)
  283. {
  284. ShowPlayerDialog(playerid,Dynamic_Command,DIALOG_STYLE_INPUT,"Elite Setting System","Tippe denn befehl ein Achtung: ohne / !","Absenden","Verlassen");
  285. }
  286. if(listitem == 1)
  287. {
  288. ShowPlayerDialog(playerid,Dynamic_CommandCreate,DIALOG_STYLE_INPUT,"Elite Setting System","Tippe denn befehl ein Achtung: ohne / !","Absenden","Verlassen");
  289. }
  290. if(listitem == 2)
  291. {
  292. ShowPlayerDialog(playerid,Dynamic_FolderSystem,DIALOG_STYLE_INPUT,"Elite Setting System","Tippe denn Ordner ein Achtung: Im format von: zb /Accounts/ ","Absenden","Verlassen");
  293. }
  294. if(listitem == 3)
  295. {
  296. ShowPlayerDialog(playerid,Dynamic_LevelGoto,DIALOG_STYLE_INPUT,"Elite Setting System","Tippe das neue Adminlevel ein!","Absenden","Verlassen");
  297. }
  298. if(listitem == 4)
  299. {
  300. ShowPlayerDialog(playerid,Dynamic_LevelCreate,DIALOG_STYLE_INPUT,"Elite Setting System","Tippe das neue Adminlevel ein!","Absenden","Verlassen");
  301. }
  302. if(listitem == 5)
  303. {
  304. new string[245];
  305. new DateiString[50];
  306. format(DateiString,sizeof DateiString,"/Ports/config.ini");
  307. format(string, sizeof(string), "User Verzeichnis:%s\nPort Befehl: %s\nErsellungs Befehl: %s\nPort AdminLevel: %d\nErstellungs Befehl AdminLevel:%d",UserFolder,PortCommand,CreateCommand,AdminLevelGoto,CreateLevel);
  308. ShowPlayerDialog(playerid,DynamicList,DIALOG_STYLE_MSGBOX,"Statistik System",string,"Ok","");
  309. }
  310. }
  311. if(dialogid == Dynamic_Command)
  312. {
  313. if(response)
  314. {
  315. new length = strlen(inputtext),offset = idx,result[64],CommandString[100];
  316. while ((idx < length) && (inputtext[idx] <= ' '))
  317. {idx++;}
  318. while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  319. {result[idx - offset] = inputtext[idx];idx++;}
  320. result[idx - offset] = EOS;
  321. if(!strlen(result))
  322. {
  323. SendClientMessage(playerid, COLOR_RED, "[FEHLER]");return 1;
  324. }
  325. strmid(PortCommand , result, 0, strlen(result), 32);
  326. format(CommandString, sizeof(CommandString), "Befehl auf : /%s gesetzt", (result));
  327. SendClientMessage(playerid,COLOR_WHITE,CommandString);
  328. SaveConfig();
  329.  
  330. }
  331. else
  332. {
  333. SendClientMessage(playerid, COLOR_WHITE, "System Verlassen");
  334. }
  335. return 1;
  336. }
  337. if(dialogid == Dynamic_CommandCreate)
  338. {
  339. if(response)
  340. {
  341. new length = strlen(inputtext),offset = idx,result[64],CommandString[100];
  342. while ((idx < length) && (inputtext[idx] <= ' '))
  343. {idx++;}
  344. while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  345. {result[idx - offset] = inputtext[idx];idx++;}
  346. result[idx - offset] = EOS;
  347. if(!strlen(result))
  348. {
  349. SendClientMessage(playerid, COLOR_RED, "[FEHLER]");
  350. return 1;
  351. }
  352. strmid(CreateCommand , result, 0, strlen(result), 32);
  353. format(CommandString, sizeof(CommandString), "Befehl auf : /%s gesetzt", (result));
  354. SendClientMessage(playerid,COLOR_WHITE,CommandString);
  355. SaveConfig();
  356.  
  357. }
  358. else
  359. {
  360. SendClientMessage(playerid, COLOR_WHITE, "System Verlassen");
  361. }
  362. return 1;
  363. }
  364. if(dialogid == Dynamic_FolderSystem)
  365. {
  366. if(response)
  367. {
  368. new length = strlen(inputtext),offset = idx,result[64],CommandString[100];
  369. while ((idx < length) && (inputtext[idx] <= ' '))
  370. {idx++;}
  371. while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  372. {result[idx - offset] = inputtext[idx];idx++;}
  373. result[idx - offset] = EOS;
  374. if(!strlen(result))
  375. {
  376. SendClientMessage(playerid, COLOR_RED, "[FEHLER]");
  377. return 1;
  378. }
  379. strmid(UserFolder , result, 0, strlen(result), 32);
  380. format(CommandString, sizeof(CommandString), "User Verzeichnis auf : %s gesetzt", (result));
  381. SendClientMessage(playerid,COLOR_WHITE,CommandString);
  382. SaveConfig();
  383.  
  384. }
  385. else
  386. {
  387. SendClientMessage(playerid, COLOR_WHITE, "System Verlassen");
  388. }
  389. return 1;
  390. }
  391. if(dialogid == Dynamic_LevelGoto)
  392. {
  393. new tmp[50],string[50];
  394. tmp = strtok2(inputtext, idx);
  395. if(!strlen(tmp))
  396. {
  397. SendClientMessage(playerid, COLOR_YELLOW, "[Adminlevel]");return 1;
  398. }
  399.  
  400. AdminLevelGoto = strval(tmp);
  401. format(string, sizeof(string), "Port Befehl auf Adminlevel %d Gesetzt",strval(tmp));
  402. SendClientMessage(playerid,COLOR_GREEN,string);
  403. SaveConfig();
  404. }
  405. if(dialogid == Dynamic_LevelCreate)
  406. {
  407. new tmp[50],string[50];
  408. tmp = strtok2(inputtext, idx);
  409. if(!strlen(tmp))
  410. {
  411. SendClientMessage(playerid, COLOR_YELLOW, "[Adminlevel]");
  412. return 1;
  413. }
  414.  
  415. CreateLevel = strval(tmp);
  416. format(string, sizeof(string), "Erstellungs Befehl auf Adminlevel %d Gesetzt",strval(tmp));
  417. SendClientMessage(playerid,COLOR_GREEN,string);
  418. SaveConfig();
  419. }
  420. #pragma unused inputtext
  421. return 1;
  422. }
  423. stock strtok2(const string[], &index)
  424. {
  425. new length = strlen(string),offset = index,result[20];
  426. while ((index < length) && (string[index] <= ' '))
  427. {index++;}
  428. while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  429. {
  430. result[index - offset] = string[index];index++;
  431. }
  432. result[index - offset] = EOS;
  433. return result;
  434. }
  435. stock LoadConfig()
  436. {
  437. new DateiString[70];
  438. format(DateiString,sizeof DateiString,"/Ports/config.ini");
  439. if(dini_Exists(DateiString))
  440. {
  441. strmid(PortCommand,dini_Get(DateiString,"PortCommandTest"),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
  442. strmid(CreateCommand,dini_Get(DateiString,"CreateCommandTest"),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
  443. strmid(UserFolder,dini_Get(DateiString,"UserFolderTest"),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
  444. AdminLevelGoto = dini_Int(DateiString,"AdminLevelGoto");
  445. CreateLevel = dini_Int(DateiString,"CreateLevel");
  446. print("Config System Loaded");
  447. }else print("/Ports/config.ini ist nicht vorhanden!");
  448. return 1;
  449. }
  450. stock SaveConfig()
  451. {
  452. new DateiString[128];
  453. format(DateiString,sizeof DateiString,"/Ports/config.ini");
  454. dini_Set(DateiString,"PortCommandTest",PortCommand);
  455. dini_Set(DateiString,"CreateCommandTest",CreateCommand);
  456. dini_Set(DateiString,"UserFolderTest",UserFolder);
  457. dini_IntSet(DateiString,"AdminLevelGoto",AdminLevelGoto);
  458. dini_IntSet(DateiString,"CreateLevel",CreateLevel);
  459. return 1;
  460. }
  461. stock LoadPorts()
  462. {
  463. new DateiString[70];
  464. for(new ID = 0; ID < sizeof(PortInfo); ID++)
  465. {
  466. format(DateiString, sizeof(DateiString), Folder, ID);
  467. if(dini_Exists(DateiString))
  468. {
  469. PortInfo[ID][PortX] = dini_Float(DateiString, "PortX");
  470. PortInfo[ID][PortY] = dini_Float(DateiString, "PortY");
  471. PortInfo[ID][PortZ] = dini_Float(DateiString, "PortZ");
  472. PortInfo[ID][IntID] = dini_Int(DateiString, "IntID");
  473. PortInfo[ID][VWID] = dini_Int(DateiString, "VWID");
  474. strmid(PortInfo[ID][Beschreibung],dini_Get(DateiString,"Beschreibung"),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
  475. }
  476. }
  477. return 1;
  478. }
  479. stock SavePorts()
  480. {
  481. new DateiString[50];
  482. for(new ID = 0; ID < sizeof(PortInfo); ID++)
  483. {
  484. format(DateiString, sizeof(DateiString), Folder, ID);
  485. if(dini_Exists(DateiString))
  486. {
  487. dini_FloatSet(DateiString,"PortX", PortInfo[ID][PortX]);
  488. dini_FloatSet(DateiString,"PortY", PortInfo[ID][PortY]);
  489. dini_FloatSet(DateiString,"PortZ", PortInfo[ID][PortZ]);
  490. dini_Set(DateiString,"Beschreibung",PortInfo[ID][Beschreibung]);
  491. dini_FloatSet(DateiString,"IntID", PortInfo[ID][IntID]);
  492. dini_FloatSet(DateiString,"VWID", PortInfo[ID][VWID]);
  493. }
  494. }
  495. return 1;
  496. }
  497. stock NexterPort()
  498. {
  499. new ID[64]; for(new h = 0; h <= 200; h++){
  500. format(ID, sizeof(ID), Folder, h);if(!dini_Exists(ID)) return h; }return true;
  501. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement