Ü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.


Témák - DamieN007

Oldalak: [1]
1
Segítségkérés / DateDiff hiba (Két nap közti különbség)
« Dátum: 2014. január 01. - 22:58:17 »
Sziasztok!
Problémám támadt a DateDiff-el ami a két nap között eltelt napokat számolja meg.
Eddig minden hibátlanul mûködött (amíg minden dátum 2013 volt), de most hogy 2014 lett nem hajlandó kiszámolni az eltelt napokat.
A kód:
 
#define swap(%1,%2); { %1 = %1 + %2; %2 = %1 - %2; %1 = %1 - %2; }
stock IsLeapYear(year) if((year % 400) == 0 || (((year % 100) != 0) && ((year % 4) == 0))) return 1; else return 0;
stock DateDiff(year1,year2,month1,month2,day1,day2)
{
new days;
new days_of_months[12] =
{
31,
28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
};
if(year1 > year2)
{
swap(year1,year2);
swap(month1,month2);
swap(day1,day2);
}
else if(year1 == year2)
{
if(month1 > month2)
{
swap(month1,month2);
swap(day1,day2);
}
else if(month1 == month2)
{
if(day1 == day2) return 0;
else return day1>day2?day1-day2:day2-day1;
}
}
for(new i = year1; i != year2; i++)
{
if(IsLeapYear(i)) days += 366;
else days += 365;
}
for(; month1 != month2; month1++)
{
if(month1 == 2 && IsLeapYear(year2)) days += 29;
else days += (days_of_months[month1-1]);
}
return (days+day2-day1);
}

 
Csináltam az ellenõrzéshez egy teszt scriptet is:
 
#include <a_samp>
public OnFilterScriptInit()
{
new RegiEv, RegiHonap, RegiNap;
RegiEv = 2013;
RegiHonap = 12;
RegiNap = 31;
new MostaniEv, MostaniHonap, MaiNap;
MostaniEv = 2014;
MostaniHonap = 1;
MaiNap = 1;
new ElteltNapok;
ElteltNapok = DateDiff(MostaniEv,RegiEv,MostaniHonap,RegiHonap,MaiNap,RegiNap);
printf(\"%d %d %d - %d %d %d = %d nap a különbség\",RegiEv, RegiHonap, RegiNap, MostaniEv, MostaniHonap, MaiNap, ElteltNapok);
return 1;
}
 
#define swap(%1,%2); { %1 = %1 + %2; %2 = %1 - %2; %1 = %1 - %2; }
stock IsLeapYear(year) if((year % 400) == 0 || (((year % 100) != 0) && ((year % 4) == 0))) return 1; else return 0;
stock DateDiff(year1,year2,month1,month2,day1,day2)
{
new days;
new days_of_months[12] =
{
31,
28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
};
if(year1 > year2)
{
swap(year1,year2);
swap(month1,month2);
swap(day1,day2);
}
else if(year1 == year2)
{
if(month1 > month2)
{
swap(month1,month2);
swap(day1,day2);
}
else if(month1 == month2)
{
if(day1 == day2) return 0;
else return day1>day2?day1-day2:day2-day1;
}
}
for(new i = year1; i != year2; i++)
{
if(IsLeapYear(i)) days += 366;
else days += 365;
}
for(; month1 != month2; month1++)
{
if(month1 == 2 && IsLeapYear(year2)) days += 29;
else days += (days_of_months[month1-1]);
}
return (days+day2-day1);
}

 
A tesztelés alatt 2013.12.31 és 2014.1.1 dátummal próbáltam meg kiszámoltatni az eltelt napok számát, de nem futott le, hibát írt ki a crashdetect plugin.
A hiba:
 
Run time error 4: \"Array index out of bounds\"
Accessing element at index 12 past array upper bound 11
AMX backtrace:
#0 000008ec in DateDiff (year1=2013, year2=2014, month1=13, month2=1, day1=31, day2=1) at C:\\tesztszerver\\filterscripts\\DATE.pwn:75
#1 0000017c in public OnFilterScriptInit () at C:\\tesztszerver\\filterscripts\\DATE.pwn:16
[/quote]
Valamiért a 12. hónap helyett 13. hónappal számol, és ezért nem fut le. :S (Pedig 12. hónap van beírva.)
A válaszokat, és a segítséget elõre is köszönöm!

2
Segítségkérés / Fake kill ellen megoldás
« Dátum: 2013. október 02. - 20:29:34 »
Sziasztok!
Valaki nem tud kill hack ellen valami megoldást?
A szerver ilyen üzeneteket adott ki:
 
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[19:26:35] [kill] Trolol killed Trolol
[/quote]
Nagyon idegesítõ mert crasheltetik a szervert.
Ebbõl az üzenetbõl több százat ír ki a szerver.
Meg néha olyannal is támadnak, hogy nem a hacker öli meg magát, hanem random embereket ír.

3
Segítségkérés / Windows & Linux elérési utak?
« Dátum: 2013. szeptember 21. - 15:28:30 »
Sziasztok!
Korábban nyitottam egy témát ezzel kapcsolatban: http://sampforum.hu/index.php?topic=47348.0
Itt a kódban lévõ problémát sikerült megoldani, megy is windows-on minden rendesen, viszont ha feltöltöm linux-os szerverre, semmit sem csinál.
Szerintem az elérési útvonallal lehet a hiba.
A windows megtalálta a \"./scriptfiles/ladmin/users/\" helyen a fájlokat, viszont a linux nem hajlandó rá. :/
A plugin betöltõdik rendesen!
A végleges kód a következõ:
 
#include <a_samp>
#include <filemanager>
#include <Dini>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[255], type;
while(dir_list(dHandle, item, type))
{
    if(type == FM_FILE)
    {
    new file[255]; format(file, sizeof(file), \"ladmin/users/%s\",item);
    if(dini_Exists(file))
    {
    printf(\"%s\", file);
    dini_IntSet(file,\"money\",0);
    }
         }
}
dir_close(dHandle);
return 1;
}

 
Szerintetek mi lehet a hiba? linux hogy kezeli az elérési utakat?

4
Segítségkérés / FileManager hiba :(
« Dátum: 2013. szeptember 16. - 21:26:46 »
Sziasztok!
Szeretném meghatározni, hogy egy mappában milyen fájlok vannak. (Felhasználók)
Ehhez a FileManager nevû plugint használnám. (http://forum.sa-mp.com/showthread.php?t=92246)
A példa kód a listázásra így néz ki:
 
new dir:dHandle = dir_open(\"./\");
new item[40], type;
   
while(dir_list(dHandle, item, type))
{
    if(type == FM_FILE) printf(\"%s is a file\", item);
    else if(type == FM_DIR) printf(\"%s is a directory\", item);
}
       
dir_close(dHandle);

 
Ezt kicsit átalakítottam, és most így néz ki a kód:
 
#include <a_samp>
#include <filemanager>
#include <Dini>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[255], type;
while(dir_list(dHandle, item, type))
{
    if(type == FM_FILE)
    {
    if(dini_Exists(item))
    {
    printf(\"%s\", item);
    dini_IntSet(item,\"money\",0);
    }
         }
}
dir_close(dHandle);
return 1;
}

 
Azt szeretném megcsinálni, hogy minden játékos pénzét átírni 0-ra. Viszont az a problémám, hogy nem írja át. printf-el kiírná azoknak a nevét, akiket lenullázott, viszont a módosításom után semmit sem ír ki, és nem is nyúl a fájlokhoz. :S
Valaki tudna segíteni, mi lehet a probléma?

Dupla hozzászólás automatikusan összefûzve. ( 2013. szeptember 17. - 14:03:55 )

Ezzel a kóddal kilistáz minden fájlt a mappában, csak nem tudom hogy tudnék rá hivatkozni a késõbbiekben. (például fájlból olvasáskor.)
 
#include <a_samp>
#include <filemanager>
public OnFilterScriptInit()
{
new dir:dHandle = dir_open(\"./scriptfiles/ladmin/users/\");
new item[40], type;
while(dir_list(dHandle, item, type))
{
    if(type == FM_FILE)
{
printf(\"%s\", item); // Az \"item\" a fájl neve, XYZ.sav formátumban.
}
}
dir_close(dHandle);
return 1;
}

 
Próbáltam fájlkezelõben az \"item\"-re hivatkozva megnyitni minden fájlt, és átírni a \"money\" értéket 0-ra, viszont valamiért nem listázza ki, ha elé teszem a \"if(dini_Exists(item))\"-t.

Oldalak: [1]
SimplePortal 2.3.7 © 2008-2024, SimplePortal