Advertisement
Guest User

Untitled

a guest
Mar 18th, 2013
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 50.92 KB | None | 0 0
  1. /*
  2.  
  3.  
  4.  
  5.  
  6.  
  7. CREATE TABLE IF NOT EXISTS `Houses` (
  8. `Owner` varchar(40) NOT NULL,
  9. `Keys` varchar(200) NOT NULL,
  10. `Price` int(40) NOT NULL,
  11. `IntID` int(40) NOT NULL,
  12. `Rentfee` int(40) NOT NULL,
  13. `InX` double NOT NULL,
  14. `InY` double NOT NULL,
  15. `InZ` double NOT NULL,
  16. `OutX` double NOT NULL,
  17. `OutY` double NOT NULL,
  18. `OutZ` double NOT NULL,
  19. `Int` int(40) NOT NULL,
  20. `VirWorld` int(40) NOT NULL,
  21. `Locked` int(2) NOT NULL,
  22. `AcceptRent` int(2) NOT NULL,
  23. `HouseKasse` int(40) NOT NULL,
  24. `Objects` longtext NOT NULL,
  25. `Color` varchar(6) NOT NULL,
  26. `HouseID` int(40) NOT NULL AUTO_INCREMENT,
  27. UNIQUE KEY `HouseID` (`HouseID`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;
  29.  
  30.  
  31. CREATE TABLE IF NOT EXISTS `Objects` (
  32. `PosX` float NOT NULL,
  33. `PosY` float NOT NULL,
  34. `PosZ` float NOT NULL,
  35. `rX` float NOT NULL,
  36. `rY` float NOT NULL,
  37. `rZ` float NOT NULL,
  38. `modelID` int(7) NOT NULL,
  39. `show` tinyint(1) NOT NULL,
  40. `hID` int(12) NOT NULL,
  41. `objID` int(12) NOT NULL AUTO_INCREMENT,
  42. UNIQUE KEY `objID` (`objID`)
  43. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=41 ;
  44.  
  45.  
  46. CREATE TABLE IF NOT EXISTS `Interior` (
  47. `ID` int(11) NOT NULL,
  48. `Pos_X_Innen` float NOT NULL,
  49. `Pos_Y_Innen` float NOT NULL,
  50. `Pos_Z_Innen` float NOT NULL,
  51. `Interior` int(11) NOT NULL,
  52. `Beschreibung` text NOT NULL
  53. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  54.  
  55. --
  56. -- Daten für Tabelle `Interior`
  57. --
  58.  
  59. INSERT INTO `Interior` (`ID`, `Pos_X_Innen`, `Pos_Y_Innen`, `Pos_Z_Innen`, `Interior`, `Beschreibung`) VALUES
  60. (2, 244.5, 305, 999.1, 1, 'Bedsit'),
  61. (1, 1.2, -3.4, 999.4, 2, 'Trailer'),
  62. (3, 267.1, 305, 999.1, 2, 'Bedsit'),
  63. (4, 301.3, 306.3, 1003.5, 4, 'Bedsit'),
  64. (5, 344.3, 305.2, 999.1, 6, 'Bedsit'),
  65. (6, 446.1, 507.9, 1001.4, 12, '2 Zimmer Apartment'),
  66. (7, -42.4, 1408.2, 1084.4, 8, '3 Zimmer Bungalow'),
  67. (8, 2464.1, -1698.6, 1013.5, 2, '3 Zimmer Bungalow'),
  68. (9, 386.1, 1471.8, 1080.1, 15, '3 Zimmer Apartment'),
  69. (10, 221.6, 1143.6, 1082.6, 4, '3 Zimmer Apartment'),
  70. (11, 260.6, 1238.8, 1084.2, 9, '4 Zimmer Apartment'),
  71. (12, 261, 1286, 1080.2, 4, '4 Zimmer Haus'),
  72. (13, 745.3, 1437.7, 1102.7, 6, '4 Zimmer Apartment'),
  73. (14, 376.3, 1417.2, 1081.3, 15, '4 Zimmer Apartment'),
  74. (15, 27.1, 1341.1, 1084.3, 10, '4 Zimmer Haus'),
  75. (16, 2526.4, -1679, 1015.4, 1, '4 Zimmer Bedsit'),
  76. (17, 222.8, 1288.7, 1082.1, 1, '4 Zimmer Apartment'),
  77. (18, 23, 1405.6, 1084.4, 5, '4 Zimmer Haus'),
  78. (19, 235.3, 1189.2, 1080.2, 3, '4 Zimmer Haus'),
  79. (20, 447, 1400.3, 1084.3, 2, '5 Zimmer Apartment'),
  80. (21, 234.2, 1064.9, 1084.2, 6, '5 Zimmer Haus'),
  81. (22, 327.9, 1478.3, 1084.4, 15, '5 Zimmer Slum'),
  82. (23, 295.4, 1473.2, 1080.2, 15, '5 Zimmer Apartment'),
  83. (24, 140.4, 1370.3, 1083.8, 5, '6 Zimmer Haus'),
  84. (25, 489.7, 1402.5, 1080.2, 2, '6 Zimmer Villa'),
  85. (26, 83.3, 1324.7, 1083.8, 9, '6 Zimmer Haus'),
  86. (27, 231.4, 1114.1, 1080.9, 5, '7 Zimmer Villa'),
  87. (28, 225.6, 1023.5, 1084, 7, '8 Zimmer Villa'),
  88. (29, -285.9, 1470.8, 1084.3, 15, '4 Zimmer Villa'),
  89. (30, -262.7, 1456.6, 1084.3, 4, '3 Zimmer Villa'),
  90. (31, -68.8, 1354.7, 1080.2, 6, '2 Zimmer Villa'),
  91. (32, 2254.3, -1140, 1050.6, 9, '2 Zimmer Villa'),
  92. (33, 2261.3, -1135.9, 1050.6, 10, '3 Zimmer Villa'),
  93. (34, 2324.4, -1147.5, 1050.7, 12, '8 Zimmer Villa'),
  94. (35, 2624.66, 1553.15, -9.0081, 0, 'Office');
  95.  
  96.  
  97.  
  98.  
  99.  
  100. //SUMDEBUG
  101. [12:05:22] <RG_> Shift+Numpad4: 8224, Shift+Numpad6: 16416
  102.  
  103.  
  104.  
  105. [12:05:54] <RG_> Numpad0+Numpad4: 8196, Numpad0+Numpad6: 16388
  106.  
  107.  
  108.  
  109. [12:06:17] <RG_> Numpad4: 8192, Numpad6:16384
  110. //34= hoch 2= unten 6 = langsam unten 38 = langsam hoch
  111.  
  112. */
  113.  
  114.  
  115. #include <a_samp>
  116. #include <mysql>
  117. #include <sscanf2>
  118. #include <ocmd>
  119. #include <streamer>
  120. //-------------------------------MySQL CONFIG-----------------------------------
  121. #define DB_HOST "somehost"
  122. #define DB_USER "someuser"
  123. #define DB_DB "somedb"
  124. #define DB_PW "somepw"
  125. #define MYSQL_PLAYER_TABLE "somespielertable"
  126. #define MYSQL_PLAYER_SPAWNATHOUSE "SpawnAtHouse"
  127. #define MYSQL_PLAYER_SPAWNHID "SpawnHID"
  128. //--------------------------------SETTINGS--------------------------------------
  129. #define MAX_House 200
  130. #define MAX_NOM 20
  131. #define MAX_HouseNAME 64
  132. #define MAX_HOUSEOBJECTS 200
  133. #define MAX_HOUSEOBJECTMODELS 50
  134. #define MAX_OBJECTDESC 50
  135. #define DRAWDISTANCE 10.0
  136. #define MAX_INTERIORS 40
  137. #define RANGE 2.0
  138. #define RANGEINT 50.0
  139. #define MAX_KEYS 8
  140. //#define GivePlayerMoney GivePlayerMoneyOld -> Someanticheat
  141. //#define SetPlayerMoney SetPlayerMoneyOld
  142. //#define GetPlayerMoney GetPlayerMoneyOld
  143. //#define CreateObject CreateDynamicObject
  144. //#define SetPlayerPos(%0) CallRemoteFunction("SetPlayerPosEx", "dfff", %0)
  145. //#define ShowPlayerDialog(%0) CallRemoteFunction("ShowPlayerDialogEx", "dddssss", %0)
  146. //#define IsPlayerAdmin(%0) CallRemoteFunction("IsAdmin", "d", %0)
  147. //stock GetPlayerMoneyOld(playerid) return CallRemoteFunction("GetPlayerMoneyEx","d",playerid);
  148. //stock SetPlayerMoneyOld(playerid, amount) return CallRemoteFunction("SetPlayerMoneyEx","dd",playerid,amount);
  149. //stock GivePlayerMoneyOld(playerid, amount) return CallRemoteFunction("GivePlayerMoneyEx","dd",playerid,amount);
  150. //--------------------------------DIALOGE---------------------------------------
  151. #define DIALOG_BUY 451
  152. #define DIALOG_CONFIG 452
  153. #define DIALOG_FUNCTION 453
  154. //--------------------------------COLORS----------------------------------------
  155. #define ROT 0xAA3333AA
  156. #define GREEN 0x33AA33AA
  157. //#define BLUE 0x0000FFFF
  158. #define BLUE 0xFFFFFFFF
  159. #define WHITE 0xFFFFFFFF
  160. //-------------------------NEWS,FORWARDS&ENUMS----------------------------------
  161. forward Update3DText();
  162. new query[600];
  163. new AutoLineCounter = 1;
  164. new HouseTypeInfoText[MAX_INTERIORS][MAX_HouseNAME];
  165. enum HouseInfo
  166. {
  167. Owner[MAX_NOM],
  168. Color[10],
  169. Keys[MAX_KEYS*MAX_NOM],
  170. Price,
  171. Locked,
  172. AcceptRent,
  173. Rentfee,
  174. Text3D:Label,
  175. Text3D:IntLabel,
  176. Pickup,
  177. IntPickup,
  178. Float:InX,
  179. Float:InY,
  180. Float:InZ,
  181. Float:OutX,
  182. Float:OutY,
  183. Float:OutZ,
  184. Int,
  185. IntID,
  186. HouseKasse,
  187. VirWorld
  188. }
  189. new HouseData[MAX_House][HouseInfo];
  190. enum Int_Typ
  191. {
  192. interior,
  193. Float:int_x,
  194. Float:int_y,
  195. Float:int_z
  196. }
  197. enum ObjectInfo{
  198. Float:Objx,
  199. Float:Objy,
  200. Float:Objz,
  201. Float:Objrx,
  202. Float:Objry,
  203. Float:Objrz,
  204. modelID,
  205. bool:show,
  206. objHouseID,
  207. objID,
  208. cobjID,
  209. }
  210. new ObjectData[MAX_HOUSEOBJECTS][ObjectInfo];
  211. new Interiors[MAX_INTERIORS][Int_Typ];
  212. public OnFilterScriptInit()
  213. {
  214. mysql_init();
  215. new i = 1;
  216. for(;i<MAX_INTERIORS;i++)
  217. {
  218. LoadInterior(i);
  219. }
  220. i = 0;
  221. for(;i<MAX_House;i++)
  222. {
  223. HouseData[i][Label] = Text3D:-1;
  224. HouseData[i][IntLabel] = Text3D:-1;
  225. HouseData[i][Pickup] = -1;
  226. HouseData[i][IntPickup] = -1;
  227. LoadHouse(i);
  228. }
  229. SetTimer("Update3DText",5000,1);
  230. return 1;
  231. }
  232. public OnFilterScriptExit()
  233. {
  234. for(new i = 0; i<MAX_House;i++)
  235. {
  236. Delete3DTextLabel(HouseData[i][Label]);
  237. Delete3DTextLabel(HouseData[i][IntLabel]);
  238. DestroyPickup(HouseData[i][Pickup]);
  239. DestroyPickup(HouseData[i][IntPickup]);
  240. if(HouseData[i][Pickup] != -1)
  241. SaveHouse(i);
  242. }
  243. }
  244. stock LoadInterior(IntiD)
  245. {
  246. new data[256];
  247. format(query, sizeof(query), "SELECT * FROM `Interior` WHERE ID = '%d';",IntiD);
  248. mysql_query(query);
  249. mysql_store_result();
  250. if(0 < mysql_num_rows())
  251. {
  252. printf(" ::::::::::::::::::::::: Int loading :::::::::::::::::::::::");
  253. IntiD -= 1;
  254. mysql_fetch_field("Pos_X_Innen",data);
  255. Interiors[IntiD][int_x]= floatstr(data);
  256. format(data, sizeof(data), "InX: %f", Interiors[IntiD][int_x]);
  257. printf(data);
  258. mysql_fetch_field("Pos_Y_Innen",data);
  259. Interiors[IntiD][int_y]= floatstr(data);
  260. format(data, sizeof(data), "InY: %f", Interiors[IntiD][int_y]);
  261. printf(data);
  262. mysql_fetch_field("Pos_Z_Innen",data);
  263. Interiors[IntiD][int_z]= floatstr(data);
  264. format(data, sizeof(data), "InZ: %f", Interiors[IntiD][int_z]);
  265. mysql_fetch_field("Beschreibung",data);
  266. strmid(HouseTypeInfoText[IntiD],data,0,strlen(data),MAX_NOM);
  267. format(data, sizeof(data), "Desc: %s", HouseTypeInfoText[IntiD]);
  268. printf(data);
  269. mysql_fetch_field("Interior",data);
  270. Interiors[IntiD][interior]= strval(data);
  271. format(data, sizeof(data), "Int: %d", Interiors[IntiD][interior]);
  272. printf(data);
  273. printf(" ::::::::::::::::::::::: Int loaded :::::::::::::::::::::::");
  274. }
  275. mysql_free_result();
  276. return 1;
  277. }
  278. stock LoadHouse(HouseID)//Ferig :]
  279. {
  280. new data[256],string1[256];
  281. format(query, sizeof(query), "SELECT * FROM `Houses` WHERE HouseID = '%d';",HouseID);
  282. mysql_query(query);
  283. mysql_store_result();
  284. if(0 < mysql_num_rows())
  285. {
  286.  
  287. AutoLineCounter++;
  288. printf("");
  289. printf(" ::::::::::::::::::::::: House loading :::::::::::::::::::::::");
  290. printf("");
  291. mysql_fetch_field("Owner",data);
  292. strmid(HouseData[HouseID][Owner],data,0,strlen(data),MAX_NOM);
  293. format(data, sizeof(data), "Owner: %s", HouseData[HouseID][Owner]);
  294. printf(data);
  295. mysql_fetch_field("Keys",data);
  296. strmid(HouseData[HouseID][Keys],data,0,strlen(data),MAX_NOM*MAX_KEYS);
  297. format(data, sizeof(data), "Keys: %s", HouseData[HouseID][Keys]);
  298. printf(data);
  299. mysql_fetch_field("Color",data);
  300. strmid(HouseData[HouseID][Color],data,0,strlen(data),10);
  301. format(data, sizeof(data), "Color: %s", HouseData[HouseID][Color]);
  302. printf(data);
  303. mysql_fetch_field("Price",data);
  304. HouseData[HouseID][Price]= strval(data);
  305. format(data, sizeof(data), "Wert: %d", HouseData[HouseID][Price]);
  306. printf(data);
  307. mysql_fetch_field("Rentfee",data);
  308. HouseData[HouseID][Rentfee]= strval(data);
  309. format(data, sizeof(data), "Eintritt: %d", HouseData[HouseID][Rentfee]);
  310. printf(data);
  311. mysql_fetch_field("IntID",data);
  312. HouseData[HouseID][IntID]= strval(data);
  313. format(data, sizeof(data), "IntID: %d", HouseData[HouseID][IntID]);
  314. printf(data);
  315. mysql_fetch_field("InX",data);
  316. HouseData[HouseID][InX]= floatstr(data);
  317. format(data, sizeof(data), "InX: %f", HouseData[HouseID][InX]);
  318. printf(data);
  319. mysql_fetch_field("InY",data);
  320. HouseData[HouseID][InY]= floatstr(data);
  321. format(data, sizeof(data), "InY: %f", HouseData[HouseID][InY]);
  322. printf(data);
  323. mysql_fetch_field("InZ",data);
  324. HouseData[HouseID][InZ]= floatstr(data);
  325. format(data, sizeof(data), "InZ: %f", HouseData[HouseID][InZ]);
  326. printf(data);
  327. mysql_fetch_field("OutX",data);
  328. HouseData[HouseID][OutX]= floatstr(data);
  329. format(data, sizeof(data), "OutX: %f", HouseData[HouseID][OutX]);
  330. printf(data);
  331. mysql_fetch_field("OutY",data);
  332. HouseData[HouseID][OutY]= floatstr(data);
  333. format(data, sizeof(data), "OutX: %f", HouseData[HouseID][OutY]);
  334. printf(data);
  335. mysql_fetch_field("OutZ",data);
  336. HouseData[HouseID][OutZ]= floatstr(data);
  337. format(data, sizeof(data), "OutZ: %f", HouseData[HouseID][OutZ]);
  338. printf(data);
  339. mysql_fetch_field("Int",data);
  340. HouseData[HouseID][Int]= strval(data);
  341. format(data, sizeof(data), "IntID: %d", HouseData[HouseID][Int]);
  342. printf(data);
  343. mysql_fetch_field("Int",data);
  344. HouseData[HouseID][Int]= strval(data);
  345. format(data, sizeof(data), "IntID: %d", HouseData[HouseID][Int]);
  346. printf(data);
  347. mysql_fetch_field("Locked",data);
  348. HouseData[HouseID][Locked]= strval(data);
  349. format(data, sizeof(data), "Locked: %d", HouseData[HouseID][Locked]);
  350. printf(data);
  351. mysql_fetch_field("AcceptRent",data);
  352. HouseData[HouseID][AcceptRent]= strval(data);
  353. format(data, sizeof(data), "AcceptRent: %d", HouseData[HouseID][AcceptRent]);
  354. printf(data);
  355. mysql_fetch_field("HouseKasse",data);
  356. HouseData[HouseID][HouseKasse]= strval(data);
  357. format(data, sizeof(data), "Kasse: %d$", HouseData[HouseID][HouseKasse]);
  358. printf(data);
  359. mysql_fetch_field("VirWorld",data);
  360. HouseData[HouseID][VirWorld]= strval(data);
  361. format(data, sizeof(data), "VirWorld: %d", HouseData[HouseID][VirWorld]);
  362. printf(data);
  363. HouseData[HouseID][VirWorld] = HouseID;
  364. HouseData[HouseID][AcceptRent] = 1;
  365. if(strlen(HouseData[HouseID][Color])<6)
  366. strmid(HouseData[HouseID][Color],"FFFFFF",0,6,9);
  367. // Alle Werte da, lasst uns Icon+3D Text erstellen
  368. HouseData[HouseID][IntLabel]= Create3DTextLabel("Ausgang",0x007AD1FF,HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ],DRAWDISTANCE,HouseData[HouseID][VirWorld]);
  369. HouseData[HouseID][IntPickup]= CreatePickup(1272,1,HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ],HouseData[HouseID][VirWorld]);
  370. if(strmatch(HouseData[HouseID][Owner],"None"))
  371. {
  372. // HouseData[HouseID][MapIcon]= CreateMapIcon(52,kP,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  373. format(string1,sizeof(string1),"Dieses Haus steht zum Verkauf\nBeschreibung: %s\nPreis: %d$\nTippe /buyHouse um\nes zu kaufen",HouseTypeInfoText[HouseData[HouseID][IntID]],HouseData[HouseID][Price]);
  374. HouseData[HouseID][Label]= Create3DTextLabel(string1,BLUE,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ],DRAWDISTANCE,0);
  375. HouseData[HouseID][Pickup]= CreatePickup(1273,1,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  376. }
  377. else
  378. {
  379. format(string1,sizeof(string1),"{%s}Dieses Haus gehört %s\nBeschreibung: %s\nDerzeitige Mieter: %d/%d\nMiete: %d$\nTippe /rent um\nein Zimmer zu mieten",HouseData[HouseID][Color],HouseData[HouseID][Owner],HouseTypeInfoText[HouseData[HouseID][IntID]],GetHouseRenters(HouseID),MAX_KEYS,HouseData[HouseID][Rentfee]);
  380. HouseData[HouseID][Label]= Create3DTextLabel(string1,BLUE,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ],DRAWDISTANCE,0);
  381. HouseData[HouseID][Pickup]= CreatePickup(1272,1,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  382. }
  383. printf("");
  384. LoadHouseObjects(HouseID);
  385. printf(" ::::::::::::::::::::::: House Loaded :::::::::::::::::::::::");
  386. printf("");
  387. }
  388. mysql_free_result();
  389. return 1;
  390.  
  391. }
  392. LoadHouseObjects(hid){
  393. format(query,sizeof query, "SELECT * FROM Objects WHERE hID = '%d'",hid);
  394. mysql_query(query);
  395. mysql_store_result();
  396. new dest[128],infosplit[10][12], objid;
  397. while(mysql_fetch_row(dest,";")){
  398. split(dest,infosplit,';');
  399. objid = strval(infosplit[9]);
  400. for(new i = 0; i < sizeof(ObjectData[])-2; i++)
  401. ObjectData[objid][ObjectInfo:i] = (i > 5) ? strval(infosplit[i]) : (_:floatstr(infosplit[i]));
  402. if(infosplit[7][0])
  403. ObjectData[objid][cobjID] = CreateDynamicObject(ObjectData[objid][modelID],ObjectData[objid][Objx],ObjectData[objid][Objy],ObjectData[objid][Objz],
  404. ObjectData[objid][Objrx],ObjectData[objid][Objry],ObjectData[objid][Objrz],
  405. HouseData[ObjectData[objid][objHouseID]][VirWorld],HouseData[ObjectData[objid][objHouseID]][Int]);
  406. }
  407. return mysql_free_result();
  408. }
  409. SaveHouseObjects(hid){
  410. for(new i = 0; i < MAX_HOUSEOBJECTS; i++){
  411. if(ObjectData[i][objHouseID] == hid){
  412. format(query,sizeof query, "UPDATE Objects SET PosX = '%f',PosY = '%f',PosZ = '%f',\
  413. rX = '%f',rY = '%f',rZ = '%f',modelID = '%d', `show` = '%d', hID = '%d' WHERE objID = '%d'",
  414. ObjectData[i][Objx],ObjectData[i][Objy],ObjectData[i][Objz],
  415. ObjectData[i][Objrx],ObjectData[i][Objry],ObjectData[i][Objrz],
  416. ObjectData[i][modelID],ObjectData[i][show],ObjectData[i][objHouseID],i);
  417. mysql_query(query);
  418. }
  419. }
  420. return 1;
  421. }
  422. GetHouseRenters(hid)
  423. {
  424. new Keysplit[MAX_KEYS][MAX_NOM],count;
  425. split(HouseData[hid][Keys], Keysplit,',');
  426. for(new i = 0;i<MAX_KEYS;i++)
  427. if(strlen(Keysplit[i])>0)count++;
  428. return count;
  429. }
  430.  
  431. stock split(const strsrc[], strdest[][], delimiter = '|')
  432. {
  433. new i, li, aNum, len, srclen = strlen(strsrc);
  434. while(i <= srclen)
  435. {
  436. if (strsrc[i] == delimiter || i == srclen)
  437. {
  438. len = strmid(strdest[aNum], strsrc, li, i, 128);
  439. strdest[aNum][len] = 0;
  440. li = i + 1;
  441. aNum++;
  442. }
  443. i++;
  444. }
  445. }
  446. stock CreateNewHouse(Float:X,Float:Y,Float:Z,intiD,price,InteriorID)
  447. {
  448. format(query,sizeof(query),"INSERT INTO `Houses` (`Owner`,`InX`,`InY`,`InZ`,`OutX`,`OutY`,`OutZ`,`Price`,`IntID`,`Int`)\
  449. VALUES ('None','%f','%f','%f','%f','%f','%f','%d','%d','%d')",Interiors[InteriorID][int_x],Interiors[InteriorID][int_y],
  450. Interiors[InteriorID][int_z],X,Y,Z,price,intiD,Interiors[InteriorID][interior]);
  451. mysql_query(query);
  452. format(query,sizeof(query),"SELECT HouseID FROM Houses WHERE OutX = '%f' AND OutY = '%f'",X,Y);
  453. mysql_query(query);
  454. mysql_store_result();
  455. if(0 < mysql_num_rows())
  456. {
  457. mysql_fetch_field("HouseID",query);
  458. LoadHouse(strval(query));
  459. }
  460. mysql_free_result();
  461. return 1;
  462. }
  463. stock GetPlayerNearestHouse(playerid)
  464. {
  465. new Float:x,Float:y,Float:z;
  466. GetPlayerPos(playerid,x,y,z);
  467. for(new i = 0;i<MAX_House;i++)
  468. if(IsPlayerInRangeOfPoint(playerid,RANGE,HouseData[i][OutX],HouseData[i][OutY],HouseData[i][OutZ]))
  469. return i;
  470. return -1;
  471. }
  472. stock GetPlayerNearestHouseInterior(playerid, entrance = 0)
  473. {
  474. new Float:x,Float:y,Float:z;
  475. GetPlayerPos(playerid,x,y,z);
  476. for(new i = 0;i<MAX_House;i++)
  477. if(!entrance){
  478. if(IsPlayerInRangeOfPoint(playerid,RANGEINT,HouseData[i][InX],HouseData[i][InY],HouseData[i][InZ])&&HouseData[i][VirWorld] == GetPlayerVirtualWorld(playerid))
  479. return i;
  480. }
  481. else{
  482. if(IsPlayerInRangeOfPoint(playerid,2.0,HouseData[i][InX],HouseData[i][InY],HouseData[i][InZ])&&HouseData[i][VirWorld] == GetPlayerVirtualWorld(playerid))
  483. return i;
  484. }
  485. return -1;
  486. }
  487. stock SaveHouse(HouseID)
  488. {
  489. format(query,sizeof(query),"UPDATE `Houses` SET `Owner` = '%s' , `Keys` = '%s'\
  490. , `Color` = '%s', `Price` = '%d', `Locked` = '%d', `AcceptRent` = '%d', `Rentfee` = '%d',`InX` = '%f'\
  491. ,`InY` = '%f',`InZ` = '%f',`OutX` = '%f',`OutY` = '%f',`OutZ` = '%f',`Int` = '%d'\
  492. ,`HouseKasse` = '%d',`VirWorld` = '%d' ,`IntID` = '%d' WHERE `HouseID` = '%d'",
  493. HouseData[HouseID][Owner],HouseData[HouseID][Keys],HouseData[HouseID][Color],HouseData[HouseID][Price],HouseData[HouseID][Locked],
  494. HouseData[HouseID][AcceptRent],HouseData[HouseID][Rentfee],HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ],
  495. HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ],HouseData[HouseID][Int],HouseData[HouseID][HouseKasse],
  496. HouseData[HouseID][VirWorld],HouseData[HouseID][IntID],HouseID);
  497. mysql_query(query);
  498. SaveHouseObjects(HouseID);
  499. return 1;
  500. }
  501. stock HasPlayerKey(playername[],hid)// Fertig
  502. {
  503. new Keysplit[MAX_KEYS][MAX_NOM];
  504. split(HouseData[hid][Keys], Keysplit,',');
  505. for(new i = 0;i<MAX_KEYS;i++)
  506. if(strmatch(Keysplit[i],playername))return 1;
  507. return 0;
  508. }
  509. public OnPlayerConnect(playerid)
  510. {
  511. SetPVarInt(playerid,"SelObject",-1);
  512. return 0;
  513. }
  514. stock AddPlayerKey(playername[],hid)
  515. {
  516. new Keysplit[MAX_KEYS][MAX_NOM];
  517. split(HouseData[hid][Keys], Keysplit,',');
  518. for(new i = 0;i<MAX_KEYS;i++)
  519. if(strmatch(Keysplit[i],playername))return 0;
  520. else if(strmatch(Keysplit[i],""))
  521. {
  522. strmid(Keysplit[i],playername,0,120,120);
  523. strmid(HouseData[hid][Keys],"",0,0,0);
  524. for(new u=0;u<MAX_KEYS;u++)
  525. if(!strmatch(Keysplit[u],""))
  526. format(HouseData[hid][Keys],1024,"%s,%s",HouseData[hid][Keys],Keysplit[u]);
  527. SaveHouse(hid);
  528. return 1;
  529. }
  530. return 0;
  531. }
  532. stock RemovePlayerKey(playername[],hid)
  533. {
  534. new Keysplit[MAX_KEYS][MAX_NOM];
  535. split(HouseData[hid][Keys], Keysplit,',');
  536. for(new i = 0;i<MAX_KEYS;i++)
  537. if(strmatch(Keysplit[i],playername))
  538. {
  539. strmid(Keysplit[i],"",0,0,0);
  540. strmid(HouseData[hid][Keys],"",0,0,0);
  541. for(new u=0;u<MAX_KEYS;u++)
  542. if(!strmatch(Keysplit[u],""))
  543. format(HouseData[hid][Keys],1024,"%s,%s",HouseData[hid][Keys],Keysplit[u]);
  544. SaveHouse(hid);
  545. return 1;
  546. }
  547. return 0;
  548. }
  549. public Update3DText()
  550. {
  551. new string1[256];
  552. for(new i = 0;i<MAX_House;i++)
  553. {
  554. if(HouseData[i][Label] != Text3D:-1)
  555. {
  556. if(strmatch(HouseData[i][Owner],"None"))
  557. {
  558. format(string1,sizeof(string1),"Dieses Haus steht zum Verkauf\nBeschreibung: %s\nPreis: %d$\nTippe /buyHouse um\nes zu kaufen",HouseTypeInfoText[HouseData[i][IntID]],HouseData[i][Price]);
  559. Update3DTextLabelText(HouseData[i][Label],BLUE,string1);
  560. }
  561. else
  562. {
  563. format(string1,sizeof(string1),"{%s}Dieses Haus gehört %s\nBeschreibung: %s\nDerzeitige Mieter: %d/%d\nMiete: %d$\nTippe /rent um\nein Zimmer zu mieten",HouseData[i][Color],HouseData[i][Owner],HouseTypeInfoText[HouseData[i][IntID]],GetHouseRenters(i),MAX_KEYS,HouseData[i][Rentfee]);
  564. Update3DTextLabelText(HouseData[i][Label],BLUE,string1);
  565. }
  566. }
  567. }
  568. }
  569.  
  570. forward OnPlayerHausSpawn(playerid);
  571. public OnPlayerHausSpawn(playerid)
  572. {
  573. if(!GetPVarInt(playerid,"FirstSpawn"))
  574. // if(GetPVarInt(playerid,"SpawnHouse"))
  575. {
  576. new hid;
  577. hid = mysql_GetInt(MYSQL_PLAYER_TABLE,MYSQL_PLAYER_SPAWNHID,"Name",PlayerName(playerid));// So ergibt das i-wie einfach garnicks, keine Werte drinne
  578. if((strmatch(HouseData[hid][Owner],PlayerName(playerid))|| HasPlayerKey(PlayerName(playerid),hid)&&hid != -1) && mysql_GetInt(MYSQL_PLAYER_TABLE, MYSQL_PLAYER_SPAWNATHOUSE, "Name", PlayerName(playerid)))
  579. {
  580. SetPlayerInterior(playerid,HouseData[hid][Int]);
  581. SetPlayerVirtualWorld(playerid,HouseData[hid][VirWorld]);
  582. SetPlayerPosWait(playerid,HouseData[hid][InX],HouseData[hid][InY],HouseData[hid][InZ]);
  583. SetPVarInt(playerid,"SpawnHouse",1);
  584. SetPVarInt(playerid,"FirstSpawn",1);
  585. return 1;
  586. }
  587. }
  588. SetPVarInt(playerid,"FirstSpawn",1);
  589. return 0;
  590. }
  591. public OnRconCommand(cmd[])
  592. {
  593. new parts[3][24];
  594. if(strfind(cmd,"refresh") != -1)
  595. {
  596. split(cmd,parts,' ');
  597. CallRemoteFunction("refresh","s",parts[1]);
  598. for(new i = 0; i < MAX_PLAYERS; i++)
  599. {
  600. if(!IsPlayerConnected(i)) continue;
  601. if(!strmatch(PlayerName(i),parts[1])) continue;
  602. for(new u = 0; u < MAX_House; u++)
  603. {
  604. if(!strmatch(PlayerName(i),HouseData[u][Owner]) && !HasPlayerKey(PlayerName(i),u)) continue;
  605. SaveHouse(u);
  606. }
  607. }
  608. return 1;
  609. }
  610. if(strfind(cmd,"changename") != -1)
  611. {
  612. split(cmd,parts,' ');
  613. CallRemoteFunction("OnPlayerChangeName","ss",parts[1],parts[2]);
  614. return 1;
  615. }
  616. return 0;
  617. }
  618. stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
  619. {
  620. format(query, sizeof(query), "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
  621. mysql_query(query);
  622. return true;
  623. }
  624. stock mysql_GetString(Table[], Field[], Where[], Where2[])
  625. {
  626. new Get[128];
  627. format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Where2);
  628. mysql_query(query);
  629. mysql_store_result();
  630. mysql_fetch_row(Get);
  631. mysql_free_result();
  632. return Get;
  633. }
  634. stock mysql_GetString1(Table[], Field[], Where[], Where2)
  635. {
  636. new Get[600];
  637. format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%d'", Field, Table, Where, Where2);
  638. mysql_query(query);
  639. mysql_store_result();
  640. mysql_fetch_row(Get);
  641. mysql_free_result();
  642. return Get;
  643. }
  644.  
  645. stock mysql_GetInt(Table[], Field[], Where[], Where2[])
  646. {
  647. return strval(mysql_GetString(Table, Field, Where, Where2));
  648. }
  649. #define PRESSED(%0) \
  650. (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  651. #define RELEASED(%0) \
  652. (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
  653. public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
  654. {
  655. if(newkeys == KEY_SECONDARY_ATTACK)
  656. {
  657. new HouseID = GetPlayerNearestHouse(playerid);
  658. if(HouseID != -1)
  659. {
  660. if(HouseData[HouseID][Locked] && !HasPlayerKey(PlayerName(playerid),HouseID) && !strmatch(HouseData[HouseID][Owner],PlayerName(playerid))) return SendClientMessage(playerid,ROT,"Es ist abgeschlossen!");
  661. SetPlayerInterior(playerid,HouseData[HouseID][Int]);
  662. SetPlayerVirtualWorld(playerid,HouseData[HouseID][VirWorld]);
  663. if(HasPlayerKey(PlayerName(playerid),HouseID) || strmatch(HouseData[HouseID][Owner],PlayerName(playerid)))
  664. mysql_SetInt(MYSQL_PLAYER_TABLE, MYSQL_PLAYER_SPAWNHID, HouseID, "Name", PlayerName(playerid));
  665. return SetPlayerPosWait(playerid,HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ]);
  666. }
  667. HouseID = GetPlayerNearestHouseInterior(playerid,1);
  668. if(HouseID != -1)
  669. {
  670. SetPlayerInterior(playerid,0);
  671. SetPlayerVirtualWorld(playerid,0);
  672. SetPVarInt(playerid,"Editing",0);
  673. return SetPlayerPosWait(playerid,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  674. }
  675. }
  676. if(GetPVarInt(playerid,"Editing") && GetPlayerNearestHouseInterior(playerid) != -1)
  677. {
  678. /*if((newkeys & KEY_WALK))
  679. if(GetPVarInt(playerid,"SelOK") == 1)SelectObject(playerid),SetPVarInt(playerid,"SelOK",0);
  680. else if(!GetPVarInt(playerid,"SelOK"))CancelEdit(playerid),SetPVarInt(playerid,"SelOK",1);*/
  681. if(PRESSED(KEY_WALK))
  682. CancelEdit(playerid);
  683. else if(RELEASED(KEY_WALK))
  684. {
  685. if(GetPVarInt(playerid,"SelOK") == 1)
  686. SelectObject(playerid);
  687. if(GetPVarInt(playerid,"SelObject") != -1)
  688. EditDynamicObject(playerid,GetPVarInt(playerid,"SelObject"));
  689. }
  690. }
  691. return 0;
  692. }
  693.  
  694. stock PlayerName(playerid)
  695. {
  696. new name[MAX_PLAYER_NAME];
  697. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  698. return name;
  699. }
  700. forward PayDayPart(i);
  701. public PayDayPart(i)
  702. {
  703. new string[128];
  704. if(!IsPlayerConnected(i)) return 0;
  705. if(!IsPlayerLoggedIn(i)) return 0;
  706. for(new u = 0;u < MAX_House;u++)
  707. {
  708. if(HasPlayerKey(PlayerName(i),u))
  709. {
  710. if(GetPlayerMoney(i) > HouseData[u][Rentfee])
  711. {
  712. GivePlayerMoney(i,-HouseData[u][Rentfee]);
  713. HouseData[u][HouseKasse] += HouseData[u][Rentfee];
  714. format(string,sizeof string, "Mietrechnung: Hausbesitzer: %s, Miete: $%d",HouseData[u][Owner],HouseData[u][Rentfee]);
  715. SendClientMessage(i,WHITE,string);
  716. }
  717. else
  718. {
  719. format(string,sizeof string, "Du kannst die Mietrechnung vom Hausbesitzer %s (Miete: $%d) nichtmehr bezahlen, darum wurdest du aus dem Haus geworfen!",HouseData[u][Owner],HouseData[u][Rentfee]);
  720. RemovePlayerKey(PlayerName(i),u);
  721. SendClientMessage(i,WHITE,string);
  722. }
  723. }
  724. }
  725. return 1;
  726. }
  727. IsPlayerLoggedIn(pid)return CallRemoteFunction("LoggedIn","d",pid);
  728.  
  729. forward OnPlayerChangeNameHouse(oldname[],newname[]);
  730. public OnPlayerChangeNameHouse(oldname[],newname[])
  731. {
  732. for(new i = 0;i<MAX_House;i++)
  733. {
  734. if(strmatch(HouseData[i][Owner],oldname))
  735. strmid(HouseData[i][Owner],newname,0,24);
  736. if(HasPlayerKey(oldname,i))
  737. RemovePlayerKey(oldname,i),
  738. AddPlayerKey(newname,i);
  739. }
  740. return 1;
  741. }
  742.  
  743. public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
  744. {
  745. SetPVarInt(playerid, "InDiag", 0);
  746. switch(dialogid)
  747. {
  748. case DIALOG_BUY:
  749. {
  750. if(response == 0) return SendClientMessage(playerid,ROT,"Abgebrochen");
  751. new HouseID = GetPVarInt(playerid,"SelectedHouse");
  752. if(!strmatch(HouseData[HouseID][Owner],"None")) return SendClientMessage(playerid,ROT,"Dieses Haus steht nicht zum Verkauf!");
  753. if(GetPlayerMoney(playerid) < HouseData[HouseID][Price]) return SendClientMessage(playerid,ROT,"Du hast zuwenig Geld");
  754. strmid(HouseData[HouseID][Owner],PlayerName(playerid),0,strlen(PlayerName(playerid)),MAX_NOM);
  755. SendClientMessage(playerid,GREEN,"Glückwunsch zu deinem neuen Haus! Tippe /confighouse (/ch) um es zu konfigurieren!");
  756. GivePlayerMoney(playerid,-HouseData[HouseID][Price]);
  757. }
  758. case DIALOG_CONFIG:
  759. {
  760. if(response == 0) return SendClientMessage(playerid,ROT,"Verlassen");
  761. new hid = GetPVarInt(playerid,"SelectedHouse");
  762. SetPVarInt(playerid,"SelectedFunction",listitem);
  763. new caption[128],string[256],keysplit[MAX_KEYS][MAX_NOM];
  764. switch(listitem)
  765. {
  766. case 0:
  767. {
  768. format(caption,sizeof caption,"{FFFFFF}Hauskasse: {33AA33}$%d{FFFFFF}",HouseData[hid][HouseKasse]);
  769. format(string,sizeof string,"{FFFFFF}Derzeitige Hauskasse: {33AA33}$%d{FFFFFF}\nUm Geld aus der Kasse abzuheben, tippen Sie ''abheben, [Betrag]''\
  770. \nUm Geld in die Kasse einzuzahlen, tippen Sie ''einzahlen, [Betrag]''",HouseData[hid][HouseKasse]);
  771. }
  772. case 1:
  773. {
  774. format(caption,sizeof caption,"{FFFFFF}Mietkosten: {33AA33}$%d{FFFFFF}",HouseData[hid][Rentfee]);
  775. format(string,sizeof string,"{FFFFFF}Derzeitige Mietkosten: {33AA33}$%d{FFFFFF}\nUm diesen Betrag zu ändern, tippen Sie den neuen Betrag ein:",HouseData[hid][Rentfee]);
  776. }
  777. case 2:
  778. {
  779. format(caption,sizeof caption,"{FFFFFF}Derzeitige Mieter",HouseData[hid][Rentfee]);
  780. split(HouseData[hid][Keys],keysplit,',');
  781. for(new i = 0; i < MAX_KEYS;i++)
  782. if(!strmatch(keysplit[i],"")) format(string,sizeof string,"%s\n%s",string,keysplit[i]);
  783. format(string,sizeof string,"{FFFFFF}Derzeitige Mitbewohner:\n\n%s\nUm einen Mieter rauszuwerfen, tippen Sie dessen Namen ein:\n",string);
  784. }
  785. case 3:
  786. {
  787. format(caption,sizeof caption,"{FFFFFF}Derzeitige Textfarbe",HouseData[hid][Rentfee]);
  788. format(string,sizeof string,"{FFFFFF}Derzeitige Textfarbe:\n{%s}||||||||||||||||{FFFFFF}\nUm diese Farbe zu ändern, tippen Sie einen neuen 6stelligen Farbcode ein:\n",HouseData[hid][Color]);
  789. }
  790. }
  791. ShowPlayerDialog(playerid,DIALOG_FUNCTION,DIALOG_STYLE_INPUT,caption,string,"Bestätigen","Zurück");
  792. }
  793. case DIALOG_FUNCTION:
  794. {
  795. new HouseID = GetPVarInt(playerid,"SelectedHouse"), string1[256];
  796. if(response == 0)
  797. {
  798. format(string1,sizeof string1,"{FFFFFF}Hauskasse: {33AA33}$%d{FFFFFF}\nMietkosten: {33AA33}$%d{FFFFFF}\nMieter verwalten\nTextfarbe",HouseData[HouseID][HouseKasse],HouseData[HouseID][Rentfee]);
  799. return ShowPlayerDialog(playerid,DIALOG_CONFIG,DIALOG_STYLE_LIST,"Hauskonfiguration",string1,"Wählen","Verlassen");
  800. }
  801. switch(GetPVarInt(playerid,"SelectedFunction"))
  802. {
  803. case 0:
  804. {
  805. if(strfind(inputtext,"abheben",true) != -1)
  806. {
  807. new params[2][20],betrag;
  808. if(strfind(inputtext,",",true) != -1)
  809. split(inputtext,params,',');
  810. else
  811. split(inputtext,params,' ');
  812. betrag = strval(params[1]);
  813. if(betrag <= 0) return SendClientMessage(playerid,ROT,"Der Betrag bei einer Auszahlung MUSS über 0 liegen!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  814. if(betrag > HouseData[HouseID][HouseKasse])return SendClientMessage(playerid,ROT,"Soviel Geld steht nicht zur Verfügung!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  815. HouseData[HouseID][HouseKasse]-=betrag;
  816. OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  817. return GivePlayerMoney(playerid,betrag);
  818. }
  819. if(strfind(inputtext,"einzahlen",true) != -1)
  820. {
  821. new param[2][20],betrag;
  822. if(strfind(inputtext,",",true) != -1)
  823. split(inputtext,param,',');
  824. else
  825. split(inputtext,param,' ');
  826. split(inputtext,param,',');
  827. betrag = strval(param[1]);
  828. if(betrag <= 0) return SendClientMessage(playerid,ROT,"Der Betrag bei einer Einzahlung MUSS über 0 liegen!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  829. if(betrag > GetPlayerMoney(playerid)) return SendClientMessage(playerid,ROT,"Du besitzt nicht soviel Geld!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  830. HouseData[HouseID][HouseKasse]+=betrag;
  831. OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  832. GivePlayerMoney(playerid,-betrag);
  833. }
  834. else
  835. {
  836. OnDialogResponse(playerid,DIALOG_CONFIG,1,0," ");
  837. SendClientMessage(playerid,ROT,"Oops, es trat ein Fehler auf, bitte versuche es erneut");
  838. }
  839. }
  840. case 1:
  841. {
  842. new rentfee = strval(inputtext);
  843. if(rentfee < 0) return SendClientMessage(playerid,ROT,"Der Betrag der Miete MUSS über 0 liegen!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,1," ");
  844. if(rentfee > 10000) return SendClientMessage(playerid,ROT,"Der Betrag der Miete MUSS unter 10.000 liegen!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,1," ");
  845. HouseData[hid][Rentfee] = rentfee;
  846. OnDialogResponse(playerid,DIALOG_CONFIG,1,1," ");
  847. }
  848. case 2:
  849. {
  850. if(!HasPlayerKey(PlayerName(playerid),hid)) return SendClientMessage(playerid,ROT,"Dieser Spieler hat keinen Schlüssel!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,2," ");
  851. if(!RemovePlayerKey(PlayerName(playerid),hid)) return SendClientMessage(playerid,ROT,"Dieser Spieler hat keinen Schlüssel!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,2," ");
  852. OnDialogResponse(playerid,DIALOG_CONFIG,1,2," ");
  853. }
  854. case 3:
  855. {
  856. if(strlen(inputtext)>6 || strlen(inputtext) < 6) return SendClientMessage(playerid,ROT,"Der Farbcode ist zu lang/kurz!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,3," ");
  857. if(!ishex(inputtext)) return SendClientMessage(playerid,ROT,"Dies ist kein valider Farbcode!")+OnDialogResponse(playerid,DIALOG_CONFIG,1,3," ");
  858. strmid(HouseData[hid][Color],inputtext,0,9,9);
  859. SendClientMessage(playerid,GREEN,"Farbe erfolgreich geändert!");
  860. return OnDialogResponse(playerid,DIALOG_CONFIG,1,3," ");
  861. }
  862. }
  863. }
  864. }
  865. return 0;
  866. }
  867. stock ishex(str[])//credits to y_less
  868. {
  869. new
  870. i,
  871. cur;
  872. if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
  873. i = 2;
  874. while (str[i])
  875. {
  876. cur = str[i++];
  877. if ((cur < '0') || (cur > '9' && cur < 'A') || (cur > 'F' && cur < 'a') || (cur > 'f')) return 0;
  878. }
  879. return 1;
  880. }
  881. enum blubb
  882. {
  883. conObject
  884. }
  885. new Container[20][blubb];
  886. ocmd:attachcon(playerid,params[]) {
  887. new id;
  888. if(!sscanf(params, "d", id)) return 0;
  889. AttachObjectToVehicle(Container[id][conObject], GetPlayerVehicleID(playerid), 0, 0, 0, 0, 0, 0);
  890. return 1;
  891. }
  892. ocmd:spawnchange(playerid,params[])
  893. {
  894. mysql_SetInt(MYSQL_PLAYER_TABLE, MYSQL_PLAYER_SPAWNATHOUSE, ((GetPVarInt(playerid,"SpawnHouse") == 1) ? 0 : 1), "Name", PlayerName(playerid));
  895. SendClientMessage(playerid,GREEN,((GetPVarInt(playerid,"SpawnHouse") == 0) ? ("Du spawnst nun an deinem Haus!") : ("Du spawnst nun an deiner letzen Position!")));
  896. SetPVarInt(playerid,"SpawnHouse",((GetPVarInt(playerid,"SpawnHouse") == 1) ? 0 : 1));
  897. return 1;
  898. }
  899. /*ocmd:boom(playerid,params[])
  900. {
  901. RemoveBuildingForPlayer(playerid, 3838, -2787.8438, -123.9297, 10.5781, 0.25);
  902. RemoveBuildingForPlayer(playerid, 3827, -2787.8438, -123.9297, 10.5781, 0.25);
  903. RemoveBuildingForPlayer(playerid, 11024, -2076.2734, 359.3203, 44.5938, 0.25);
  904. RemoveBuildingForPlayer(playerid, 3868, -2120.7656, 336.8672, 49.1563, 200.0);
  905. RemoveBuildingForPlayer(playerid, 3867, -2131.1797, 347.2813, 49.1563, 200.0);
  906. RemoveBuildingForPlayer(playerid, 10949, -2076.2734, 359.3203, 44.5938, 0.25);
  907. RemoveBuildingForPlayer(playerid, 10946, -2076.6563, 354.3672, 35.7891, 0.25);
  908. RemoveBuildingForPlayer(playerid, 11403, -2076.6563, 354.3672, 35.7891, 0.25);
  909. return 1;
  910. }
  911. ocmd:help(playerid,params[])
  912. {
  913. new str[1100];
  914. format(str,sizeof str,"{FFFFFF} ------------------------------------------------------------------------------------------------------------------------------------\n");
  915. format(str,sizeof str,"%s| Immobilien:\t\t\t\t\t| Immobilien:\t\t\t\t\t|\n",str);
  916. format(str,sizeof str,"%s| - /buyhouse \t-> Haus kaufen\t\t\t| - /buyhouse \t-> Haus kaufen\t\t\t|\n",str);
  917. format(str,sizeof str,"%s| - /ch\t\t-> Haus konfigurieren\t\t| - /ch\t\t-> Haus konfigurieren\t\t|\n",str);
  918. format(str,sizeof str,"%s| - /hlock\t-> Haus abschließen\t\t| - /hlock\t-> Haus abschließen\t\t|\n",str);
  919. format(str,sizeof str,"%s| - /sellhouse\t-> Haus verkaufen\t\t| - /sellhouse\t-> Haus verkaufen\t\t|\n",str);
  920. format(str,sizeof str,"%s| - /(un)rent\t-> Zimmer mieten/kündigen\t| - /(un)rent\t-> Zimmer mieten/kündigen\t|\n",str);
  921. format(str,sizeof str,"%s|------------------------------------------------------------------\t|------------------------------------------------------------------\t||\n",str);
  922. format(str,sizeof str,"%s| Fahrzeuge:\t\t\t\t\t|\t\t|\t\t|\t\t|\n",str);
  923. format(str,sizeof str,"%s| - sellveh \t-> Auto verkaufen\t\t|\t\t|\t\t|\t\t|\n",str);
  924. format(str,sizeof str,"%s| - /cc\t\t-> Auto konfigurieren\t\t|\t\t|\t\t|\t\t|\n",str);
  925. format(str,sizeof str,"%s| - /carlock\t-> Auto abschließen\t\t|\t\t|\t\t|\t\t|\n",str);
  926. format(str,sizeof str,"%s| - /carhelp\t-> Erweiterte Hilfe\t\t|\t\t|\t\t|\t\t| \n",str);
  927. format(str,sizeof str,"%s| - /carhelp\t-> Erweiterte Hilfe\t\t|\t\t|\t\t|\t\t| \n",str);
  928. format(str,sizeof str,"%s------------------------------------------------------------------------------------------------------------------------------------",str);
  929. ShowPlayerDialog(playerid,999,DIALOG_STYLE_MSGBOX,"Hilfe",str,"Ok!","");
  930. return 1;
  931. }*/
  932. ocmd:buyhouse(playerid,params[])
  933. {
  934. #pragma unused params
  935. new HouseID = GetPlayerNearestHouse(playerid);
  936. if(HouseID == -1) return SendClientMessage(playerid,ROT,"Du bist zu weit von einem Haus entfernt!");
  937. if(!strmatch(HouseData[HouseID][Owner],"None")) return SendClientMessage(playerid,ROT,"Dieses Haus steht nicht zum Verkauf!");
  938. new string[256];
  939. format(string,sizeof(string),"--------Hausinformationen:--------\n\nBeschreibung: %s\nPreis: %d$",
  940. HouseTypeInfoText[HouseData[HouseID][IntID]],HouseData[HouseID][Price]);
  941. ShowPlayerDialog(playerid,DIALOG_BUY,DIALOG_STYLE_MSGBOX,"Haus erwerben",string,"Kaufen","Abbrechen");
  942. SetPVarInt(playerid,"SelectedHouse",HouseID);
  943. return 1;
  944. }
  945. ocmd:hlock(playerid,params[])
  946. {
  947. #pragma unused params
  948. new HouseID = GetPlayerNearestHouse(playerid);
  949. if(HouseID == -1) HouseID = GetPlayerNearestHouseInterior(playerid,1);
  950. if(HouseID == -1) return SendClientMessage(playerid,ROT,"Du bist zu weit von einem Haus entfernt!");
  951. if(!strmatch(PlayerName(playerid),HouseData[HouseID][Owner])) return SendClientMessage(playerid,ROT,"Dieses Haus gehört nicht dir!");
  952. if(!HouseData[HouseID][Locked])
  953. {
  954. HouseData[HouseID][Locked]=true;
  955. return SendClientMessage(playerid,GREEN,"Abgeschlossen!");
  956. }
  957. else
  958. {
  959. HouseData[HouseID][Locked]=false;
  960. return SendClientMessage(playerid,GREEN,"Aufgesperrt!");
  961. }
  962. }
  963. ocmd:edit(playerid,params[])
  964. {
  965. new hid = GetPlayerNearestHouseInterior(playerid);
  966. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!");
  967. if(!strmatch(HouseData[hid][Owner],PlayerName(playerid))) return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht bearbeiten!");
  968. SetPVarInt(playerid,"Editing",1);
  969. SetPVarInt(playerid,"SelOK",0);
  970. SetPVarInt(playerid,"SelObject",-1);
  971. SelectObject(playerid);
  972. return 1;
  973. }
  974. ocmd:endedit(playerid,params[]){
  975. SetPVarInt(playerid,"Editing",0);
  976. return 1;
  977. }
  978. ocmd:addobj(playerid,params[])
  979. {
  980. new hid = GetPlayerNearestHouseInterior(playerid);
  981. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!");
  982. if(!strmatch(HouseData[hid][Owner],PlayerName(playerid))) return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht bearbeiten!");
  983. if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROT,"Diesen Befehl darfst du nicht nutzen!");
  984. new objmodel,objid;
  985. if(sscanf(params,"d",objmodel)) return SendClientMessage(playerid,ROT,"Verwendung: /addobj objmodel");
  986. GetPlayerPos(playerid,ObjectData[199][Objx],ObjectData[199][Objy],ObjectData[199][Objz]);
  987. format(query,sizeof query, "INSERT INTO Objects (`modelID`,`show`,`hID`,`PosX`,`PosY`,`PosZ`) VALUES ('%d','1','%d','%f','%f','%f')",objmodel,hid,ObjectData[199][Objx],ObjectData[199][Objy],ObjectData[199][Objz]);
  988. mysql_query(query);
  989. format(query,sizeof query, "SELECT objID FROM Objects WHERE `modelID` = '%d' AND `show` = '1' AND `hID` = '%d' ORDER BY objID DESC LIMIT 1",objmodel,hid);
  990. mysql_query(query);
  991. mysql_store_result();
  992. new result[64];
  993. mysql_fetch_field("objID",result);
  994. mysql_free_result();
  995. objid = strval(result);
  996. ObjectData[objid][modelID] = objmodel;
  997. ObjectData[objid][objHouseID] = hid;
  998. format(result,sizeof result,"OBJID: %d -> HID: %d <%s> -> TESTME <%d>",objid,hid,result,9230);
  999. SendClientMessage(playerid,ROT,result);
  1000. GetPlayerPos(playerid,ObjectData[objid][Objx],ObjectData[objid][Objy],ObjectData[objid][Objz]);
  1001. ObjectData[objid][cobjID] = CreateDynamicObject(ObjectData[objid][modelID],ObjectData[objid][Objx],ObjectData[objid][Objy],ObjectData[objid][Objz],
  1002. ObjectData[objid][Objrx],ObjectData[objid][Objry],ObjectData[objid][Objrz],
  1003. HouseData[ObjectData[objid][objHouseID]][VirWorld],HouseData[ObjectData[objid][objHouseID]][Int]);
  1004. SaveHouseObjects(hid);
  1005. return 1;
  1006. }
  1007. public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz){
  1008. if(GetPVarInt(playerid,"Editing")){
  1009. new hid = GetPlayerNearestHouseInterior(playerid);
  1010. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!"),SetPVarInt(playerid,"Editing",0);
  1011. if(!strmatch(HouseData[hid][Owner],PlayerName(playerid))) return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht bearbeiten!"),SetPVarInt(playerid,"Editing",0);
  1012. for(new i = 0; i < MAX_HOUSEOBJECTS; i ++){
  1013. if(ObjectData[i][objHouseID] == hid && ObjectData[i][cobjID] == objectid){
  1014. switch(response){
  1015. case EDIT_RESPONSE_CANCEL:{
  1016. new keystate,UNUSE;
  1017. GetPlayerKeys(playerid,keystate,UNUSE,UNUSE);
  1018. if(!(keystate & KEY_WALK))
  1019. {
  1020. MoveDynamicObject(objectid,ObjectData[i][Objx],ObjectData[i][Objy],ObjectData[i][Objz],5.0,
  1021. ObjectData[i][Objrx],ObjectData[i][Objry],ObjectData[i][Objrz]);
  1022. SetPVarInt(playerid,"SelOK",1);
  1023. SetPVarInt(playerid,"SelObject",-1);
  1024. }
  1025. }
  1026. case EDIT_RESPONSE_UPDATE:MoveDynamicObject(objectid,x,y,z,1000,rx,ry,rz);
  1027. case EDIT_RESPONSE_FINAL:{
  1028. ObjectData[i][Objx] = x;
  1029. ObjectData[i][Objy] = y;
  1030. ObjectData[i][Objz] = z;
  1031. ObjectData[i][Objrx] = rx;
  1032. ObjectData[i][Objry] = ry;
  1033. ObjectData[i][Objrz] = rz;
  1034. MoveDynamicObject(objectid,x,y,z,5.0,rx,ry,rz);
  1035. SaveHouseObjects(hid);
  1036. SelectObject(playerid);
  1037. SendClientMessage(playerid,GREEN,"Erfolgreich gespeichert!");
  1038. SetPVarInt(playerid,"SelOK",1);
  1039. SetPVarInt(playerid,"SelObject",-1);
  1040. }
  1041. }
  1042. return 1;
  1043. }
  1044. }
  1045. }
  1046. return 0;
  1047. }
  1048. public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z){
  1049. if(GetPVarInt(playerid,"Editing")){
  1050. new hid = GetPlayerNearestHouseInterior(playerid);
  1051. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!"),SetPVarInt(playerid,"Editing",0);
  1052. if(!strmatch(HouseData[hid][Owner],PlayerName(playerid))) return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht bearbeiten!"),SetPVarInt(playerid,"Editing",0);
  1053. for(new i = 0; i < MAX_HOUSEOBJECTS; i ++){
  1054. if(ObjectData[i][objHouseID] == hid && ObjectData[i][cobjID] == objectid)
  1055. EditDynamicObject(playerid, objectid),SetPVarInt(playerid,"SelOK",2),SetPVarInt(playerid,"SelObject",objectid);
  1056. }
  1057. }
  1058. return 0;
  1059. }
  1060. ocmd:ch(playerid,params[])
  1061. {
  1062. new hid = GetPlayerNearestHouse(playerid);
  1063. if(hid == -1) hid = GetPlayerNearestHouseInterior(playerid);
  1064. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!");
  1065. if(strmatch(HouseData[hid][Owner],PlayerName(playerid)))
  1066. {
  1067. new string[128];
  1068. format(string,sizeof string,"{FFFFFF}Hauskasse: {33AA33}$%d{FFFFFF}\nMietkosten: {33AA33}$%d{FFFFFF}\nMieter verwalten\nTextfarbe",HouseData[hid][HouseKasse],HouseData[hid][Rentfee]);
  1069. SetPVarInt(playerid,"SelectedHouse",hid);
  1070. return ShowPlayerDialog(playerid,DIALOG_CONFIG,DIALOG_STYLE_LIST,"Hauskonfiguration",string,"Wählen","Verlassen");
  1071. }
  1072. return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht konfigurieren!");
  1073. }
  1074. ocmd:confighouse(playerid,params[])
  1075. {
  1076. new hid = GetPlayerNearestHouse(playerid);
  1077. if(hid == -1) hid = GetPlayerNearestHouseInterior(playerid);
  1078. if(hid == -1)return SendClientMessage(playerid,ROT,"Du befindest dich nicht nahe eines Hauses!");
  1079. if(strmatch(HouseData[hid][Owner],PlayerName(playerid)))
  1080. {
  1081. new string[128];
  1082. format(string,sizeof string,"{FFFFFF}Hauskasse: {33AA33}$%d{FFFFFF}\nMietkosten: {33AA33}$%d{FFFFFF}\nMieter verwalten\nTextfarbe",HouseData[hid][HouseKasse],HouseData[hid][Rentfee]);
  1083. SetPVarInt(playerid,"SelectedHouse",hid);
  1084. return ShowPlayerDialog(playerid,DIALOG_CONFIG,DIALOG_STYLE_LIST,"Hauskonfiguration",string,"Wählen","Verlassen");
  1085. }
  1086. return SendClientMessage(playerid,ROT,"Du kannst dieses Haus nicht konfigurieren!");
  1087. }
  1088. ocmd:setcolor(playerid,params[])
  1089. {
  1090. new col1,col2;
  1091. if(!IsPlayerAdmin(playerid)) return 1;
  1092. if(sscanf(params,"dd",col1,col2)) return SendClientMessage(playerid,ROT,"Verwendung: /setcolor [col1] [col2]");
  1093. ChangeVehicleColor(GetPlayerVehicleID(playerid),col1,col2);
  1094. CallRemoteFunction("OnVehicleRespray","dddd",playerid,GetPlayerVehicleID(playerid),col1,col2);
  1095. return 1;
  1096. }
  1097. ocmd:delveh(playerid,params[])
  1098. {
  1099. new vehid;
  1100. if(!IsPlayerAdmin(playerid)) return 1;
  1101. if(sscanf(params,"d",vehid)) return SendClientMessage(playerid,ROT,"Verwendung: /delveh [vehid]");
  1102. DestroyVehicle(vehid);
  1103. return 1;
  1104. }
  1105. ocmd:sethousepos(playerid,params[])
  1106. {
  1107. if(!IsPlayerAdmin(playerid)) return 1;
  1108. new HouseID;
  1109. if(sscanf(params,"d",HouseID)) return SendClientMessage(playerid,ROT,"Verwendung: /sethousepos [HouseID]");
  1110. if(HouseData[HouseID][Pickup] == -1) return SendClientMessage(playerid,ROT,"Dieses Haus existiert nicht");
  1111. GetPlayerPos(playerid,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  1112. Delete3DTextLabel(HouseData[HouseID][Label]);
  1113. DestroyPickup(HouseData[HouseID][Pickup]);
  1114. new string1[140];
  1115. if(strmatch(HouseData[HouseID][Owner],"None"))
  1116. {
  1117. // HouseData[HouseID][MapIcon]= CreateMapIcon(52,kP,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  1118. format(string1,sizeof(string1),"Dieses Haus steht zum Verkauf\nBeschreibung: %s\nPreis: %d$\nTippe /buyHouse um\nes zu kaufen",HouseTypeInfoText[HouseData[HouseID][IntID]],HouseData[HouseID][Price]);
  1119. HouseData[HouseID][Label]= Create3DTextLabel(string1,BLUE,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ],DRAWDISTANCE,0);
  1120. HouseData[HouseID][Pickup]= CreatePickup(1273,1,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  1121. }
  1122. else
  1123. {
  1124. format(string1,sizeof(string1),"{%s}Dieses Haus gehört %s\nBeschreibung: %s\nDerzeitige Mieter: %d/%d\nMiete: %d$\nTippe /rent um\nein Zimmer zu mieten",HouseData[HouseID][Color],HouseData[HouseID][Owner],HouseTypeInfoText[HouseData[HouseID][IntID]],GetHouseRenters(HouseID),MAX_KEYS,HouseData[HouseID][Rentfee]);
  1125. HouseData[HouseID][Label]= Create3DTextLabel(string1,BLUE,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ],DRAWDISTANCE,0);
  1126. HouseData[HouseID][Pickup]= CreatePickup(1272,1,HouseData[HouseID][OutX],HouseData[HouseID][OutY],HouseData[HouseID][OutZ]);
  1127. }
  1128. return 1;
  1129. }
  1130. ocmd:sethouseint(playerid,params[])
  1131. {
  1132. new interiorid,HouseID;
  1133. if(!IsPlayerAdmin(playerid)) return 1;
  1134. if(sscanf(params,"d",interiorid)) return SendClientMessage(playerid,ROT,"Verwendung: /sethouseint [interior]");
  1135. HouseID = GetPlayerNearestHouse(playerid);
  1136. if(HouseID == -1) return SendClientMessage(playerid,ROT,"Du bist zu weit von einem Haus entfernt!");
  1137. HouseData[HouseID][InX] = Interiors[interiorid][int_x];
  1138. HouseData[HouseID][InY] = Interiors[interiorid][int_y];
  1139. HouseData[HouseID][InZ] = Interiors[interiorid][int_z];
  1140. HouseData[HouseID][Int] = Interiors[interiorid][interior];
  1141. HouseData[HouseID][IntID] = interiorid;
  1142. Delete3DTextLabel(HouseData[HouseID][IntLabel]);
  1143. DestroyPickup(HouseData[HouseID][IntPickup]);
  1144. HouseData[HouseID][IntLabel]= Create3DTextLabel("Ausgang",0x007AD1FF,HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ],DRAWDISTANCE,HouseData[HouseID][VirWorld]);
  1145. HouseData[HouseID][IntPickup]= CreatePickup(1272,1,HouseData[HouseID][InX],HouseData[HouseID][InY],HouseData[HouseID][InZ],HouseData[HouseID][VirWorld]);
  1146. SaveHouse(HouseID);
  1147. return 1;
  1148. }
  1149. ocmd:createhouse(playerid,params[])
  1150. {
  1151. new price,interiorid;
  1152. if(!IsPlayerAdmin(playerid)) return 1;
  1153. if(sscanf(params,"dd",price,interiorid)) return SendClientMessage(playerid,ROT,"Verwendung: /createHouse [preis] [interior]");
  1154. new Float:x,Float:y,Float:z;
  1155. GetPlayerPos(playerid,x,y,z);
  1156. CreateNewHouse(x,y,z,interiorid,price,interiorid);
  1157. return 1;
  1158. }
  1159. ocmd:die(playerid,params[])
  1160. {
  1161. for(new i = 0; i<MAX_House;i++)
  1162. {
  1163. Delete3DTextLabel(Text3D:i);
  1164. DestroyPickup(i);
  1165. }
  1166. return 1;
  1167. }
  1168. ocmd:rent(playerid,params[])
  1169. {
  1170. #pragma unused params
  1171. new HouseID = GetPlayerNearestHouse(playerid);
  1172. if(HouseID == -1) return SendClientMessage(playerid,ROT,"Du bist zu weit von einem Haus entfernt!");
  1173. if(!HouseData[HouseID][AcceptRent]) return SendClientMessage(playerid,ROT,"Du kannst hier nicht mieten!");
  1174. if(strmatch(HouseData[HouseID][Owner],"None") || strmatch(HouseData[HouseID][Owner],PlayerName(playerid)) ) return SendClientMessage(playerid,ROT,"Du kannst hier nicht mieten!");
  1175. if(HasPlayerKey(PlayerName(playerid),HouseID)) return SendClientMessage(playerid,ROT,"Du mietest hier bereits ein Zimmer!");
  1176. if(!AddPlayerKey(PlayerName(playerid),HouseID)) return SendClientMessage(playerid,ROT,"Es wohnen bereits 5 Leute in diesem Haus!");
  1177. return SendClientMessage(playerid,GREEN,"Du hast erfolgreich ein Zimmer gemietet!");
  1178. }
  1179. ocmd:unrent(playerid,params[])
  1180. {
  1181. #pragma unused params
  1182. new HouseID = GetPlayerNearestHouse(playerid);
  1183. if(HouseID == -1) return SendClientMessage(playerid,ROT,"Du bist zu weit von einem Haus entfernt!");
  1184. if(!HasPlayerKey(PlayerName(playerid),HouseID)) return SendClientMessage(playerid,ROT,"Du mietest hier doch garkein Zimmer!");
  1185. if(!RemovePlayerKey(PlayerName(playerid),HouseID)) return SendClientMessage(playerid,ROT,"Es trat ein Fehler auf, benachrichtige bitte den Scripter.");
  1186. return SendClientMessage(playerid,GREEN,"Du hast deinen Mietvertrag erfolgreich gekündigt!");
  1187. }
  1188. SetPlayerPosWait(pid,Float:x,Float:y,Float:z)
  1189. {
  1190. TogglePlayerControllable(pid,false);
  1191. SetPlayerPos(pid,x,y,z);
  1192. SetTimerEx("Unfreeze",1000,0,"d",pid);
  1193. return 1;
  1194. }
  1195. forward Unfreeze(pid);
  1196. public Unfreeze(pid) return TogglePlayerControllable(pid,true);
  1197.  
  1198. stock strmatch(const String1[], const String2[])
  1199. {
  1200. if ((strcmp(String1, String2, true, strlen(String2)) == 0) && (strlen(String2) == strlen(String1))) return true;
  1201. else return false;
  1202. }
  1203. forward SendFormatedMessage(playerid,color,const form[],{Float,_}:...);
  1204. public SendFormatedMessage(playerid,color,const form[],{Float,_}:...)
  1205. {
  1206. new len = strlen(form),
  1207. output[144],currarg=3,
  1208. args = numargs()+1,
  1209. replace[32],pos = 0,i = 0;
  1210. strmid(output,form,0,len,144);
  1211. if(args-1 > 0)
  1212. {
  1213. for(; i < len;i++)
  1214. {
  1215. replace = " ";
  1216. if(currarg >=args)
  1217. {
  1218. break;
  1219. }
  1220. switch(output[i])
  1221. {
  1222. case '%':
  1223. {
  1224. switch(output[i+1])
  1225. {
  1226. case 'd','i':
  1227. {
  1228. valstr(replace,getarg(currarg,0));
  1229. strdel(output, i, i+2);
  1230. strins(output, replace, i);
  1231. len = strlen(output);
  1232. currarg++;
  1233. continue;
  1234. }
  1235. case 'f':
  1236. {
  1237. format(replace,32,"%.4f",Float:getarg(currarg,0));
  1238. strdel(output, i, i+2);
  1239. strins(output, replace, i);
  1240. len = strlen(output);
  1241. currarg++;
  1242. continue;
  1243. }
  1244. case 's':
  1245. {
  1246. while(getarg(currarg,pos) != 0)
  1247. {
  1248. replace[pos] = getarg(currarg,pos);
  1249. pos++;
  1250. }
  1251. strdel(output, i, i+2);
  1252. strins(output, replace, i);
  1253. len = strlen(output);
  1254. currarg++;
  1255. continue;
  1256. }
  1257. }
  1258. }
  1259. }
  1260. }
  1261. }
  1262. //printf("LOG: %s",output);
  1263. return SendClientMessage(playerid,color,output);
  1264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement