/*========================================== * 時計イベント実行 *------------------------------------------ */ static void npc_event_do_clock(TimerData *, tick_t) { struct tm t = TimeT::now(); ScriptLabel buf; if (t.tm_min != ev_tm_b.tm_min) { SNPRINTF(buf, 24, "OnMinute%02d"_fmt, t.tm_min); npc_event_doall(buf); SNPRINTF(buf, 24, "OnClock%02d%02d"_fmt, t.tm_hour, t.tm_min); npc_event_doall(buf); } if (t.tm_hour != ev_tm_b.tm_hour) { SNPRINTF(buf, 24, "OnHour%02d"_fmt, t.tm_hour); npc_event_doall(buf); } if (t.tm_mday != ev_tm_b.tm_mday) { SNPRINTF(buf, 24, "OnDay%02d%02d"_fmt, t.tm_mon + 1, t.tm_mday); npc_event_doall(buf); } ev_tm_b = t; }
// ギルドデータ一括受信(初期化時) int guild_castlealldataload(int len,struct guild_castle *gc) { int i; int n = (len-4) / sizeof(struct guild_castle), ev = -1; nullpo_retr(0, gc); //Last owned castle in the list invokes ::OnAgitinit for(i = 0; i < n; i++) { if ((gc + i)->guild_id) ev = i; } // 城データ格納とギルド情報要求 for(i = 0; i < n; i++, gc++) { struct guild_castle *c = guild_castle_search(gc->castle_id); if (!c) { ShowError("guild_castlealldataload Castle id=%d not found.\n", gc->castle_id); continue; } memcpy(&c->guild_id,&gc->guild_id, sizeof(struct guild_castle) - ((int)&c->guild_id - (int)c) ); if( c->guild_id ){ if(i!=ev) guild_request_info(c->guild_id); else guild_npc_request_info(c->guild_id, "::OnAgitInit"); } } if (ev == -1) //No castles owned, invoke OnAgitInit as it is. npc_event_doall("OnAgitInit"); return 0; }
int guild_agit2_end(void) { // Run All NPC_Event[OnAgitEnd2] int c = npc_event_doall("OnAgitEnd2"); ShowStatus("NPC_Event:[OnAgitEnd2] Run (%d) Events by @AgitEnd2.\n",c); // Stop auto saving delete_timer (guild_save_timer2, guild_save_sub); return 0; }
int guild_agit2_start(void) { // Run All NPC_Event[OnAgitStart2] int c = npc_event_doall("OnAgitStart2"); ShowStatus("NPC_Event:[OnAgitStart2] Run (%d) Events by @AgitStart2.\n",c); // Start auto saving guild_save_timer2 = add_timer_interval (gettick() + GUILD_SAVE_INTERVAL, guild_save_sub, 0, 0, GUILD_SAVE_INTERVAL); return 0; }
/*========================================== * *------------------------------------------ */ static int chrif_connectack(Session *s, const Packet_Fixed<0x2af9>& fixed) { if (fixed.code) { PRINTF("Connected to char-server failed %d.\n"_fmt, fixed.code); exit(1); } PRINTF("Connected to char-server (connection #%d).\n"_fmt, s); chrif_state = 1; chrif_sendmap(s); PRINTF("chrif: OnCharIfInit event done. (%d events)\n"_fmt, npc_event_doall(stringish<ScriptLabel>("OnCharIfInit"_s))); PRINTF("chrif: OnInterIfInit event done. (%d events)\n"_fmt, npc_event_doall(stringish<ScriptLabel>("OnInterIfInit"_s))); return 0; }
// ギルドデータ一括受信(初期化時) int guild_castlealldataload(int len,struct guild_castle *gc) { int i; int n = (len-4) / sizeof(struct guild_castle); int ev; nullpo_ret(gc); //Last owned castle in the list invokes ::OnAgitinit for( i = n-1; i >= 0 && !(gc[i].guild_id); --i ); ev = i; // offset of castle or -1 if( ev < 0 ) { //No castles owned, invoke OnAgitInit as it is. npc_event_doall("OnAgitInit"); npc_event_doall("OnAgitInit2"); } else // load received castles into memory, one by one for( i = 0; i < n; i++, gc++ ) { struct guild_castle *c = guild_castle_search(gc->castle_id); if (!c) { ShowError("guild_castlealldataload Castle id=%d not found.\n", gc->castle_id); continue; } // update mapserver castle data with new info memcpy(&c->guild_id, &gc->guild_id, sizeof(struct guild_castle) - ((uintptr_t)&c->guild_id - (uintptr_t)c)); if( c->guild_id ) { if( i != ev ) guild_request_info(c->guild_id); else { // last owned one guild_npc_request_info(c->guild_id, "::OnAgitInit"); guild_npc_request_info(c->guild_id, "::OnAgitInit2"); } } } return 0; }
/*========================================== * OnInitイベント実行(&時計イベント開始) *------------------------------------------ */ int npc_event_do_oninit(void) { int c = npc_event_doall(stringish<ScriptLabel>("OnInit"_s)); PRINTF("npc: OnInit Event done. (%d npc)\n"_fmt, c); Timer(gettick() + 100_ms, npc_event_do_clock, 1_s ).detach(); return 0; }
int guild_agit3_end(void) { // Run All NPC_Event[OnAgitEnd23] int c = npc_event_doall("OnAgitEnd3"); ShowStatus("NPC_Event:[OnAgitEnd3] Run (%d) Events by @AgitEnd3.\n",c); return 0; }
int guild_agit3_start(void) { // Run All NPC_Event[OnAgitStart23] int c = npc_event_doall("OnAgitStart3"); ShowStatus("NPC_Event:[OnAgitStart3] Run (%d) Events by @AgitStart3.\n",c); return 0; }
/*========================================== * *------------------------------------------*/ int chrif_connectack(int fd) { static bool char_init_done = false; if (RFIFOB(fd,2)) { ShowFatalError("Connection to char-server failed %d.\n", RFIFOB(fd,2)); exit(EXIT_FAILURE); } ShowStatus("Successfully logged on to Char Server (Connection: '"CL_WHITE"%d"CL_RESET"').\n",fd); chrif_state = 1; chrif_connected = 1; chrif_sendmap(fd); ShowStatus("Event '"CL_WHITE"OnCharIfInit"CL_RESET"' executed with '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnCharIfInit")); ShowStatus("Event '"CL_WHITE"OnInterIfInit"CL_RESET"' executed with '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInit")); if( !char_init_done ) { char_init_done = true; ShowStatus("Event '"CL_WHITE"OnInterIfInitOnce"CL_RESET"' executed with '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInitOnce")); } return 0; }
/*========================================== * *------------------------------------------*/ int chrif_connectack(int fd) { static bool char_init_done = false; if (RFIFOB(fd,2)) { ShowFatalError("Falha na conexao com o servidor de personagens %d.\n", RFIFOB(fd,2)); exit(EXIT_FAILURE); } ShowStatus("Conexao com o Servidor de Personagens efetuada com sucesso (Conexao: '"CL_WHITE"%d"CL_RESET"').\n",fd); chrif_state = 1; chrif_connected = 1; chrif_sendmap(fd); ShowStatus("Evento '"CL_WHITE"OnInterIfInit"CL_RESET"' executado com '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInit")); if( !char_init_done ) { char_init_done = true; ShowStatus("Evento '"CL_WHITE"OnInterIfInitOnce"CL_RESET"' executado com '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInitOnce")); } return 0; }
/*========================================== * *------------------------------------------*/ int chrif_connectack(int fd) { static bool char_init_done = false; if (RFIFOB(fd,2)) { ShowFatalError("Conexуo ao char-server falhou %d.\n", RFIFOB(fd,2)); exit(EXIT_FAILURE); } ShowStatus("Ъxito na conexуo ao char-server (Conexуo: '"CL_WHITE"%d"CL_RESET"').\n",fd); chrif_state = 1; chrif_connected = 1; chrif_sendmap(fd); ShowStatus("Evento '"CL_WHITE"OnInterIfInit"CL_RESET"' executado com '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInit")); if( !char_init_done ) { char_init_done = true; ShowStatus("Evento '"CL_WHITE"OnInterIfInitOnce"CL_RESET"' executado com '"CL_WHITE"%d"CL_RESET"' NPCs.\n", npc_event_doall("OnInterIfInitOnce")); guild_castle_map_init(); } return 0; }