Ерундит игровой мод
#1

Привет всем. Сегодня решил протестить свое творение и обнаружил очень большую неприятность.

Вообщем при компилировании у меня выдавало

PHP Code:
Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase
Header size
:           4024 bytes
Code size
:           147604 bytes
Data size
:           871920 bytes
Stack
/heap size:      16384 bytesestimated maxusageunknowndue to recursion
Total requirements
1039932 bytes 
но вылечил эту проблему так:
PHP Code:
#pragma dynamic 145000 
После как все скомпилировалось, я зашел на сервер ввел свой пароль и т.п. но у меня игрок падает на центр карты ни одна команда не работает, и вообще ничего из того что я написал в моде не функционирует. Скриптов никаких не подключено, Плагинов никаких не подключено, обьектов не используется. Загрузка машин из файла взял из Grand Larency.

Трабла началась после как я дописал еще парочку диалоговых окон, все тысячу раз перепроверил, написаны они как положено. Есть одна мысль на которую я грешу дк это массив и strins, которые использую в длинных диалоговых окон, таких окон у у меня порядка десяти. Как быть?
Reply
#2

попробуй заккомментировать свою писанину и посмотри как будет себя вести мод.
Reply
#3

когда закоментил все стало нормально, но мне необходимы эти окна, вот как они построены:

вызов окна:
PHP Code:
    /*if (strcmp("/инфо", cmdtext, true, 10) == 0)
    {
        ShowPlayerDialog(playerid, INFODIALOG, DIALOG_STYLE_LIST, "Информация",
        "[1] Правила сервера\n\
        [2] Раработчики мода\n\
        [3] Информация о V.I.P.\n\
        [3] Администрация\n\
        [4] Команды сервера","Выбор","Отмена");
        return true;
    }*/ 
обработка окна:

PHP Code:
    /*new rulesstring[1024];
       strins(rulesstring,"\n",strlen(rulesstring));
    strins(rulesstring,"{CCFFFF}=========================================================================================================\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}1. {CCFFFF}Запрещаются любые скрипты/читы/моды/программы которые имеют приемущества над игроками.\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}2. {99FFFF}Запрещается мат в общий чат в адрес игроков или администрации, а так же флуд.\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}3. {66FFFF}Запрещается реклама посторонних ресурсов/порталов/групп/IP адресов и т.п.\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}4. {33FFFF}Не приветствуется Spawn-Kill (убийство игрока на месте его появления)\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}5. {00FFFF}На сервере разрешено DB (убийство игроков с помощью автомобилей/транспорта)\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}6. {00CCCC}Все вопросы касающиеся работы сервера необходимо задавать в группу или на форум.\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}7. {009999}Если Вы увидели читера, писать нужно в /жб [ID] [причина], а не в общий чат или ЛС!\n",strlen(rulesstring));
    strins(rulesstring,"{009999}=========================================================================================================\n",strlen(rulesstring));
    strins(rulesstring,"{FF0000}* {009999}За любое нарушение из вышеперечисленных правил аккаунт может быть заблокирован на время или забанен!",strlen(rulesstring));
    new aboutstring[1024];
    strins(aboutstring,"\n",strlen(aboutstring));
    strins(aboutstring,"{CCFFFF}========================================================\n",strlen(aboutstring));
    strins(aboutstring,"{99FFFF}Игровой мод {FF0000}SF-DM V1.0 By BURN, {99FFFF}обновление от {FF0000}16.06.2011\n",strlen(aboutstring));
    strins(aboutstring,"{99FFFF}Rainbow Tab By OKStyle и REALman, Русские ники By Roman1us\n",strlen(aboutstring));
    strins(aboutstring,"{66FFFF}Обо всех замеченных багах просьба сообщить разработчику\n",strlen(aboutstring));
    strins(aboutstring,"{33FFFF}или в группу ВКонтакте или же офф. форум.\n",strlen(aboutstring));
    strins(aboutstring,"\n",strlen(aboutstring));
    strins(aboutstring,"{00FFFF}Группа ВКонтакте: {FF0000}http://vkontakte.ru/******\n",strlen(aboutstring));
    strins(aboutstring,"{00CCCC}Адрес Офф. Форума: {FF0000}http://*****.listbb.ru/\n",strlen(aboutstring));
    strins(aboutstring,"{009999}========================================================",strlen(aboutstring));
    
    new helpvip[1024];
    strins(helpvip,"\n",strlen(helpvip));
    strins(helpvip,"{FFFFFF}====================={FF0000}Справка по V.I.P. Аккаунтам{FFFFFF}=========================\n",strlen(helpvip));
    strins(helpvip,"{FF0000}V.I.P. {FFFFFF}- это не просто игроки, а игроки которые могут:\n",strlen(helpvip));
    strins(helpvip,"1. Изменить себе скин с любого на любой\n",strlen(helpvip));
    strins(helpvip,"2. Получить себе любой автомобиль\n",strlen(helpvip));
    strins(helpvip,"3. Прикрепить себе 3D Текст, и изменять его, по умолчанию {FF0000}[V.I.P.] {FFFFFF}над ником игрока\n",strlen(helpvip));
    strins(helpvip,"4. Наблюдать за любым игроком на сервере\n",strlen(helpvip));
    strins(helpvip,"5. Починить себе машину, в любом месте и в любое время\n",strlen(helpvip));
    strins(helpvip,"6. Затюнить машину, в любом месте одним нажатием кнопки\n",strlen(helpvip));
    strins(helpvip,"7. Восстановить себе здоровье в любом месте\n",strlen(helpvip));
    strins(helpvip,"8. Восстанавливать себе броню в любом месте\n",strlen(helpvip));
    strins(helpvip,"9. Получить практически любое оружие из меню в любом месте\n",strlen(helpvip));
    strins(helpvip,"10. В чате появляется тег {FF0000}[V.I.P.] {FFFFFF}а после текст сообщения\n",strlen(helpvip));
    strins(helpvip,"11. {FF0000}V.I.P. {FFFFFF}Аккаунтам разрешено Ламо оружие т.е. в двух руках\n",strlen(helpvip));
     strins(helpvip,"\n",strlen(helpvip));
    strins(helpvip,"Для того чтобы получить {FF0000}V.I.P. {FFFFFF}Аккаунт, поговорите с Гл. Администратором сервера",strlen(helpvip));
    
    
    if(dialogid == INFODIALOG)
    {
        if(response)
        {
            if(listitem == 0)
            {
                ShowPlayerDialog(playerid, PRAVILADIALOG, DIALOG_STYLE_MSGBOX, "Правила сервера",rulesstring,"Nice","");
                return true;
            }
              if(listitem == 1)
            {
                   ShowPlayerDialog(playerid, ABOUTDIALOG, DIALOG_STYLE_MSGBOX, "Разработчики",aboutstring,"Nice","");
                   return true;
            }
            if(listitem == 2)
            {
                ShowPlayerDialog(playerid,HELPVIPDIALOG, DIALOG_STYLE_MSGBOX, "Справка по V.I.P.",helpvip,"Ок","Отмена");
                return true;
            }
            if(listitem == 3){}
              if(listitem == 4)
            {
                ShowPlayerDialog(playerid, HELPDIALOG, DIALOG_STYLE_MSGBOX, "Основные команды сервера",
                "{FF0000}/тп                {FFFFFF}- посмотреть списки телепортов\n\
                {FF0000}/анимы            {FFFFFF}- посмотреть список анимаций\n\
                {FF0000}/стиль                {FFFFFF}- посмотреть список стилей боя\n\
                {FF0000}/умереть            {FFFFFF}- совершить самоубийство\n\
                {FF0000}/лс [id] [текст]            {FFFFFF}- написать в личку игроку\n\
                {FF0000}/дать [id] [сумма]        {FFFFFF}- передать денег игроку\n\
                {FF0000}/правила            {FFFFFF}- посмотреть правила сервера\n\
                {FF0000}/дополнительно        {FFFFFF}- посмотреть дополнительные команды", "Ок", "");
                return true;
            }
        }
    }*/ 
