Баг с отталкивающими скиллами(ппс, чардж, юп и т.п.)

Тема в разделе "Игровые вопросы", создана пользователем -=BaD=-, 28 сен 2008.

Статус темы:
Закрыта.
  1. -=BaD=-

    -=BaD=- Заблокирован

    баг позиционирования - немного другое насколько я понимаю) Есть ещё т.н. sprite lag, он заключается в том что клиент неверно отображает анимацию на чаре(слишком долго). Фикс этого не исправляет, в будущем может что-то и изменится..
  2. ASPirine

    ASPirine Заблокирован

    Баг позиционирования - это нессотвествие положения чара на экране его реальному местоположению. А уж вызван он кривым отталкиванием или всвязи с различной анимации кастов/стопрейтов это вопрос второй. Второй случай, если не ошибаюсь, без исходников клиента исправлению не подлежит.
  3. -=BaD=-

    -=BaD=- Заблокирован

    ясно.. то есть 'sprite lag' и баг позиционирования всё же одно и тоже, буду знать :)

    Насчёт второго случая... с исходниками было бы проще, без исходников может затянуться на долгие месяцы, вот и всё =)
  4. Бог

    Бог Игрок

    Я не ставлю сафети) Меня отталкивают я подхожу,каких то траблов не замечал =__= А то что баги позиционирование случаются это понятное дело.
  5. Alort

    Alort Игрок

    я просто думал что ты вкакой то степени всё аки аренобот):):):)
  6. Бог

    Бог Игрок

    Ну я только и бываю на арени и гв,больше я не чем в ро не занимаюсь)

    Только я хожу всегда МСом и я бага с позицией от бб не замечал,мб если бы на себя сефети кидал то заметил)
  7. AlexaWhite

    AlexaWhite Игрок

    Алорт, Бог, я вас люблю, но если вы продолжите флудить в такой православной теме - дам по рарной карточке >_<
    Бог нравится это.
  8. -=BaD=-

    -=BaD=- Заблокирован

    файл clif.c, добавляем ещё одну функцию, то есть
    Код:
    int clif_blown(struct block_list *bl)
    {
    //Aegis packets says fixpos, but it's unsure whether slide works better or not.
    	return clif_fixpos(bl);
    //	return clif_slide(bl, bl->x, bl->y);
    }
    int clif_blown_slide(struct block_list *bl)
    {
    //Aegis packets says fixpos, but it's unsure whether slide works better or not.
    //	return clif_fixpos(bl);
    	return clif_slide(bl, bl->x, bl->y);
    }
    Легко видеть, что первая функция(старая) отправляет fixpos пакет, вторая - slide. Естественно прототип второй нужно дописать в clif.h

    файл skill.c, заголовок функции skill_blown() примет такой вид:
    Код:
    int skill_blown(struct block_list* src, struct block_list* target, int count, int direction, int flag, bool slide)
    то есть добавился ещё 1 аргамент типа bool в конец. Если slide==true, отправляется 'slide' пакет, иначе - 'fixpos'. Заголовок функции так же нужно поправить. Далее, в теле функции такие изменения:
    Код:
    	if(!(flag&0x1)) 
    	{
    		if(slide)
    			clif_blown_slide(target);
    		else
    			clif_blown(target);
    	}
    
    то есть теперь мы ещё решаем какой пакет отправить. Можно было напрямую вызывать функции отправки пакетов, но я пока оставил эти прокси-функции, может что дописать в будущем придётся.

    Теперь нужно поправить каждый референс на skill_blown() в коде... их что-то около 17 :)

    файл skill.c, функция skill_atack(), строка 1673.
    Код:
    		if (dmg.blewcount > 0 && bl!=dsrc && !status_isdead(bl))
    	{
    		int direction = -1; // default
    		bool slide = false;
    		switch(skillid)
    		{
    			case MG_FIREWALL:
    				{
    					direction = unit_getdir(bl);
    					slide = true;
    				}break; // backwards
    			case WZ_STORMGUST:
    				{
    					direction = rand()%8;
    					slide = true;
    				}break; // randomly
    			case PR_SANCTUARY:
    				{
    					direction = unit_getdir(bl);
    					slide = true;
    				}break; // backwards
    			case CR_SHIELDCHARGE:
    				{
    					slide = true;
    				}break;
    		}
    		skill_blown(dsrc,bl,dmg.blewcount,direction,0, slide);
    	}
    
    Далее в таком духе, везде slide=true, кроме следующих случаев:
    файл skill.c, строка 6877
    Код:
    case UNT_SKIDTRAP:
    			{
    				skill_blown(&src->bl,bl,skill_get_blewcount(sg->skill_id,sg->skill_lv),unit_getdir(bl),0, false);
    				sg->unit_id = UNT_USED_TRAPS;
    				clif_changetraplook(&src->bl, UNT_USED_TRAPS);
    				sg->limit=DIFF_TICK(tick,sg->tick)+1500;
    			}
    			break;
    
    отталкивающий трап требует fixpos.

    skill.c, строка 7314
    Код:
    	case UNT_BLASTMINE:
    	case UNT_CLAYMORETRAP:
    		skill_blown(bl, &src->bl, 2, -1, 0, false);
    		break;
    
    файл skill.c, строка 2588
    Код:
    	case KN_SPEARSTAB:
    		if(flag&1) {
    			if (bl->id==skill_area_temp[1])
    				break;
    			if (skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,SD_ANIMATION))
    				[B]skill_blown(src,bl,skill_area_temp[2],-1,0, false);[/B]
    		} else {
    			int x=bl->x,y=bl->y,i,dir;
    			dir = map_calc_dir(bl,src->x,src->y);
    			skill_area_temp[1] = bl->id;
    			skill_area_temp[2] = skill_get_blewcount(skillid,skilllv);
    			// all the enemies between the caster and the target are hit, as well as the target
    			if (skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,0))
    				[B]skill_blown(src,bl,skill_area_temp[2],-1,0, false);[/B]
    			for (i=0;i<4;i++) {
    				map_foreachincell(skill_area_sub,bl->m,x,y,BL_CHAR,
    					src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
    				x += dirx[dir];
    				y += diry[dir];
    			}
    		}
    		break;
    
    Spearstab с 'fixpos' работает лучше имхо :)

    В это посте буду отмечать где отправлять 'fixpos'...
    Xmpe и AlexaWhite нравится это.
  9. -=BaD=-

    -=BaD=- Заблокирован

    теме ап(удалите потом мессагу))

    перетестил все скиллы которые так или иначе меняют положение чара(кастера\цели). Никаких ошибок не замечено... все пояснения - в посте выше.

    тут немного покопал... есть возможность немного уменьшить 'sprite lag' в пвп уменьшив продолжительность отображения анимации. В пвм такое к сожалению в полной мере сделать не удастся...
  10. Wild

    Wild Заблокирован

    Слегка бред.
  11. -=BaD=-

    -=BaD=- Заблокирован

    бред не бред, а можешь сам потестить...
  12. X

    X Играет за мобов
    Команда форума

    Данная модификация входит в новую обновлённую версию нашего эмулятора.
    Благодарю -=BaD=- за материал, и потраченное на всё это время.
    Иеремия, Ракот, Винсент и 2 другим нравится это.
Статус темы:
Закрыта.