ALTIN
DOLAR
EURO
BIST
Adana Adıyaman Afyon Ağrı Aksaray Amasya Ankara Antalya Ardahan Artvin Aydın Balıkesir Bartın Batman Bayburt Bilecik Bingöl Bitlis Bolu Burdur Bursa Çanakkale Çankırı Çorum Denizli Diyarbakır Düzce Edirne Elazığ Erzincan Erzurum Eskişehir Gaziantep Giresun Gümüşhane Hakkari Hatay Iğdır Isparta İstanbul İzmir K.Maraş Karabük Karaman Kars Kastamonu Kayseri Kırıkkale Kırklareli Kırşehir Kilis Kocaeli Konya Kütahya Malatya Manisa Mardin Mersin Muğla Muş Nevşehir Niğde Ordu Osmaniye Rize Sakarya Samsun Siirt Sinop Sivas Şanlıurfa Şırnak Tekirdağ Tokat Trabzon Tunceli Uşak Van Yalova Yozgat Zonguldak
İstanbul °C

SA:MP Multimod(Minigame) Nasıl Yapılır ? [ANLATIM]

21.08.2014
922
A+
A-

logo

 

 

Bir Shooter odası yapalım bakalım. (Neon Fırlatan)





Sizlere sadece shooter yapimini anlatacagim, bunlari verdigim ornege gore rahatlikla cogaltabilir sunucunuzu acabilirsiniz, basarilar dilerim.







Gereken includeler:

Pawn:

#include <a_samp>
#include <streamer>
#include <foreach>

Bu varibleler roketleri tanıtmak için gereklidir:

Pawn:

new Text:ShooterOda,Text:ShooterSayi,FireShot[MAX_PLAYERS],gRocketObj[MAX_PLAYERS],shooterPlayer,oyuncuArac[MAX_PLAYERS];

OnGameModeInit kısmına eklemelisiniz
Neden bunu ekliyoruz?: Çünkü girişte oda seçerken shooter resmi görünsün diye eklememiz gerekiyor, tıklayınca shooter odasına gidiyor tıklama olayını birazdan göstereceğim.

Pawn:

SetGameModeText("Multimod 1.0");
shooterPlayer = 0;
ShooterOda = TextDrawCreate(7.000000, 149.000000, "shooterresim");
TextDrawBackgroundColor(ShooterOda, 90);
TextDrawFont(ShooterOda, 5);
TextDrawLetterSize(ShooterOda, 0.889999, 1.000000);
TextDrawColor(ShooterOda, -1);
TextDrawSetOutline(ShooterOda, 0);
TextDrawSetProportional(ShooterOda, 1);
TextDrawSetShadow(ShooterOda, 1);
TextDrawUseBox(ShooterOda, 1);
TextDrawBoxColor(ShooterOda, 90);
TextDrawTextSize(ShooterOda, 139.000000, 127.000000);
TextDrawSetPreviewModel(ShooterOda, 345);
TextDrawSetPreviewRot(ShooterOda, -13.000000, -20.000000, 3.000000, 0.699999);
TextDrawSetSelectable(ShooterOda, 1);

ShooterSayi = TextDrawCreate(10.000000, 150.000000, “Shooter ~w~~h~[0/15]”);
TextDrawBackgroundColor(ShooterSayi, 255);
TextDrawFont(ShooterSayi, 1);
TextDrawLetterSize(ShooterSayi, 0.280000, 1.599999);
TextDrawColor(ShooterSayi, 16711935);
TextDrawSetOutline(ShooterSayi, 0);
TextDrawSetProportional(ShooterSayi, 1);
TextDrawSetShadow(ShooterSayi, 1);
TextDrawSetSelectable(ShooterSayi, 0);

OnPlayerConnect:
SelectTextDraw: bu gereklidir, eğer bunu eklemezsek resime tıklayınca bir olay olmaz.
ve diğer kodlar niye diye sorarsanız bu kodlar odanın resmini görüntülemek ve odada kaç kişi olduğunu göstermek içindir.

Pawn:

new shooterSayiCek[56];
TextDrawShowForPlayer(playerid, ShooterOda);
TextDrawShowForPlayer(playerid, ShooterSayi);
format(shooterSayiCek,56,"Shooter ~w~~h~[%d/15]",shooterPlayer);
TextDrawSetString(ShooterSayi, shooterSayiCek[0]);
SelectTextDraw(playerid, 0xFF0000FF);

OnPlayerDeath:
Bunu eklemeliyiz çünkü oyuncu ölünce aracıda silinsin.

Pawn:

DestroyVehicle(oyuncuArac[playerid]);

OnPlayerExitVehicle:
Oyuncu araçtan çıkınca ölsün diye bunu eklemeliyiz.

Pawn:

SetPlayerHealth(playerid, 0);

OnPlayerClickTextDraw:
Shooter resmine tıkladığımızda bizi spawnlaması için bunu yapmalıyız. Bu olay çok önemlidir, multi modlar bu mantıkla yapılır.

Pawn:

if(clickedid == ShooterOda)
{
shooterPlayer++;
SendClientMessage(playerid, -1, "Shooter odasına hoşgeldiniz.");
SpawnPlayer(playerid);
CancelSelectTextDraw(playerid);
TextDrawHideForPlayer(playerid, ShooterOda);
TextDrawHideForPlayer(playerid, ShooterSayi);
}

OnPlayerDisconnect:
Oyuncu çıkınca Shooter oynayan sayısı düşsün diye bunu eklemeliyiz.

Pawn:

shooterPlayer--;