тут все верно...имхо
Reply
#4

А разве strlen места назначения надо брать? Разве не текста, вводимого в переменную?
Reply
#5

OKStyle дело в том что и вот так вот работало...да и работает...)

Quote:

места назначения надо брать

эт как?
Reply
#6

А, я не увидел, что 4го параметра нет, да, в этом случае верно написно.
Reply
#7

  1. избався от 3 огромных массивов, сделай 1, а их заполнение перенеси внутрь If'ов, прямо перед выводом каждого диалога.
  2. if(listitem == 0) замени на switch(listitem){case 0:{}...}
ты уверен что твои тексты не превышают 1024 символа?
Reply
#8

Stepashka уверен, есть и подлиннее диалог) работает нормально, как у меня будет работать 1 массив, раздельно для каждого диалога? я хотел все "по полочкам"
Reply
#9

У тебя маленький размер переменных строковых... Сейчас в фс накидал твой код, при выборе пункта диалога не выводилось окно с информацией... Сделай > 2000, а не 1024... Я поставил 3072 вообще.. И #pragma dynamic 14000
Reply
#10

OKStyle именно, диалоглист вылазит. а вот информационные диалоги не хотят...после чего диалоглист вызываемый командой не появляется вообще, а лишь сообщение: SERVER: unknown command

щас буду шарудить

и все же я не понимаю, у меня есть диалог с кучей команд на весь экран, и массив 1024 символа, все работает прекрасно, а тут вот...

кстати, пробелы за символы считаются?
Reply
#11

Quote:
Originally Posted by temka1993
Посмотреть сообщение
кстати, пробелы за символы считаются?
конечно
Reply
#12

CrunkBankS 1 tab = 4 пробела = 4 символа?

увеличил массивы, все зашевелилось.

хм, а как избавиться от переполнения памяти?

