GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: immortal1876 - 2016. Május 12. - 16:57:09

Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 16:57:09
Szóval elkezdtem egy Fun/Dm/Stunt szerót írni csak így gyakorlásból. Nah de nem is ez a lényeg hanem arról lenne szó, ha valaki vett egy fegyvert pl: egy dialogból  és ha azután belép egy dm zónába ugye reseteli a fegyvereket és oda adja a \"dm zónához illő\" fegyvereket és azután amikor pedig kilép és hogy amiket megvett azokat visszakapja nem tudom, hogy ez lehetséges de ha igen, valaki leírja??   :D A másik meg, hogy ez alapján: https://sampforum.hu/index.php?topic=23934.0 (amit Gábor hsz.-ben írt oda)  megcsináltam a dm zónát és ha nincs DM zónában akkor is betudja írni, hogy /exitdm és elrakja a random spawnra ezt valahogy meglehet oldani, hogy ne lehessen akkor beírni? Előre is köszi a segítségeket.
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 17:13:02
1. elmented a fegyvereit egy változóba amit nem nullázol, majd ha kilép akkor visszadod és nullázod a változót!
2. Ha bemegy a DMZónara akkor egy változó true értéket kap ha kijön false, és a parancsnál ha false nem történik semmi
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 17:37:03
A dm zóna kilépés így, hogy leírtad mit kell csinálni az most sikerült, azt is köszönöm szépen.
De mivel nem rég kezdtem scriptelni ezért ezt a fegyver vissza adós cuccost nem értem  :\'( Ha esetleg bövebben tudnál/valaki tudna segíteni azt nagyon szépen megköszönném.
Cím: Fegyver visszaadás
Írta: ᗩωєѕσмє - 2016. Május 12. - 18:21:34

#define FILTERSCRIPT
#define function%0(%1) forward%0(%1);public%0(%1)
#include a_samp
new weapo[MAX_PLAYERS][12], ammo[MAX_PLAYERS][12];
function SaveWeapons(playerid) {
for(new i = 0; i < 12; i++) {
GetPlayerWeaponData(playerid, i+1, weapo[playerid], ammo[playerid]);
}
}
function LoadWeapons(playerid) {
    for(new i = 0; i < 12; i++) {
GivePlayerWeapon(playerid, weapo[playerid], ammo[playerid]);
}
}
//LoadWeapons(playerid);
//SaveWeapons(playerid);
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 18:25:05
function SaveWeapons(playerid) {
        for(new i = 0; i < 12; i++) {
                GetPlayerWeaponData(playerid, i+1, weapo[playerid], ammo[playerid]);
        }
}

 
Nem kötekedés képpen de:
i+1 miért nem 1ről indítod?:D (Így is jó csak csúsztatni kell)
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 18:29:46

warning 219: local variable \"ammo\" shadows a variable at a preceding level

 
Ez a warning fogadott, mi lehet a gond?
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 18:32:31
Az \"ammo\" nevű változó többször van létrehozva! Írd át \"FegyverAmmo\"-ra vagy valami másra, de ne felejtsd átírni a scriptben amit  zιтяσиє írt.
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 18:37:21
Öhh köszi, mostmár tudni fogom, hogy ha ezt a warningot írja mi a hiba mert már találkoztam ilyennel. Szóval beraktam a módba a \"scriptjét\". Mit kell még csinálni, hogy vissza adja? Tényleg elnézést kérek, hogy ennyire nem értem ezt a részét. Elfogadom azt is, hogy akkor minek kezdtem bele a PAWN nyelvbe. De senkise szopta ki egyből a kisujjából.
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 18:42:21
Megkeresed azt a részt, ahol belépsz a DM-be és előtte beírod a SaveWeapons(playerid), majd mikor kilép a dmből reseteled a dm-es fegyvereit és a LoadWeapons(playerid), visszaadod;
(A script csak a 11-es fegyverig megy el, szóval ilyen m4 és hasonlókat nem fog vissza tölteni. [átkell írni a 47-ig]
Cím: Fegyver visszaadás
Írta: ᗩωєѕσмє - 2016. Május 12. - 18:52:07
Nem. Egy játékosnál (maximum) 13 darab fegyver lehet. A 12-es szám az a fegyverek (darabjának) száma. Nem kell átírnod semmit, az összes nálad lévő fegyvert elmenti a szkript. A használatát pedig már leírta Brian Harris. http://i.imgur.com/u4S6avk.png
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 18:57:30
Hát megvan minden én szerintem. Belépek dm zónába ki is lépek de aztán mikor görgetném hogy elővegyem az fogad, hogy ott fent a hudban odarakja egy mili secre a deaglet de el is tünik a kezébe is oda rakja de ott is eltünik. Szóval magyarul elpörög.
 
CMD:mgm(playerid, params[])
{
new rand = random(sizeof(RandomMiniSpawn));
SetPlayerPos(playerid, RandomMiniSpawn[rand][0], RandomMiniSpawn[rand][1],RandomMiniSpawn[rand][2]);
SaveWeapons(playerid);
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid,38,1000000);
SetPlayerVirtualWorld(playerid,2);
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,100);
SendClientMessage(playerid,0xbc0000,\"Minigun Dm zónába léptél!\");
dmzone[playerid] = true;
return 1;
}
CMD:exitdm(playerid, params[])
{
    if(dmzone[playerid] == true)
    {
   dmzone[playerid] = false;
SetPlayerVirtualWorld(playerid, 0);
new rand = random(sizeof(RandomSpawn));
SetPlayerPos(playerid, RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2]);
SendClientMessage(playerid,0xbc0000,\"Kiléptél a DM zónából!\");
ResetPlayerWeapons(playerid);
LoadWeapons(playerid);
}
else
{
SendClientMessage(playerid,COL_PIROS,\"ERROR: Nem vagy zónában\");
}
return 1;
}

 
Lehet, hogy én rontottam el?
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 19:05:33
akkor a módba van valami, lehet van egy változója, hozzá kell rendelni a LoadWeapons()-hoz a változót technikai okosság:
Így is jó:
 
CMD:exitdm(playerid, params[])
{
    if(dmzone[playerid] == true)
    {
                dmzone[playerid] = false;
                SetPlayerVirtualWorld(playerid, 0);
                new rand = random(sizeof(RandomSpawn));
                SetPlayerPos(playerid, RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2]);
                SendClientMessage(playerid,0xbc0000,\"Kiléptél a DM zónából!\");
                ResetPlayerWeapons(playerid);
                LoadWeapons(playerid);
        }
        else
        {
        SendClientMessage(playerid,COL_PIROS,\"ERROR: Nem vagy zónában\");
        }
        return 1;
}

 
De így esztétikailag szebb és nem annyira nehezen követhető:
 
CMD:exitdm(playerid, params[])
{
    if(dmzone[playerid] == false)
       return SendClientMessage(playerid,COL_PIROS,\"ERROR: Nem vagy zónában\");
       
    dmzone[playerid] = false;
    SetPlayerVirtualWorld(playerid, 0);
    new rand = random(sizeof(RandomSpawn));
    SetPlayerPos(playerid, RandomSpawn[rand][0], RandomSpawn[rand][1],RandomSpawn[rand][2]);
    SendClientMessage(playerid,0xbc0000,\"Kiléptél a DM zónából!\");
    ResetPlayerWeapons(playerid);
    LoadWeapons(playerid);
    return 1;
}
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 19:08:09
Az esetleg gondot okozhat neki, hogy mikor spawnol akkor kapja meg a weapont mivel OnPlayerRequestClassal csináltam vagy 10 skint és mindegyiknek adtam fegyvert, azzal lehet probléma?
Módósítás: Meg van a hiba. Az volt a hiba hogy több töltény volt mint amennyit kiírt a hud. Lentebb vettem annyira, hogy kiírja mennyi ammo van nála és így már egyből jó. Szerintem nem tudta lementeni mennyi ammo van nála. Köszönöm nektek, hogy segítetettek. Hálás vagyok.
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 19:10:33
Szerintem igen, mivel ha 13 fegyver lehet nálad bezavarhat.
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 19:17:41
Tényleg egy utolsó kérdés ebben a témában és bocsii, hogy zaklatlak titeket ilyen hülyeségekkel. Márcsak azt akarom, hogy dm zónában semmilyen parancsot se tudj írni, ha ezt megtudom, hogy kell akkor el is tünök. Megcsinálam az összes dm zónát meg a mappokat hozzá.
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 12. - 19:21:02
public OnPlayerCommandReceived(playerid, cmdtext[])
{
       if(dmzone[playerid] == true)
            return false;
return true;
}
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 12. - 20:13:35
Nagyon szépen köszönöm a segítségeteket. Ezer hálám.

Dupla hozzászólás automatikusan összefûzve. ( 2016. Május 12. - 20:47:59 )

Öhhh még csak most teszteltem le. De már meg az a gond, hogy /exitdm-ezni sem tudok :D
Cím: Fegyver visszaadás
Írta: Brian Harris - 2016. Május 13. - 13:09:36
public OnPlayerCommandReceived(playerid, cmdtext[])
{
       if (!strcmp(cmdtext, \"/valami\", true))
       {
              // kód
       }
       if(dmzone[playerid] == true)
          return false;
       return true;
}
Cím: Fegyver visszaadás
Írta: immortal1876 - 2016. Május 13. - 14:36:03
Azt szeretném kérdezni, hogy ha oda raktam a prancsot attól hagyjam ott ahol jelenleg van? Mert ha kiveszem akkor jól műkődik csak azt írja: Server: Unknown Command, ha ott hagyom akkor pedig 2x írja ki, hogy ERROR: nem vagy dm zónában. Minden variációt kiprobáltam de ha innen veszem ki, ott hagyom ott akkor bugos ha fordítva akkor is.