18:48
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
создал вирт миры для домов-но игрок выходит в одном месте!
renaultДата: Вторник, 30.03.2010, 03:00 | Сообщение # 1
Новенький
Группа: Пользователи
Сообщений: 32
Награды: 0
Город: S
Репутация: -6
Замечания: 0%
Статус:
Одним словом проблема старая как мир-как сделать чтобы с одного интерьера игрок выходил в разных местах, то есть выходил там где и заходил, а интерьер один. Как бы вирт миры всё работае но от одна такая проблема с выходом. Пишите в лс или оставляйте аськи здесь будем договариваться.
Dima-kunДата: Вторник, 30.03.2010, 09:33 | Сообщение # 2
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
ну создать массив new pVhod[MAX_PLAYERS];

там как входы утебя /enter ?

[pwn]if(strcmp(cmdtext,"/enter",true)==0)
{
if(..)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...),pVhod[playerid]=1;
else if(..)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...),pVhod[playerid]=2;
else if(..)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...),pVhod[playerid]=3;
else if(..)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...),pVhod[playerid]=1;
return 1;
}[/pwn]
выход
[pwn]if(strcmp(cmdtext,"/exit",true)==0)
{
if(pVhod[playerid]==1)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==2)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==3SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==4)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
return 1;
}[/pwn]
но выход будет более грамотно:
public OnPlayerInteriorChange(playerid,newinteriorid,oldinteriorid)
{
if(oldinteriorid==твой там идинтерьера)
{
if(pVhod[playerid]==1)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==2)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==3SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
else if(pVhod[playerid]==4)SetPlayerPos(..),SetPlayerInterior(...),SetplayervirtualWorld(...).pVhod[playerid]=0;
}
return 1;
}


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
zTronДата: Вторник, 30.03.2010, 11:49 | Сообщение # 3
Уверенный в себе
Группа: Продвинутые
Сообщений: 186
Награды: 4
Город: Харьков
Репутация: 39
Замечания: 20%
Статус:
Садитесь дети, тема нашего урока - а как собственно сервер угадывает куда надо выйти игрока?

Берём (за гузнецо) PEN1... Сервер чиста-тупа смотрит, а стоит-ли выходящий на выходе!

Quote
if (PlayerToPoint(3, playerid,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]))

где i от 0 до 34. НО!!! Домов-то уже 68 и мы чиста-тупа растягиваем цикл до 68! И если выходящий выходит из 60-го дома то сервер не долго думая ставит игрока к 30-му дому... Потому как координаты внутренностей домов (скорее всего) у нас не менее чиста-тупа скопированы. Шош тут поделать??? Ай-ай-ай-ай-ай!!!

А всё просто как два пальца прищемить!

Делаем ДВА цикла по 34! От 0 до 34 и от 35 до 68. Проверяем в них номер домашнего ключика игрока

Quote
if (PlayerInfo[playerid][pLocal] < 35)

Quote
if (PlayerInfo[playerid][pLocal] > 33 && PlayerInfo[playerid][pLocal] < 68)

и уже тогдааа даём
Quote
SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]+1);

а так-же всякие виртуальные миры и интериор 0...

(весьма недурно - если игрока уже выставило на улицу прерывать цикл, т.е. вставить строчку i=35 и i=69, что-бы ОНО не давало игроку более следующую координату выхода)


109.86.185.7:7777 ..::TrSB::.. PEN1: S.A.
renaultДата: Вторник, 30.03.2010, 14:07 | Сообщение # 4
Новенький
Группа: Пользователи
Сообщений: 32
Награды: 0
Город: S
Репутация: -6
Замечания: 0%
Статус:
Создал тему а через 2 минуты решил проблему :)
Да действительно zTron прав, сделал именно так.
DizeL-ZR возможно и так можно но и мороки больше, у меня нет даже таких пабликов.

Но проблемка всё таки осьталась. Дело в том что респавн игрока рандомный (иногда спавнит в доме а иногда возле дома). Так вот если в доме то всё норм, а если возле дома то игрок остаётся всё еще в вирт мире. Короче в тот респавн что возле дома надо обнулять виртуальный мир SetPlayerVirtualWorld(playerid,0);

Буду очень благодарен за подсказку.

