Üzenetek megjelenítése

Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.


Üzenetek - krisk

Oldalak: 1 ... 148 149 [150] 151 152 153
2236
Játékok / [segítség] Counter Strike: Source
« Dátum: 2010. május 08. - 08:59:07 »
Rowlend, nem akarok veled vitatkozni, de egy szóval sem mondtam, hogy nem vettem meg, meg ha ez nem is így lenne, akkor sem híresztelném ( a ti helyetekben sem ) mert az wareznak számít, amit itt nem lehet. Amúgy a megoldás az volt, hogy 55°-s processzorom volt, és 60°után autorestartol a gép. Szóval ez a megoldás, mostmár jó.

2237
Archívum / [BTD|HUN/ENG]Before The Dawn Zombie Server
« Dátum: 2010. május 07. - 19:04:26 »
A szervermbe én már ksézítettem egy kooperaktív modot, elég sokat kellett vele szórakozni, ez teljesen más ahogy nézem, amúgy gl.

2238
Játékok / [segítség] Counter Strike: Source
« Dátum: 2010. május 06. - 17:01:12 »
Az indításánál a gép fogja magát, és újraindul. A konfig megvan hozzá, mindennek muködnie kéne. Azt olvastam, talán leterheli a gépet, de más (COD4, SWAT 4, stb..) játékoknál ez nem fordul elo.
Valami megoldás?

2239
Szkript kérések / pályák
« Dátum: 2010. május 05. - 17:33:06 »
én hasonló scriptet írok az rp szerómhoz, megoldható, de nem úgy ahogy te gondolod...

2240
Szkript kérések / Ajtó bezérás (/lock)
« Dátum: 2010. május 05. - 17:28:10 »
Globális Változók:
 
new bool: Locked[MAX_VEHICLES];

 

