Я ранее описывал эти проблемы, но так и не увидел их решения. Не поверю, что ни один продвинутый скриптер присутствующий на этом форуме не знает решения к этим проблемам. Так вот, перейдем к делу.
1-ая Проблема Когда даеться миссия "Угнать машину" есле в нее сесть, проехаться и бросить(не довезти до места продажи), а то и вовсе просто сесть и выйти(тоесть уже есть факт что ее кто-то украл, но не довез), то следующая миссия не запуститься по истечению времени jobdelay, тоесть public PrePlayerNewMission не будет запускаться, либо то, что с ним связано, ни по таймеру,ни по команде /mission!
2-ая Проблема
В PEN1/Fugitive по стандарту есть такой таймер SetTimer("InHouse", 1000, 1); Одной из задач функции InHouse являеться проверка выехал ли игрок из тюнинга после телепорта в него командами /modcar, /modst, /modlr. Так вот, при набирании одной из этих команд игрок портируеться в тюнинг и ему должно дать PlayerInfo[playerid][pLocal] = 10001(10002)(10003); Образец команды [pwn]if(strcmp(cmd, "/modcar", true) == 0 && IsPlayerConnected(playerid)) { new tmpcar = GetPlayerVehicleID(playerid); new house = PlayerInfo[playerid][pPhousekey]; GetPlayerName(playerid, playername, sizeof(playername)); if (house != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0) { if(SBizzInfo[1][sbProd] == 0) { GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 5); return 1; } if (GetPlayerState(playerid) != 2 && tmpcar != house+1) { GameTextForPlayer(playerid, "~r~ You are not in your housecar", 5000, 4); return 1; } if(PlayerToPoint(2.0, playerid, HouseCarSpawns[tmpcar-1][0], HouseCarSpawns[tmpcar-1][1], HouseCarSpawns[tmpcar-1][2])) { GiveMoney(playerid,-1000); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); SBizzInfo[1][sbTakings] = SBizzInfo[1][sbTakings]+1000;//modshop buisness SBizzInfo[1][sbProd]--; TelePos[playerid][0] = 0.0; TelePos[playerid][1] = 0.0; SetVehiclePos(tmpcar, 1040.6,-1021.0,31.7); gSpentCash[playerid] = UAS_GetValPlayerMoney(playerid); Spectate[playerid] = 500; GameTextForPlayer(playerid, "~w~To Exit type ~r~/exit~n~-$1000", 5000, 5); //PlayerInfo[playerid][pInt] = HouseInfo[i][hInt]; PlayerInfo[playerid][pLocal] = 10001; } else { GameTextForPlayer(playerid, "~w~You are not at home", 5000, 4); } } else { GameTextForPlayer(playerid, "~w~You are not a home owner", 5000, 4); } return 1; }[/pwn], потом эта функция InHouse проверяет
Code
new house = PlayerInfo[i][pLocal]; if(house > 10000) { new tmpcar = GetPlayerVehicleID(i); if (!PlayerToPoint(6, i,1040.6,-1021.0,31.7) && house == 10001 ||!PlayerToPoint(6, i,-2720.5,217.5,4.1) ||!PlayerToPoint(6, i,2644.6,-2044.9,13.3) && house == 10003) { if (GetPlayerState(i) == 2) { SetVehiclePos(tmpcar, HouseCarSpawns[tmpcar-1][0], HouseCarSpawns[tmpcar-1][1], HouseCarSpawns[tmpcar-1][2]); SetVehicleZAngle(tmpcar, HouseCarSpawns[tmpcar-1][3]); } else { SetPlayerPos(i, HouseCarSpawns[tmpcar-1][0], HouseCarSpawns[tmpcar-1][1], HouseCarSpawns[tmpcar-1][2]); }
и при исполнении этого условия игрока с машиной портит обратно к дому.НО! когда прописую одну из этих команд, в тюнинг портит, а вот PlayerInfo[playerid][pLocal] = 10001(10002)(10003); не дает.... и соответственно условие функции InHouse не выполняеться! Проверил, чемуже равно PlayerInfo[playerid][pLocal] после ввода одной из этих команд, выяснил что PlayerInfo[playerid][pLocal] = 255, пробовал даже админской командой дать игроку pLocal 10001(10002)(10003) после телепорта в тюнинг одной из команд. Бесполезно... Перед тюнингом давал pLocal 10001(10002)(10003), всё нормально, как только игрок портиться командой сразу же PlayerInfo[playerid][pLocal] = 255 и изменить некак. Потом пошарился в этих командах, попробывал удалить строку Spectate[playerid] = 500; и заметил что после этого стало даваться PlayerInfo[playerid][pLocal] = 10001(10002)(10003);, но стало портить в тюнинг не корректно. Подскажите кто разбираеться, как эта самая строчка Spectate[playerid] = 500; может влиять на PlayerInfo[playerid][pLocal] и как это можно решить??!!
Пользуюсь ЭТИМ Модом, проверял и другие связаные с PEN1, таже песня. Уверен что есле кто-то знающий уделит хотя бы минут 5, то найдет решение к обоим проблемам. Думаю будет полезно не только мне.
Сообщение отредактировал Rabbit - Среда, 26.08.2009, 16:40
кстати насчет насчет 1-ой проблемы...лично я бы не стал бы его убирать полностью, а просто прописать чтобы при смене миссии убирался сам маркер указывающий на машину чтобы не мешался....но по мне лично норм все про фигутив не знаю я с ним не работал и не играл особо..
Rabbit, по первой прабле я те уже описывал как я вышел из этой ситуации - создал таймер, если по истечении его миссия не запустилась, то он рестартить все миссии.
по второй прабле: проверил у себя /modcar - сел в домашнюю тачку, набрал /модкар, меня портануло туда, сделал абгрейд, нажал ентер, открылись ворота из гаража я выехал и меня портануло к дому. вот моя команда /модкар: [pwn] if(strcmp(cmd, "/modcar", true) == 0) { new tmpcar = GetPlayerVehicleID(playerid); new house = PlayerInfo[playerid][pPhousekey]; GetPlayerName(playerid, playername, sizeof(playername)); if (house != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0) { if(SBizzInfo[1][sbProd] == 0) { GameTextForPlayer(playerid, "~r~мEЏ KO–Њ‡EKЏY”Љ…X", 5000, 1); return 1; } if (GetPlayerState(playerid) != 2 && tmpcar != house+1) { GameTextForPlayer(playerid, "~r~B‘ ѓO‡„м‘ Ђ‘Џ’ B ЊP…ѓO–OBO† –AЋ…мE", 5000, 1);//Not in your housecar вы должны быть в придомовой машине return 1; } if(PlayerToPoint(2.0, playerid, HouseCarSpawns[tmpcar-1][0], HouseCarSpawns[tmpcar-1][1], HouseCarSpawns[tmpcar-1][2])) { // LACY_GiveMoney(playerid,-1000); oSetPlayerMoney(playerid,PlayerInfo[playerid][pCash]-1000); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); SBizzInfo[1][sbTakings] = SBizzInfo[1][sbTakings]+1000;//modshop buisness SBizzInfo[1][sbProd]--; TelePos[playerid][0] = 0.0; TelePos[playerid][1] = 0.0; SetVehiclePos(tmpcar, 1040.6,-1021.0,31.7); gSpentCash[playerid] = GetPlayerMoney(playerid); Spectate[playerid] = 500; GameTextForPlayer(playerid, "~w~To Exit type ~r~/exit~n~-$1000", 5000, 1); //PlayerInfo[playerid][pInt] = HouseInfo[i][hInt]; PlayerInfo[playerid][pLocal] = 10001; } else { GameTextForPlayer(playerid, "~w~B‘ ѓA‡EKO OЏ ѓO–A", 5000, 1);//You are not at your home вы далеко от дома return 1; } } else { GameTextForPlayer(playerid, "~w~Y BAC мEЏ CBOE‚O ѓO–A", 5000, 1); //You are not a home owner У вас нет своего дома return 1; } return 1; }
по первой прабле я те уже описывал как я вышел из этой ситуации - создал таймер, если по истечении его миссия не запустилась, то он рестартить все миссии.
Хорошо, только как создать условие о не запущеной миссии и потом рестарт всех миссий? Там при запуске мода стартует таймер newmistimer = SetTimer("PrePlayerNewMission", jobdelay, 1); отвечающий за миссии.
Quote (SanSay)
по второй прабле: проверил у себя /modcar - сел в домашнюю тачку, набрал /модкар, меня портануло туда, сделал абгрейд, нажал ентер, открылись ворота из гаража я выехал и меня портануло к дому. вот моя команда /модкар:
Я в первом посте выложил эту команду из своего мода, она анолагична твоей за исключением не влияющих на телепорт функций(с деньгами например). Там чтото с самим PlayerInfo[playerid][pLocal]
Rabbit, хз мог ченить и пропустить... но думаю суть уловил[pwn] forward TimerReloadMis (); new OffTimerReloadMis; public TimerReloadMis() { MissionActive = 0; for(new i = 0; i <= MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { SetVehicleParamsForPlayer(stealcar,i,0,0); } } CheckpointReset(); SetVehicleToRespawn(stealcar); stealcar = -1; PrePlayerNewMission(); SendClientMessageToAll(COLOR_YELLOW, " Автовосстановление миссий"); } public SetPlayerNewMission() case 0: { KillTimer(OffTimerReloadMis); OffTimerReloadMis = SetTimer("TimerReloadMis",jobdelay+20000,0); ... case 4: { KillTimer(OffTimerReloadMis); OffTimerReloadMis = SetTimer("TimerReloadMis",jobdelay+20000,0); ... case 8: { KillTimer(OffTimerReloadMis); OffTimerReloadMis = SetTimer("TimerReloadMis",jobdelay+20000,0); ... case 12: { KillTimer(OffTimerReloadMis); OffTimerReloadMis = SetTimer("TimerReloadMis",jobdelay+20000,0); ... } public OnGameModeInit() OffTimerReloadMis = SetTimer("TimerReloadMis",jobdelay+20000,0);// авто ресст миссий
Добавлено (04.09.2009, 01:10) --------------------------------------------- Rabbit, хз, че может быть с самим PlayerInfo[playerid][pLocal]... это же всего лишь переменная?
SanSay, огромное спасибо! с миссиями разобрался! Только вот с погаными командами /modcar/modst/modlr, все так же. Я в первом посте максимально расписал проблему, это самое PlayerInfo[playerid][pLocal] не меняет свое значение после порта!
SanSay, нет, это значение может меняться, а как только я портуюсь в тюнинг с помощью /modcar оно сразу же становиться = 255 и изменить нельзя. И еще сложно ли разширить действия в игре по нескольким городам? Я имею виду миссии раскидать к примеру по LS+SF!?