zTronДата: Среда, 31.03.2010, 19:35 | Сообщение # 5
Уверенный в себе
Группа: Продвинутые
Сообщений: 186
Награды: 4
Город: Харьков
Репутация: 39
Замечания: 20%
Статус:
Quote (zTron)
Так вот если в доме то всё норм, а если возле дома то игрок остаётся всё еще в вирт мире.

Ээээ, мнээээ, такскыть... несколько проверок... (я снова про наболевшее, про ПЕН1 :) )
в public CustomPickups() когда игрок становится на пикуп "вход в дом" надо шото такое
Quote
if(PlayerToPoint(2.0, i, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]))
{
SetPlayerVirtualWorld(i, 0);
...
тут выскакивают надписи про владельца

т.е. игрок стал на "вход" значит он снаружи и соответственно палюбому дать ему ворлд ноль

НО! Если у игрока пинг за 300 или квёлый комп прошлого века выпуска и игрок как лось ломонёт от дома то так и останется... надо шото такое повесить на таймер (можно 10-20 секунд)...

Quote
if(GetPlayerInterior(i) == 0 && GetPlayerVirtualWorld(i) != 0 && ещё некие условия почему надо дать ему VW0)
{
SetPlayerVirtualWorld(i,0);
}

и тогда игрок с любыми лагами и лажами будет где надо!

А так-же - надо учитывать номера интерьеров и виртуальных ворлдов для спектаторов, если такое в моде предусмотрено...

p.s.
я у себя скрипт под samp0.3 добряче перепахал, всего не упомню, но где-то ещё кучка переключателей VW там вписывалась. тут уж пардон, склероз-с и лень-с


109.86.185.7:7777 ..::TrSB::.. PEN1: S.A.

Сообщение отредактировал zTron - Среда, 31.03.2010, 19:40
renaultДата: Среда, 31.03.2010, 20:18 | Сообщение # 6
Новенький
Группа: Пользователи
Сообщений: 32
Награды: 0
Город: S
Репутация: -6
Замечания: 0%
Статус:
всё решил этот рандом-всё норм.

Но появилась другая проблема.
Добавлял -добавлял дома а потом дошел до 82 дома и после него ошибка появилась. Захожу в игру маркеров домов нет и машин на улице нет. Убераю 1 дом (то есть снова делаю 81 дом) и всё норм. С чего бы это могло такое быть?

Я дома тупо копирую с списка и добавляю вниз (меняю токо координаты маркера входа и левел). Мож еще чото нада менять? ключи типа pLock изменять ненада? Или может превысил лимит по интерьерам?

Короче в сампе вот такое пишет
http://img34.imageshack.us/img34/556/debug3.jpg

zTronДата: Среда, 31.03.2010, 22:36 | Сообщение # 7
Уверенный в себе
Группа: Продвинутые
Сообщений: 186
Награды: 4
Город: Харьков
Репутация: 39
Замечания: 20%
Статус:
Quote (renault)
Мож еще чото нада менять?

Мы говорим про пен1? Если да - ууууу,ыыыы,оооо,срашнэ дило!!!

Для начала - максимум 99 домов(id0-98), иначе много переделывать в скрипте, что-то связаное с if(location < 99 || location == 255) - проверка интерьеров бизов, я туда не полез, и так задолбался. Если домов более 64 то надо их обрабатывать тремя группами - 0-33,34-67,68-98 (если не склерозю). Каждой группе, естественно, свой виртуал ворлд. Виртуалы так-же надо вписывать в public SetPlayerRandomSpawn.

Про маркеры... если конкретно, то не маркеры, а ПИКАПЫ!!! Максимум одновременно пикапов серв делает 100!!!
Итого -68(99) пикапа домов плюс 34 пикапа бизов плюс пикапы парашютов плюс пикапы самдобавил = пендэк!
Я сделал хитро (а может и чиста-тупа), повесил все пикапы на стример, от домашних пикапов вобще отказался и вместо них на радаре, снова таки на стримере, значки домов.

Для продолжения, а што у нас с вехиклями? В оригинале пена id 0-33 это домашние тачки, потом идут коповские тачки, амбуланцы, запертая авиация, тачки для развоза компов по бизам, тачки на прокат и прочие тачки, на которые на прочие заточен селектор выбора для миссии "укради и продай машину"... Добавляем 34 (или 65) домашних тачек и... авиация открыта, за угон коп или мед тачки никаких санкций, доставка компов в бизы прыгает на левые мотыки, на миску угона попадают домашние вехиклы и прочие прелести!!!

И тут возникает острый вопрос ребром - а она нужна головная боль такая изза лишнего десятка домов??? Этож столько пересчитывать и писывать...

p.s.
фффухх, слаабоу я с домами уж месяц как отмучался,как вспомню так вздрогну...


109.86.185.7:7777 ..::TrSB::.. PEN1: S.A.

Сообщение отредактировал zTron - Среда, 31.03.2010, 22:38
renaultДата: Четверг, 01.04.2010, 13:58 | Сообщение # 8
Новенький
Группа: Пользователи
Сообщений: 32
Награды: 0
Город: S
Репутация: -6
Замечания: 0%
Статус:
та уже всё перепробовал. и 3 группами и поочереди убирал вехиклы и пикапы думал может максимум превышен но толку 0. Токо я от не пойму, как ты говоришь что 100 пикапов? смотри 80 домов +30 бизов + дохрена таких пикапчеков , явно больше 100 и как то пашет.

Кстати а что по скрину вообще ни у кого никаких мыслей нет? ведь пишет DEBUG3 InitLockDoors<0>car
чото с машинами связано, или с ключами к машинам?

http://img34.imageshack.us/img34/556/debug3.jpg

zTronДата: Четверг, 01.04.2010, 19:22 | Сообщение # 9
Уверенный в себе
Группа: Продвинутые
Сообщений: 186
Награды: 4
Город: Харьков
Репутация: 39
Замечания: 20%
Статус:
Да, лопухнулся, 100 иконок на карте! Но из какой извилины выскочил лимит 100 пикапов? search

Неа, по скрину ничего не понять, разве что там уже есть какой-то игрок и для него отпираются машины...
if (gdebug >= 1){printf("DEBUG3 InitLockDoors(%d)car(%d)",playerid,c);}
(у меня все дебугные строки вырублены для уменьшения лога серва)

Дома, дома, дома... может где-то в скрипте какой-то цикл не увеличил до 81(82)? У меня мысли и советы кончились!
Если-бы помнить 30000 строк скрипта то все нужные изменения сразу-бы отрапортовал, а так хз шо и где вписывал шоб не глючило...

Миль пардон, но более ничем воспосшефствовать не могу!


109.86.185.7:7777 ..::TrSB::.. PEN1: S.A.
renaultДата: Четверг, 01.04.2010, 23:08 | Сообщение # 10
Новенький
Группа: Пользователи
Сообщений: 32
Награды: 0
Город: S
Репутация: -6
Замечания: 0%
Статус:
[pwn]public InitLockDoors(playerid)
{
if (gdebug >= 1){printf("DEBUG1 InitLockDoors(%d)",playerid);}
new c;
while (c < 254)
{
c++;
if (gCarLock[c] == 1)
{
if (gdebug >= 1){printf("DEBUG3 InitLockDoors(%d)car(%d)",playerid,c);}
SetVehicleParamsForPlayerEx(c,playerid,0,1);
}
}

[/pwn]

Добавлено (01.04.2010, 23:08)
---------------------------------------------
я так понял с этого кода надо искать поблему if (gdebug >= 1){printf("DEBUG3 InitLockDoors(%d)car(%d)",playerid,c);}

zTronДата: Пятница, 02.04.2010, 12:06 | Сообщение # 11
Уверенный в себе
Группа: Продвинутые
Сообщений: 186
Награды: 4
Город: Харьков
Репутация: 39
Замечания: 20%
Статус:
Quote (renault)
while (c < 254)

В частности здесь надо (c < MAX_VEHICLES). А в общности надо по всему скрипту пробежаться выискивая и заменяя аналогичное...

Эххх, если-бы рядышком сесть да в 4 руки и в полторы головы (которые лучше одной ;) ) скриптец переделать. А то у нас чат тут получается!


109.86.185.7:7777 ..::TrSB::.. PEN1: S.A.
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua