Any way to change cursor mode?

burn

A Smooth-Skin
Modder
Is there any way to get/set cursor mode via scripting, with or without sfall? I searched the docs for "mode", "cursor", "mouse" - nothing relevant.
The reason is that I want to try to save a lot of right-clicking in combat and change mode automatically as the cursor moves. For critters - shooting, for hexes - moving, etc.
 
у Foxx на форуме NuсlearCity спроси у него там есть такой скрипт, правда я не проверял корректно ли он вообще работает.
хотя нет у него там не автоматически, а что-то связанное с клавишей A в режиме боя.

Я так понял ты просто хочешь чтобы курсор сам менялся в зависимости куда он указывает... вроде как можно но что-то у меня есть сомнения, что скриптов это будет корректно работать, я думаю это можно сделать непосредственна в коде sfall'a на движковом уровне.
 
Last edited:
Foxx сказал нет ничего такого у него.
да есть у него, когда входишь в боевой режим по клавише A то курсор автоматом переводится в режим прицела.

вот основные функции с помощью которых можно сделать автоматическое переключение
tile_get_objs({int tileNum}, {int elevation});
tile_under_cursor
tap_key({int dxScancode});
Единственное чего не хватает это определение в каком текущем режиме находится курсор, без нее твое предложение нельзя сделать. пиши на гитхаб пусть добавляют сию функцию.
 
А ну спасибо посмотрю. Новую функцию пока подожду просить. Еще по прошлым запросам не все добавил в твик, чего их зря дергать.
 
Новую функцию пока подожду просить. Еще по прошлым запросам не все добавил в твик, чего их зря дергать.
I tried to implement this feature - it worked, but it does not work the way you wanted.
To switch the cursor, you need to point it to the hex where the target is located (i.e. feet of the critter).
Here is a test script you can try it yourself. For the test on the original Sfall, AllowUnsafeScripting option should be enabled.
Code:
#include "..\m_headers\define.h"
#include "..\m_headers\command.h"
#include "..\m_headers\sfall\sfall.h"
#include "..\m_headers\sfall\dik.h"

#define SFALL_SC_EVALUATION        (true)

#define Mouse_Mode              call_offset_r0(0x44CB6C)
#define Set_Mouse_Mode(x)       call_offset_v1(0x44CA18, x)

// 0 = курсор движения, 1 = курсор команд, 2 = курсор прицеливания
#define MOUSE_MOVE_MODE         (0)
#define MOUSE_ATTACK_MODE       (2)

procedure start;
procedure switch_mode(variable mode);

procedure start begin

variable tile, obj_array, obj;

   if game_loaded then begin
      set_global_script_type(0);
      set_global_script_repeat(5);
   end
   else begin
 
      if combat_is_initialized then begin
         tile := tile_under_cursor;
         obj_array := tile_get_objs(tile, dude_elevation);
         if Mouse_Mode == MOUSE_MOVE_MODE then begin
            foreach (obj in obj_array) begin
               if obj_type(obj) == OBJ_TYPE_CRITTER then begin
                  call switch_mode(MOUSE_ATTACK_MODE);
                  break;
               end
            end
         end
         if len_array(obj_array) == 0 and Mouse_Mode == MOUSE_ATTACK_MODE then
            call switch_mode(MOUSE_MOVE_MODE);
      end
 
   end
 
end

procedure switch_mode(variable mode) begin
   Set_Mouse_Mode(mode);
end
 
Last edited:
Thank for the example. I will try it out.
Ну там не очень удобно получается что надо непосредственно наводить на гекс где стоит цель - здесь нужно как то по другому определять, что курсор навелся на криттер. Дорабатывать надо.

Но мне такой подход как-то не понравился, лучше на отдельную клавишу забиндить скрипт для быстрого переключения курсора на таргет<->движение.
 
Last edited:
Да я понял. Все равно попробую, возможно и правда подход не очень, нужно по ощущениям смотреть.
 
Back
Top