├── .gitattributes ├── .gitignore ├── CreateWater.inc ├── README.md └── example.pwn /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pwn linguist-language=Pawn 2 | *.inc linguist-language=Pawn 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | -------------------------------------------------------------------------------- /CreateWater.inc: -------------------------------------------------------------------------------- 1 | /*********************************************************************************************** 2 | CreateWater.inc | Create custom waters in samp and have ability to swim in them 3 | by: iAmir 4 | Download : https://github.com/AmyrAhmady/CreateWater 5 | Functions : 6 | CreateWater(minx, miny, maxx, maxy, z, depth, world=-1, interior=-1, type=WATER_TYPE_NORMAL); 7 | IsPlayerInCustomWater(playerid); 8 | IsPlayerUnderCustomWater(playerid); 9 | GetPlayerWaterID(playerid); 10 | GetWaterDepth(waterid); 11 | GetPlayerSwimStyle(playerid); 12 | DestroyWater(waterid); 13 | GetPlayerCustomOxygen(playerid); 14 | SetPlayerCustomOxygen(playerid, ox_value); 15 | ShowCustomOxygenBarForPlayer(playerid); 16 | HideCustomOxygenBarForPlayer(playerid); 17 | Callbacks : 18 | OnPlayerEnterWater(playerid, waterid) 19 | OnPlayerLeaveWater(playerid, waterid) 20 | ************************************************************************************************/ 21 | 22 | 23 | 24 | #include a_samp 25 | #include streamer 26 | 27 | #define MAX_WATERS 500 28 | 29 | enum CW_waterInfo 30 | { 31 | waterArea, 32 | Float:waterMinX, 33 | Float:waterMaxX, 34 | Float:waterMinY, 35 | Float:waterMaxY, 36 | Float:waterZ, 37 | Float:waterD, 38 | waterAvailable, 39 | waterType 40 | } 41 | 42 | new waterInfo[MAX_WATERS][CW_waterInfo]; 43 | 44 | enum CW_playerWaterInfo 45 | { 46 | bool:playerInWater, 47 | bool:playerUnderWater, 48 | playerWaterID, 49 | playerSwimStyle, 50 | playerSwimObj, 51 | bool:playerOxygenBarVisible, 52 | Float:playerOxygenValue, 53 | } 54 | 55 | new playerWater[MAX_PLAYERS][CW_playerWaterInfo]; 56 | 57 | enum 58 | { 59 | SWIM_STYLE_IDLE_ON_WATER, 60 | SWIM_STYLE_MOVE_ON_WATER, 61 | SWIM_STYLE_DIVE_UNDER_WATER, 62 | SWIM_STYLE_MOVE_UNDER_WATER, 63 | SWIM_STYLE_COMING_UP, 64 | SWIM_STYLE_MOVE_FAST_ON_WATER, 65 | SWIM_STYLE_INVALID 66 | } 67 | 68 | enum 69 | { 70 | WATER_TYPE_LIGHT, 71 | WATER_TYPE_NORMAL, 72 | WATER_TYPE_DARK, 73 | WATER_TYPE_CLOUDY 74 | } 75 | 76 | new Text:waterTD; 77 | new PlayerText:oxygenBarBG[MAX_PLAYERS]; 78 | new PlayerText:oxygenBarBGEx[MAX_PLAYERS]; 79 | new PlayerText:oxygenBarProg[MAX_PLAYERS]; 80 | new waterOxygenTimer; 81 | 82 | forward OnPlayerEnterWater(playerid, waterid); 83 | forward OnPlayerLeaveWater(playerid, waterid); 84 | 85 | 86 | static Float:CW_abs(Float:val) 87 | { 88 | if(val < 0.0) val = -1 * val; 89 | return val; 90 | } 91 | 92 | stock CreateWater(Float:minx, Float:miny, Float:maxx, Float: maxy, Float:z, Float:depth, world=-1, interior=-1, type=WATER_TYPE_NORMAL) 93 | { 94 | static 95 | xWayCount=0, 96 | yWayCount=0, 97 | xWay=1, 98 | yWay=1; 99 | 100 | 101 | new waterCount = FindFreeWaterSlot(); 102 | if(waterCount == -1) return printf("You've reached the limit %d in creating new waters", MAX_WATERS); 103 | 104 | 105 | if((maxx - minx) < 0.0) xWay= -1; 106 | if((maxy - miny) < 0.0) yWay= -1; 107 | 108 | xWayCount = floatround(CW_abs((minx-maxx)) / 1.908086, floatround_ceil) +1; 109 | yWayCount = floatround(CW_abs((miny-maxy)) / 2.13943, floatround_ceil) +1; 110 | 111 | if(!xWayCount || !yWayCount) return -1; 112 | 113 | waterInfo[waterCount][waterType] = type; 114 | 115 | for(new i=0; i= Py) Pa = floatsub(180, Pa); 259 | else if (X < Px && Y < Py) Pa = floatadd(Pa, 180); 260 | else if (X >= Px && Y <= Py) Pa = floatsub(360.0, Pa); 261 | Pa = floatsub(Pa, 90.0); 262 | if (Pa >= 360.0) Pa = floatsub(Pa, 360.0); 263 | SetPlayerFacingAngle(playerid, Pa); 264 | } 265 | 266 | CreateCustomOxygenBarForPlayer(playerid) 267 | { 268 | oxygenBarBG[playerid] = CreatePlayerTextDraw(playerid, 577.000000, 58.000000, "_"); 269 | PlayerTextDrawAlignment(playerid, oxygenBarBG[playerid], 2); 270 | PlayerTextDrawLetterSize(playerid, oxygenBarBG[playerid], 0.400000, 0.499993); 271 | PlayerTextDrawUseBox(playerid, oxygenBarBG[playerid], 1); 272 | PlayerTextDrawBoxColor(playerid, oxygenBarBG[playerid], 255); 273 | PlayerTextDrawTextSize(playerid, oxygenBarBG[playerid], -15.000000, 59.000000); 274 | 275 | oxygenBarBGEx[playerid] = CreatePlayerTextDraw(playerid, 549.000000, 59.500000, "_"); 276 | PlayerTextDrawLetterSize(playerid, oxygenBarBGEx[playerid], 0.400000, 0.199993); 277 | PlayerTextDrawUseBox(playerid, oxygenBarBGEx[playerid], 1); 278 | PlayerTextDrawBoxColor(playerid, oxygenBarBGEx[playerid], 0x7998C1FF); 279 | PlayerTextDrawTextSize(playerid, oxygenBarBGEx[playerid], 605.000000, 0.000000); 280 | 281 | oxygenBarProg[playerid] = CreatePlayerTextDraw(playerid, 549.000000, 59.500000, "_"); 282 | PlayerTextDrawLetterSize(playerid, oxygenBarProg[playerid], 0.400000, 0.199993); 283 | PlayerTextDrawUseBox(playerid, oxygenBarProg[playerid], 1); 284 | PlayerTextDrawBoxColor(playerid, oxygenBarProg[playerid], 0xACCBF1FF); 285 | PlayerTextDrawTextSize(playerid, oxygenBarProg[playerid], 605.000000, 0.000000); 286 | 287 | return 1; 288 | } 289 | 290 | DestroyCustomOxygenBarForPlayer(playerid) 291 | { 292 | if(playerWater[playerid][playerOxygenBarVisible]) 293 | { 294 | PlayerTextDrawHide(playerid, oxygenBarBG[playerid]); 295 | PlayerTextDrawHide(playerid, oxygenBarBGEx[playerid]); 296 | PlayerTextDrawHide(playerid, oxygenBarProg[playerid]); 297 | playerWater[playerid][playerOxygenBarVisible] = false; 298 | } 299 | PlayerTextDrawDestroy(playerid, oxygenBarBG[playerid]); 300 | PlayerTextDrawDestroy(playerid, oxygenBarBGEx[playerid]); 301 | PlayerTextDrawDestroy(playerid, oxygenBarProg[playerid]); 302 | return 1; 303 | } 304 | 305 | ShowCustomOxygenBarForPlayer(playerid) 306 | { 307 | PlayerTextDrawShow(playerid, oxygenBarBG[playerid]); 308 | PlayerTextDrawShow(playerid, oxygenBarBGEx[playerid]); 309 | PlayerTextDrawShow(playerid, oxygenBarProg[playerid]); 310 | playerWater[playerid][playerOxygenBarVisible] = true; 311 | return 1; 312 | } 313 | 314 | UpdateCustomOxygenBarForPlayer(playerid, Float:ox_value) 315 | { 316 | new Float:tdSideValue = 547.0 + ((ox_value * 58) / 100.0); 317 | PlayerTextDrawTextSize(playerid, oxygenBarProg[playerid], tdSideValue, 0.0); 318 | PlayerTextDrawShow(playerid, oxygenBarProg[playerid]); 319 | return 1; 320 | } 321 | 322 | public OnPlayerEnterDynamicArea(playerid, areaid) 323 | { 324 | new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID); 325 | if(0 <= i < MAX_WATERS) 326 | { 327 | playerWater[playerid][playerInWater] = true; 328 | playerWater[playerid][playerWaterID] = i; 329 | CreateCustomOxygenBarForPlayer(playerid); 330 | ShowCustomOxygenBarForPlayer(playerid); 331 | SetPlayerCustomOxygen(playerid, 100.0); 332 | CallRemoteFunction("OnPlayerEnterWater", "ii", playerid, i); 333 | return 1; 334 | 335 | } 336 | return CallLocalFunction("CW_OnPlayerEnterDynamicArea", "ii", playerid, areaid); 337 | } 338 | 339 | #if defined _ALS_OnPlayerEnterDynamicArea 340 | #undef OnPlayerEnterDynamicArea 341 | #else 342 | #define _ALS_OnPlayerEnterDynamicArea 343 | #endif 344 | #define OnPlayerEnterDynamicArea CW_OnPlayerEnterDynamicArea 345 | forward CW_OnPlayerEnterDynamicArea(playerid, areaid); 346 | 347 | public OnPlayerLeaveDynamicArea(playerid, areaid) 348 | { 349 | new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID); 350 | if(0 <= i < MAX_WATERS) 351 | { 352 | playerWater[playerid][playerInWater] = false; 353 | playerWater[playerid][playerUnderWater] = false; 354 | playerWater[playerid][playerWaterID] = -1; 355 | if(GetPlayerSwimStyle(playerid) != SWIM_STYLE_INVALID) ClearAnimations(playerid); 356 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_INVALID; 357 | DestroyCustomOxygenBarForPlayer(playerid); 358 | TextDrawHideForPlayer(playerid, waterTD); 359 | CallRemoteFunction("OnPlayerLeaveWater", "ii", playerid, i); 360 | return 1; 361 | 362 | } 363 | return CallLocalFunction("CW_OnPlayerLeaveDynamicArea", "ii", playerid, areaid); 364 | } 365 | 366 | #if defined _ALS_OnPlayerLeaveDynamicArea 367 | #undef OnPlayerLeaveDynamicArea 368 | #else 369 | #define _ALS_OnPlayerLeaveDynamicArea 370 | #endif 371 | #define OnPlayerLeaveDynamicArea CW_OnPlayerLeaveDynamicArea 372 | forward CW_OnPlayerLeaveDynamicArea(playerid, areaid); 373 | 374 | public OnPlayerUpdate(playerid) 375 | { 376 | if(!IsPlayerNPC(playerid) && playerWater[playerid][playerInWater]) 377 | { 378 | new Float:x,Float:y,Float:z; 379 | GetPlayerPos(playerid,x,y,z); 380 | 381 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_IDLE_ON_WATER) 382 | { 383 | if(!IsValidDynamicObject(playerWater[playerid][playerSwimObj])) 384 | { 385 | playerWater[playerid][playerSwimObj] = CreateDynamicObject(2928, x, y, waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 1.34, 90.0, 0.0, 0.0, -1 ,-1 ,playerid); 386 | SetDynamicObjectMaterial(playerWater[playerid][playerSwimObj], 0, 0, "none", "none", 0x00000000); 387 | } 388 | } 389 | else if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_ON_WATER) 390 | { 391 | if(!IsValidDynamicObject(playerWater[playerid][playerSwimObj])) 392 | { 393 | playerWater[playerid][playerSwimObj] = CreateDynamicObject(2928, x, y, waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 1.36, 90.0, 0.0, 0.0, -1 ,-1 ,playerid); 394 | SetDynamicObjectMaterial(playerWater[playerid][playerSwimObj], 0, 0, "none", "none", 0x00000000); 395 | } 396 | MoveDynamicObject(playerWater[playerid][playerSwimObj], x, y, waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 1.36, 5.44); 397 | } 398 | else if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_FAST_ON_WATER) 399 | { 400 | if(!IsValidDynamicObject(playerWater[playerid][playerSwimObj])) 401 | { 402 | playerWater[playerid][playerSwimObj] = CreateDynamicObject(2928, x, y, waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 1.36, 90.0, 0.0, 0.0, -1 ,-1 ,playerid); 403 | SetDynamicObjectMaterial(playerWater[playerid][playerSwimObj], 0, 0, "none", "none", 0x00000000); 404 | } 405 | MoveDynamicObject(playerWater[playerid][playerSwimObj], x, y, waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 1.36, 17.14); 406 | } 407 | else { if(IsValidDynamicObject(playerWater[playerid][playerSwimObj])) DestroyDynamicObject(playerWater[playerid][playerSwimObj]); } 408 | 409 | if(z < waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 0.45) 410 | { 411 | if(!playerWater[playerid][playerUnderWater]) 412 | { 413 | TextDrawShowForPlayer(playerid, waterTD); 414 | playerWater[playerid][playerUnderWater] = true; 415 | } 416 | } 417 | else 418 | { 419 | if(playerWater[playerid][playerUnderWater]) 420 | { 421 | TextDrawHideForPlayer(playerid, waterTD); 422 | playerWater[playerid][playerUnderWater] = false; 423 | } 424 | } 425 | 426 | new k, ud,lr; 427 | GetPlayerKeys(playerid,k,ud,lr); 428 | new Float:v_x,Float:v_y,Float:v_z, 429 | Float:xv,Float:yv,Float:zv; 430 | 431 | GetPlayerCameraFrontVector(playerid,xv,yv,zv); 432 | if(ud < 0) 433 | { 434 | v_x = (xv+0.001)/3000.0; 435 | v_y = (yv+0.001)/3000.0; 436 | } 437 | if(k & KEY_FIRE) 438 | { 439 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_ON_WATER 440 | || GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_FAST_ON_WATER 441 | || GetPlayerSwimStyle(playerid) == SWIM_STYLE_IDLE_ON_WATER) 442 | { 443 | v_z = -0.22; 444 | ApplyAnimation(playerid,"SWIM","Swim_Dive_Under", 4.1, 0, 1, 1, 0, 0, 1); 445 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_DIVE_UNDER_WATER; 446 | if(IsValidDynamicObject(playerWater[playerid][playerSwimObj])) DestroyDynamicObject(playerWater[playerid][playerSwimObj]); 447 | } 448 | } 449 | if(k & KEY_SPRINT) 450 | { 451 | v_x *=2.0; 452 | v_y *=2.0; 453 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_UNDER_WATER) 454 | { 455 | v_x *= 30.0; 456 | v_y *= 30.0; 457 | v_z = (zv+0.001)/30.0; 458 | } 459 | } 460 | if(v_z == 0.0 && z < waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 0.32 && GetPlayerSwimStyle(playerid) == SWIM_STYLE_COMING_UP) 461 | v_z = 0.035; 462 | 463 | if(v_x == 0 && v_y == 0) 464 | { 465 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_ON_WATER 466 | || GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_FAST_ON_WATER 467 | || z >= waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 0.46) 468 | { 469 | ApplyAnimation(playerid,"SWIM","Swim_Tread", 6.1, 1, 1, 1, 1, 0, 1); 470 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_IDLE_ON_WATER; 471 | } 472 | 473 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_DIVE_UNDER_WATER || GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_UNDER_WATER || z < waterInfo[playerWater[playerid][playerWaterID]][waterZ] - 0.46) 474 | { 475 | ApplyAnimation(playerid,"SWIM","Swim_Glide", 6.1, 1, 1, 1, 1, 0, 1); 476 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_COMING_UP; 477 | } 478 | } 479 | else 480 | { 481 | new Float:cx, Float:cy, Float:cz; 482 | new Float:cx1, Float:cy1, Float:cz1; 483 | GetPlayerCameraFrontVector(playerid, cx, cy, cz); 484 | GetPlayerCameraPos(playerid, cx1, cy1, cz1); 485 | SetPlayerLookAt(playerid, cx*500.0+cx1, cy*500.0+cy1); 486 | 487 | if(k & KEY_SPRINT) 488 | { 489 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_IDLE_ON_WATER || GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_ON_WATER) 490 | { 491 | ApplyAnimation(playerid,"SWIM","SWIM_crawl", 6.1, 1, 1, 1, 1, 0, 1); 492 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_MOVE_FAST_ON_WATER; 493 | } 494 | 495 | if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_DIVE_UNDER_WATER || GetPlayerSwimStyle(playerid) == SWIM_STYLE_COMING_UP) 496 | { 497 | ApplyAnimation(playerid,"SWIM","Swim_Under", 6.1, 1, 1, 1, 1, 0, 1); 498 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_MOVE_UNDER_WATER; 499 | } 500 | } 501 | else if(GetPlayerSwimStyle(playerid) == SWIM_STYLE_IDLE_ON_WATER || GetPlayerSwimStyle(playerid) == SWIM_STYLE_MOVE_FAST_ON_WATER) 502 | { 503 | ApplyAnimation(playerid,"SWIM","Swim_Breast", 6.1, 1, 1, 1, 1, 0, 1); 504 | playerWater[playerid][playerSwimStyle] = SWIM_STYLE_MOVE_ON_WATER; 505 | } 506 | } 507 | SetPlayerVelocity(playerid, v_x, v_y, v_z); 508 | } 509 | 510 | return CallLocalFunction("CW_OnPlayerUpdate", "i", playerid); 511 | } 512 | 513 | forward UpdateCustomOxygenForPlayers(); 514 | public UpdateCustomOxygenForPlayers() 515 | { 516 | for(new playerid=0; playerid 2.6) 523 | { 524 | playerWater[playerid][playerOxygenValue] -= 2.5; 525 | UpdateCustomOxygenBarForPlayer(playerid, playerWater[playerid][playerOxygenValue]); 526 | } 527 | else 528 | { 529 | new Float:tmp_ox_hp; 530 | playerWater[playerid][playerOxygenValue] = 0.0; 531 | UpdateCustomOxygenBarForPlayer(playerid, playerWater[playerid][playerOxygenValue]); 532 | GetPlayerHealth(playerid, tmp_ox_hp); 533 | SetPlayerHealth(playerid, tmp_ox_hp - 7.0); 534 | } 535 | } 536 | else 537 | { 538 | if(playerWater[playerid][playerOxygenValue] < 94.9) 539 | { 540 | playerWater[playerid][playerOxygenValue] += 5.0; 541 | UpdateCustomOxygenBarForPlayer(playerid, playerWater[playerid][playerOxygenValue]); 542 | } 543 | else 544 | { 545 | playerWater[playerid][playerOxygenValue] = 100.0; 546 | UpdateCustomOxygenBarForPlayer(playerid, playerWater[playerid][playerOxygenValue]); 547 | } 548 | } 549 | } 550 | } 551 | return 1; 552 | } 553 | 554 | #if defined _ALS_OnPlayerUpdate 555 | #undef OnPlayerUpdate 556 | #else 557 | #define _ALS_OnPlayerUpdate 558 | #endif 559 | #define OnPlayerUpdate CW_OnPlayerUpdate 560 | forward CW_OnPlayerUpdate(playerid); 561 | 562 | public OnPlayerDeath(playerid, killerid, reason) 563 | { 564 | playerWater[playerid][playerInWater] = false; 565 | playerWater[playerid][playerUnderWater] = false; 566 | return CallLocalFunction("CW_OnPlayerDeath", "iii", playerid, killerid, reason); 567 | } 568 | 569 | #if defined _ALS_OnPlayerDeath 570 | #undef OnPlayerDeath 571 | #else 572 | #define _ALS_OnPlayerDeath 573 | #endif 574 | #define OnPlayerDeath CW_OnPlayerDeath 575 | forward CW_OnPlayerDeath(playerid, killerid, reason); 576 | 577 | #if defined FILTERSCRIPT 578 | 579 | public OnFilterScriptInit() 580 | { 581 | waterTD = TextDrawCreate(-20.000000,2.000000,"|"); 582 | TextDrawUseBox(waterTD,1); 583 | TextDrawBoxColor(waterTD,0x22446644); 584 | TextDrawTextSize(waterTD,660.000000,22.000000); 585 | TextDrawAlignment(waterTD,0); 586 | TextDrawBackgroundColor(waterTD,0x22446644); 587 | TextDrawFont(waterTD,3); 588 | TextDrawLetterSize(waterTD,1.000000,52.200000); 589 | TextDrawColor(waterTD,0x22446644); 590 | TextDrawSetOutline(waterTD,1); 591 | TextDrawSetProportional(waterTD,1); 592 | TextDrawSetShadow(waterTD,1); 593 | 594 | for(new i=0; i 4 | #include 5 | 6 | new water; 7 | public OnFilterScriptInit() 8 | { 9 | water = CreateWater(-363.2087, -28.7943, -330.5965, -8.0078, 53.1769, 14.2, -1, -1); 10 | CreateObject(10789, -371.90259, -44.40395, 51.39786, 0.00000, 0.00000, 0.00000); 11 | CreateObject(10789, -373.86771, 4.84763, 51.39790, 0.00000, 0.00000, 180.00000); 12 | CreateObject(10789, -345.22577, 4.80830, 51.39790, 0.00000, 0.00000, 180.00000); 13 | CreateObject(10789, -343.49039, -44.38051, 51.39786, 0.00000, 0.00000, 0.00000); 14 | CreateObject(10789, -316.23758, -19.36217, 51.39790, 0.00000, 0.00000, 90.00000); 15 | CreateObject(10789, -379.41629, -20.97732, 51.39790, 0.00000, 0.00000, -90.00000); 16 | CreateObject(7488, -364.30319, 15.65720, 34.79800, 0.00000, 0.00000, 0.00000); 17 | CreateObject(7488, -359.51620, -55.25240, 34.79800, 0.00000, 0.00000, 180.00000); 18 | CreateObject(7488, -305.23862, -21.52066, 34.79800, 0.00000, 0.00000, -90.00000); 19 | CreateObject(7488, -390.27274, -15.85115, 34.79800, 0.00000, 0.00000, 90.00000); 20 | CreateObject(7488, -339.73038, -27.62269, 23.05134, -69.00000, 0.00000, -90.00000); 21 | CreateObject(7488, -357.53989, -28.09170, 16.21629, -69.00000, 0.00000, -90.00000); 22 | CreateObject(7488, -369.52972, -29.78113, 19.82914, -90.00000, 0.00000, -90.00000); 23 | CreateObject(7488, -404.70270, -27.43068, 14.53054, -90.00000, 0.00000, -90.00000); 24 | return 1; 25 | } 26 | 27 | public OnPlayerCommandText(playerid, cmdtext[]) 28 | { 29 | if (strcmp("/water", cmdtext, true, 10) == 0) 30 | { 31 | SetPlayerPos(playerid, -322.9225, -20.3204, 55.1498); 32 | return 1; 33 | } 34 | return 0; 35 | } 36 | --------------------------------------------------------------------------------