nefthon

Untitled

Jan 21st, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.91 KB | None | 0 0
  1. ////////////////////////////////////////////////////////////////////////////////////////////
  2. //New .add dialog (SQLite version) version 1.0
  3. //The first you have to check is that you have this in your sphere.ini:
  4. //
  5. //[RESOURCELIST]
  6. // ITEMDEF
  7. // CHARDEF
  8. //
  9. //To install it type .f_add_setup
  10. //To see the dialog type .add
  11. //To 'reset' data, type .f_add_clear and then .f_add_setup again
  12. //
  13. //Note: As it is reading items/chars placed not even placed in the world, you may get some errors in console regarding to these items/chars and script issues related to them.
  14. ////////////////////////////////////////////////////////////////////////////////////////////
  15.  
  16.  
  17.  
  18. [DEFNAME adddef]
  19. //Search disabled ATM, not converted to SQLite
  20. adddialog_search=0 //Set this to 0 if you do not want the dialog to be able to search items.
  21.  
  22. [FUNCTION f_oncommand]
  23. if (STRMATCH("add","<args>")==1)
  24. dialogclose d_add
  25. dialog d_add
  26. add1
  27. return 1
  28. elseif (STRMATCH("add *","<args>")==1) //old .add i_whatever behaviour.
  29. return 0
  30. endif
  31.  
  32. [function add1]
  33. dialogclose d_add
  34. dialog d_add
  35.  
  36. [function f_add_setup]
  37. if !(<ldb.connected>)
  38. ldb.connect "adddialog.db"
  39. // serv.log Connecting to table adddialog
  40. endif
  41. ldb.EXECUTE DROP TABLE IF EXISTS 'items'
  42. ldb.EXECUTE DROP TABLE IF EXISTS 'chars'
  43. if (<ldb.connected>)
  44. ldb.execute CREATE TABLE 'items' ('id' TEXT PRIMARY KEY NOT NULL,'defname' TEXT, 'name' TEXT,'category' TEXT,'subsection' TEXT,'description' TEXT)
  45. ldb.execute CREATE TABLE 'chars' ('id' TEXT PRIMARY KEY NOT NULL,'defname' TEXT, 'name' TEXT)
  46. local.hour=<serv.rticks>
  47. LDB.EXECUTE BEGIN
  48. if !(<db.connected>)
  49. serv.log Error, DB (MySQL) must be connected to use the <db.escapedata > function.
  50. return 0
  51. endif
  52. for 0 <eval <serv.deflist.itemdef.count>-1>
  53. local.item=<serv.deflist.itemdef.<dlocal._for>>
  54. if (<local.item>) //All code placed here to avoid problems with serv.deflist.itemdef.1029 (in my case) wich leads to itemdef.0 and empty data
  55. local.name=<serv.itemdef.<local.item>.name>
  56. local.defname=<qval <isempty <serv.itemdef.<local.item>.defname>>?NULL:<serv.itemdef.<local.item>.defname>>
  57. local.category=<qval <isempty <serv.itemdef.<local.item>.category>>?Uncategorized:<serv.itemdef.<local.item>.category>>
  58. local.subsection=<qval <isempty <serv.itemdef.<local.item>.subsection>>?Uncategorized:<serv.itemdef.<local.item>.subsection>>
  59. local.description=<qval <isempty <serv.itemdef.<local.item>.description>>?Uncategorized:<serv.itemdef.<local.item>.description>>
  60. ldb.QUERY INSERT INTO 'items' ('id','defname','name','category','subsection','description') VALUES ("<local.item>","<local.defname>","<db.escapedata <local.name>>","<db.escapedata <local.category>>","<db.escapedata <local.subsection>>","<db.escapedata <local.description>>")
  61. endif
  62. endfor
  63. for 0 <eval <serv.deflist.chardef.count>-1>
  64. local.char=<serv.deflist.chardef.<dlocal._for>>
  65. local.name=<serv.chardef.<local.char>.name>
  66. local.defname=<qval <isempty <serv.chardef.<local.item>.defname>>?NULL:<serv.chardef.<local.item>.defname>>
  67. local.category=<qval <isempty <serv.chardef.<local.item>.category>>?Uncategorized:<serv.chardef.<local.item>.category>>
  68. local.subsection=<qval <isempty <serv.chardef.<local.item>.subsection>>?Uncategorized:<serv.chardef.<local.item>.subsection>>
  69. local.description=<qval <isempty <serv.chardef.<local.item>.description>>?Uncategorized:<serv.chardef.<local.item>.description>>
  70. endfor
  71. LDB.EXECUTE COMMIT
  72. serv.log Output done in <eval <serv.rticks>-<local.hour>> seconds.
  73. endfor
  74. ldb.close
  75.  
  76.  
  77. [function f_add_clear]
  78. ldb.EXECUTE DROP TABLE IF EXISTS 'items'
  79. ldb.EXECUTE DROP TABLE IF EXISTS 'chars'
  80.  
  81. [function f_add_search]
  82. local.items=itemdef
  83. local.chars=chardef
  84. local.list=<local.<ctag.adddialog_mode>>
  85. if (<isnum <args>>)
  86. local.id=<argn>
  87. args=<ctag.adddialog_search>
  88. local.obj=<argv[<dlocal.id>]>
  89. if <local.obj>
  90. ctag.adddialog_search_id=<local.id>
  91. local.cat=<serv.list.<ctag.adddialog_mode>.findelem "<serv.<local.list>.<local.obj>.category>">
  92. ctag.adddialog_page=<eval <local.cat>/14>
  93. ctag.adddialog_cat=<local.cat>
  94. local.sub=<serv.list.<ctag.adddialog_mode>_<dlocal.cat>.findelem "<serv.<local.list>.<local.obj>.subsection>">
  95. ctag.adddialog_cat_page=<eval <local.sub>/14>
  96. ctag.adddialog_sub=<local.sub>
  97. local.desc=<serv.list.<ctag.adddialog_mode>_<dlocal.cat>_<dlocal.sub>.findelem <local.obj>>
  98. ctag.adddialog_sub_page=<eval <local.desc>/14>
  99. ctag.adddialog_show=<local.desc>
  100. if (<ctag.adddialog_page>==0)
  101. ctag.adddialog_page
  102. endif
  103. if (<ctag.adddialog_cat_page>==0)
  104. ctag.adddialog_cat_page
  105. endif
  106. if (<ctag.adddialog_sub_page>==0)
  107. ctag.adddialog_sub_page
  108. endif
  109. dialogclose d_Add
  110. dialog d_add
  111. endif
  112. else
  113. local.string=<args>
  114. local.ret=0
  115. local.count=0
  116. for 0 <eval <deflist.<local.list>.count>-1>
  117. local.item=<deflist.<local.list>.<dlocal._for>>
  118. // serv.log <local.item> (<serv.<local.list>.<local.item>.name>) == STRMATCH("<serv.<local.list>.<local.item>.name>","<local.string>")
  119. if (STRMATCH("<serv.<local.list>.<local.item>.name>","<local.string>")==1)
  120. local.ret=<local.ret>,<local.item>
  121. local.count ++
  122. endif
  123. endfor
  124. if (<local.count>>0)
  125. ctag.adddialog_search=<streat <local.ret>>
  126. f_add_search 0
  127. endif
  128. dialogclose d_Add
  129. dialog d_add
  130. endif
  131.  
  132. [function f_add_generate_main]
  133. //Img
  134. resizepic 0 0 9200 230 137 // background border
  135. gumppictiled 10 10 210 117 2624 // darker background
  136. checkertrans 10 10 210 117 // transparency layer
  137. //Modes
  138. dtext 90 30 0480 Items
  139. LDB.Query "SELECT id from items WHERE ROWID = 1"
  140. button 50 30 4005 4007 <qval <LDB.Row.NumRows>?1:0> 0 1 //No references in list? no click on buttons
  141.  
  142. dtext 90 90 0480 Npcs
  143. LDB.Query "SELECT id from chars WHERE ROWID = 1"
  144. button 50 90 4005 4007 <qval <LDB.Row.NumRows>?1:0> 0 2
  145.  
  146. [function f_add_generate_background]
  147. //img
  148. if !(<isempty <ctag.add_show>>)
  149. resizepic 0 0 9200 800 587 // background border
  150. gumppictiled 10 10 780 567 2624 // darker background
  151. gumppictiled 10 32 780 5 5058 // 1 grey separators - start here
  152. gumppictiled 230 37 5 400 5058 // 1
  153. gumppictiled 510 37 5 400 5058 // 2
  154. gumppictiled 10 32 510 5 5058 // 4
  155. gumppictiled 10 432 780 5 5058 // 5
  156. gumppictiled 120 432 5 150 5058 // 5
  157. checkertrans 10 10 780 567 // transparency layer
  158. elseif !(<isempty <ctag.add_sub>>) //Dynamic gump, more info = more gump, no modules, no different dialogs for the same.
  159. resizepic 0 0 9200 800 437 // background border
  160. gumppictiled 10 10 780 417 2624 // darker background
  161. gumppictiled 10 32 780 5 5058 // 1 grey separators - start here
  162. gumppictiled 230 37 5 400 5058 // 1
  163. gumppictiled 510 37 5 400 5058 // 2
  164. gumppictiled 10 32 510 5 5058 // 4
  165. checkertrans 10 10 780 417 // transparency layer
  166. elseif !(<isempty <ctag.add_cat>>)
  167. resizepic 0 0 9200 530 437 // background/border
  168. gumppictiled 10 10 510 417 2624 // darker background
  169. gumppictiled 10 32 510 5 5058 // 1 grey separators - start here
  170. gumppictiled 230 37 5 400 5058 // 2
  171. checkertrans 10 10 510 417 // transparency layer
  172. else
  173. resizepic 0 0 9200 250 437 // background/border
  174. gumppictiled 10 10 230 417 2624 // darker background
  175. gumppictiled 10 32 230 5 5058 // 1 grey separators - start here
  176. checkertrans 10 10 230 417 // transparency layer
  177. endif
  178.  
  179. [function f_Add_generate_topbar]
  180. dtext 40 10 0480 <ctag.add_mode>
  181. button 10 10 4014 4045 1 0 3 //Change between items/npcs
  182. if (<def.adddialog_search>==1)
  183. dtext 170 10 0480 Search
  184. button 140 10 4011 4012 1 0 10 //Change between items/npcs
  185. endif
  186. if !(<isempty <ctag.add_search>>)
  187. local.max=<eval <f_argv <ctag.add_search>>-1>
  188. if (<ctag.add_search_id><<local.max>)
  189. dtext 480 10 0480 Search Next
  190. button 555 10 4005 4007 1 0 11
  191. endif
  192. if (<ctag.add_search_id>>0)
  193. dtext 350 10 0480 Search Previous
  194. button 310 10 4014 4045 1 0 12
  195. endif
  196. endif
  197.  
  198. [function f_add_generate_categories]
  199. LDB.Query "SELECT category FROM <ctag.add_mode> GROUP BY category"
  200. local.cat=<LDB.Row.<dctag.add_cat>.category>
  201. local.cx=41 //Category X
  202. local.cy=70 //Category Y
  203. local.header=<local.cat>
  204. if (<eval STRLEN(<local.header>)>>25)
  205. local.header=<strsub 0 25 <local.header>>
  206. endif
  207. dtext 10 45 0480 <qval <isempty <ctag.add_cat>>==0?<local.cat> (<eval <ctag0.add_cat>+1>/<dLDB.Row.Numrows>):>
  208. local.index=<eval 14*<ctag0.add_page>>//We get FOR data from items_per_page*page_number
  209. for 0 13
  210. local.num=<local.index>+<local._for>
  211. if !(<isempty <LDB.ROW.<dlocal.num>.category>>)
  212. local.text=<ldb.row.<dlocal.num>.category>
  213. if (<eval STRLEN(<local.text>)>>28)
  214. local.text=<strsub 0 28 <local.text>>
  215. endif
  216. dtext <dlocal.cx> <dlocal.cy> 0480 <local.text>
  217. button <eval <local.cx>-30> <dlocal.cy> 4005 4007 1 0 <eval 100+<dlocal._for>>
  218. local.cy +=23
  219. endif
  220. endfor
  221. if <LDB.Row.Numrows> //I check this alone first to avoid console errors
  222. IF (<LDB.Row.Numrows> > <eval <local.index>+13>)
  223. button 200 400 4005 4007 1 0 4
  224. dtext 130 400 0480 Next Page
  225. endif
  226. endif
  227. if (<ctag0.add_page>> 0)
  228. button 10 400 4014 4045 1 0 5
  229. dtext 40 400 0480 Previous Page
  230. endif
  231.  
  232.  
  233. [function f_add_generate_subsections]
  234. IF !(<isempty <ctag.add_cat>>)
  235. local.sx=266 //Subsection X
  236. local.sy=70 //Subsection Y
  237. // LDB.Query "SELECT category FROM <ctag.add_mode> GROUP BY category"
  238. local.cat=<LDB.Row.<dctag.add_cat>.category>
  239. LDB.query "SELECT subsection FROM <ctag.add_mode> WHERE category = '<local.cat>' GROUP BY subsection"
  240. local.header=<LDB.Row.<dctag.add_sub>.subsection>
  241. dtext 236 45 0480 <qval <isempty <ctag.add_sub>>==0?<local.header> (<eval <ctag0.add_sub>+1>/<dLDB.Row.NumRows>):>
  242. local.index=<eval 14*<ctag.add_cat_page>>
  243. for 0 13
  244. local.num=<local.index>+<local._for>
  245. if !(<isempty <LDB.ROW.<dlocal.num>.subsection>>)
  246. local.text=<ldb.row.<dlocal.num>.subsection>
  247. if (<eval STRLEN(<local.text>)>>38)
  248. local.text=<strsub 0 38 <local.text>>
  249. endif
  250. dtext <dlocal.sx> <dlocal.sy> 0480 <local.text>
  251. button <eval <dlocal.sx>-30> <dlocal.sy> 4005 4007 1 0 <eval 200+<dlocal._for>> //boton aceptar
  252. local.sy +=23
  253. endif
  254. endfor
  255. if <LDB.Row.Numrows>
  256. IF (<LDB.Row.Numrows> > <eval <local.index>+13>)
  257. button 480 400 4005 4007 1 0 6
  258. dtext 410 400 0480 Next Page
  259. endif
  260. endif
  261. if (<ctag0.add_cat_page>> 0)
  262. button 236 400 4014 4045 1 0 7
  263. dtext 271 400 0480 Previous Page
  264. endif
  265. endif
  266.  
  267. [function f_Add_generate_descriptions]
  268. IF !(<isempty <ctag.add_sub>>)
  269. local.dx=546 //Subsection X
  270. local.dy=70 //Subsection Y
  271. if (<ctag0.add_sub_page>)
  272. local.index=<eval 14*<ctag.add_sub_page>>
  273. else
  274. local.index=0
  275. endif
  276. // LDB.Query "SELECT category FROM <ctag.add_mode> GROUP BY category"
  277. // local.cat=<LDB.Row.<dctag.add_cat>.category>
  278. // LDB.query "SELECT subsection FROM <ctag.add_mode> WHERE category = '<local.cat>' GROUP BY subsection"
  279. local.sub=<LDB.Row.<dctag.add_sub>.subsection>
  280. LDB.query "SELECT id,description FROM <ctag.add_mode> WHERE subsection = '<local.sub>' GROUP BY description"
  281. dtext 516 45 0480 Page (<eval <ctag0.add_sub_page>+1>/<eval (<ldb.row.numrows>/14)+1>)
  282. for 0 13
  283. local.num=<local.index>+<local._for>
  284. local.id=<LDB.row.<dlocal.num>.id>
  285. IF (STRMATCH("items","<ctag.add_mode>")==1)
  286. local.pic <serv.itemdef.<local.id>.id>
  287. else
  288. local.pic <serv.itemdef.<serv.chardef.<local.id>.icon>.id>
  289. local.char=1
  290. endif
  291. local.desc=<ldb.row.<dlocal.num>.description>
  292. if (<dlocal.num>< <ldb.row.numrows>)
  293. dtext <dlocal.dx> <dlocal.dy> 0480 <local.desc>
  294. button 760 <dlocal.dy> 4005 4007 1 0 <eval 1000+<dlocal._for>>
  295. button 516 <dlocal.dy> 4011 4012 1 0 <eval 1100+<dlocal._for>>
  296. local.dy +=23
  297. endif
  298. endfor
  299. if (<ldb.row.numrows>)
  300. IF (<ldb.row.numrows> > <eval <local.index>+14>)
  301. button 760 400 4005 4007 1 0 8
  302. dtext 690 400 0480 Next Page
  303. endif
  304. endif
  305. if !(<isempty <ctag.add_sub_page>>)
  306. button 515 400 4014 4045 1 0 9
  307. dtext 550 400 0480 Previous page
  308. endif
  309. endif
  310.  
  311. [function f_add_generate_views]
  312. IF !(<isempty <ctag.add_show>>)
  313. if (<ctag0.add_sub_page>)
  314. local.index=<eval 14*<ctag.add_sub_page>>
  315. else
  316. local.index=0
  317. endif
  318. local.id=<ldb.row.<dctag.add_show>.id>
  319. if (STRMATCH("<ctag.add_mode>","items")==1)
  320. dtext 126 440 0480 ID: <local.id> <qval <serv.itemdef.<local.id>.defname>?(<serv.itemdef.<local.id>.defname>):>
  321. dtext 126 460 0480 Name: <serv.itemdef.<local.id>.name>
  322. dtext 126 480 0480 Type: <serv.itemdef.<local.id>.type>
  323. if !(<isempty <serv.itemdef.<local.id>.tevents>>)
  324. dtext 126 500 0480 Tevents: <serv.itemdef.<local.id>.tevents>
  325. endif
  326. local.y=440
  327. if !(<isempty <serv.itemdef.<local.id>.skillmake>>)
  328. dtext 366 <dlocal.y> 0480 Skillmake: <serv.itemdef.<local.id>.skillmake>
  329. local.y +=20
  330. endif
  331. if !(<isempty <serv.itemdef.<local.id>.resources>>)
  332. dtext 366 <dlocal.y> 0480 Resources: <serv.itemdef.<local.id>.resources>
  333. local.y +=20
  334. endif
  335. if (<serv.itemdef.<local.id>.tag0.GargoyleOnly>==1)
  336. dtext 366 <dlocal.y> 0480 Gargoyle Item
  337. local.y +=20
  338. endif
  339. tilepic 30 440 <serv.itemdef.<local.id>.id>
  340. button 126 554 4005 4007 1 0 <eval 1000+<ctag.add_show>>
  341. dtext 156 554 0480 Create
  342. else
  343. dtext 126 440 0480 ID: <local.id>
  344. dtext 126 460 0480 Name: <serv.chardef.<local.id>.name>
  345. dtext 126 480 0480 //Tevents: <serv.chardef.<local.id>.tevents>
  346. dtext 126 500 0480
  347. local.y=440
  348. tilepic 30 440 <serv.chardef.<local.id>.icon>
  349. button 126 554 4005 4007 1 0 <eval 1000+<ctag.add_show>>
  350. dtext 156 554 0480 Create
  351. dtext 626 440 0480 Create spawn
  352. dtext 600 460 0480 Amount
  353. dtextentry 680 460 20 20 33 1 1
  354. dtext 600 480 0480 Min Time
  355. dtextentry 680 480 20 20 33 2 5
  356. dtext 600 500 0480 Max Time
  357. dtextentry 680 500 20 20 33 3 15
  358. dtext 600 520 0480 Max Distance
  359. dtextentry 680 520 20 20 33 4 15
  360. button 600 554 4005 4007 1 0 <eval 1200+<ctag.add_show>>
  361. dtext 630 554 0480 Create Spawn
  362. endif
  363. endif
  364.  
  365. [dialog d_add]
  366. 6,32
  367. ldb.close
  368. ldb.connect adddialog.db
  369. IF (<isempty <ctag.add_mode>>)
  370. f_add_generate_main //Dialog shown when no item or npc view is selected yet.
  371. else
  372. f_add_generate_background //Dynamic background increasing/decreasing according to the amount of menus we are seeing.
  373. f_add_generate_topbar //Displaying top bar
  374. f_add_generate_categories //Filling categories menu (if selected items or npcs)
  375. f_add_generate_subsections //Filling subsections menu (if looking into any)
  376. f_add_generate_descriptions //Final list of items or npcs of the selected category+subsection
  377. f_add_generate_views //Showing detailed information about the selected item or npc
  378. endif
  379.  
  380. [DIALOG d_add BUTTON]
  381. ON=1
  382. ctag.add_mode=items
  383. dialog d_add
  384.  
  385. ON=2
  386. ctag.add_mode=chars
  387. dialog d_Add
  388.  
  389. ON=3
  390. ctag.add_show
  391. ctag.add_page
  392. ctag.add_mode
  393. ctag.add_cat
  394. ctag.add_sub
  395. ctag.add_cat_page
  396. ctag.add_sub_page
  397. ctag.add_search
  398. ctag.add_search_id
  399. dialog d_add
  400.  
  401. ON=4
  402. ctag0.add_page +=1
  403. dialog d_add
  404. ON=5
  405. ctag0.add_page -=1
  406. dialog d_add
  407.  
  408. ON=6
  409. ctag0.add_cat_page +=1
  410. dialog d_add
  411. ON=7
  412. ctag0.add_cat_page -=1
  413. dialog d_add
  414.  
  415. ON=8
  416. ctag0.add_sub_page +=1
  417. dialog d_add
  418. ON=9
  419. ctag0.add_sub_page -=1
  420. dialog d_add
  421. ON=10
  422. sysmessage=Type the text to search.
  423. promptconsole f_add_search
  424.  
  425. ON=11
  426. f_add_search <eval <ctag.add_search_id>+1>
  427. ON=12
  428. f_add_search <eval <ctag.add_search_id>-1>
  429.  
  430. ON=100 115 //categories
  431. if (<ctag0.add_page>)
  432. local.index=<eval 14*<ctag.add_page>>
  433. else
  434. local.index=0
  435. endif
  436. local.num=<eval (<argn>-100)+<local.index>>
  437. ctag.add_cat=<local.num>
  438. ctag.add_cat_page
  439. ctag.add_sub
  440. ctag.add_sub_page
  441. ctag.add_show
  442. ctag.add_search
  443. ctag.add_search_id
  444. dialog d_Add
  445.  
  446. ON=200 215
  447. if (<ctag0.add_cat_page>)
  448. local.index=<eval 14*<ctag.add_cat_page>>
  449. else
  450. local.index=0
  451. endif
  452. local.num=<eval (<argn>-200)+<local.index>>
  453. ctag.add_sub=<local.num>
  454. ctag.add_sub_page
  455. ctag.add_show
  456. ctag.add_search
  457. ctag.add_search_id
  458. dialog d_Add
  459.  
  460. ON=1000 1015
  461. if (<ctag0.add_sub_page>)
  462. local.index=<eval 14*<ctag.add_sub_page>>
  463. else
  464. local.index=0
  465. endif
  466. local.listid=<ctag.add_mode>_<dctag.add_cat>_<dctag.add_sub>
  467. local.id=<serv.list.<local.listid>.<eval <local.index>+(<argn>-1000)>>
  468. if (STRMATCH("ITEMS","<ctag.add_mode>")==1)
  469. if (<serv.itemdef.<local.id>.id>)
  470. add <local.id>
  471. endif
  472. elseif (STRMATCH("chars","<ctag.add_mode>")==1)
  473. if (<serv.chardef.<local.id>>)
  474. addnpc <local.id>
  475. endif
  476. endif
  477.  
  478. ON=1100 1115
  479. if (<ctag0.add_sub_page>)
  480. local.index=<eval 14*<ctag.add_sub_page>>
  481. else
  482. local.index=0
  483. endif
  484. ctag.add_show=<eval <argn>-1100>
  485. dialog d_add
  486.  
  487. ON=1200 1215
  488. if (<ctag0.add_sub_page>)
  489. local.index=<eval 14*<ctag.add_sub_page>>
  490. else
  491. local.index=0
  492. endif
  493. local.listid=<ctag.add_mode>_<dctag.add_cat>_<dctag.add_sub>
  494. local.id=<serv.list.<local.listid>.<eval <local.index>+(<argn>-1200)>>
  495. targetfg f_createspawn <local.id>,<argtxt[1]>,<argtxt[2]>,<argtxt[3]>,<argtxt[4]>
  496. sysmessage=Where do you want to place the spawn?
  497.  
  498. [FUNCTION f_argv]
  499. RETURN <ARGV>
  500.  
  501. [function f_createspawn]
  502. serv.newitem=i_worldgem_bit
  503. new.more=<argv[0]>
  504. new.amount=<argv[1]>
  505. new.morep=<argv[2]>,<argv[3]>,<argv[4]>
  506. new.p=<p>
  507. new.p=<targp>
  508. new.dclick
  509. [EOF]
Advertisement
Add Comment
Please, Sign In to add comment