if(strcmp(cmdtext, \"/lock\", true)==0)
{
     if(IsPlayerInAnyVehicle(playerid)) return Locked[GetPlayerVehicleID(playerid)] = true;
     else SendClientMessage(playerid,COLOR_RED,\"Nem vagy kocsiban!\");
     return 1;
}
if(strcmp(cmdtext, \"/lock\", true)==0)
{
    if(IsPlayerInAnyVehicle(playerid)) return Locked[GetPlayerVehicleID(playerid)] = false;
     else SendClientMessage(playerid,COLOR_RED,\"Nem vagy kocsiban!\");
     return 1;
}

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
// Elm. \"return 0;\" -val megszaktíja a beszállást, de ha nem akkor...
 if(Locked[vehicleid] = true) return 0;
// Használd ezt:
if(Locked[vehicleid] = true) return RemovePlayerFromVehicle(playerid);
 elseif return 1;
}

2241
Leírások/Útmutatók / [TUT]Object "betölto" (teleportnál)
« Dátum: 2010. május 05. - 17:21:18 »
uf.inc (Useful Functions) -ban van egy wait(); függvény, azzal sokkal egyszerubb lehet.
 

public Object(playerid)
{
TogglePlayerControllable(playerid, false); //lefagyasztás
GameTextForPlayer(playerid, \"~g~Objectek ~b~Betoltese~w~!\", 3000, 6); //megjelenítendo szöveg
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0); //hang az objectek betöltése közben
wait(5000);
TogglePlayerControllable(playerid, true);
GameTextForPlayer(playerid, \"~g~Objectek ~b~Betoltve~w~!\", 3000, 6); //megjelenítendo szöveg
}

2242
Szkript kérések / Város
« Dátum: 2010. május 02. - 17:06:08 »
Én már megtettem, nem sokárra indul egy szeró az én általam objectelt mappal :D

2243
Segítségkérés / 1 találatnál szöveg írás
« Dátum: 2010. május 02. - 13:24:24 »
OnPlayerKeyStateChange callbackbe
 
    
if(((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE)) || ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE)) ||  (newkeys & KEY_FIRE))
{
    for(new i = 0; i < GetMaxPlayers(); i++)
{
    if(IsPlayerConnected(i) && playerid != i && !IsPlayerNPC(i))
    {
      if(IsPlayerAiming(playerid, i))
      {
                                                       printf(\"A jatekost eltalaltak!\")
               return 1;
            }
         }
      }

 
Funkció amit használ
 
stock IsPlayerAiming(playerid, aimid)
{
new Float:X1, Float:Y1, Float:Z1, Float:X2, Float:Y2, Float:Z2;
GetPlayerPos(playerid, X1, Y1, Z1);
GetPlayerPos(aimid, X2, Y2, Z2);
new Float:Distance = floatsqroot(floatpower(floatabs(X1-X2), 2) + floatpower(floatabs(Y1-Y2), 2));
if(Distance < 100)
{
new Float:A;
    GetPlayerFacingAngle(playerid, A);
    X1 += (Distance * floatsin(-A, degrees));
    Y1 += (Distance * floatcos(-A, degrees));
    Distance = floatsqroot(floatpower(floatabs(X1-X2), 2) + floatpower(floatabs(Y1-Y2), 2));
if(Distance < 0.5)
{
    return true;
}
}
return false;
}

2244
Segítségkérés / Ne lehessen bannolni.
« Dátum: 2010. május 02. - 11:20:07 »
Nah szóval
 
   
if(strcmp(cmd, \"/ban\", true) == 0)
 {
   new tmp[128];
   tmp = strtok(cmdtext, idx);
   new bid = strval(tmp);
   if(!strlen(tmp)) return SendClientMessage(playerid, 0xFF0000FF, \"/ban [id]\");
   if(GetPlayerName(bid) == \"1.név\" || GetPlayerName(bid) == \"2.név\" || GetPlayerName(bid) == \"3.név\") {
     SendClientMessage(playerid, 0xFF0000FF, \"Oket Nem Banolhatod!\"); return 0; } else {
   Ban(bid);
   return 1; }
}

 
Magyarul az admin scriptedbe szúrd be ezeket a sorokat:
 

  if(GetPlayerName(bid) == \"1.név\" || GetPlayerName(bid) == \"2.név\" || GetPlayerName(bid) == \"3.név\") { SendClientMessage(playerid, 0xFF0000FF, \"Oket Nem Banolhatod!\"); return 0; }

2245
Segítségkérés / Ne lehessen bannolni.
« Dátum: 2010. május 02. - 09:28:20 »
Ooo ha RCON-os bant akarod megakadályozni akkor..
 
public OnRconCommand(cmd[])
{
    if(cmd = \"ban\") return 0;
}

 
Elméletben így muködnie kell

2246
Leírások/Útmutatók / [TuT]Boostok
« Dátum: 2010. május 02. - 09:07:03 »
Csináljunk pár globális változót
 
new Float:x, Float:y, Float:z;

 
Ezzel megkíméljük magunkat a sokszoros újrabeírkálástól, egyszerubb lesz a munka. Aztán, leegyszerusíthetjük a scriptünket
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
 if(newkeys == KEY_FIRE && IsPlayerInAnyVehicle(playerid)) return  GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z); SetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z+0.4);
 else if(newkeys == KEY_SPRINT && IsPlayerInAnyVehicle(playerid)) return  GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z); SetVehicleVelocity(GetPlayerVehicleID(playerid), x, y+0.4, z);
return 1;
}

 
Ám, ha csak a speedboostokra használjuk a gombokat, akkor használhatjuk csak egyszer, a callback elején:
 
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
GetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z);
 if(newkeys == KEY_FIRE && IsPlayerInAnyVehicle(playerid)) return SetVehicleVelocity(GetPlayerVehicleID(playerid), x, y, z+0.4);
 else if(newkeys == KEY_SPRINT && IsPlayerInAnyVehicle(playerid)) return SetVehicleVelocity(GetPlayerVehicleID(playerid), x, y+0.4, z);
return 1;
}

2247
Leírások/Útmutatók / String Takarékosság - Spóroljunk memóriát!
« Dátum: 2010. május 02. - 08:42:27 »
Köszönöm a dicséretet.
Updateltem benne pár dolgot.

2248
Leírások/Útmutatók / String Takarékosság - Spóroljunk memóriát!
« Dátum: 2010. május 01. - 22:57:18 »
Stringek
Nos, ahogy Y_Less is leírta az ő SAMPos topicjába, az embereknek elég eltérő nézetük van a stringekkel kapcsolatba. Valaki azt gondolja, nem lehet nagyobb mint 256 cella (ami hülyeség, ugyanis a string limit 1024), valaki azt gondolja, alapból 256 cellát foglal el, és a többi. Nos, megmutatjuk, hogy pazarlás, és meglátjuk, mennyi helyet takaríthatunk meg.
Alapvető tudnivalók
A STRING a pawno-ban karakterek tömbje. Viszont van egy lényeges eltérés. A stringek alapból 1 cella hosszúak. Ugyanis, ha valaki már programozott más nyelveken, tudja, hogy az ASCII minden karakterláncot a \"NULL\" vagy \"\\0\" karakterrel zár le. Lássunk egy jó példát a stringek használatára:
 
new string[3] = \"hi\"

 
Ez három cella hosszú, egy a \"h\" karakternek, egy az \"i\" karakternek, egy pedig a \"NULL\"-nak.
 
new string[3] = { \'h\', \'i\', \'\\0\' }

 
Ez tulajdonképp ugyanaz, csak itt cellánként vannak felosztva a karakterek. A Pawno a stringben minden karaktert a terminátor NULL-ra álílt be, ha meghívjuk, ezért ha ezt írjuk be:
 
new string[256]

 
Tulajdonképp ezt tesszük:
 
for(new i = 0, i < *stringhosszúság*, i++) return str = 0;

 
Rendben, de miért ne használjam?
Mert lassú. Ahogy láthattuk, minnél több stringet adunk meg, annál több lesz a stringhosszúság, így annál több ideig tart a ciklus, echte annál többször kell a karaktereket 0-znia a PAWNO-nak.
Mert nincs rá szükséged. Pl.
 
new modlevel[256]; if(PeepThatShit == 0) new string[256]; format(string,sizeof(string),\"Csak a %d szint feletti adminok tekinthetik meg ezt a valamit.\",ModLevel);

 
Ez egy abszolút rossz példa. Vegyük úgy, egy 5 szintes admin scripttel van dolgunk. Akkor az maximum 1 cellát foglal le, + a NULL. Szóval:
 
new modlevel[2];

 
A stringnek se muszály ekkora értéket adni. Nézzük meg mennyi karakterből áll ez a string:
Ez összesen 61 cellából áll, ugyanis a \"%d\" nem számít bele, szóval -2 karaktert levontunk, ám ezt rögtön a 2 cella hosszú modlevel miatt vissza is kell adni. + a NULL.
 
new modlevel[2]; if(PeepThatShit == 0) new string[61]; format(string,sizeof(string),\"Csak a %d szint feletti adminok tekinthetik meg ezt a valamit.\",ModLevel);

 
Mivel tudjuk, hogy 1 cella 4 bájtból áll, ezért kiszámolhatjuk, hogy össz. 192 cellát mentettünk meg. Ha ezt megszorozzuk néggyel, 768 byte, több mint fél megabájt memóriát vesztettünk.
Chat: Ha a chattel kapcsolatos funkciókat nézzük, akkor a chat imput 128 karakter. Tehát ennyit tudunk összesen a chatbe írni. A 256 cellának a 3/4-ét takarítottuk meg így.
A chat output 256 karakter, tehát ennyit tud maximum a chat kijelezi. Ugyanazt tudom elmondani, mint az előbb, minek 512 cella, ha a fele kárbavész?
Ezenkívül további limiteket is szem előtt tarthatunk ha takarékosságról van szó. Például ha egy adott változóba a játékos nevét tároljuk el, és ha nem vagyunk biztosak a mértékében, jobb, ha az a_samp.inc függvénykönyvtárból hívjuk be a cellahosszot.
 
new IsAnRPName[MAX_PLAYER_NAME]

 
Ugyanez vonatkozik a többi hasonló limitált mennyiségű script property-re.
Másik érdekes példa:
 
public OnPlayerCommandText(playerid, cmdtext[])
{
new
string[256],
cmd[256];
cmd = strtok(cmdtext, idx);
}

 
Ez teljesen hibás.
 

new string[256], cmd[256];
cmd = strtok(cmdtext, idx);

 
Miért kéne a cmd string ide? Mért csinálunk 2 hatalmas változót a parancsnak, és az adatnak is? Az adatot csak akkor használod, ha beírtad a parancsot. Szóval egyszerűsítsük le.
 

new string[256];
string = strtok(cmdtext, idx);

 
Miért 256 cella hosszú? Ahogy előbb már letárgyaltuk, a chatbe max 128 karaktert tudunk beírni. Ezért írjuk is át.
 

new string[128];
string = strtok(cmdtext, idx);

 
Memória (stack): Ha meghívunk egy funkciót, akkor az eltárolódik egy bizonyos stack-ban.
 

new gVar = 2;
stock StackUse()
{
new str[9];
format(str, sizeof (str), \"gVar = %d\", gVar);
SendClientMessageToAll(0xFF0000AA, str);
if (gVar)
{
gVar--;
StackUse();
}
}

 
Nézzük meg mi történik. adunk gVar-nak egy értéket, ami 2, majd csinálunk egy 9 cella értékű stringet (nem pazarlunk) ugyanis a következő érték: \"gVar = \" 7 cellából áll, + a gVar értéke, ami 2. Elküldi a változó értékét, majd lekérdezi, hogy a gVar meghívódott-e. Ha igen, akkor a gVar-t egyesével csökkentjük. Mivel 9 cellával van dolgunk, és a gVar 2, ezt csökkentjük 3 alkalommal (2 > 1 > NULL) mindegyik között a funkció meghívódik mégegyszer.
És mi történik ha 256-tal használunk?
 
new gVar = 2;
stock StackUse()
{
new str[256];
format(str, sizeof (str), \"gVar = %d\", gVar);
SendClientMessageToAll(0xFF0000AA, str);
if (gVar)
{
gVar--;
StackUse();
}
}

 
A gVar-t továbbra is ürítjük, ám a pawno-nak időbe tellik, mire a 256 stringből mindet átírja NULL-ra, ezért a memóriahasználat 2800%-a az eredtinek.
Mikor használjak 256-ot?
MySQL adatbázis lekéréseknél, mivel azoknál nem biztos az adat mennyisége, különösen nem a TEXT típusú adatmezőkben.
Fájlkiolvasás: Szintén nem tudhatjuk, mekkora lesz az output.
Írta Y_Less, kibővítette krisk.

2249
Segítségkérés / NPC: Enemy, HP
« Dátum: 2010. május 01. - 21:44:35 »
Az a fele sikerült, hogy ha eltalálják mondjuk lefreezeli, és berakja animba. Mert: Anim -> KEY_FIRE = Lövés, ez tökéletes megy a 2. kérdésnél
Na de az 1.-nél nem, ugyanis nem tudom beállítani, hogy az NPC-m lenyomjon egy gombot vagy ne.

2250
Segítségkérés / NPC: Enemy, HP
« Dátum: 2010. május 01. - 09:46:19 »
A kérdéseim:
- Lehet-e egy NPC-t ellenséggé tenni? (mint SP-be?), szóval hogy lo rád ha el mész mellette, stb...?
- Lehet-e az NPC életét átállítani? (SetPlayerHealth)?

Oldalak: 1 ... 148 149 [150] 151 152 153
SimplePortal 2.3.7 © 2008-2024, SimplePortal