PHP код:
Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase 
Header size
:           4024 bytes 
Code size
:           147604 bytes 
Data size
:           871920 bytes 
Stack
/heap size:      16384 bytesestimated maxusageunknowndue to recursion 
Total requirements
1039932 bytes 
кроме #pragma dynamic....
у меня есть еще один мой игровой мод, и содержит побольше информации, такой ерунды не вылазит, от чего это зависит?
Reply
#13

Я так думаю, что нужно вычесть из Total requirements размер Data size, получив таким образом число для dynamic... Поправьте, если я не прав.
Reply
#14

Quote:
Originally Posted by temka1993
Посмотреть сообщение
CrunkBankS 1 tab = 4 пробела = 4 символа?
Используй лучше \t вместо своих 4 пробелов
Reply
#15

Я на 4096 создавал, посмотри в ФС погоды)))
А при испытаниях и на 1000000
Reply
#16

1024 - это для 1й строки данных, формат в формате может и больше выдержать.
Reply
#17

хм, все равно какие то глюки происходят непонятные. но на этот раз уже с командами. например дать машину игроку:

PHP код:
    if(strcmp(cmd"/датьмашину"true) == 0)
    {
        if(
GetPVarInt(playerid,"AdminStatus") < 3)return SendClientMessage(playerid,COLOR_WHITE,"[R.S.]: Ограничены права доступа");
        
tmp strtok(cmdtextidx);
        if(!
strlen(tmp)) return SendClientMessage(playerid,COLOR_WHITE,"[R.S.]: Использование: {FF0000}/датьмашину [id] [400-611]");
        new 
numeric strval(tmp);
        if(!
isNumeric(tmp)) return SendClientMessage(playerid,COLOR_WHITE,"[R.S.]: Использование: {FF0000}/датьмашину [id] [400-611]");
        
tmp strtok(cmdtextidx);
        if(!
strlen(tmp)) return SendClientMessage(playerid,0xFFFFFFAA,"[R.S.]: Использование: {FF0000}/датьмашину [id] [400-611]");
         new 
car strval(tmp);
         if(
IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,0xFFFFFFAA,"[R.S.]:У игрока уже есть автомобиль");
         if(
numeric == playerid) return SendClientMessage(playerid,0xFFFFFFAA,"[R.S.]:Самому себе нельзя давать автомобили");
        if(
IsPlayerConnected(numeric))
        {
            if(
car 400 || car 611) return SendClientMessage(playerid,COLOR_WHITE,"[R.S.]: {FF0000}ID автомобиля должен быть от 400 до 611");
            new 
Float:pos[4];
            
GetPlayerPos(numeric,pos[0],pos[1],pos[2]);
            
GetPlayerFacingAngle(numeric,pos[3]);
            
pos[0] = pos[0] + (floatsin(-pos[3],degrees));
            
pos[1] = pos[1] + (floatcos(-pos[3],degrees));
            new 
vehicle CreateVehicle(car,pos[0],pos[1],pos[2],0.0,6,1,0);
            
PutPlayerInVehicle(numeric,vehicle,0);
            new 
an[MAX_PLAYER_NAME],stringtext[256];
              
GetPlayerName(playeridan,MAX_PLAYER_NAME);
            
format(stringtextsizeof(stringtext),"Админ %s дал Вам машину ID %d"ancar);
            
SendClientMessage(numeric,COLOR_WHITEstringtext);
        }
        else 
SendClientMessage(playerid,COLOR_WHITE,"[R.S.]: Игрока с таким ID нет на сервере");
        return 
1;
    } 
хм, раньше работала...что могло произойти. черт знает...
а команда работает вот таким образом:

вводим команду. ид игрока, ид машины
затем выходит сообщение в чат игроку что админ такой то дал машину такую то, но машина не создается и не дается вообще...
Reply
#18

хм...неужели никто не знает в чем дело?

после добавления больших массивов < 2048, и добавления прагмы #pragma dynamic, некоторые команды отказываются работать
Reply
#19

Quote:
Originally Posted by temka1993
Посмотреть сообщение
CrunkBankS 1 tab = 4 пробела = 4 символа?

хм, а как избавиться от переполнения памяти?

PHP код:
Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase 
Header size
:           4024 bytes 
Code size
:           147604 bytes 
Data size
:           871920 bytes 
Stack
/heap size:      16384 bytesestimated maxusageunknowndue to recursion 
Total requirements
1039932 bytes 
кроме #pragma dynamic....
у меня есть еще один мой игровой мод, и содержит побольше информации, такой ерунды не вылазит, от чего это зависит?
Сорри, если не по теме, тоже интересует данный вопрос, а еще от чего подобный информатор образуется? В последней модификации, практически идеально рассчитываю память, и все равно подобный информатор выскакивает постоянно...
Reply
#20

Quote:
Originally Posted by Baks
Посмотреть сообщение
В последней модификации, практически идеально рассчитываю память
рассчеты в студию, даже интересно стало как вы это делаете

Мне вот всегда ыло параллельно и ерпендикулярно на это предупреждение.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)