OnPlayerSpawn:
Oyuncu spawn olunca hem rastgele spawn etmesi ve araç vermesi için bunu eklemeliyiz.

Pawn:

TogglePlayerControllable(playerid, false);
new randomspawn = random(2);
switch(randomspawn)
{
case 0: SetPlayerPos(playerid,2692.1204,-1719.8331,41.2144);
case 1: SetPlayerPos(playerid, 2758.0222,-1705.5728,41.2144);
case 2: SetPlayerPos(playerid, 2784.2896,-1787.6863,45.7055);
}
SetTimerEx("SonraVer", 1000, false, "i", playerid);

AracVer: Bunu oyuncu spawn olunca arac vermesi icin eklemeliyiz:

Pawn:

forward SonraVer(playerid);
public SonraVer(playerid)
{
new Float:x,Float:y,Float:z,Float:angle;
GetPlayerFacingAngle(playerid, angle);
GetPlayerPos(playerid, x, y, z);
oyuncuArac[playerid] = CreateVehicle(411, x, y, z, angle, 0, 1, 60);
PutPlayerInVehicle(playerid, oyuncuArac[playerid],0);
TogglePlayerControllable(playerid, true);
return 1;
}

OnPlayerKeyStateChange:
Oyuncu farenin sol tusuna bastiginda roket firlatmasi icin bunu eklememiz lazimdir.

Pawn:

if(IsPlayerInAnyVehicle(playerid) && FireShot[playerid] == 0 && newkeys & 4 && !IsValidObject(gRocketObj[playerid]))
{
SetPlayerTime(playerid,0,0);
new
vehicleid = GetPlayerVehicleID(playerid),
Float:x,
Float:y,
Float:z,
Float:r,
Float:dist = 50.0,
Float:tmpang,
Float:tmpx,
Float:tmpy,
Float:tmpz;

FireShot[playerid] = 1;
SetTimerEx(“ShotFire”, 1000, 0, “i”, playerid);
GetVehiclePos(vehicleid, x, y, z);
GetVehicleZAngle(vehicleid, r);
new rand = random(11);
switch(rand)
{
case 0: gRocketObj[playerid] = CreateObject(18647, x, y, z, 0, 0, r);
case 1: gRocketObj[playerid] = CreateObject(18648, x, y, z, 0, 0, r);
case 2: gRocketObj[playerid] = CreateObject(18649, x, y, z, 0, 0, r);
case 3: gRocketObj[playerid] = CreateObject(18650, x, y, z, 0, 0, r);
case 4: gRocketObj[playerid] = CreateObject(18651, x, y, z, 0, 0, r);
case 5: gRocketObj[playerid] = CreateObject(18652, x, y, z, 0, 0, r);
case 6: gRocketObj[playerid] = CreateObject(18647, x, y, z, 0, 0, r+90);
case 7: gRocketObj[playerid] = CreateObject(18648, x, y, z, 0, 0, r+90);
case 8: gRocketObj[playerid] = CreateObject(18649, x, y, z, 0, 0, r+90);
case 9: gRocketObj[playerid] = CreateObject(18650, x, y, z, 0, 0, r+90);
case 10: gRocketObj[playerid] = CreateObject(18651, x, y, z, 0, 0, r+90);
case 11: gRocketObj[playerid] = CreateObject(18652, x, y, z, 0, 0, r+90);
}
//Thanks to Southclaw helped me alot

for(new i;i<MAX_PLAYERS;i++)
{
if(i == playerid)continue;
if(IsPlayerInRangeOfPoint(i, 50.0, x, y, z))
{
GetPlayerPos(i, tmpx, tmpy, tmpz);

tmpang = (90-atan2(tmpy-y, tmpx-x));
if(tmpang < 0)tmpang = 360.0+tmpang;
tmpang = 360.0 – tmpang;

if( floatabs(tmpang-r) < 5.0)
{
dist = GetPlayerDistanceFromPoint(i, x, y, z);
}
}
}

MoveObject(gRocketObj[playerid],x + (dist * floatsin(-r, degrees)),y + (dist * floatcos(-r, degrees)),z,100.0);
}

Modun altina ekleyin;
Bunu eklemelisiniz cunku oyuncu bir roket attiginda tekrar roket atma hakki olsun.

Pawn:

forward ShotFire(playerid);
public ShotFire(playerid)
{
FireShot[playerid] = 0;
return 1;
}

OnObjectMoved:
Bunu eklemelisiniz cunku oyuncu roket attiginda patlamasi bu fonksiyonda oluyor, bu eklenmezse roket atilir fakat patlamaz ayni zamanda objede silinmez.

Pawn:

for(new i;i<MAX_PLAYERS;i++)
{
if(objectid == gRocketObj[i])
{
new
Float:x,
Float:y,
Float:z;

GetObjectPos(gRocketObj[i], x, y, z);
CreateExplosion(x, y, z, 11, 3.0);
DestroyObject(gRocketObj[i]);
}
}





Bunlara rağmen yapamadın mı ? modu indirmek için TIKLA

Not: Bu konu tamamı ile Emir Köseoğlu tarafından anlatılmıştır.

 

admin
admin
Bilgi sahibi olduğum ve araştırdığım tüm konular hakkında makale yazıyorum. Makalelerimi takip eden, okuyan ve yorumlarını esirgemeyen TeknoRiver takipçilerine teşekkürler.
YAZARA AİT TÜM YAZILAR
ZİYARETÇİ YORUMLARI - 1 YORUM

Henüz yorum yapılmamış.

error: Content is protected !!